Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2010 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.ui;
     18 
     19 import com.android.camera.CameraSettings;
     20 import com.android.camera.IconListPreference;
     21 import com.android.camera.R;
     22 
     23 import android.content.Context;
     24 import android.util.Log;
     25 import android.view.LayoutInflater;
     26 import android.view.ViewGroup;
     27 
     28 // An indicator button that represents one camera setting. Ex: flash. Pressing it opens a popup
     29 // window.
     30 public class IndicatorButton extends AbstractIndicatorButton
     31         implements BasicSettingPopup.Listener, EffectSettingPopup.Listener{
     32     private final String TAG = "IndicatorButton";
     33     private IconListPreference mPreference;
     34     // Scene mode can override the original preference value.
     35     private String mOverrideValue;
     36     private Listener mListener;
     37 
     38     static public interface Listener {
     39         public void onSettingChanged();
     40     }
     41 
     42     public void setSettingChangedListener(Listener listener) {
     43         mListener = listener;
     44     }
     45 
     46     public IndicatorButton(Context context, IconListPreference pref) {
     47         super(context);
     48         mPreference = pref;
     49         reloadPreference();
     50     }
     51 
     52     @Override
     53     public void reloadPreference() {
     54         int[] iconIds = mPreference.getLargeIconIds();
     55         if (iconIds != null) {
     56             // Each entry has a corresponding icon.
     57             int index;
     58             if (mOverrideValue == null) {
     59                 index = mPreference.findIndexOfValue(mPreference.getValue());
     60             } else {
     61                 index = mPreference.findIndexOfValue(mOverrideValue);
     62                 if (index == -1) {
     63                     // Avoid the crash if camera driver has bugs.
     64                     Log.e(TAG, "Fail to find override value=" + mOverrideValue);
     65                     mPreference.print();
     66                     return;
     67                 }
     68             }
     69             setImageResource(iconIds[index]);
     70         } else {
     71             // The preference only has a single icon to represent it.
     72             setImageResource(mPreference.getSingleIcon());
     73         }
     74         super.reloadPreference();
     75     }
     76 
     77     public String getKey() {
     78         return mPreference.getKey();
     79     }
     80 
     81     @Override
     82     public boolean isOverridden() {
     83         return mOverrideValue != null;
     84     }
     85 
     86     @Override
     87     public void overrideSettings(final String ... keyvalues) {
     88         mOverrideValue = null;
     89         for (int i = 0; i < keyvalues.length; i += 2) {
     90             String key = keyvalues[i];
     91             String value = keyvalues[i + 1];
     92             if (key.equals(getKey())) {
     93                 mOverrideValue = value;
     94                 setEnabled(value == null);
     95                 break;
     96             }
     97         }
     98         reloadPreference();
     99     }
    100 
    101     @Override
    102     protected void initializePopup() {
    103         LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
    104                 Context.LAYOUT_INFLATER_SERVICE);
    105         ViewGroup root = (ViewGroup) getRootView().findViewById(R.id.frame_layout);
    106 
    107         AbstractSettingPopup popup;
    108         if (CameraSettings.KEY_VIDEO_EFFECT.equals(getKey())) {
    109             EffectSettingPopup effect = (EffectSettingPopup) inflater.inflate(
    110                     R.layout.effect_setting_popup, root, false);
    111             effect.initialize(mPreference);
    112             effect.setSettingChangedListener(this);
    113             mPopup = effect;
    114         } else {
    115             BasicSettingPopup basic = (BasicSettingPopup) inflater.inflate(
    116                     R.layout.basic_setting_popup, root, false);
    117             basic.initialize(mPreference);
    118             basic.setSettingChangedListener(this);
    119             mPopup = basic;
    120         }
    121         root.addView(mPopup);
    122     }
    123 
    124     @Override
    125     public void onSettingChanged() {
    126         reloadPreference();
    127         // Dismiss later so the activated state can be updated before dismiss.
    128         dismissPopupDelayed();
    129         if (mListener != null) {
    130             mListener.onSettingChanged();
    131         }
    132     }
    133 }
    134