diff options
author | Chih-Chung Chang <chihchung@google.com> | 2011-10-27 19:50:21 +0800 |
---|---|---|
committer | Chih-Chung Chang <chihchung@google.com> | 2011-10-28 12:43:44 +0800 |
commit | 60dc073ff3087af41f9cf3b738eaa74bb2212f95 (patch) | |
tree | 0c9466be7359ed5678602a2d45f6cef8fab98011 /src/com/android/camera/ListPreference.java | |
parent | bc85294715ce88c8378af3b77f7a0d27d7ceeaba (diff) | |
download | packages_apps_LegacyCamera-60dc073ff3087af41f9cf3b738eaa74bb2212f95.tar.gz packages_apps_LegacyCamera-60dc073ff3087af41f9cf3b738eaa74bb2212f95.tar.bz2 packages_apps_LegacyCamera-60dc073ff3087af41f9cf3b738eaa74bb2212f95.zip |
Fix 5310099: Accept an array of default values for ListPreference.
The reason we want an array of default values is some of them may
be unsupported on a hardware platform. The first supported value
in the array will be used as the default value.
Change-Id: I9e372304ec0eaea3181cf70c352a50b82d4b8c58
Diffstat (limited to 'src/com/android/camera/ListPreference.java')
-rw-r--r-- | src/com/android/camera/ListPreference.java | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/src/com/android/camera/ListPreference.java b/src/com/android/camera/ListPreference.java index 6885a37c..32cf692d 100644 --- a/src/com/android/camera/ListPreference.java +++ b/src/com/android/camera/ListPreference.java @@ -21,6 +21,7 @@ import android.content.SharedPreferences; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.Log; +import android.util.TypedValue; import java.util.ArrayList; import java.util.List; @@ -33,7 +34,7 @@ public class ListPreference extends CameraPreference { private final String TAG = "ListPreference"; private final String mKey; private String mValue; - private final String mDefaultValue; + private final CharSequence[] mDefaultValues; private CharSequence[] mEntries; private CharSequence[] mEntryValues; @@ -47,7 +48,20 @@ public class ListPreference extends CameraPreference { mKey = Util.checkNotNull( a.getString(R.styleable.ListPreference_key)); - mDefaultValue = a.getString(R.styleable.ListPreference_defaultValue); + + // We allow the defaultValue attribute to be a string or an array of + // strings. The reason we need multiple default values is that some + // of them may be unsupported on a specific platform (for example, + // continuous auto-focus). In that case the first supported value + // in the array will be used. + int attrDefaultValue = R.styleable.ListPreference_defaultValue; + TypedValue tv = a.peekValue(attrDefaultValue); + if (tv != null && tv.type == TypedValue.TYPE_REFERENCE) { + mDefaultValues = a.getTextArray(attrDefaultValue); + } else { + mDefaultValues = new CharSequence[1]; + mDefaultValues[0] = a.getString(attrDefaultValue); + } setEntries(a.getTextArray(R.styleable.ListPreference_entries)); setEntryValues(a.getTextArray( @@ -77,12 +91,27 @@ public class ListPreference extends CameraPreference { public String getValue() { if (!mLoaded) { - mValue = getSharedPreferences().getString(mKey, mDefaultValue); + mValue = getSharedPreferences().getString(mKey, + findSupportedDefaultValue()); mLoaded = true; } return mValue; } + // Find the first value in mDefaultValues which is supported. + private String findSupportedDefaultValue() { + for (int i = 0; i < mDefaultValues.length; i++) { + for (int j = 0; j < mEntryValues.length; j++) { + // Note that mDefaultValues[i] may be null (if unspecified + // in the xml file). + if (mEntryValues[j].equals(mDefaultValues[i])) { + return mDefaultValues[i].toString(); + } + } + } + return null; + } + public void setValue(String value) { if (findIndexOfValue(value) < 0) throw new IllegalArgumentException(); mValue = value; |