diff options
author | Wu-cheng Li <wuchengli@google.com> | 2010-11-30 15:36:17 +0800 |
---|---|---|
committer | Wu-cheng Li <wuchengli@google.com> | 2010-11-30 17:31:03 +0800 |
commit | 823d57389b616091827059ca6401f675e416a53b (patch) | |
tree | 460de14785570e52f5dc9ff276cfd9c9d46013f8 /src/com/android/camera | |
parent | 36320a204da24e41041712d583fde22ed78b1155 (diff) | |
download | LegacyCamera-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.java | 29 | ||||
-rw-r--r-- | src/com/android/camera/ui/ControlPanel.java | 18 | ||||
-rw-r--r-- | src/com/android/camera/ui/InLineSettingPicker.java | 18 | ||||
-rw-r--r-- | src/com/android/camera/ui/IndicatorButton.java | 22 | ||||
-rw-r--r-- | src/com/android/camera/ui/IndicatorWheel.java | 27 | ||||
-rw-r--r-- | src/com/android/camera/ui/OtherSettingsPopup.java | 11 |
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); + } + } + } } |