CameraSettings.java revision df3731bacfe26910a5dd0813c6aa80a6e55b85ad
1b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectpackage com.android.camera; 2b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 378f160ee416ba27ba55954950473e17ba9d20052Owen Linimport android.app.Activity; 478f160ee416ba27ba55954950473e17ba9d20052Owen Linimport android.content.Context; 5b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.content.SharedPreferences; 62f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Linimport android.graphics.drawable.Drawable; 787341536812081826656040ac81f8f386c6c1407Wu-cheng Liimport android.hardware.Camera.Parameters; 84305c70dc849156be5d79d52772ea71cd890ca40Wu-cheng Liimport android.hardware.Camera.Size; 96f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Changimport android.os.SystemProperties; 10b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.preference.ListPreference; 115945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Liimport android.preference.Preference; 125945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Liimport android.preference.PreferenceGroup; 1378f160ee416ba27ba55954950473e17ba9d20052Owen Linimport android.preference.PreferenceManager; 1478f160ee416ba27ba55954950473e17ba9d20052Owen Linimport android.preference.PreferenceScreen; 157e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chenimport android.util.Log; 16d4247bc43702d5ccda5dde40e948fffd6c4445eeRay Chen 17d4247bc43702d5ccda5dde40e948fffd6c4445eeRay Chenimport java.util.ArrayList; 184305c70dc849156be5d79d52772ea71cd890ca40Wu-cheng Liimport java.util.List; 1987341536812081826656040ac81f8f386c6c1407Wu-cheng Li 2078f160ee416ba27ba55954950473e17ba9d20052Owen Linpublic class CameraSettings { 2178f160ee416ba27ba55954950473e17ba9d20052Owen Lin private static final int FIRST_REQUEST_CODE = 100; 2278f160ee416ba27ba55954950473e17ba9d20052Owen Lin private static final int NOT_FOUND = -1; 2378f160ee416ba27ba55954950473e17ba9d20052Owen Lin 2478f160ee416ba27ba55954950473e17ba9d20052Owen Lin public static final String KEY_VERSION = "pref_version_key"; 2578f160ee416ba27ba55954950473e17ba9d20052Owen Lin public static final String KEY_RECORD_LOCATION = 2678f160ee416ba27ba55954950473e17ba9d20052Owen Lin "pref_camera_recordlocation_key"; 270a475e11e2ceadbaa70308b52e06f4e6d9e56f12Chih-Chung Chang public static final String KEY_VIDEO_QUALITY = 282ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li "pref_camera_videoquality_key"; 2982ded2070a47fff16e1de1c78b516eb25888b91eChih-Chung Chang public static final String KEY_VIDEO_DURATION = 3082ded2070a47fff16e1de1c78b516eb25888b91eChih-Chung Chang "pref_camera_video_duration_key"; 319dacf7b214339440c16f3d66e12d6afef1248f68Wu-cheng Li public static final String KEY_PICTURE_SIZE = "pref_camera_picturesize_key"; 32e0770004600f76cc4b440104e98e14712b4fd1c6Wu-cheng Li public static final String KEY_JPEG_QUALITY = "pref_camera_jpegquality_key"; 330f56ef5704b7f1a0874528367147487c051876d9Wu-cheng Li public static final String KEY_FOCUS_MODE = "pref_camera_focusmode_key"; 345945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li public static final String KEY_FLASH_MODE = "pref_camera_flashmode_key"; 3578f160ee416ba27ba55954950473e17ba9d20052Owen Lin public static final String KEY_COLOR_EFFECT = "pref_camera_coloreffect_key"; 365f6484a74fe019337e436e6e0dcb07375a74af25President Li public static final String KEY_WHITE_BALANCE = 375f6484a74fe019337e436e6e0dcb07375a74af25President Li "pref_camera_whitebalance_key"; 388d0ba007ec6ef9bb34dc0c9f40c4c29dad2691e0Owen Lin public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key"; 396d12b828743cbd81767227229d6351ce412d5698Owen Lin 4078f160ee416ba27ba55954950473e17ba9d20052Owen Lin public static final int CURRENT_VERSION = 1; 416f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang 426f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang // max mms video duration in seconds. 436f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang public static final int MMS_VIDEO_DURATION = 446f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang SystemProperties.getInt("ro.media.enc.lprof.duration", 60); 45b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 4678f160ee416ba27ba55954950473e17ba9d20052Owen Lin public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true; 47b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 4878f160ee416ba27ba55954950473e17ba9d20052Owen Lin // MMS video length 4978f160ee416ba27ba55954950473e17ba9d20052Owen Lin public static final int DEFAULT_VIDEO_DURATION_VALUE = -1; 504305c70dc849156be5d79d52772ea71cd890ca40Wu-cheng Li 5171d56e21859a797ec4633f209b3605276345d44eOwen Lin @SuppressWarnings("unused") 5278f160ee416ba27ba55954950473e17ba9d20052Owen Lin private static final String TAG = "CameraSettings"; 5378f160ee416ba27ba55954950473e17ba9d20052Owen Lin 5478f160ee416ba27ba55954950473e17ba9d20052Owen Lin private final Context mContext; 5578f160ee416ba27ba55954950473e17ba9d20052Owen Lin private final Parameters mParameters; 5678f160ee416ba27ba55954950473e17ba9d20052Owen Lin private final PreferenceManager mManager; 5778f160ee416ba27ba55954950473e17ba9d20052Owen Lin 5878f160ee416ba27ba55954950473e17ba9d20052Owen Lin public CameraSettings(Activity activity, Parameters parameters) { 5978f160ee416ba27ba55954950473e17ba9d20052Owen Lin mContext = activity; 6078f160ee416ba27ba55954950473e17ba9d20052Owen Lin mParameters = parameters; 6178f160ee416ba27ba55954950473e17ba9d20052Owen Lin mManager = new PreferenceManager(activity, FIRST_REQUEST_CODE); 6278f160ee416ba27ba55954950473e17ba9d20052Owen Lin } 6378f160ee416ba27ba55954950473e17ba9d20052Owen Lin 6478f160ee416ba27ba55954950473e17ba9d20052Owen Lin public PreferenceScreen getPreferenceScreen(int preferenceRes) { 6578f160ee416ba27ba55954950473e17ba9d20052Owen Lin PreferenceScreen screen = mManager.createPreferenceScreen(mContext); 6678f160ee416ba27ba55954950473e17ba9d20052Owen Lin mManager.inflateFromResource(mContext, preferenceRes, screen); 6778f160ee416ba27ba55954950473e17ba9d20052Owen Lin initPreference(screen); 6878f160ee416ba27ba55954950473e17ba9d20052Owen Lin return screen; 6978f160ee416ba27ba55954950473e17ba9d20052Owen Lin } 7078f160ee416ba27ba55954950473e17ba9d20052Owen Lin 7132bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin public static void initialCameraPictureSize( 7232bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin Context context, Parameters parameters) { 7332bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin // When launching the camera app first time, we will set the picture 7432bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin // size to the first one in the list defined in "arrays.xml" and is also 7532bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin // supported by the driver. 7632bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin List<Size> supported = parameters.getSupportedPictureSizes(); 7732bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin if (supported == null) return; 7832bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin for (String candidate : context.getResources().getStringArray( 7932bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin R.array.pref_camera_picturesize_entryvalues)) { 8032bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin if (setCameraPictureSize(candidate, supported, parameters)) { 8132bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin SharedPreferences.Editor editor = PreferenceManager 8232bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin .getDefaultSharedPreferences(context).edit(); 8332bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin editor.putString(KEY_PICTURE_SIZE, candidate); 8432bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin editor.commit(); 8532bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin return; 8632bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin } 8732bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin } 8832bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin } 8932bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin 907e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen public static void removePreferenceFromScreen( 917e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen PreferenceScreen screen, String key) { 927e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen Preference pref = screen.findPreference(key); 937e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen if (pref == null) { 947e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen Log.i(TAG, "No preference found based the key : " + key); 957e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen throw new IllegalArgumentException(); 967e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen } else { 977e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen removePreference(screen, pref); 987e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen } 997e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen } 1007e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen 10132bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin public static boolean setCameraPictureSize( 10232bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin String candidate, List<Size> supported, Parameters parameters) { 10332bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin int index = candidate.indexOf('x'); 10432bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin if (index == NOT_FOUND) return false; 10532bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin int width = Integer.parseInt(candidate.substring(0, index)); 10632bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin int height = Integer.parseInt(candidate.substring(index + 1)); 10732bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin for (Size size: supported) { 10832bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin if (size.width == width && size.height == height) { 10932bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin parameters.setPictureSize(width, height); 11032bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin return true; 11132bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin } 11232bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin } 11332bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin return false; 11432bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin } 11532bfffa5822490ea0e105e9fe00b9df8db1b7b02Owen Lin 11678f160ee416ba27ba55954950473e17ba9d20052Owen Lin private void initPreference(PreferenceScreen screen) { 11778f160ee416ba27ba55954950473e17ba9d20052Owen Lin ListPreference videoDuration = 11878f160ee416ba27ba55954950473e17ba9d20052Owen Lin (ListPreference) screen.findPreference(KEY_VIDEO_DURATION); 11978f160ee416ba27ba55954950473e17ba9d20052Owen Lin ListPreference pictureSize = 12078f160ee416ba27ba55954950473e17ba9d20052Owen Lin (ListPreference) screen.findPreference(KEY_PICTURE_SIZE); 12178f160ee416ba27ba55954950473e17ba9d20052Owen Lin ListPreference whiteBalance = 12278f160ee416ba27ba55954950473e17ba9d20052Owen Lin (ListPreference) screen.findPreference(KEY_WHITE_BALANCE); 12378f160ee416ba27ba55954950473e17ba9d20052Owen Lin ListPreference colorEffect = 12478f160ee416ba27ba55954950473e17ba9d20052Owen Lin (ListPreference) screen.findPreference(KEY_COLOR_EFFECT); 12578f160ee416ba27ba55954950473e17ba9d20052Owen Lin ListPreference sceneMode = 12678f160ee416ba27ba55954950473e17ba9d20052Owen Lin (ListPreference) screen.findPreference(KEY_SCENE_MODE); 127b6ad206f53981faee04800b787569dbb60492844Owen Lin ListPreference flashMode = 128b6ad206f53981faee04800b787569dbb60492844Owen Lin (ListPreference) screen.findPreference(KEY_FLASH_MODE); 129df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin ListPreference focusMode = 130df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin (ListPreference) screen.findPreference(KEY_FOCUS_MODE); 13178f160ee416ba27ba55954950473e17ba9d20052Owen Lin 13278f160ee416ba27ba55954950473e17ba9d20052Owen Lin // Since the screen could be loaded from different resources, we need 13378f160ee416ba27ba55954950473e17ba9d20052Owen Lin // to check if the preference is available here 13478f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (videoDuration != null) { 13578f160ee416ba27ba55954950473e17ba9d20052Owen Lin // Modify video duration settings. 13678f160ee416ba27ba55954950473e17ba9d20052Owen Lin // The first entry is for MMS video duration, and we need to fill 13778f160ee416ba27ba55954950473e17ba9d20052Owen Lin // in the device-dependent value (in seconds). 13878f160ee416ba27ba55954950473e17ba9d20052Owen Lin CharSequence[] entries = videoDuration.getEntries(); 13978f160ee416ba27ba55954950473e17ba9d20052Owen Lin entries[0] = String.format( 14078f160ee416ba27ba55954950473e17ba9d20052Owen Lin entries[0].toString(), MMS_VIDEO_DURATION); 1414305c70dc849156be5d79d52772ea71cd890ca40Wu-cheng Li } 1424305c70dc849156be5d79d52772ea71cd890ca40Wu-cheng Li 14378f160ee416ba27ba55954950473e17ba9d20052Owen Lin // Filter out unsupported settings / options 14478f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (pictureSize != null) { 14578f160ee416ba27ba55954950473e17ba9d20052Owen Lin filterUnsupportedOptions(screen, pictureSize, sizeListToStringList( 14678f160ee416ba27ba55954950473e17ba9d20052Owen Lin mParameters.getSupportedPictureSizes())); 1473f3c857e3f34650c15d764810335024654b0fcc3Owen Lin } 14878f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (whiteBalance != null) { 14978f160ee416ba27ba55954950473e17ba9d20052Owen Lin filterUnsupportedOptions(screen, 15078f160ee416ba27ba55954950473e17ba9d20052Owen Lin whiteBalance, mParameters.getSupportedWhiteBalance()); 1510f56ef5704b7f1a0874528367147487c051876d9Wu-cheng Li } 15278f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (colorEffect != null) { 15378f160ee416ba27ba55954950473e17ba9d20052Owen Lin filterUnsupportedOptions(screen, 15478f160ee416ba27ba55954950473e17ba9d20052Owen Lin colorEffect, mParameters.getSupportedColorEffects()); 15578f160ee416ba27ba55954950473e17ba9d20052Owen Lin } 15678f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (sceneMode != null) { 15778f160ee416ba27ba55954950473e17ba9d20052Owen Lin filterUnsupportedOptions(screen, 15878f160ee416ba27ba55954950473e17ba9d20052Owen Lin sceneMode, mParameters.getSupportedSceneModes()); 1590f56ef5704b7f1a0874528367147487c051876d9Wu-cheng Li } 160b6ad206f53981faee04800b787569dbb60492844Owen Lin if (flashMode != null) { 161b6ad206f53981faee04800b787569dbb60492844Owen Lin filterUnsupportedOptions(screen, 162b6ad206f53981faee04800b787569dbb60492844Owen Lin flashMode, mParameters.getSupportedFlashModes()); 163b6ad206f53981faee04800b787569dbb60492844Owen Lin } 164df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin if (focusMode != null) { 165df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin filterUnsupportedOptions(screen, 166df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin focusMode, mParameters.getSupportedFocusModes()); 167df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin } 168b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 169b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 1707e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen private static boolean removePreference(PreferenceGroup group, 1717e4655b1b3fcbc543430bea680872f564af098f5Wei-Ta Chen Preference remove) { 1725945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li if (group.removePreference(remove)) return true; 1735945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li 1745945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li for (int i = 0; i < group.getPreferenceCount(); i++) { 1755945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li final Preference child = group.getPreference(i); 1765945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li if (child instanceof PreferenceGroup) { 177522e836abc90bcb2d4e7a4ac37e269154d06c715Chih-Chung Chang if (removePreference((PreferenceGroup) child, remove)) { 1785945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li return true; 1795945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li } 1805945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li } 1815945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li } 1825945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li return false; 1835945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li } 1845945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li 18578f160ee416ba27ba55954950473e17ba9d20052Owen Lin private void filterUnsupportedOptions(PreferenceScreen screen, 18678f160ee416ba27ba55954950473e17ba9d20052Owen Lin ListPreference pref, List<String> supported) { 18778f160ee416ba27ba55954950473e17ba9d20052Owen Lin 188df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin CharSequence[] allEntries = pref.getEntries(); 189df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin 190df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin // Remove the preference if the parameter is not supported or there is 191df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin // only one options for the settings. 192df3731bacfe26910a5dd0813c6aa80a6e55b85adCheng-Ru Lin if (supported == null || allEntries.length <= 1) { 19378f160ee416ba27ba55954950473e17ba9d20052Owen Lin removePreference(screen, pref); 1949dacf7b214339440c16f3d66e12d6afef1248f68Wu-cheng Li return; 1959dacf7b214339440c16f3d66e12d6afef1248f68Wu-cheng Li } 1969dacf7b214339440c16f3d66e12d6afef1248f68Wu-cheng Li 1975945773c664ada754ce5eb9239bd4c8bd95ee4b4Wu-cheng Li CharSequence[] allEntryValues = pref.getEntryValues(); 1982f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin Drawable[] allIcons = (pref instanceof IconListPreference) 1992f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin ? ((IconListPreference) pref).getIcons() 2002f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin : null; 2012ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li ArrayList<CharSequence> entries = new ArrayList<CharSequence>(); 2022ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li ArrayList<CharSequence> entryValues = new ArrayList<CharSequence>(); 2032f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin ArrayList<Drawable> icons = 2042f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin allIcons == null ? null : new ArrayList<Drawable>(); 2052ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li for (int i = 0, len = allEntryValues.length; i < len; i++) { 20678f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (supported.indexOf(allEntryValues[i].toString()) != NOT_FOUND) { 2072ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li entries.add(allEntries[i]); 2082ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li entryValues.add(allEntryValues[i]); 2092f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin if (allIcons != null) icons.add(allIcons[i]); 21087341536812081826656040ac81f8f386c6c1407Wu-cheng Li } 21187341536812081826656040ac81f8f386c6c1407Wu-cheng Li } 21287341536812081826656040ac81f8f386c6c1407Wu-cheng Li 2132ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li // Set entries and entry values to list preference. 2142f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin int size = entries.size(); 2152f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin pref.setEntries(entries.toArray(new CharSequence[size])); 2162f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin pref.setEntryValues(entryValues.toArray(new CharSequence[size])); 2172f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin if (allIcons != null) { 2182f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin ((IconListPreference) pref) 2192f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin .setIcons(icons.toArray(new Drawable[size])); 2202f3774c974a5a044a3b32ca68182a3f2180d0124Cheng-Ru Lin } 22187341536812081826656040ac81f8f386c6c1407Wu-cheng Li 2222ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li // Set the value to the first entry if it is invalid. 2232ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li String value = pref.getValue(); 22478f160ee416ba27ba55954950473e17ba9d20052Owen Lin if (pref.findIndexOfValue(value) == NOT_FOUND) { 2252ac0387bbd6792187aeaacf10e40688f4260e316Wu-cheng Li pref.setValueIndex(0); 22687341536812081826656040ac81f8f386c6c1407Wu-cheng Li } 22787341536812081826656040ac81f8f386c6c1407Wu-cheng Li } 22887341536812081826656040ac81f8f386c6c1407Wu-cheng Li 22978f160ee416ba27ba55954950473e17ba9d20052Owen Lin private static List<String> sizeListToStringList(List<Size> sizes) { 23078f160ee416ba27ba55954950473e17ba9d20052Owen Lin ArrayList<String> list = new ArrayList<String>(); 23178f160ee416ba27ba55954950473e17ba9d20052Owen Lin for (Size size : sizes) { 23278f160ee416ba27ba55954950473e17ba9d20052Owen Lin list.add(String.format("%dx%d", size.width, size.height)); 233c8cd9098d9ca174f5a0374789145faf1f15d503dRay Chen } 23478f160ee416ba27ba55954950473e17ba9d20052Owen Lin return list; 235b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 2366f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang 2376f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang public static void upgradePreferences(SharedPreferences pref) { 2386f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang int version; 2396f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang try { 2406f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang version = pref.getInt(KEY_VERSION, 0); 2416f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang } catch (Exception ex) { 2426f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang version = 0; 2436f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang } 244a8bbcd7ce25aada705561852ea9f356dc38c0f43Cheng-Ru Lin if (version == CURRENT_VERSION) return; 2456f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang 246a8bbcd7ce25aada705561852ea9f356dc38c0f43Cheng-Ru Lin SharedPreferences.Editor editor = pref.edit(); 2476f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang if (version == 0) { 2486f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang // For old version, change 1 to -1 for video duration preference. 2496f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang if (pref.getString(KEY_VIDEO_DURATION, "1").equals("1")) { 2506f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang editor.putString(KEY_VIDEO_DURATION, "-1"); 2516f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang } 2526f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang } 253a8bbcd7ce25aada705561852ea9f356dc38c0f43Cheng-Ru Lin editor.putInt(KEY_VERSION, CURRENT_VERSION); 254a8bbcd7ce25aada705561852ea9f356dc38c0f43Cheng-Ru Lin editor.commit(); 2556f2c530d91749ff2b235125c3d134c981970f13dChih-Chung Chang } 256b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project} 257