2 * Copyright (C) 2014 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.camera.settings;
19 import android.content.Context;
21 import com.android.camera.app.LocationManager;
22 import com.android.camera.util.ApiHelper;
23 import com.android.camera2.R;
26 * Keys is a class for storing SharedPreferences keys and configuring
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.
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";
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";
78 * Set some number of defaults for the defined keys.
79 * It's not necessary to set all defaults.
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));
85 settingsManager.setDefaults(KEY_CAMERA_ID,
86 context.getString(R.string.pref_camera_id_default),
87 context.getResources().getStringArray(R.array.camera_id_entryvalues));
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));
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));
97 settingsManager.setDefaults(KEY_CAMERA_HDR, false);
98 settingsManager.setDefaults(KEY_CAMERA_HDR_PLUS, false);
100 settingsManager.setDefaults(KEY_CAMERA_FIRST_USE_HINT_SHOWN, true);
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));
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);
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);
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);
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));
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));
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));
146 settingsManager.setDefaults(KEY_VIDEO_FIRST_USE_HINT_SHOWN, true);
148 settingsManager.setDefaults(KEY_STARTUP_MODULE_INDEX, 0,
149 context.getResources().getIntArray(R.array.camera_modes));
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));
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));
160 settingsManager.setDefaults(KEY_CAMERA_GRID_LINES, false);
162 settingsManager.setDefaults(KEY_SHOULD_SHOW_REFOCUS_VIEWER_CLING, true);
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));
169 settingsManager.setDefaults(KEY_SHOULD_SHOW_SETTINGS_BUTTON_CLING, true);
173 /** Helper functions for some defined keys. */
176 * Returns whether the camera has been set to back facing in settings.
178 public static boolean isCameraBackFacing(SettingsManager settingsManager,
179 String moduleScope) {
180 return settingsManager.isDefault(moduleScope, KEY_CAMERA_ID);
184 * Returns whether hdr plus mode is set on.
186 public static boolean isHdrPlusOn(SettingsManager settingsManager) {
187 return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
188 KEY_CAMERA_HDR_PLUS);
192 * Returns whether hdr mode is set on.
194 public static boolean isHdrOn(SettingsManager settingsManager) {
195 return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
200 * Returns whether the app should return to hdr plus mode if possible.
202 public static boolean requestsReturnToHdrPlus(SettingsManager settingsManager,
203 String moduleScope) {
204 return settingsManager.getBoolean(moduleScope, KEY_REQUEST_RETURN_HDR_PLUS);
208 * Returns whether grid lines are set on.
210 public static boolean areGridLinesOn(SettingsManager settingsManager) {
211 return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
212 KEY_CAMERA_GRID_LINES);
216 * Returns whether pano orientation is horizontal.
218 public static boolean isPanoOrientationHorizontal(SettingsManager settingsManager) {
219 return settingsManager.isDefault(SettingsManager.SCOPE_GLOBAL,
220 KEY_CAMERA_PANO_ORIENTATION);
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.
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);
234 * Sets the user selected aspect ratio setting to selected.
236 public static void setAspectRatioSelected(SettingsManager settingsManager) {
237 settingsManager.set(SettingsManager.SCOPE_GLOBAL,
238 KEY_USER_SELECTED_ASPECT_RATIO, true);
242 * Sets the manual exposure compensation enabled setting
243 * to on/off based on the given argument.
245 public static void setManualExposureCompensation(SettingsManager settingsManager,
247 settingsManager.set(SettingsManager.SCOPE_GLOBAL,
248 KEY_EXPOSURE_COMPENSATION_ENABLED, on);
252 * Reads the current location recording settings and passes it on to the
253 * given location manager.
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);