18872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb/* 28872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Copyright (C) 2012 The Android Open Source Project 38872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * 48872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); 58872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * you may not use this file except in compliance with the License. 68872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * You may obtain a copy of the License at 78872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * 88872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 98872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * 108872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Unless required by applicable law or agreed to in writing, software 118872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, 128872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * See the License for the specific language governing permissions and 148872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * limitations under the License. 158872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb */ 168872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 178872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbpackage com.android.camera; 188872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 19753bb8aa56fff425fe16b93be368b9b236e4751fDoris Liuimport android.app.Activity; 208872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.graphics.drawable.Drawable; 218872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.util.Log; 228872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 238872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport com.android.camera.CameraPreference.OnPreferenceChangedListener; 248872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport com.android.camera.drawable.TextDrawable; 258872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport com.android.camera.ui.PieItem; 268872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport com.android.camera.ui.PieItem.OnClickListener; 278872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport com.android.camera.ui.PieRenderer; 288872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 298872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport java.util.ArrayList; 308872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport java.util.HashMap; 318872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport java.util.List; 328872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport java.util.Map; 338872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 348872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbpublic class PieController { 358872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 368872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private static String TAG = "CAM_piecontrol"; 378872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 388872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected static final int MODE_PHOTO = 0; 398872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected static final int MODE_VIDEO = 1; 408872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 41753bb8aa56fff425fe16b93be368b9b236e4751fDoris Liu protected static float CENTER = (float) Math.PI / 2; 42753bb8aa56fff425fe16b93be368b9b236e4751fDoris Liu protected static final float SWEEP = 0.06f; 43753bb8aa56fff425fe16b93be368b9b236e4751fDoris Liu 44753bb8aa56fff425fe16b93be368b9b236e4751fDoris Liu protected Activity mActivity; 458872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected PreferenceGroup mPreferenceGroup; 468872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected OnPreferenceChangedListener mListener; 478872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected PieRenderer mRenderer; 488872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private List<IconListPreference> mPreferences; 498872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private Map<IconListPreference, PieItem> mPreferenceMap; 508872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private Map<IconListPreference, String> mOverrides; 518872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 528872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setListener(OnPreferenceChangedListener listener) { 538872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mListener = listener; 548872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 558872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 56753bb8aa56fff425fe16b93be368b9b236e4751fDoris Liu public PieController(Activity activity, PieRenderer pie) { 578872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mActivity = activity; 588872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mRenderer = pie; 598872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPreferences = new ArrayList<IconListPreference>(); 608872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPreferenceMap = new HashMap<IconListPreference, PieItem>(); 618872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mOverrides = new HashMap<IconListPreference, String>(); 628872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 638872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 648872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void initialize(PreferenceGroup group) { 658872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mRenderer.clearItems(); 661ce28c910dca3de9a832079acc77cb807b25d178Doris Liu mPreferenceMap.clear(); 678872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb setPreferenceGroup(group); 688872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 698872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 708872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void onSettingChanged(ListPreference pref) { 718872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (mListener != null) { 728872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mListener.onSharedPreferenceChanged(); 738872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 748872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 758872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 768872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected void setCameraId(int cameraId) { 778872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb ListPreference pref = mPreferenceGroup.findPreference(CameraSettings.KEY_CAMERA_ID); 788872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb pref.setValue("" + cameraId); 798872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 808872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 818872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected PieItem makeItem(int resId) { 828872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // We need a mutable version as we change the alpha 838872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb Drawable d = mActivity.getResources().getDrawable(resId).mutate(); 848872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return new PieItem(d, 0); 858872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 868872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 878872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb protected PieItem makeItem(CharSequence value) { 888872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb TextDrawable drawable = new TextDrawable(mActivity.getResources(), value); 898872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return new PieItem(drawable, 0); 908872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 918872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 92b7c49994231f31f5cf4de4a66eec7a85a3bd9551Michael Kolb public PieItem makeItem(String prefKey) { 938872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb final IconListPreference pref = 948872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb (IconListPreference) mPreferenceGroup.findPreference(prefKey); 953bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb if (pref == null) return null; 968872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb int[] iconIds = pref.getLargeIconIds(); 978872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb int resid = -1; 988872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (!pref.getUseSingleIcon() && iconIds != null) { 998872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // Each entry has a corresponding icon. 1008872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb int index = pref.findIndexOfValue(pref.getValue()); 1018872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb resid = iconIds[index]; 1028872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } else { 1038872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // The preference only has a single icon to represent it. 1048872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb resid = pref.getSingleIcon(); 1058872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1068872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb PieItem item = makeItem(resid); 10710f4ba0198904a3d7679771ce845c847d940226fMichael Kolb item.setLabel(pref.getTitle().toUpperCase()); 1088872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPreferences.add(pref); 1098872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPreferenceMap.put(pref, item); 1108872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb int nOfEntries = pref.getEntries().length; 1118872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (nOfEntries > 1) { 1128872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb for (int i = 0; i < nOfEntries; i++) { 1138872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb PieItem inner = null; 1148872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (iconIds != null) { 1158872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb inner = makeItem(iconIds[i]); 1168872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } else { 1178872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb inner = makeItem(pref.getEntries()[i]); 1188872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 11910f4ba0198904a3d7679771ce845c847d940226fMichael Kolb inner.setLabel(pref.getLabels()[i]); 1208872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb item.addItem(inner); 1218872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb final int index = i; 1228872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb inner.setOnClickListener(new OnClickListener() { 1238872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb @Override 1248872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void onClick(PieItem item) { 1258872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb pref.setValueIndex(index); 1268872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb reloadPreference(pref); 1278872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb onSettingChanged(pref); 1288872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1298872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb }); 1308872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1318872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1323bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb return item; 1333bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb } 1343bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb 135b7c49994231f31f5cf4de4a66eec7a85a3bd9551Michael Kolb public PieItem makeSwitchItem(final String prefKey, boolean addListener) { 13625c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb final IconListPreference pref = 13725c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb (IconListPreference) mPreferenceGroup.findPreference(prefKey); 13825c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb if (pref == null) return null; 13925c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb int[] iconIds = pref.getLargeIconIds(); 14025c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb int resid = -1; 14125c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb int index = pref.findIndexOfValue(pref.getValue()); 14225c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb if (!pref.getUseSingleIcon() && iconIds != null) { 14325c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb // Each entry has a corresponding icon. 14425c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb resid = iconIds[index]; 14525c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } else { 14625c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb // The preference only has a single icon to represent it. 14725c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb resid = pref.getSingleIcon(); 14825c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } 14925c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb PieItem item = makeItem(resid); 15025c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb item.setLabel(pref.getLabels()[index]); 15125c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb item.setImageResource(mActivity, resid); 15225c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb mPreferences.add(pref); 15325c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb mPreferenceMap.put(pref, item); 15425c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb if (addListener) { 15525c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb final PieItem fitem = item; 15625c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb item.setOnClickListener(new OnClickListener() { 15725c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb @Override 15825c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb public void onClick(PieItem item) { 159d90d0ffc3e69316b105b6f9d03dc98cd5b40ecbfAngus Kong if (!item.isEnabled()) { 160d90d0ffc3e69316b105b6f9d03dc98cd5b40ecbfAngus Kong return; 161d90d0ffc3e69316b105b6f9d03dc98cd5b40ecbfAngus Kong } 16225c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb IconListPreference pref = (IconListPreference) mPreferenceGroup 16325c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb .findPreference(prefKey); 16425c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb int index = pref.findIndexOfValue(pref.getValue()); 16525c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb CharSequence[] values = pref.getEntryValues(); 16625c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb index = (index + 1) % values.length; 16725c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb pref.setValueIndex(index); 16825c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb fitem.setLabel(pref.getLabels()[index]); 16925c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb fitem.setImageResource(mActivity, 17025c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb ((IconListPreference) pref).getLargeIconIds()[index]); 17125c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb reloadPreference(pref); 17225c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb onSettingChanged(pref); 17325c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } 17425c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb }); 17525c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } 17625c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb return item; 17725c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } 17825c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb 17925c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb 1803bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb public PieItem makeDialItem(ListPreference pref, int iconId, float center, float sweep) { 1813bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb PieItem item = makeItem(iconId); 1823bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb return item; 1833bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb } 1843bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb 185b7c49994231f31f5cf4de4a66eec7a85a3bd9551Michael Kolb public void addItem(String prefKey) { 186b7c49994231f31f5cf4de4a66eec7a85a3bd9551Michael Kolb PieItem item = makeItem(prefKey); 1873bc96b2d1106fc5ebec6fda6aad3bca4d62e81c0Michael Kolb mRenderer.addItem(item); 1888872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 1898872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 19025c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb public void updateItem(PieItem item, String prefKey) { 19125c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb IconListPreference pref = (IconListPreference) mPreferenceGroup 19225c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb .findPreference(prefKey); 19325c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb if (pref != null) { 19425c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb int index = pref.findIndexOfValue(pref.getValue()); 19525c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb item.setLabel(pref.getLabels()[index]); 19625c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb item.setImageResource(mActivity, 19725c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb ((IconListPreference) pref).getLargeIconIds()[index]); 19825c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } 19925c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb } 20025c0ec4c1252a8d0f9de74ba7ade74bc7af3f5b2Michael Kolb 2018872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void setPreferenceGroup(PreferenceGroup group) { 2028872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPreferenceGroup = group; 2038872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2048872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 2058872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void reloadPreferences() { 2068872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mPreferenceGroup.reloadValue(); 2078872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb for (IconListPreference pref : mPreferenceMap.keySet()) { 2088872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb reloadPreference(pref); 2098872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2108872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2118872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 2128872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private void reloadPreference(IconListPreference pref) { 2138872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (pref.getUseSingleIcon()) return; 2148872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb PieItem item = mPreferenceMap.get(pref); 2158872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb String overrideValue = mOverrides.get(pref); 2168872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb int[] iconIds = pref.getLargeIconIds(); 2178872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (iconIds != null) { 2188872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // Each entry has a corresponding icon. 2198872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb int index; 2208872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (overrideValue == null) { 2218872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb index = pref.findIndexOfValue(pref.getValue()); 2228872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } else { 2238872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb index = pref.findIndexOfValue(overrideValue); 2248872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (index == -1) { 2258872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // Avoid the crash if camera driver has bugs. 2268872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb Log.e(TAG, "Fail to find override value=" + overrideValue); 2278872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb pref.print(); 2288872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb return; 2298872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2308872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2318872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb item.setImageResource(mActivity, iconIds[index]); 2328872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } else { 2338872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // The preference only has a single icon to represent it. 2348872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb item.setImageResource(mActivity, pref.getSingleIcon()); 2358872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2368872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2378872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 2388872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb // Scene mode may override other camera settings (ex: flash mode). 2398872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb public void overrideSettings(final String ... keyvalues) { 2408872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (keyvalues.length % 2 != 0) { 2418872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb throw new IllegalArgumentException(); 2428872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2438872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb for (IconListPreference pref : mPreferenceMap.keySet()) { 2448872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb override(pref, keyvalues); 2458872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2468872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2478872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb 2488872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb private void override(IconListPreference pref, final String ... keyvalues) { 2498872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mOverrides.remove(pref); 2508872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb for (int i = 0; i < keyvalues.length; i += 2) { 2518872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb String key = keyvalues[i]; 2528872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb String value = keyvalues[i + 1]; 2538872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb if (key.equals(pref.getKey())) { 2548872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb mOverrides.put(pref, value); 2558872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb PieItem item = mPreferenceMap.get(pref); 2568872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb item.setEnabled(value == null); 2578872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb break; 2588872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2598872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2608872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb reloadPreference(pref); 2618872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb } 2628872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb} 263