blob: 6f47e136a859fb97439b3a99aae1a7034ee3dfa5 [file] [log] [blame]
Michael Kolbd6954f32013-03-08 20:43:01 -08001/*
2 * Copyright (C) 2012 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
17package com.android.camera;
18
Sascha Haeberling8e963a52013-08-06 11:43:02 -070019import java.util.Locale;
20
Michael Kolb10f4ba02013-04-10 08:50:51 -070021import android.content.res.Resources;
Michael Kolbd6954f32013-03-08 20:43:01 -080022import android.hardware.Camera.Parameters;
Michael Kolbd6954f32013-03-08 20:43:01 -080023
24import com.android.camera.ui.AbstractSettingPopup;
Michael Kolb70489722013-05-08 11:14:35 -070025import com.android.camera.ui.CountdownTimerPopup;
Michael Kolbd6954f32013-03-08 20:43:01 -080026import com.android.camera.ui.ListPrefSettingPopup;
Michael Kolbd6954f32013-03-08 20:43:01 -080027import com.android.camera.ui.PieItem;
28import com.android.camera.ui.PieItem.OnClickListener;
29import com.android.camera.ui.PieRenderer;
Sascha Haeberling8e963a52013-08-06 11:43:02 -070030import com.android.camera2.R;
Michael Kolb70489722013-05-08 11:14:35 -070031
Michael Kolbd6954f32013-03-08 20:43:01 -080032public class PhotoMenu extends PieController
Michael Kolb70489722013-05-08 11:14:35 -070033 implements CountdownTimerPopup.Listener,
Michael Kolbd6954f32013-03-08 20:43:01 -080034 ListPrefSettingPopup.Listener {
35 private static String TAG = "CAM_photomenu";
Michael Kolb3daa3512013-04-02 16:03:04 -070036
Michael Kolbd6954f32013-03-08 20:43:01 -080037 private final String mSettingOff;
38
39 private PhotoUI mUI;
Michael Kolb70489722013-05-08 11:14:35 -070040 private AbstractSettingPopup mPopup;
Doris Liu753bb8a2013-03-14 21:01:35 -070041 private CameraActivity mActivity;
Michael Kolbd6954f32013-03-08 20:43:01 -080042
43 public PhotoMenu(CameraActivity activity, PhotoUI ui, PieRenderer pie) {
44 super(activity, pie);
45 mUI = ui;
46 mSettingOff = activity.getString(R.string.setting_off_value);
Doris Liu753bb8a2013-03-14 21:01:35 -070047 mActivity = activity;
Michael Kolbd6954f32013-03-08 20:43:01 -080048 }
49
50 public void initialize(PreferenceGroup group) {
51 super.initialize(group);
52 mPopup = null;
Michael Kolb3bc96b22013-03-12 10:24:42 -070053 PieItem item = null;
Michael Kolb10f4ba02013-04-10 08:50:51 -070054 final Resources res = mActivity.getResources();
Michael Kolb70489722013-05-08 11:14:35 -070055 Locale locale = res.getConfiguration().locale;
Michael Kolbb7c49992013-04-30 09:23:23 -070056 // the order is from left to right in the menu
57
58 // hdr
59 if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) {
60 item = makeSwitchItem(CameraSettings.KEY_CAMERA_HDR, true);
Michael Kolb3bc96b22013-03-12 10:24:42 -070061 mRenderer.addItem(item);
62 }
63 // exposure compensation
Michael Kolb5cf3c472013-04-05 09:52:55 -070064 if (group.findPreference(CameraSettings.KEY_EXPOSURE) != null) {
Michael Kolbb7c49992013-04-30 09:23:23 -070065 item = makeItem(CameraSettings.KEY_EXPOSURE);
Michael Kolb10f4ba02013-04-10 08:50:51 -070066 item.setLabel(res.getString(R.string.pref_exposure_label));
Michael Kolb5cf3c472013-04-05 09:52:55 -070067 mRenderer.addItem(item);
68 }
Michael Kolbb7c49992013-04-30 09:23:23 -070069 // more settings
70 PieItem more = makeItem(R.drawable.ic_settings_holo_light);
71 more.setLabel(res.getString(R.string.camera_menu_more_label));
72 mRenderer.addItem(more);
73 // flash
74 if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
75 item = makeItem(CameraSettings.KEY_FLASH_MODE);
76 item.setLabel(res.getString(R.string.pref_camera_flashmode_label));
77 mRenderer.addItem(item);
78 }
Michael Kolb3bc96b22013-03-12 10:24:42 -070079 // camera switcher
Michael Kolbd6954f32013-03-08 20:43:01 -080080 if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
Michael Kolbb7c49992013-04-30 09:23:23 -070081 item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, false);
Michael Kolb10f4ba02013-04-10 08:50:51 -070082 final PieItem fitem = item;
Michael Kolb3bc96b22013-03-12 10:24:42 -070083 item.setOnClickListener(new OnClickListener() {
Michael Kolbd6954f32013-03-08 20:43:01 -080084 @Override
85 public void onClick(PieItem item) {
86 // Find the index of next camera.
87 ListPreference pref = mPreferenceGroup
Michael Kolb25c0ec42013-04-18 12:31:10 -070088 .findPreference(CameraSettings.KEY_CAMERA_ID);
Michael Kolbd6954f32013-03-08 20:43:01 -080089 if (pref != null) {
Michael Kolb25c0ec42013-04-18 12:31:10 -070090 int index = pref.findIndexOfValue(pref.getValue());
91 CharSequence[] values = pref.getEntryValues();
92 index = (index + 1) % values.length;
Michael Kolbd6954f32013-03-08 20:43:01 -080093 pref.setValueIndex(index);
Michael Kolb25c0ec42013-04-18 12:31:10 -070094 mListener.onCameraPickerClicked(index);
Michael Kolbd6954f32013-03-08 20:43:01 -080095 }
Michael Kolb25c0ec42013-04-18 12:31:10 -070096 updateItem(fitem, CameraSettings.KEY_CAMERA_ID);
Michael Kolbd6954f32013-03-08 20:43:01 -080097 }
98 });
Michael Kolb3bc96b22013-03-12 10:24:42 -070099 mRenderer.addItem(item);
Michael Kolbd6954f32013-03-08 20:43:01 -0800100 }
Michael Kolb25c0ec42013-04-18 12:31:10 -0700101 // location
102 if (group.findPreference(CameraSettings.KEY_RECORD_LOCATION) != null) {
Michael Kolbb7c49992013-04-30 09:23:23 -0700103 item = makeSwitchItem(CameraSettings.KEY_RECORD_LOCATION, true);
Michael Kolb25c0ec42013-04-18 12:31:10 -0700104 more.addItem(item);
Michael Kolb70489722013-05-08 11:14:35 -0700105 if (mActivity.isSecureCamera()) {
106 // Prevent location preference from getting changed in secure camera mode
107 item.setEnabled(false);
108 }
Michael Kolb25c0ec42013-04-18 12:31:10 -0700109 }
Michael Kolb70489722013-05-08 11:14:35 -0700110 // countdown timer
111 final ListPreference ctpref = group.findPreference(CameraSettings.KEY_TIMER);
112 final ListPreference beeppref = group.findPreference(CameraSettings.KEY_TIMER_SOUND_EFFECTS);
113 item = makeItem(R.drawable.ic_timer);
114 item.setLabel(res.getString(R.string.pref_camera_timer_title).toUpperCase(locale));
Michael Kolbd6954f32013-03-08 20:43:01 -0800115 item.setOnClickListener(new OnClickListener() {
116 @Override
117 public void onClick(PieItem item) {
Michael Kolb70489722013-05-08 11:14:35 -0700118 CountdownTimerPopup timerPopup = (CountdownTimerPopup) mActivity.getLayoutInflater().inflate(
119 R.layout.countdown_setting_popup, null, false);
120 timerPopup.initialize(ctpref, beeppref);
121 timerPopup.setSettingChangedListener(PhotoMenu.this);
122 mUI.dismissPopup();
123 mPopup = timerPopup;
124 mUI.showPopup(mPopup);
125 }
126 });
127 more.addItem(item);
128 // image size
129 item = makeItem(R.drawable.ic_imagesize);
130 final ListPreference sizePref = group.findPreference(CameraSettings.KEY_PICTURE_SIZE);
131 item.setLabel(res.getString(R.string.pref_camera_picturesize_title).toUpperCase(locale));
132 item.setOnClickListener(new OnClickListener() {
133 @Override
134 public void onClick(PieItem item) {
135 ListPrefSettingPopup popup = (ListPrefSettingPopup) mActivity.getLayoutInflater().inflate(
136 R.layout.list_pref_setting_popup, null, false);
137 popup.initialize(sizePref);
138 popup.setSettingChangedListener(PhotoMenu.this);
139 mUI.dismissPopup();
140 mPopup = popup;
Michael Kolbd6954f32013-03-08 20:43:01 -0800141 mUI.showPopup(mPopup);
142 }
143 });
Michael Kolb3bc96b22013-03-12 10:24:42 -0700144 more.addItem(item);
Michael Kolbb7c49992013-04-30 09:23:23 -0700145 // white balance
146 if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
147 item = makeItem(CameraSettings.KEY_WHITE_BALANCE);
148 item.setLabel(res.getString(R.string.pref_camera_whitebalance_label));
149 more.addItem(item);
150 }
151 // scene mode
152 if (group.findPreference(CameraSettings.KEY_SCENE_MODE) != null) {
153 IconListPreference pref = (IconListPreference) group.findPreference(
154 CameraSettings.KEY_SCENE_MODE);
155 pref.setUseSingleIcon(true);
156 item = makeItem(CameraSettings.KEY_SCENE_MODE);
157 more.addItem(item);
158 }
Michael Kolbd6954f32013-03-08 20:43:01 -0800159 }
160
161 @Override
Michael Kolb70489722013-05-08 11:14:35 -0700162 // Hit when an item in a popup gets selected
Michael Kolbd6954f32013-03-08 20:43:01 -0800163 public void onListPrefChanged(ListPreference pref) {
Michael Kolb70489722013-05-08 11:14:35 -0700164 if (mPopup != null) {
165 mUI.dismissPopup();
Michael Kolbd6954f32013-03-08 20:43:01 -0800166 }
167 onSettingChanged(pref);
168 }
169
Michael Kolb70489722013-05-08 11:14:35 -0700170 public void popupDismissed() {
Michael Kolb70489722013-05-08 11:14:35 -0700171 if (mPopup != null) {
172 mPopup = null;
Michael Kolbd6954f32013-03-08 20:43:01 -0800173 }
174 }
175
176 // Return true if the preference has the specified key but not the value.
177 private static boolean notSame(ListPreference pref, String key, String value) {
178 return (key.equals(pref.getKey()) && !value.equals(pref.getValue()));
179 }
180
181 private void setPreference(String key, String value) {
182 ListPreference pref = mPreferenceGroup.findPreference(key);
183 if (pref != null && !value.equals(pref.getValue())) {
184 pref.setValue(value);
185 reloadPreferences();
186 }
187 }
188
189 @Override
190 public void onSettingChanged(ListPreference pref) {
191 // Reset the scene mode if HDR is set to on. Reset HDR if scene mode is
192 // set to non-auto.
193 if (notSame(pref, CameraSettings.KEY_CAMERA_HDR, mSettingOff)) {
194 setPreference(CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO);
195 } else if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) {
196 setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff);
197 }
198 super.onSettingChanged(pref);
199 }
Michael Kolbd6954f32013-03-08 20:43:01 -0800200}