1dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li/*
2dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * Copyright (C) 2010 The Android Open Source Project
3dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li *
4dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * Licensed under the Apache License, Version 2.0 (the "License");
5dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * you may not use this file except in compliance with the License.
6dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * You may obtain a copy of the License at
7dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li *
8dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li *      http://www.apache.org/licenses/LICENSE-2.0
9dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li *
10dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * Unless required by applicable law or agreed to in writing, software
11dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * distributed under the License is distributed on an "AS IS" BASIS,
12dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * See the License for the specific language governing permissions and
14dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li * limitations under the License.
15dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li */
16dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
17dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Lipackage com.android.camera.ui;
18dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
190341c03529f04351534a15d06facb096aab7a95fWu-cheng Liimport com.android.camera.IconListPreference;
200341c03529f04351534a15d06facb096aab7a95fWu-cheng Liimport com.android.camera.R;
210341c03529f04351534a15d06facb096aab7a95fWu-cheng Li
22dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Liimport android.content.Context;
23dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Liimport android.util.AttributeSet;
2415d9a599aa3d354a89c7dcac7f03aa458f3a4158Wu-cheng Liimport android.util.Log;
25dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Liimport android.view.View;
26c0c662c5acaa5b76e1cb90a7868d16e471e2bd93Wu-cheng Liimport android.widget.AbsListView;
27222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wangimport android.widget.AdapterView;
28222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wangimport android.widget.SimpleAdapter;
29dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
30222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wangimport java.util.ArrayList;
31222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wangimport java.util.HashMap;
32222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang
339b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li// A popup window that shows one camera setting. The title is the name of the
349b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li// setting (ex: white-balance). The entries are the supported values (ex:
359b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li// daylight, incandescent, etc).
369b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Lipublic class BasicSettingPopup extends AbstractSettingPopup implements
37222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang        AdapterView.OnItemClickListener {
3815d9a599aa3d354a89c7dcac7f03aa458f3a4158Wu-cheng Li    private final String TAG = "BasicSettingPopup";
39dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    private IconListPreference mPreference;
40dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    private Listener mListener;
41dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
42dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    static public interface Listener {
4387695169a6b54b39258f236656b31991a3dbc2f8Wu-cheng Li        public void onSettingChanged();
44dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    }
45dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
4602ec7c0880ded5863d73d6f173ef35ab5c888dcdWu-cheng Li    public BasicSettingPopup(Context context, AttributeSet attrs) {
47dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li        super(context, attrs);
48dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    }
49dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
501e99673af90451eaffeb100735f38e6ce0f18456Wu-cheng Li    public void initialize(IconListPreference preference) {
51dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li        mPreference = preference;
529b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li        Context context = getContext();
53dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li        CharSequence[] entries = mPreference.getEntries();
54e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li        int[] iconIds = mPreference.getImageIds();
55e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li        if (iconIds == null) {
56e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li            iconIds = mPreference.getLargeIconIds();
57e747919853dfcbe29969647d7bf83269056d77bcWu-cheng Li        }
589b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li
599b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li        // Set title.
609b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Li        mTitle.setText(mPreference.getTitle());
61dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
62222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang        // Prepare the ListView.
63222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang        ArrayList<HashMap<String, Object>> listItem =
64222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang                new ArrayList<HashMap<String, Object>>();
65222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang        for(int i = 0; i < entries.length; ++i) {
66222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang            HashMap<String, Object> map = new HashMap<String, Object>();
67222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang            map.put("text", entries[i].toString());
68222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang            if (iconIds != null) map.put("image", iconIds[i]);
69222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang            listItem.add(map);
70dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li        }
71222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang        SimpleAdapter listItemAdapter = new SimpleAdapter(context, listItem,
721e99673af90451eaffeb100735f38e6ce0f18456Wu-cheng Li                R.layout.setting_item,
73222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang                new String[] {"text", "image"},
74222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang                new int[] {R.id.text, R.id.image});
75c0c662c5acaa5b76e1cb90a7868d16e471e2bd93Wu-cheng Li        ((AbsListView) mSettingList).setAdapter(listItemAdapter);
76c0c662c5acaa5b76e1cb90a7868d16e471e2bd93Wu-cheng Li        ((AbsListView) mSettingList).setOnItemClickListener(this);
77842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li        reloadPreference();
78842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li    }
79842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li
80842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li    // The value of the preference may have changed. Update the UI.
81d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li    @Override
82842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li    public void reloadPreference() {
8375c11984594546002610c9f076520414ae4b6d4dWu-cheng Li        int index = mPreference.findIndexOfValue(mPreference.getValue());
8475c11984594546002610c9f076520414ae4b6d4dWu-cheng Li        if (index != -1) {
85c0c662c5acaa5b76e1cb90a7868d16e471e2bd93Wu-cheng Li            ((AbsListView) mSettingList).setItemChecked(index, true);
8615d9a599aa3d354a89c7dcac7f03aa458f3a4158Wu-cheng Li        } else {
8715d9a599aa3d354a89c7dcac7f03aa458f3a4158Wu-cheng Li            Log.e(TAG, "Invalid preference value.");
8815d9a599aa3d354a89c7dcac7f03aa458f3a4158Wu-cheng Li            mPreference.print();
8975c11984594546002610c9f076520414ae4b6d4dWu-cheng Li        }
90dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    }
91dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
9287695169a6b54b39258f236656b31991a3dbc2f8Wu-cheng Li    public void setSettingChangedListener(Listener listener) {
93dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li        mListener = listener;
94dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    }
95dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li
96dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    @Override
97222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang    public void onItemClick(AdapterView<?> parent, View view,
98222cc95121fa2f645257e55f208d23558f570e65Chung-yih Wang            int index, long id) {
990341c03529f04351534a15d06facb096aab7a95fWu-cheng Li        mPreference.setValueIndex(index);
1000341c03529f04351534a15d06facb096aab7a95fWu-cheng Li        if (mListener != null) mListener.onSettingChanged();
101dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li    }
102dfee7f813adb8de209472d24553b860d2515ea0aWu-cheng Li}
103