summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera
diff options
context:
space:
mode:
authorWu-cheng Li <wuchengli@google.com>2010-11-30 15:36:17 +0800
committerWu-cheng Li <wuchengli@google.com>2010-11-30 17:31:03 +0800
commit823d57389b616091827059ca6401f675e416a53b (patch)
tree460de14785570e52f5dc9ff276cfd9c9d46013f8 /src/com/android/camera
parent36320a204da24e41041712d583fde22ed78b1155 (diff)
downloadLegacyCamera-823d57389b616091827059ca6401f675e416a53b.zip
LegacyCamera-823d57389b616091827059ca6401f675e416a53b.tar.gz
LegacyCamera-823d57389b616091827059ca6401f675e416a53b.tar.bz2
Override other camera settings when scene mode is active.
Flash mode, focus mode, white-balance cannot be changed when scene mode is not auto. bug:3156671 Change-Id: Iac019735e570903a1b9197ae6856cc612c7e67cb
Diffstat (limited to 'src/com/android/camera')
-rw-r--r--src/com/android/camera/Camera.java29
-rw-r--r--src/com/android/camera/ui/ControlPanel.java18
-rw-r--r--src/com/android/camera/ui/InLineSettingPicker.java18
-rw-r--r--src/com/android/camera/ui/IndicatorButton.java22
-rw-r--r--src/com/android/camera/ui/IndicatorWheel.java27
-rw-r--r--src/com/android/camera/ui/OtherSettingsPopup.java11
6 files changed, 111 insertions, 14 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 2155d7d..344fc47 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -1097,22 +1097,30 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
}
}
- private void overrideHudSettings(final String flashMode,
+ private void overrideCameraSettings(final String flashMode,
final String whiteBalance, final String focusMode) {
- mHeadUpDisplay.overrideSettings(
- CameraSettings.KEY_FLASH_MODE, flashMode,
- CameraSettings.KEY_WHITE_BALANCE, whiteBalance,
- CameraSettings.KEY_FOCUS_MODE, focusMode);
+ if (mHeadUpDisplay != null) {
+ mHeadUpDisplay.overrideSettings(
+ CameraSettings.KEY_FLASH_MODE, flashMode,
+ CameraSettings.KEY_WHITE_BALANCE, whiteBalance,
+ CameraSettings.KEY_FOCUS_MODE, focusMode);
+ }
+ if (mControlPanel != null) {
+ mControlPanel.overrideSettings(
+ CameraSettings.KEY_FLASH_MODE, flashMode,
+ CameraSettings.KEY_WHITE_BALANCE, whiteBalance,
+ CameraSettings.KEY_FOCUS_MODE, focusMode);
+ }
}
- private void updateSceneModeInHud() {
+ private void updateSceneModeUI() {
// If scene mode is set, we cannot set flash mode, white balance, and
// focus mode, instead, we read it from driver
if (!Parameters.SCENE_MODE_AUTO.equals(mSceneMode)) {
- overrideHudSettings(mParameters.getFlashMode(),
+ overrideCameraSettings(mParameters.getFlashMode(),
mParameters.getWhiteBalance(), mParameters.getFocusMode());
} else {
- overrideHudSettings(null, null, null);
+ overrideCameraSettings(null, null, null);
}
}
@@ -1156,7 +1164,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
}
});
}
- updateSceneModeInHud();
+ updateSceneModeUI();
}
private void attachHeadUpDisplay() {
@@ -1962,8 +1970,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
Log.w(TAG, "invalid exposure: " + exposure);
}
- if (mHeadUpDisplay != null) updateSceneModeInHud();
- // TODO: update icons on control panel.
+ updateSceneModeUI();
if (Parameters.SCENE_MODE_AUTO.equals(mSceneMode)) {
// Set flash mode.
diff --git a/src/com/android/camera/ui/ControlPanel.java b/src/com/android/camera/ui/ControlPanel.java
index 575fdef..01f79c9 100644
--- a/src/com/android/camera/ui/ControlPanel.java
+++ b/src/com/android/camera/ui/ControlPanel.java
@@ -211,4 +211,22 @@ public class ControlPanel extends RelativeLayout
return null;
}
}
+
+ // Scene mode may override other camera settings (ex: flash mode).
+ public void overrideSettings(final String ... keyvalues) {
+ if (keyvalues.length % 2 != 0) {
+ throw new IllegalArgumentException();
+ }
+
+ if (mOtherSettingsPopup == null) {
+ initializeOtherSettingPopup();
+ }
+
+ for (int i = 0; i < keyvalues.length; i += 2) {
+ String key = keyvalues[i];
+ String value = keyvalues[i + 1];
+ mIndicatorWheel.overrideSettings(key, value);
+ mOtherSettingsPopup.overrideSettings(key, value);
+ }
+ }
}
diff --git a/src/com/android/camera/ui/InLineSettingPicker.java b/src/com/android/camera/ui/InLineSettingPicker.java
index e0e4f21..6560630 100644
--- a/src/com/android/camera/ui/InLineSettingPicker.java
+++ b/src/com/android/camera/ui/InLineSettingPicker.java
@@ -48,6 +48,8 @@ public class InLineSettingPicker extends LinearLayout {
private int mIndex;
private String mKey;
private Listener mListener;
+ // Scene mode can override the original preference value.
+ private String mOverrideValue;
static public interface Listener {
public void onSettingChanged();
@@ -77,6 +79,8 @@ public class InLineSettingPicker extends LinearLayout {
OnTouchListener nextTouchListener = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
+ if (mOverrideValue != null) return true;
+
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (!mNext && changeIndex(mIndex - 1)) {
mNext = true;
@@ -92,6 +96,8 @@ public class InLineSettingPicker extends LinearLayout {
OnTouchListener previousTouchListener = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
+ if (mOverrideValue != null) return true;
+
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (!mPrevious && changeIndex(mIndex + 1)) {
mPrevious = true;
@@ -140,10 +146,20 @@ public class InLineSettingPicker extends LinearLayout {
}
private void updateView() {
- mEntry.setText(mPreference.getEntry());
+ if (mOverrideValue == null) {
+ mEntry.setText(mPreference.getEntry());
+ } else {
+ int index = mPreference.findIndexOfValue(mOverrideValue);
+ mEntry.setText(mPreference.getEntries()[index]);
+ }
}
public void setSettingChangedListener(Listener listener) {
mListener = listener;
}
+
+ public void overrideSettings(String value) {
+ mOverrideValue = value;
+ updateView();
+ }
}
diff --git a/src/com/android/camera/ui/IndicatorButton.java b/src/com/android/camera/ui/IndicatorButton.java
index ab65a3e..d295146 100644
--- a/src/com/android/camera/ui/IndicatorButton.java
+++ b/src/com/android/camera/ui/IndicatorButton.java
@@ -23,6 +23,8 @@ import android.widget.Button;
public class IndicatorButton extends Button {
private IconListPreference mPreference;
+ // Scene mode can override the original preference value.
+ private String mOverrideValue;
public IndicatorButton(Context context, IconListPreference pref) {
super(context);
@@ -35,11 +37,29 @@ public class IndicatorButton extends Button {
int[] iconIds = mPreference.getLargeIconIds();
if (iconIds != null) {
// Each entry has a corresponding icon.
- int index = mPreference.findIndexOfValue(mPreference.getValue());
+ int index;
+ if (mOverrideValue == null) {
+ index = mPreference.findIndexOfValue(mPreference.getValue());
+ } else {
+ index = mPreference.findIndexOfValue(mOverrideValue);
+ }
setBackgroundResource(iconIds[index]);
} else {
// The preference only has a single icon to represent it.
setBackgroundResource(mPreference.getSingleIcon());
}
}
+
+ public String getKey() {
+ return mPreference.getKey();
+ }
+
+ public boolean isOverridden() {
+ return mOverrideValue != null;
+ }
+
+ public void overrideSettings(String value) {
+ mOverrideValue = value;
+ reloadPreference();
+ }
}
diff --git a/src/com/android/camera/ui/IndicatorWheel.java b/src/com/android/camera/ui/IndicatorWheel.java
index 1101db5..076901a 100644
--- a/src/com/android/camera/ui/IndicatorWheel.java
+++ b/src/com/android/camera/ui/IndicatorWheel.java
@@ -101,7 +101,18 @@ public class IndicatorWheel extends ViewGroup {
if (delta > mSectorInitialRadians[0]) {
for (int i = 1; i < count; i++) {
if (delta < mSectorInitialRadians[i]) {
- mListener.onIndicatorClicked(i - 1);
+ // Invoke the listener if it is "other setting" or if
+ // scene mode does not override the setting.
+ View child = getChildAt(i);
+ if (child instanceof IndicatorButton) {
+ IndicatorButton v = (IndicatorButton) child;
+ if (!v.isOverridden()) {
+ mListener.onIndicatorClicked(i - 1);
+ }
+ } else {
+ // "Other settings" indicator button
+ mListener.onIndicatorClicked(i - 1);
+ }
return true;
}
}
@@ -242,4 +253,18 @@ public class IndicatorWheel extends ViewGroup {
IndicatorButton indicator = (IndicatorButton) getChildAt(index + 1);
indicator.reloadPreference();
}
+
+ // Scene mode may override other camera settings (ex: flash mode).
+ public void overrideSettings(String key, String value) {
+ int count = getChildCount();
+ for (int j = 1; j < count; j++) {
+ View v = getChildAt(j);
+ if (v instanceof IndicatorButton) { // skip the button of "other settings"
+ IndicatorButton indicator = (IndicatorButton) v;
+ if (key.equals(indicator.getKey())) {
+ indicator.overrideSettings(value);
+ }
+ }
+ }
+ }
}
diff --git a/src/com/android/camera/ui/OtherSettingsPopup.java b/src/com/android/camera/ui/OtherSettingsPopup.java
index e5dc7ec..3d37373 100644
--- a/src/com/android/camera/ui/OtherSettingsPopup.java
+++ b/src/com/android/camera/ui/OtherSettingsPopup.java
@@ -66,4 +66,15 @@ public class OtherSettingsPopup extends AbstractSettingPopup
mListener.onOtherSettingChanged();
}
}
+
+ // Scene mode can override other camera settings (ex: flash mode).
+ public void overrideSettings(String key, String value) {
+ int count = mContentPanel.getChildCount();
+ for (int j = 1; j < count; j++) {
+ InLineSettingPicker v = (InLineSettingPicker) mContentPanel.getChildAt(j);
+ if (key.equals(v.getKey())) {
+ v.overrideSettings(value);
+ }
+ }
+ }
}