Home | History | Annotate | Download | only in settings
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.camera.settings;
     18 
     19 import android.content.Context;
     20 
     21 import com.android.camera.app.LocationManager;
     22 import com.android.camera.util.ApiHelper;
     23 import com.android.camera2.R;
     24 
     25 /**
     26  * Keys is a class for storing SharedPreferences keys and configuring
     27  * their defaults.
     28  *
     29  * For each key that has a default value and set of possible values, it
     30  * stores those defaults so they can be used by the SettingsManager
     31  * on lookup.  This step is optional, and it can be done anytime before
     32  * a setting is accessed by the SettingsManager API.
     33  */
     34 public class Keys {
     35 
     36     public static final String KEY_RECORD_LOCATION = "pref_camera_recordlocation_key";
     37     public static final String KEY_VIDEO_QUALITY_BACK = "pref_video_quality_back_key";
     38     public static final String KEY_VIDEO_QUALITY_FRONT = "pref_video_quality_front_key";
     39     public static final String KEY_PICTURE_SIZE_BACK = "pref_camera_picturesize_back_key";
     40     public static final String KEY_PICTURE_SIZE_FRONT = "pref_camera_picturesize_front_key";
     41     public static final String KEY_JPEG_QUALITY = "pref_camera_jpegquality_key";
     42     public static final String KEY_FOCUS_MODE = "pref_camera_focusmode_key";
     43     public static final String KEY_FLASH_MODE = "pref_camera_flashmode_key";
     44     public static final String KEY_VIDEOCAMERA_FLASH_MODE = "pref_camera_video_flashmode_key";
     45     public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
     46     public static final String KEY_EXPOSURE = "pref_camera_exposure_key";
     47     public static final String KEY_VIDEO_EFFECT = "pref_video_effect_key";
     48     public static final String KEY_CAMERA_ID = "pref_camera_id_key";
     49 
     50     public static final String KEY_CAMERA_HDR = "pref_camera_hdr_key";
     51     public static final String KEY_CAMERA_HDR_PLUS = "pref_camera_hdr_plus_key";
     52     public static final String KEY_CAMERA_FIRST_USE_HINT_SHOWN =
     53             "pref_camera_first_use_hint_shown_key";
     54     public static final String KEY_VIDEO_FIRST_USE_HINT_SHOWN =
     55             "pref_video_first_use_hint_shown_key";
     56     public static final String KEY_STARTUP_MODULE_INDEX = "camera.startup_module";
     57     public static final String KEY_CAMERA_MODULE_LAST_USED =
     58             "pref_camera_module_last_used_index";
     59     public static final String KEY_CAMERA_PANO_ORIENTATION = "pref_camera_pano_orientation";
     60     public static final String KEY_CAMERA_GRID_LINES = "pref_camera_grid_lines";
     61     public static final String KEY_RELEASE_DIALOG_LAST_SHOWN_VERSION =
     62             "pref_release_dialog_last_shown_version";
     63     public static final String KEY_FLASH_SUPPORTED_BACK_CAMERA =
     64             "pref_flash_supported_back_camera";
     65     public static final String KEY_UPGRADE_VERSION = "pref_upgrade_version";
     66     public static final String KEY_REQUEST_RETURN_HDR_PLUS = "pref_request_return_hdr_plus";
     67     public static final String KEY_SHOULD_SHOW_REFOCUS_VIEWER_CLING =
     68             "pref_should_show_refocus_viewer_cling";
     69     public static final String KEY_EXPOSURE_COMPENSATION_ENABLED =
     70             "pref_camera_exposure_compensation_key";
     71     public static final String KEY_USER_SELECTED_ASPECT_RATIO = "pref_user_selected_aspect_ratio";
     72     public static final String KEY_COUNTDOWN_DURATION = "pref_camera_countdown_duration_key";
     73     public static final String KEY_HDR_PLUS_FLASH_MODE = "pref_hdr_plus_flash_mode";
     74     public static final String KEY_SHOULD_SHOW_SETTINGS_BUTTON_CLING =
     75             "pref_should_show_settings_button_cling";
     76 
     77     /**
     78      * Set some number of defaults for the defined keys.
     79      * It's not necessary to set all defaults.
     80      */
     81     public static void setDefaults(SettingsManager settingsManager, Context context) {
     82         settingsManager.setDefaults(KEY_COUNTDOWN_DURATION, 0,
     83             context.getResources().getIntArray(R.array.pref_countdown_duration));
     84 
     85         settingsManager.setDefaults(KEY_CAMERA_ID,
     86             context.getString(R.string.pref_camera_id_default),
     87             context.getResources().getStringArray(R.array.camera_id_entryvalues));
     88 
     89         settingsManager.setDefaults(KEY_SCENE_MODE,
     90             context.getString(R.string.pref_camera_scenemode_default),
     91             context.getResources().getStringArray(R.array.pref_camera_scenemode_entryvalues));
     92 
     93         settingsManager.setDefaults(KEY_FLASH_MODE,
     94             context.getString(R.string.pref_camera_flashmode_default),
     95             context.getResources().getStringArray(R.array.pref_camera_flashmode_entryvalues));
     96 
     97         settingsManager.setDefaults(KEY_CAMERA_HDR, false);
     98         settingsManager.setDefaults(KEY_CAMERA_HDR_PLUS, false);
     99 
    100         settingsManager.setDefaults(KEY_CAMERA_FIRST_USE_HINT_SHOWN, true);
    101 
    102         settingsManager.setDefaults(KEY_FOCUS_MODE,
    103             context.getString(R.string.pref_camera_focusmode_default),
    104             context.getResources().getStringArray(R.array.pref_camera_focusmode_entryvalues));
    105 
    106         String videoQualityBackDefaultValue = context.getString(R.string.pref_video_quality_large);
    107         // TODO: We tweaked the default setting based on model string which is not ideal. Detecting
    108         // CamcorderProfile capability is a better way to get this job done. However,
    109         // |CamcorderProfile.hasProfile| needs camera id info. We need a way to provide camera id to
    110         // this method. b/17445274
    111         // Don't set the default resolution to be large if the device supports 4k video.
    112         if (ApiHelper.IS_NEXUS_6) {
    113             videoQualityBackDefaultValue = context.getString(R.string.pref_video_quality_medium);
    114         }
    115         settingsManager.setDefaults(
    116             KEY_VIDEO_QUALITY_BACK,
    117             videoQualityBackDefaultValue,
    118             context.getResources().getStringArray(R.array.pref_video_quality_entryvalues));
    119         if (!settingsManager.isSet(SettingsManager.SCOPE_GLOBAL, Keys.KEY_VIDEO_QUALITY_BACK)) {
    120             settingsManager.setToDefault(SettingsManager.SCOPE_GLOBAL,
    121                                          Keys.KEY_VIDEO_QUALITY_BACK);
    122         }
    123 
    124         settingsManager.setDefaults(KEY_VIDEO_QUALITY_FRONT,
    125             context.getString(R.string.pref_video_quality_large),
    126             context.getResources().getStringArray(R.array.pref_video_quality_entryvalues));
    127         if (!settingsManager.isSet(SettingsManager.SCOPE_GLOBAL, Keys.KEY_VIDEO_QUALITY_FRONT)) {
    128             settingsManager.setToDefault(SettingsManager.SCOPE_GLOBAL,
    129                                          Keys.KEY_VIDEO_QUALITY_FRONT);
    130         }
    131 
    132         settingsManager.setDefaults(KEY_JPEG_QUALITY,
    133             context.getString(R.string.pref_camera_jpeg_quality_normal),
    134             context.getResources().getStringArray(
    135                 R.array.pref_camera_jpeg_quality_entryvalues));
    136 
    137         settingsManager.setDefaults(KEY_VIDEOCAMERA_FLASH_MODE,
    138             context.getString(R.string.pref_camera_video_flashmode_default),
    139             context.getResources().getStringArray(
    140                 R.array.pref_camera_video_flashmode_entryvalues));
    141 
    142         settingsManager.setDefaults(KEY_VIDEO_EFFECT,
    143             context.getString(R.string.pref_video_effect_default),
    144             context.getResources().getStringArray(R.array.pref_video_effect_entryvalues));
    145 
    146         settingsManager.setDefaults(KEY_VIDEO_FIRST_USE_HINT_SHOWN, true);
    147 
    148         settingsManager.setDefaults(KEY_STARTUP_MODULE_INDEX, 0,
    149             context.getResources().getIntArray(R.array.camera_modes));
    150 
    151         settingsManager.setDefaults(KEY_CAMERA_MODULE_LAST_USED,
    152             context.getResources().getInteger(R.integer.camera_mode_photo),
    153             context.getResources().getIntArray(R.array.camera_modes));
    154 
    155         settingsManager.setDefaults(KEY_CAMERA_PANO_ORIENTATION,
    156             context.getString(R.string.pano_orientation_horizontal),
    157             context.getResources().getStringArray(
    158                 R.array.pref_camera_pano_orientation_entryvalues));
    159 
    160         settingsManager.setDefaults(KEY_CAMERA_GRID_LINES, false);
    161 
    162         settingsManager.setDefaults(KEY_SHOULD_SHOW_REFOCUS_VIEWER_CLING, true);
    163 
    164         settingsManager.setDefaults(KEY_HDR_PLUS_FLASH_MODE,
    165             context.getString(R.string.pref_camera_hdr_plus_flashmode_default),
    166             context.getResources().getStringArray(
    167                 R.array.pref_camera_hdr_plus_flashmode_entryvalues));
    168 
    169         settingsManager.setDefaults(KEY_SHOULD_SHOW_SETTINGS_BUTTON_CLING, true);
    170 
    171     }
    172 
    173     /** Helper functions for some defined keys. */
    174 
    175     /**
    176      * Returns whether the camera has been set to back facing in settings.
    177      */
    178     public static boolean isCameraBackFacing(SettingsManager settingsManager,
    179                                              String moduleScope) {
    180         return settingsManager.isDefault(moduleScope, KEY_CAMERA_ID);
    181     }
    182 
    183     /**
    184      * Returns whether hdr plus mode is set on.
    185      */
    186     public static boolean isHdrPlusOn(SettingsManager settingsManager) {
    187         return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
    188                                           KEY_CAMERA_HDR_PLUS);
    189     }
    190 
    191     /**
    192      * Returns whether hdr mode is set on.
    193      */
    194     public static boolean isHdrOn(SettingsManager settingsManager) {
    195         return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
    196                                           KEY_CAMERA_HDR);
    197     }
    198 
    199     /**
    200      * Returns whether the app should return to hdr plus mode if possible.
    201      */
    202     public static boolean requestsReturnToHdrPlus(SettingsManager settingsManager,
    203                                                   String moduleScope) {
    204         return settingsManager.getBoolean(moduleScope, KEY_REQUEST_RETURN_HDR_PLUS);
    205     }
    206 
    207     /**
    208      * Returns whether grid lines are set on.
    209      */
    210     public static boolean areGridLinesOn(SettingsManager settingsManager) {
    211         return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
    212                                           KEY_CAMERA_GRID_LINES);
    213     }
    214 
    215     /**
    216      * Returns whether pano orientation is horizontal.
    217      */
    218     public static boolean isPanoOrientationHorizontal(SettingsManager settingsManager) {
    219         return settingsManager.isDefault(SettingsManager.SCOPE_GLOBAL,
    220                                          KEY_CAMERA_PANO_ORIENTATION);
    221     }
    222 
    223     /**
    224      * Sets the settings for whether location recording should be enabled or
    225      * not. Also makes sure to pass on the change to the location manager.
    226      */
    227     public static void setLocation(SettingsManager settingsManager, boolean on,
    228                                    LocationManager locationManager) {
    229         settingsManager.set(SettingsManager.SCOPE_GLOBAL, KEY_RECORD_LOCATION, on);
    230         locationManager.recordLocation(on);
    231     }
    232 
    233     /**
    234      * Sets the user selected aspect ratio setting to selected.
    235      */
    236     public static void setAspectRatioSelected(SettingsManager settingsManager) {
    237         settingsManager.set(SettingsManager.SCOPE_GLOBAL,
    238                             KEY_USER_SELECTED_ASPECT_RATIO, true);
    239     }
    240 
    241     /**
    242      * Sets the manual exposure compensation enabled setting
    243      * to on/off based on the given argument.
    244      */
    245     public static void setManualExposureCompensation(SettingsManager settingsManager,
    246                                               boolean on) {
    247         settingsManager.set(SettingsManager.SCOPE_GLOBAL,
    248                             KEY_EXPOSURE_COMPENSATION_ENABLED, on);
    249     }
    250 
    251     /**
    252      * Reads the current location recording settings and passes it on to the
    253      * given location manager.
    254      */
    255     public static void syncLocationManager(SettingsManager settingsManager,
    256                                     LocationManager locationManager) {
    257         boolean value = settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
    258                                                    KEY_RECORD_LOCATION);
    259         locationManager.recordLocation(value);
    260     }
    261 
    262 }
    263 
    264