1f04692066fc7087560248b003c49e0377c056edfDoris Liu/* 2f04692066fc7087560248b003c49e0377c056edfDoris Liu * Copyright (C) 2010 The Android Open Source Project 3f04692066fc7087560248b003c49e0377c056edfDoris Liu * 4f04692066fc7087560248b003c49e0377c056edfDoris Liu * Licensed under the Apache License, Version 2.0 (the "License"); 5f04692066fc7087560248b003c49e0377c056edfDoris Liu * you may not use this file except in compliance with the License. 6f04692066fc7087560248b003c49e0377c056edfDoris Liu * You may obtain a copy of the License at 7f04692066fc7087560248b003c49e0377c056edfDoris Liu * 8f04692066fc7087560248b003c49e0377c056edfDoris Liu * http://www.apache.org/licenses/LICENSE-2.0 9f04692066fc7087560248b003c49e0377c056edfDoris Liu * 10f04692066fc7087560248b003c49e0377c056edfDoris Liu * Unless required by applicable law or agreed to in writing, software 11f04692066fc7087560248b003c49e0377c056edfDoris Liu * distributed under the License is distributed on an "AS IS" BASIS, 12f04692066fc7087560248b003c49e0377c056edfDoris Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f04692066fc7087560248b003c49e0377c056edfDoris Liu * See the License for the specific language governing permissions and 14f04692066fc7087560248b003c49e0377c056edfDoris Liu * limitations under the License. 15f04692066fc7087560248b003c49e0377c056edfDoris Liu */ 16f04692066fc7087560248b003c49e0377c056edfDoris Liu 17f04692066fc7087560248b003c49e0377c056edfDoris Liupackage com.android.camera.ui; 18f04692066fc7087560248b003c49e0377c056edfDoris Liu 19f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.content.Context; 20f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.util.AttributeSet; 21f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.util.Log; 22f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.view.View; 23f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.widget.ListView; 24f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.widget.AdapterView; 25f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.widget.ImageView; 26f04692066fc7087560248b003c49e0377c056edfDoris Liuimport android.widget.SimpleAdapter; 27f04692066fc7087560248b003c49e0377c056edfDoris Liu 28f04692066fc7087560248b003c49e0377c056edfDoris Liuimport com.android.camera.IconListPreference; 29f04692066fc7087560248b003c49e0377c056edfDoris Liuimport com.android.camera.ListPreference; 30f04692066fc7087560248b003c49e0377c056edfDoris Liuimport com.android.camera.R; 31f04692066fc7087560248b003c49e0377c056edfDoris Liu 32f04692066fc7087560248b003c49e0377c056edfDoris Liuimport java.util.ArrayList; 33f04692066fc7087560248b003c49e0377c056edfDoris Liuimport java.util.HashMap; 34f04692066fc7087560248b003c49e0377c056edfDoris Liuimport java.util.List; 35f04692066fc7087560248b003c49e0377c056edfDoris Liuimport java.util.Map; 36f04692066fc7087560248b003c49e0377c056edfDoris Liu 37f04692066fc7087560248b003c49e0377c056edfDoris Liu// A popup window that shows one camera setting. The title is the name of the 38f04692066fc7087560248b003c49e0377c056edfDoris Liu// setting (ex: white-balance). The entries are the supported values (ex: 39f04692066fc7087560248b003c49e0377c056edfDoris Liu// daylight, incandescent, etc). If initialized with an IconListPreference, 40f04692066fc7087560248b003c49e0377c056edfDoris Liu// the entries will contain both text and icons. Otherwise, entries will be 41f04692066fc7087560248b003c49e0377c056edfDoris Liu// shown in text. 42f04692066fc7087560248b003c49e0377c056edfDoris Liupublic class ListPrefSettingPopup extends AbstractSettingPopup implements 43f04692066fc7087560248b003c49e0377c056edfDoris Liu AdapterView.OnItemClickListener { 44f04692066fc7087560248b003c49e0377c056edfDoris Liu private static final String TAG = "ListPrefSettingPopup"; 45f04692066fc7087560248b003c49e0377c056edfDoris Liu private ListPreference mPreference; 46f04692066fc7087560248b003c49e0377c056edfDoris Liu private Listener mListener; 47f04692066fc7087560248b003c49e0377c056edfDoris Liu 48f04692066fc7087560248b003c49e0377c056edfDoris Liu static public interface Listener { 49f04692066fc7087560248b003c49e0377c056edfDoris Liu public void onListPrefChanged(ListPreference pref); 50f04692066fc7087560248b003c49e0377c056edfDoris Liu } 51f04692066fc7087560248b003c49e0377c056edfDoris Liu 52f04692066fc7087560248b003c49e0377c056edfDoris Liu public ListPrefSettingPopup(Context context, AttributeSet attrs) { 53f04692066fc7087560248b003c49e0377c056edfDoris Liu super(context, attrs); 54f04692066fc7087560248b003c49e0377c056edfDoris Liu } 55f04692066fc7087560248b003c49e0377c056edfDoris Liu 56f04692066fc7087560248b003c49e0377c056edfDoris Liu private class ListPrefSettingAdapter extends SimpleAdapter { 57f04692066fc7087560248b003c49e0377c056edfDoris Liu ListPrefSettingAdapter(Context context, List<? extends Map<String, ?>> data, 58f04692066fc7087560248b003c49e0377c056edfDoris Liu int resource, String[] from, int[] to) { 59f04692066fc7087560248b003c49e0377c056edfDoris Liu super(context, data, resource, from, to); 60f04692066fc7087560248b003c49e0377c056edfDoris Liu } 61f04692066fc7087560248b003c49e0377c056edfDoris Liu 62f04692066fc7087560248b003c49e0377c056edfDoris Liu @Override 63f04692066fc7087560248b003c49e0377c056edfDoris Liu public void setViewImage(ImageView v, String value) { 64f04692066fc7087560248b003c49e0377c056edfDoris Liu if ("".equals(value)) { 65f04692066fc7087560248b003c49e0377c056edfDoris Liu // Some settings have no icons. Ex: exposure compensation. 66f04692066fc7087560248b003c49e0377c056edfDoris Liu v.setVisibility(View.GONE); 67f04692066fc7087560248b003c49e0377c056edfDoris Liu } else { 68f04692066fc7087560248b003c49e0377c056edfDoris Liu super.setViewImage(v, value); 69f04692066fc7087560248b003c49e0377c056edfDoris Liu } 70f04692066fc7087560248b003c49e0377c056edfDoris Liu } 71f04692066fc7087560248b003c49e0377c056edfDoris Liu } 72f04692066fc7087560248b003c49e0377c056edfDoris Liu 73f04692066fc7087560248b003c49e0377c056edfDoris Liu public void initialize(ListPreference preference) { 74f04692066fc7087560248b003c49e0377c056edfDoris Liu mPreference = preference; 75f04692066fc7087560248b003c49e0377c056edfDoris Liu Context context = getContext(); 76f04692066fc7087560248b003c49e0377c056edfDoris Liu CharSequence[] entries = mPreference.getEntries(); 77f04692066fc7087560248b003c49e0377c056edfDoris Liu int[] iconIds = null; 78f04692066fc7087560248b003c49e0377c056edfDoris Liu if (preference instanceof IconListPreference) { 79f04692066fc7087560248b003c49e0377c056edfDoris Liu iconIds = ((IconListPreference) mPreference).getImageIds(); 80f04692066fc7087560248b003c49e0377c056edfDoris Liu if (iconIds == null) { 81f04692066fc7087560248b003c49e0377c056edfDoris Liu iconIds = ((IconListPreference) mPreference).getLargeIconIds(); 82f04692066fc7087560248b003c49e0377c056edfDoris Liu } 83f04692066fc7087560248b003c49e0377c056edfDoris Liu } 84f04692066fc7087560248b003c49e0377c056edfDoris Liu // Set title. 85f04692066fc7087560248b003c49e0377c056edfDoris Liu mTitle.setText(mPreference.getTitle()); 86f04692066fc7087560248b003c49e0377c056edfDoris Liu 87f04692066fc7087560248b003c49e0377c056edfDoris Liu // Prepare the ListView. 88f04692066fc7087560248b003c49e0377c056edfDoris Liu ArrayList<HashMap<String, Object>> listItem = 89f04692066fc7087560248b003c49e0377c056edfDoris Liu new ArrayList<HashMap<String, Object>>(); 90f04692066fc7087560248b003c49e0377c056edfDoris Liu for(int i = 0; i < entries.length; ++i) { 91f04692066fc7087560248b003c49e0377c056edfDoris Liu HashMap<String, Object> map = new HashMap<String, Object>(); 92f04692066fc7087560248b003c49e0377c056edfDoris Liu map.put("text", entries[i].toString()); 93f04692066fc7087560248b003c49e0377c056edfDoris Liu if (iconIds != null) map.put("image", iconIds[i]); 94f04692066fc7087560248b003c49e0377c056edfDoris Liu listItem.add(map); 95f04692066fc7087560248b003c49e0377c056edfDoris Liu } 96f04692066fc7087560248b003c49e0377c056edfDoris Liu SimpleAdapter listItemAdapter = new ListPrefSettingAdapter(context, listItem, 97f04692066fc7087560248b003c49e0377c056edfDoris Liu R.layout.setting_item, 98f04692066fc7087560248b003c49e0377c056edfDoris Liu new String[] {"text", "image"}, 99f04692066fc7087560248b003c49e0377c056edfDoris Liu new int[] {R.id.text, R.id.image}); 100f04692066fc7087560248b003c49e0377c056edfDoris Liu ((ListView) mSettingList).setAdapter(listItemAdapter); 101f04692066fc7087560248b003c49e0377c056edfDoris Liu ((ListView) mSettingList).setOnItemClickListener(this); 102f04692066fc7087560248b003c49e0377c056edfDoris Liu reloadPreference(); 103f04692066fc7087560248b003c49e0377c056edfDoris Liu } 104f04692066fc7087560248b003c49e0377c056edfDoris Liu 105f04692066fc7087560248b003c49e0377c056edfDoris Liu // The value of the preference may have changed. Update the UI. 106f04692066fc7087560248b003c49e0377c056edfDoris Liu @Override 107f04692066fc7087560248b003c49e0377c056edfDoris Liu public void reloadPreference() { 108f04692066fc7087560248b003c49e0377c056edfDoris Liu int index = mPreference.findIndexOfValue(mPreference.getValue()); 109f04692066fc7087560248b003c49e0377c056edfDoris Liu if (index != -1) { 110f04692066fc7087560248b003c49e0377c056edfDoris Liu ((ListView) mSettingList).setItemChecked(index, true); 111f04692066fc7087560248b003c49e0377c056edfDoris Liu } else { 112f04692066fc7087560248b003c49e0377c056edfDoris Liu Log.e(TAG, "Invalid preference value."); 113f04692066fc7087560248b003c49e0377c056edfDoris Liu mPreference.print(); 114f04692066fc7087560248b003c49e0377c056edfDoris Liu } 115f04692066fc7087560248b003c49e0377c056edfDoris Liu } 116f04692066fc7087560248b003c49e0377c056edfDoris Liu 117f04692066fc7087560248b003c49e0377c056edfDoris Liu public void setSettingChangedListener(Listener listener) { 118f04692066fc7087560248b003c49e0377c056edfDoris Liu mListener = listener; 119f04692066fc7087560248b003c49e0377c056edfDoris Liu } 120f04692066fc7087560248b003c49e0377c056edfDoris Liu 121f04692066fc7087560248b003c49e0377c056edfDoris Liu @Override 122f04692066fc7087560248b003c49e0377c056edfDoris Liu public void onItemClick(AdapterView<?> parent, View view, 123f04692066fc7087560248b003c49e0377c056edfDoris Liu int index, long id) { 124f04692066fc7087560248b003c49e0377c056edfDoris Liu mPreference.setValueIndex(index); 125f04692066fc7087560248b003c49e0377c056edfDoris Liu if (mListener != null) mListener.onListPrefChanged(mPreference); 126f04692066fc7087560248b003c49e0377c056edfDoris Liu } 127f04692066fc7087560248b003c49e0377c056edfDoris Liu} 128