summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/ListPreference.java
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2011-10-27 19:50:21 +0800
committerChih-Chung Chang <chihchung@google.com>2011-10-28 12:43:44 +0800
commit60dc073ff3087af41f9cf3b738eaa74bb2212f95 (patch)
tree0c9466be7359ed5678602a2d45f6cef8fab98011 /src/com/android/camera/ListPreference.java
parentbc85294715ce88c8378af3b77f7a0d27d7ceeaba (diff)
downloadpackages_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.java35
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;