1 /*
2  * Copyright (C) 2011 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.ListPreference;
20 import com.android.camera.R;
21 
22 import android.content.Context;
23 import android.util.AttributeSet;
24 import android.view.accessibility.AccessibilityEvent;
25 import android.widget.LinearLayout;
26 import android.widget.TextView;
27 
28 /**
29  * A one-line camera setting could be one of three types: knob, switch or restore
30  * preference button. The setting includes a title for showing the preference
31  * title which is initialized in the SimpleAdapter. A knob also includes
32  * (ex: Picture size), a previous button, the current value (ex: 5MP),
33  * and a next button. A switch, i.e. the preference RecordLocationPreference,
34  * has only two values on and off which will be controlled in a switch button.
35  * Other setting popup window includes several InLineSettingItem items with
36  * different types if possible.
37  */
38 public abstract class InLineSettingItem extends LinearLayout {
39     private Listener mListener;
40     protected ListPreference mPreference;
41     protected int mIndex;
42     // Scene mode can override the original preference value.
43     protected String mOverrideValue;
44 
45     static public interface Listener {
onSettingChanged()46         public void onSettingChanged();
47     }
48 
InLineSettingItem(Context context, AttributeSet attrs)49     public InLineSettingItem(Context context, AttributeSet attrs) {
50         super(context, attrs);
51     }
52 
setTitle(ListPreference preference)53     protected void setTitle(ListPreference preference) {
54         ((TextView) findViewById(R.id.title)).setText(preference.getTitle());
55     }
56 
initialize(ListPreference preference)57     public void initialize(ListPreference preference) {
58         setTitle(preference);
59         if (preference == null) return;
60         mPreference = preference;
61         reloadPreference();
62     }
63 
updateView()64     protected abstract void updateView();
65 
changeIndex(int index)66     protected boolean changeIndex(int index) {
67         if (index >= mPreference.getEntryValues().length || index < 0) return false;
68         mIndex = index;
69         mPreference.setValueIndex(mIndex);
70         if (mListener != null) {
71             mListener.onSettingChanged();
72         }
73         updateView();
74         sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
75         return true;
76     }
77 
78     // The value of the preference may have changed. Update the UI.
reloadPreference()79     public void reloadPreference() {
80         mIndex = mPreference.findIndexOfValue(mPreference.getValue());
81         updateView();
82     }
83 
setSettingChangedListener(Listener listener)84     public void setSettingChangedListener(Listener listener) {
85         mListener = listener;
86     }
87 
overrideSettings(String value)88     public void overrideSettings(String value) {
89         mOverrideValue = value;
90         updateView();
91     }
92 }
93