OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / packages / apps / Camera / src / com / android / camera / ui / PreferenceAdapter.java
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 android.content.Context;
20
21 import com.android.camera.IconListPreference;
22 import com.android.camera.ListPreference;
23 import com.android.camera.Util;
24
25 import java.util.ArrayList;
26
27 class PreferenceAdapter
28         implements GLListView.Model, GLListView.OnItemSelectedListener {
29
30     private static final int ICON_NONE = 0;
31
32     private final ArrayList<GLView> mContent = new ArrayList<GLView>();
33     private final ListPreference mPreference;
34     private String mOverride;
35
36     public PreferenceAdapter(Context context, ListPreference preference) {
37         mPreference = preference;
38         generateContent(context, preference);
39     }
40
41     public void reload() {
42         updateContent(null, true);
43     }
44
45     public void overrideSettings(String settings) {
46         updateContent(settings, false);
47     }
48
49     private void updateContent(String settings, boolean reloadValues) {
50         if (!reloadValues && Util.equals(settings, mOverride)) return;
51         mOverride = settings;
52
53         CharSequence[] values = mPreference.getEntryValues();
54         String value = mPreference.getValue();
55         if (settings == null) {
56             for (int i = 1, n = mContent.size(); i < n; ++i) {
57                 GLOptionItem item = (GLOptionItem) mContent.get(i);
58                 item.setChecked(values[i - 1].equals(value));
59                 item.setEnabled(true);
60             }
61         } else {
62             for (int i = 1, n = mContent.size(); i < n; ++i) {
63                 GLOptionItem item = (GLOptionItem) mContent.get(i);
64                 boolean checked = values[i - 1].equals(settings);
65                 item.setChecked(checked);
66                 item.setEnabled(checked);
67             }
68         }
69     }
70
71     private void generateContent(Context context, ListPreference preference) {
72         GLOptionHeader header =
73                 new GLOptionHeader(context, preference.getTitle());
74         mContent.add(header);
75         CharSequence[] entries = preference.getEntries();
76         CharSequence[] values = preference.getEntryValues();
77         String value = preference.getValue();
78         int [] icons = null;
79         if (preference instanceof IconListPreference) {
80             IconListPreference iPref = (IconListPreference) preference;
81             icons = iPref.getIconIds();
82         }
83         for (int i = 0, n = entries.length; i < n; ++i) {
84             GLOptionItem item = new GLOptionItem(
85                     context, icons == null ? ICON_NONE : icons[i],
86                     entries[i].toString());
87             item.setChecked(values[i].equals(value));
88             mContent.add(item);
89         }
90     }
91
92     public void onItemSelected(GLView view, int position) {
93         if (mOverride != null) return;
94         ListPreference pref = mPreference;
95         CharSequence[] values = pref.getEntryValues();
96         if (position < values.length + 1) {
97             int index = position - 1;
98             int oldIndex = pref.findIndexOfValue(pref.getValue());
99             if (oldIndex != index) {
100                 synchronized (pref.getSharedPreferences()) {
101                     pref.setValueIndex(index);
102                 }
103                 ((GLOptionItem) mContent.get(1 + oldIndex)).setChecked(false);
104                 ((GLOptionItem) view).setChecked(true);
105             }
106             return;
107         }
108     }
109
110     public GLView getView(int index) {
111         return mContent.get(index);
112     }
113
114     public boolean isSelectable(int index) {
115         return mContent.get(index) instanceof GLOptionItem;
116     }
117
118     public int size() {
119         return mContent.size();
120     }
121 }