OSDN Git Service

Merge "Reduce max size of bitmap returned by crop dialog." into gb-ub-photos-bryce
[android-x86/packages-apps-Camera2.git] / src / com / android / camera / PhotoMenu.java
index 09c96b2..d0f21ed 100644 (file)
 
 package com.android.camera;
 
-import android.content.Context;
 import android.content.res.Resources;
 import android.hardware.Camera.Parameters;
-import android.view.LayoutInflater;
 
 import com.android.camera.ui.AbstractSettingPopup;
+import com.android.camera.ui.CountdownTimerPopup;
 import com.android.camera.ui.ListPrefSettingPopup;
-import com.android.camera.ui.MoreSettingPopup;
 import com.android.camera.ui.PieItem;
 import com.android.camera.ui.PieItem.OnClickListener;
 import com.android.camera.ui.PieRenderer;
-import com.android.camera.ui.TimerSettingPopup;
 import com.android.gallery3d.R;
 
+import java.util.Locale;
+
 public class PhotoMenu extends PieController
-        implements MoreSettingPopup.Listener,
-        TimerSettingPopup.Listener,
+        implements CountdownTimerPopup.Listener,
         ListPrefSettingPopup.Listener {
     private static String TAG = "CAM_photomenu";
 
-    private static final int POS_HDR = 0;
-    private static final int POS_EXP = 1;
-    private static final int POS_MORE = 2;
-    private static final int POS_FLASH = 3;
-    private static final int POS_SWITCH = 4;
-    private static final int POS_WB = 1;
-    private static final int POS_SET = 2;
-
     private final String mSettingOff;
 
     private PhotoUI mUI;
-    private String[] mOtherKeys;
-    // First level popup
-    private MoreSettingPopup mPopup;
-    // Second level popup
-    private AbstractSettingPopup mSecondPopup;
+    private AbstractSettingPopup mPopup;
     private CameraActivity mActivity;
 
     public PhotoMenu(CameraActivity activity, PhotoUI ui, PieRenderer pie) {
@@ -64,152 +50,127 @@ public class PhotoMenu extends PieController
     public void initialize(PreferenceGroup group) {
         super.initialize(group);
         mPopup = null;
-        mSecondPopup = null;
         PieItem item = null;
         final Resources res = mActivity.getResources();
-        // flash
-        if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
-            item = makeItem(CameraSettings.KEY_FLASH_MODE, POS_FLASH, 5);
-            item.setLabel(res.getString(R.string.pref_camera_flashmode_label));
+        Locale locale = res.getConfiguration().locale;
+        // the order is from left to right in the menu
+
+        // hdr
+        if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) {
+            item = makeSwitchItem(CameraSettings.KEY_CAMERA_HDR, true);
             mRenderer.addItem(item);
         }
         // exposure compensation
         if (group.findPreference(CameraSettings.KEY_EXPOSURE) != null) {
-            item = makeItem(CameraSettings.KEY_EXPOSURE, POS_EXP, 5);
+            item = makeItem(CameraSettings.KEY_EXPOSURE);
             item.setLabel(res.getString(R.string.pref_exposure_label));
             mRenderer.addItem(item);
         }
-        // camera switcher
-        if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
-            item = makeItem(R.drawable.ic_switch_photo_facing_holo_light);
-            ListPreference lpref = group.findPreference(CameraSettings.KEY_CAMERA_ID);
-            item.setPosition(POS_SWITCH, 5);
-            item.setLabel(lpref.getLabel());
-            final PieItem fitem = item;
-            item.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(PieItem item) {
-                    // Find the index of next camera.
-                    ListPreference camPref = mPreferenceGroup
-                            .findPreference(CameraSettings.KEY_CAMERA_ID);
-                    if (camPref != null) {
-                        int index = camPref.findIndexOfValue(camPref.getValue());
-                        CharSequence[] values = camPref.getEntryValues();
-                        index = (index + 1) % values.length;
-                        int newCameraId = Integer
-                                .parseInt((String) values[index]);
-                        fitem.setLabel(camPref.getLabel());
-                        mListener.onCameraPickerClicked(newCameraId);
-                    }
-                }
-            });
+        // more settings
+        PieItem more = makeItem(R.drawable.ic_settings_holo_light);
+        more.setLabel(res.getString(R.string.camera_menu_more_label));
+        mRenderer.addItem(more);
+        // flash
+        if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
+            item = makeItem(CameraSettings.KEY_FLASH_MODE);
+            item.setLabel(res.getString(R.string.pref_camera_flashmode_label));
             mRenderer.addItem(item);
         }
