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