Home | History | Annotate | Download | only in camera
      1 /*
      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 
     17 package com.android.camera;
     18 
     19 import android.content.res.Resources;
     20 import android.hardware.Camera.Parameters;
     21 
     22 import com.android.camera.ui.AbstractSettingPopup;
     23 import com.android.camera.ui.CountdownTimerPopup;
     24 import com.android.camera.ui.ListPrefSettingPopup;
     25 import com.android.camera.ui.PieItem;
     26 import com.android.camera.ui.PieItem.OnClickListener;
     27 import com.android.camera.ui.PieRenderer;
     28 import com.android.gallery3d.R;
     29 
     30 import java.util.Locale;
     31 
     32 public class PhotoMenu extends PieController
     33         implements CountdownTimerPopup.Listener,
     34         ListPrefSettingPopup.Listener {
     35     private static String TAG = "CAM_photomenu";
     36 
     37     private final String mSettingOff;
     38 
     39     private PhotoUI mUI;
     40     private AbstractSettingPopup mPopup;
     41     private CameraActivity mActivity;
     42 
     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);
     47         mActivity = activity;
     48     }
     49 
     50     public void initialize(PreferenceGroup group) {
     51         super.initialize(group);
     52         mPopup = null;
     53         PieItem item = null;
     54         final Resources res = mActivity.getResources();
     55         Locale locale = res.getConfiguration().locale;
     56         // 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);
     61             mRenderer.addItem(item);
     62         }
     63         // exposure compensation
     64         if (group.findPreference(CameraSettings.KEY_EXPOSURE) != null) {
     65             item = makeItem(CameraSettings.KEY_EXPOSURE);
     66             item.setLabel(res.getString(R.string.pref_exposure_label));
     67             mRenderer.addItem(item);
     68         }
     69         // 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         }
     79         // camera switcher
     80         if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
     81             item = makeSwitchItem(CameraSettings.KEY_CAMERA_ID, false);
     82             final PieItem fitem = item;
     83             item.setOnClickListener(new OnClickListener() {
     84                 @Override
     85                 public void onClick(PieItem item) {
     86                     // Find the index of next camera.
     87                     ListPreference pref = mPreferenceGroup
     88                             .findPreference(CameraSettings.KEY_CAMERA_ID);
     89                     if (pref != null) {
     90                         int index = pref.findIndexOfValue(pref.getValue());
     91                         CharSequence[] values = pref.getEntryValues();
     92                         index = (index + 1) % values.length;
     93                         pref.setValueIndex(index);
     94                         mListener.onCameraPickerClicked(index);
     95                     }
     96                     updateItem(fitem, CameraSettings.KEY_CAMERA_ID);
     97                 }
     98             });
     99             mRenderer.addItem(item);
    100         }
    101         // location
    102         if (group.findPreference(CameraSettings.KEY_RECORD_LOCATION) != null) {
    103             item = makeSwitchItem(CameraSettings.KEY_RECORD_LOCATION, true);
    104             more.addItem(item);
    105             if (mActivity.isSecureCamera()) {
    106                 // Prevent location preference from getting changed in secure camera mode
    107                 item.setEnabled(false);
    108             }
    109         }
    110         // 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));
    115         item.setOnClickListener(new OnClickListener() {
    116             @Override
    117             public void onClick(PieItem item) {
    118                 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;
    141                 mUI.showPopup(mPopup);
    142             }
    143         });
    144         more.addItem(item);
    145         // 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         }
    159     }
    160 
    161     @Override
    162     // Hit when an item in a popup gets selected
    163     public void onListPrefChanged(ListPreference pref) {
    164         if (mPopup != null) {
    165             mUI.dismissPopup();
    166         }
    167         onSettingChanged(pref);
    168     }
    169 
    170     public void popupDismissed() {
    171         // the popup gets dismissed
    172         if (mPopup != null) {
    173             mPopup = null;
    174         }
    175     }
    176 
    177     // Return true if the preference has the specified key but not the value.
    178     private static boolean notSame(ListPreference pref, String key, String value) {
    179         return (key.equals(pref.getKey()) && !value.equals(pref.getValue()));
    180     }
    181 
    182     private void setPreference(String key, String value) {
    183         ListPreference pref = mPreferenceGroup.findPreference(key);
    184         if (pref != null && !value.equals(pref.getValue())) {
    185             pref.setValue(value);
    186             reloadPreferences();
    187         }
    188     }
    189 
    190     @Override
    191     public void onSettingChanged(ListPreference pref) {
    192         // Reset the scene mode if HDR is set to on. Reset HDR if scene mode is
    193         // set to non-auto.
    194         if (notSame(pref, CameraSettings.KEY_CAMERA_HDR, mSettingOff)) {
    195             setPreference(CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO);
    196         } else if (notSame(pref, CameraSettings.KEY_SCENE_MODE, Parameters.SCENE_MODE_AUTO)) {
    197             setPreference(CameraSettings.KEY_CAMERA_HDR, mSettingOff);
    198         }
    199         super.onSettingChanged(pref);
    200     }
    201 
    202 }
    203