-        // hdr
-        if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) {
-            ListPreference lp = group.findPreference(CameraSettings.KEY_CAMERA_HDR);
-            item = makeItem(R.drawable.ic_hdr);
-            item.setLabel(lp.getLabel());
-            item.setPosition(POS_HDR, 5);
+        // camera switcher
+        if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
+            item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, false);
             final PieItem fitem = item;
             item.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(PieItem item) {
                     // Find the index of next camera.
                     ListPreference pref = mPreferenceGroup
-                            .findPreference(CameraSettings.KEY_CAMERA_HDR);
+                            .findPreference(CameraSettings.KEY_CAMERA_ID);
                     if (pref != null) {
-                        // toggle hdr value
-                        int index = (pref.findIndexOfValue(pref.getValue()) + 1) % 2;
+                        int index = pref.findIndexOfValue(pref.getValue());
+                        CharSequence[] values = pref.getEntryValues();
+                        index = (index + 1) % values.length;
                         pref.setValueIndex(index);
-                        onSettingChanged(pref);
-                        fitem.setLabel(pref.getLabel());
+                        mListener.onCameraPickerClicked(index);
                     }
+                    updateItem(fitem, CameraSettings.KEY_CAMERA_ID);
                 }
             });
             mRenderer.addItem(item);
         }
-
-        // more settings
-        PieItem more = makeItem(R.drawable.ic_settings_holo_light);
-        more.setPosition(POS_MORE, 5);
-        more.setLabel(res.getString(R.string.camera_menu_more_label));
-        mRenderer.addItem(more);
-        // white balance
-        if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
-            item = makeItem(CameraSettings.KEY_WHITE_BALANCE, POS_WB, 5);
-            item.setLabel(res.getString(R.string.pref_camera_whitebalance_label));
+        // location
+        if (group.findPreference(CameraSettings.KEY_RECORD_LOCATION) != null) {
+            item = makeSwitchItem(CameraSettings.KEY_RECORD_LOCATION, true);
             more.addItem(item);
+            if (mActivity.isSecureCamera()) {
+                // Prevent location preference from getting changed in secure camera mode
+                item.setEnabled(false);
+            }
         }
-        // settings popup
-        mOtherKeys = new String[] {
-                CameraSettings.KEY_SCENE_MODE,
-                CameraSettings.KEY_RECORD_LOCATION,
-                CameraSettings.KEY_PICTURE_SIZE,
-                CameraSettings.KEY_FOCUS_MODE,
-                CameraSettings.KEY_TIMER,
-                CameraSettings.KEY_TIMER_SOUND_EFFECTS,
-                };
-        item = makeItem(R.drawable.ic_settings_holo_light);
-        item.setLabel(res.getString(R.string.camera_menu_settings_label));
-        item.setPosition(POS_SET, 5);
+        // countdown timer
+        final ListPreference ctpref = group.findPreference(CameraSettings.KEY_TIMER);
+        final ListPreference beeppref = group.findPreference(CameraSettings.KEY_TIMER_SOUND_EFFECTS);
+        item = makeItem(R.drawable.ic_timer);
+        item.setLabel(res.getString(R.string.pref_camera_timer_title).toUpperCase(locale));
         item.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(PieItem item) {
-                if (mPopup == null) {
-                    initializePopup();
-                }
+                CountdownTimerPopup timerPopup = (CountdownTimerPopup) mActivity.getLayoutInflater().inflate(
+                        R.layout.countdown_setting_popup, null, false);
+                timerPopup.initialize(ctpref, beeppref);
+                timerPopup.setSettingChangedListener(PhotoMenu.this);
+                mUI.dismissPopup();
+                mPopup = timerPopup;
                 mUI.showPopup(mPopup);
             }
         });
         more.addItem(item);
