summaryrefslogtreecommitdiffstats
path: root/src
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
parentbc85294715ce88c8378af3b77f7a0d27d7ceeaba (diff)
downloadLegacyCamera-60dc073ff3087af41f9cf3b738eaa74bb2212f95.zip
LegacyCamera-60dc073ff3087af41f9cf3b738eaa74bb2212f95.tar.gz
LegacyCamera-60dc073ff3087af41f9cf3b738eaa74bb2212f95.tar.bz2
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')
-rw-r--r--src/com/android/camera/Camera.java5
-rw-r--r--src/com/android/camera/FocusManager.java22
-rw-r--r--src/com/android/camera/ListPreference.java35
3 files changed, 52 insertions, 10 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 2ead501..151ef7a 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -1026,8 +1026,9 @@ public class Camera extends ActivityBase implements FocusManager.Listener,
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getPreferredCameraId();
- mFocusManager = new FocusManager(mPreferences,
- getString(R.string.pref_camera_focusmode_default));
+ String[] defaultFocusModes = getResources().getStringArray(
+ R.array.pref_camera_focusmode_default_array);
+ mFocusManager = new FocusManager(mPreferences, defaultFocusModes);
/*
* To reduce startup time, we start the camera open and preview threads.
diff --git a/src/com/android/camera/FocusManager.java b/src/com/android/camera/FocusManager.java
index 86b92c2..28c81e9 100644
--- a/src/com/android/camera/FocusManager.java
+++ b/src/com/android/camera/FocusManager.java
@@ -68,7 +68,7 @@ public class FocusManager {
private List<Area> mFocusArea; // focus area in driver format
private List<Area> mMeteringArea; // metering area in driver format
private String mFocusMode;
- private String mDefaultFocusMode;
+ private String[] mDefaultFocusModes;
private String mOverrideFocusMode;
private Parameters mParameters;
private ComboPreferences mPreferences;
@@ -97,9 +97,9 @@ public class FocusManager {
}
}
- public FocusManager(ComboPreferences preferences, String defaultFocusMode) {
+ public FocusManager(ComboPreferences preferences, String[] defaultFocusModes) {
mPreferences = preferences;
- mDefaultFocusMode = defaultFocusMode;
+ mDefaultFocusModes = defaultFocusModes;
mHandler = new MainHandler();
mMatrix = new Matrix();
}
@@ -378,6 +378,7 @@ public class FocusManager {
// This can only be called after mParameters is initialized.
public String getFocusMode() {
if (mOverrideFocusMode != null) return mOverrideFocusMode;
+ List<String> supportedFocusModes = mParameters.getSupportedFocusModes();
if (mInLongPress) {
// Users long-press the shutter button in CAF. Change it to auto
@@ -389,9 +390,20 @@ public class FocusManager {
} else {
// The default is continuous autofocus.
mFocusMode = mPreferences.getString(
- CameraSettings.KEY_FOCUS_MODE, mDefaultFocusMode);
+ CameraSettings.KEY_FOCUS_MODE, null);
+
+ // Try to find a supported focus mode from the default list.
+ if (mFocusMode == null) {
+ for (int i = 0; i < mDefaultFocusModes.length; i++) {
+ String mode = mDefaultFocusModes[i];
+ if (isSupported(mode, supportedFocusModes)) {
+ mFocusMode = mode;
+ break;
+ }
+ }
+ }
}
- if (!isSupported(mFocusMode, mParameters.getSupportedFocusModes())) {
+ if (!isSupported(mFocusMode, supportedFocusModes)) {
// For some reasons, the driver does not support the current
// focus mode. Fall back to auto.
if (isSupported(Parameters.FOCUS_MODE_AUTO,
diff --git a/src/com/android/camera/ListPreference.java b/src/com/android/camera/ListPreference.java
index 6885a37..32cf692 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;