-    }
-
-    @Override
-    public void reloadPreferences() {
-        super.reloadPreferences();
-        if (mPopup != null) {
-            mPopup.reloadPreference();
+        // image size
+        item = makeItem(R.drawable.ic_imagesize);
+        final ListPreference sizePref = group.findPreference(CameraSettings.KEY_PICTURE_SIZE);
+        item.setLabel(res.getString(R.string.pref_camera_picturesize_title).toUpperCase(locale));
+        item.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(PieItem item) {
+                ListPrefSettingPopup popup = (ListPrefSettingPopup) mActivity.getLayoutInflater().inflate(
+                        R.layout.list_pref_setting_popup, null, false);
+                popup.initialize(sizePref);
+                popup.setSettingChangedListener(PhotoMenu.this);
+                mUI.dismissPopup();
+                mPopup = popup;
+                mUI.showPopup(mPopup);
+            }
+        });
+        more.addItem(item);
+        // white balance
+        if (group.findPreference(CameraSettings.KEY_WHITE_BALANCE) != null) {
+            item = makeItem(CameraSettings.KEY_WHITE_BALANCE);
+            item.setLabel(res.getString(R.string.pref_camera_whitebalance_label));
+            more.addItem(item);
+        }
+        // scene mode
+        if (group.findPreference(CameraSettings.KEY_SCENE_MODE) != null) {
+            IconListPreference pref = (IconListPreference) group.findPreference(
+                    CameraSettings.KEY_SCENE_MODE);
+            pref.setUseSingleIcon(true);
+            item = makeItem(CameraSettings.KEY_SCENE_MODE);
+            more.addItem(item);
         }
     }
 
     @Override
-    // Hit when an item in the second-level popup gets selected
+    // Hit when an item in a popup gets selected
     public void onListPrefChanged(ListPreference pref) {
-        if (mPopup != null && mSecondPopup != null) {
-                mUI.dismissPopup(true);
-                mPopup.reloadPreference();
+        if (mPopup != null) {
+            mUI.dismissPopup();
         }
         onSettingChanged(pref);
     }
 
-    @Override
-    public void overrideSettings(final String ... keyvalues) {
-        super.overrideSettings(keyvalues);
-        if (mPopup == null) initializePopup();
-        mPopup.overrideSettings(keyvalues);
-    }
-
-    protected void initializePopup() {
-        LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
-
-        MoreSettingPopup popup = (MoreSettingPopup) inflater.inflate(
-                R.layout.more_setting_popup, null, false);
-        popup.setSettingChangedListener(this);
-        popup.initialize(mPreferenceGroup, mOtherKeys);
-        if (mActivity.isSecureCamera()) {
-            // Prevent location preference from getting changed in secure camera mode
-            popup.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION, false);
-        }
-        mPopup = popup;
-    }
-
-    public void popupDismissed(boolean topPopupOnly) {
-        // if the 2nd level popup gets dismissed
-        if (mSecondPopup != null) {
-            mSecondPopup = null;
-            if (topPopupOnly) mUI.showPopup(mPopup);
+    public void popupDismissed() {
+        // the popup gets dismissed
+        if (mPopup != null) {
+            mPopup = null;
         }
     }
 
@@ -238,29 +199,4 @@ public class PhotoMenu extends PieController
         super.onSettingChanged(pref);
     }
 
-    @Override
-    // Hit when an item in the first-level popup gets selected, then bring up
-    // the second-level popup
-    public void onPreferenceClicked(ListPreference pref) {
-        if (mSecondPopup != null) return;
-
-        LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
-        if (CameraSettings.KEY_TIMER.equals(pref.getKey())) {
-            TimerSettingPopup timerPopup = (TimerSettingPopup) inflater.inflate(
-                    R.layout.timer_setting_popup, null, false);
-            timerPopup.initialize(pref);
-            timerPopup.setSettingChangedListener(this);
-            mUI.dismissPopup(true);
-            mSecondPopup = timerPopup;
-        } else {
-            ListPrefSettingPopup basic = (ListPrefSettingPopup) inflater.inflate(
-                    R.layout.list_pref_setting_popup, null, false);
-            basic.initialize(pref);
-            basic.setSettingChangedListener(this);
-            mUI.dismissPopup(true);
-            mSecondPopup = basic;
-        }
-        mUI.showPopup(mSecondPopup);
-    }
 }