summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorErin Dahlgren <edahlgren@google.com>2014-01-07 23:11:33 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-01-07 23:11:34 +0000
commit37b9f92c89d6d130bd54892c157bc6b614110daf (patch)
treeb6e91ea524f4dc23d7bf06bdd6a3f82cea27ec66 /src/com/android
parenta3ea885b11b13fc86bc750e09355313c644d2178 (diff)
parent1848494bd09c85002d8c59d4feb8a6e0dc32871f (diff)
downloadandroid_packages_apps_Camera2-37b9f92c89d6d130bd54892c157bc6b614110daf.tar.gz
android_packages_apps_Camera2-37b9f92c89d6d130bd54892c157bc6b614110daf.tar.bz2
android_packages_apps_Camera2-37b9f92c89d6d130bd54892c157bc6b614110daf.zip
Merge "Show onscreen indicators for enabled and visible options." into gb-ub-photos-denali
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/camera/ButtonManager.java288
-rw-r--r--src/com/android/camera/CameraActivity.java1
-rw-r--r--src/com/android/camera/PhotoUI.java18
-rw-r--r--src/com/android/camera/VideoUI.java14
-rw-r--r--src/com/android/camera/app/AppController.java6
-rw-r--r--src/com/android/camera/app/CameraAppUI.java14
-rw-r--r--src/com/android/camera/widget/IndicatorOverlay.java105
7 files changed, 330 insertions, 116 deletions
diff --git a/src/com/android/camera/ButtonManager.java b/src/com/android/camera/ButtonManager.java
index c5864c595..c4ccce476 100644
--- a/src/com/android/camera/ButtonManager.java
+++ b/src/com/android/camera/ButtonManager.java
@@ -16,6 +16,7 @@
package com.android.camera;
+import android.app.Activity;
import android.view.View;
import android.widget.ImageButton;
import android.util.Log;
@@ -40,29 +41,80 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
public static final int BUTTON_RETAKE = 7;
public static final int BUTTON_REVIEW = 8;
- /** For two state MultiStateToggleButtons, the off index. */
+ /** For two state MultiToggleImageButtons, the off index. */
public static final int OFF = 0;
- /** For two state MultiStateToggleButtons, the on index. */
+ /** For two state MultiToggleImageButtons, the on index. */
public static final int ON = 1;
- /** A reference to the activity for finding button views on demand. */
- private final CameraActivity mActivity;
/** A reference to the application's settings manager. */
private final SettingsManager mSettingsManager;
+ /** Bottom bar options buttons. */
+ private MultiToggleImageButton mButtonFlash; // same as torch.
+ private MultiToggleImageButton mButtonCamera;
+ private MultiToggleImageButton mButtonHdrPlus;
+ private MultiToggleImageButton mButtonRefocus;
+
+ /** Intent UI buttons. */
+ private ImageButton mButtonCancel;
+ private ImageButton mButtonDone;
+ private ImageButton mButtonRetake; // same as review.
+
+ /** A listener for button enabled and visibility
+ state changes. */
+ private ButtonStatusListener mListener;
+
/**
* Get a new global ButtonManager.
*/
public ButtonManager(CameraActivity activity) {
- mActivity = activity;
+ getButtonsReferences(activity);
mSettingsManager = activity.getSettingsManager();
mSettingsManager.addListener(this);
}
- // TODO:
- // Get references to the buttons in the constructor
- // to avoid looking up the buttons constantly.
- // The ButtonManager can know about the particular res id of a button.
+ /**
+ * ButtonStatusListener provides callbacks for when button's
+ * visibility changes and enabled status changes.
+ */
+ public interface ButtonStatusListener {
+ /**
+ * A button's visibility has changed.
+ */
+ public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId);
+
+ /**
+ * A button's enabled state has changed.
+ */
+ public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId);
+ }
+
+ /**
+ * Sets the ButtonStatusListener.
+ */
+ public void setListener(ButtonStatusListener listener) {
+ mListener = listener;
+ }
+
+ /**
+ * Gets references to all known buttons.
+ */
+ private void getButtonsReferences(Activity activity) {
+ mButtonFlash
+ = (MultiToggleImageButton) activity.findViewById(R.id.flash_toggle_button);
+ mButtonCamera
+ = (MultiToggleImageButton) activity.findViewById(R.id.camera_toggle_button);
+ mButtonHdrPlus
+ = (MultiToggleImageButton) activity.findViewById(R.id.hdr_plus_toggle_button);
+ mButtonRefocus
+ = (MultiToggleImageButton) activity.findViewById(R.id.refocus_toggle_button);
+ mButtonCancel
+ = (ImageButton) activity.findViewById(R.id.cancel_button);
+ mButtonDone
+ = (ImageButton) activity.findViewById(R.id.done_button);
+ mButtonRetake
+ = (ImageButton) activity.findViewById(R.id.retake_button);
+ }
@Override
public void onSettingChanged(SettingsManager settingsManager, int id) {
@@ -72,27 +124,27 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
switch (id) {
case SettingsManager.SETTING_FLASH_MODE: {
index = mSettingsManager.getStringValueIndex(id);
- button = getButtonOrError(BUTTON_FLASH, R.id.flash_toggle_button);
+ button = getButtonOrError(BUTTON_FLASH);
break;
}
case SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE: {
index = mSettingsManager.getStringValueIndex(id);
- button = getButtonOrError(BUTTON_TORCH, R.id.flash_toggle_button);
+ button = getButtonOrError(BUTTON_TORCH);
break;
}
case SettingsManager.SETTING_CAMERA_ID: {
index = mSettingsManager.getStringValueIndex(id);
- button = getButtonOrError(BUTTON_CAMERA, R.id.camera_toggle_button);
+ button = getButtonOrError(BUTTON_CAMERA);
break;
}
case SettingsManager.SETTING_CAMERA_HDR: {
index = mSettingsManager.getStringValueIndex(id);
- button = getButtonOrError(BUTTON_HDRPLUS, R.id.hdr_plus_toggle_button);
+ button = getButtonOrError(BUTTON_HDRPLUS);
break;
}
case SettingsManager.SETTING_CAMERA_REFOCUS: {
index = mSettingsManager.getStringValueIndex(id);
- button = getButtonOrError(BUTTON_REFOCUS, R.id.refocus_toggle_button);
+ button = getButtonOrError(BUTTON_REFOCUS);
break;
}
default: {
@@ -109,6 +161,7 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
/**
* A callback executed in the state listener of a button.
+
* Used by a module to set specific behavior when a button's
* state changes.
*/
@@ -116,116 +169,204 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
public void onStateChanged(int state);
}
- private MultiToggleImageButton getButtonOrError(int buttonId, int resId) {
- MultiToggleImageButton button
- = (MultiToggleImageButton) mActivity.findViewById(resId);
- if (button == null) {
- switch (buttonId) {
- case BUTTON_FLASH:
+ /**
+ * Returns the appropriate {@link com.android.camera.MultiToggleImageButton}
+ * based on button id. An IllegalStateException will be throw if the
+ * button could not be found in the view hierarchy.
+ */
+ private MultiToggleImageButton getButtonOrError(int buttonId) {
+ switch (buttonId) {
+ case BUTTON_FLASH:
+ if (mButtonFlash == null) {
throw new IllegalStateException("Flash button could not be found.");
- case BUTTON_TORCH:
+ }
+ return mButtonFlash;
+ case BUTTON_TORCH:
+ if (mButtonFlash == null) {
throw new IllegalStateException("Torch button could not be found.");
- case BUTTON_CAMERA:
+ }
+ return mButtonFlash;
+ case BUTTON_CAMERA:
+ if (mButtonCamera == null) {
throw new IllegalStateException("Camera button could not be found.");
- case BUTTON_HDRPLUS:
+ }
+ return mButtonCamera;
+ case BUTTON_HDRPLUS:
+ if (mButtonHdrPlus == null) {
throw new IllegalStateException("Hdr button could not be found.");
- case BUTTON_REFOCUS:
+ }
+ return mButtonHdrPlus;
+ case BUTTON_REFOCUS:
+ if (mButtonRefocus == null) {
throw new IllegalStateException("Refocus button could not be found.");
- default:
- throw new IllegalArgumentException("button not known by id=" + buttonId);
- }
+ }
+ return mButtonRefocus;
+ default:
+ throw new IllegalArgumentException("button not known by id=" + buttonId);
}
- return button;
}
- private ImageButton getImageButtonOrError(int buttonId, int resId) {
- ImageButton button = (ImageButton) mActivity.findViewById(resId);
- if (button == null) {
- switch (buttonId) {
- case BUTTON_CANCEL:
+ /**
+ * Returns the appropriate {@link android.widget.ImageButton}
+ * based on button id. An IllegalStateException will be throw if the
+ * button could not be found in the view hierarchy.
+ */
+ private ImageButton getImageButtonOrError(int buttonId) {
+ switch (buttonId) {
+ case BUTTON_CANCEL:
+ if (mButtonCancel == null) {
throw new IllegalStateException("Cancel button could not be found.");
- case BUTTON_DONE:
+ }
+ return mButtonCancel;
+ case BUTTON_DONE:
+ if (mButtonDone == null) {
throw new IllegalStateException("Done button could not be found.");
- case BUTTON_RETAKE:
+ }
+ return mButtonDone;
+ case BUTTON_RETAKE:
+ if (mButtonRetake == null) {
throw new IllegalStateException("Retake button could not be found.");
- case BUTTON_REVIEW:
+ }
+ return mButtonRetake;
+ case BUTTON_REVIEW:
+ if (mButtonRetake == null) {
throw new IllegalStateException("Review button could not be found.");
-
- default:
- throw new IllegalArgumentException("button not known by id=" + buttonId);
- }
+ }
+ return mButtonRetake;
+ default:
+ throw new IllegalArgumentException("button not known by id=" + buttonId);
}
- return button;
}
/**
* Enable a known button by id, with a state change callback and
* a resource id that points to an array of drawables.
*/
- public void enableButton(int buttonId, int resId, ButtonCallback cb, int resIdImages) {
- MultiToggleImageButton button = getButtonOrError(buttonId, resId);
+ public void enableButton(int buttonId, ButtonCallback cb, int resIdImages) {
+ MultiToggleImageButton button = getButtonOrError(buttonId);
switch (buttonId) {
case BUTTON_FLASH:
+ if (!mSettingsManager.isCameraBackFacing()) {
+ disableButton(BUTTON_FLASH);
+ return;
+ }
enableFlashButton(button, cb, resIdImages);
break;
+ case BUTTON_TORCH:
+ if (!mSettingsManager.isCameraBackFacing()) {
+ disableButton(BUTTON_TORCH);
+ return;
+ }
+ enableTorchButton(button, cb, resIdImages);
+ break;
case BUTTON_CAMERA:
enableCameraButton(button, cb, resIdImages);
break;
case BUTTON_HDRPLUS:
enableHdrPlusButton(button, cb, resIdImages);
break;
- case BUTTON_TORCH:
- enableTorchButton(button, cb, resIdImages);
- break;
case BUTTON_REFOCUS:
enableRefocusButton(button, cb, resIdImages);
break;
default:
throw new IllegalArgumentException("button not known by id=" + buttonId);
}
- button.setVisibility(View.VISIBLE);
+
+ if (!button.isEnabled()) {
+ button.setEnabled(true);
+ if (mListener != null) {
+ mListener.onButtonEnabledChanged(this, buttonId);
+ }
+ }
+
+ if (button.getVisibility() != View.VISIBLE) {
+ button.setVisibility(View.VISIBLE);
+ if (mListener != null) {
+ mListener.onButtonVisibilityChanged(this, buttonId);
+ }
+ }
}
/**
* Enable a known button with a click listener and a resource id.
* Sets the button visible.
*/
- public void enablePushButton(int buttonId, int resId, View.OnClickListener cb,
+ public void enablePushButton(int buttonId, View.OnClickListener cb,
int imageId) {
- ImageButton button = getImageButtonOrError(buttonId, resId);
+ ImageButton button = getImageButtonOrError(buttonId);
button.setOnClickListener(cb);
- button.setEnabled(true);
button.setImageResource(imageId);
+
+ if (!button.isEnabled()) {
+ button.setEnabled(true);
+ if (mListener != null) {
+ mListener.onButtonEnabledChanged(this, buttonId);
+ }
+ }
}
/**
* Enable a known button with a click listener. Sets the button visible.
*/
- public void enablePushButton(int buttonId, int resId, View.OnClickListener cb) {
- ImageButton button = getImageButtonOrError(buttonId, resId);
+ public void enablePushButton(int buttonId, View.OnClickListener cb) {
+ ImageButton button = getImageButtonOrError(buttonId);
button.setOnClickListener(cb);
- button.setEnabled(true);
+
+ if (!button.isEnabled()) {
+ button.setEnabled(true);
+ if (mListener != null) {
+ mListener.onButtonEnabledChanged(this, buttonId);
+ }
+ }
}
/**
* Sets a button in its disabled (greyed out) state.
*/
- public void disableButton(int buttonId, int resId) {
- MultiToggleImageButton button = getButtonOrError(buttonId, resId);
- disableButton(button);
- }
+ public void disableButton(int buttonId) {
+ MultiToggleImageButton button = getButtonOrError(buttonId);
+ if (button.isEnabled()) {
+ button.setEnabled(false);
+ if (mListener != null) {
+ mListener.onButtonEnabledChanged(this, buttonId);
+ }
+ }
- private void disableButton(MultiToggleImageButton button) {
- button.setEnabled(false);
- button.setVisibility(View.VISIBLE);
+ if (button.getVisibility() != View.VISIBLE) {
+ button.setVisibility(View.VISIBLE);
+ if (mListener != null) {
+ mListener.onButtonVisibilityChanged(this, buttonId);
+ }
+ }
}
/**
* Hide a button by id.
*/
- public void hideButton(int buttonId, int resId) {
- MultiToggleImageButton button = getButtonOrError(buttonId, resId);
- button.setVisibility(View.INVISIBLE);
+ public void hideButton(int buttonId) {
+ MultiToggleImageButton button = getButtonOrError(buttonId);
+ if (button.getVisibility() == View.VISIBLE) {
+ button.setVisibility(View.INVISIBLE);
+ if (mListener != null) {
+ mListener.onButtonVisibilityChanged(this, buttonId);
+ }
+ }
+ }
+
+ /**
+ * Check if a button is enabled.
+ */
+ public boolean isEnabled(int buttonId) {
+ MultiToggleImageButton button = getButtonOrError(buttonId);
+ return button.isEnabled();
+ }
+
+ /**
+ * Check if a button is visible.
+ */
+ public boolean isVisible(int buttonId) {
+ MultiToggleImageButton button = getButtonOrError(buttonId);
+ return (button.getVisibility() == View.VISIBLE);
}
/**
@@ -234,11 +375,6 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
private void enableFlashButton(MultiToggleImageButton button,
final ButtonCallback cb, int resIdImages) {
- if (!mSettingsManager.isCameraBackFacing()) {
- disableButton(button);
- return;
- }
-
if (resIdImages > 0) {
button.overrideImageIds(resIdImages);
}
@@ -254,8 +390,6 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
}
}
});
-
- button.setEnabled(true);
}
/**
@@ -264,11 +398,6 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
private void enableTorchButton(MultiToggleImageButton button,
final ButtonCallback cb, int resIdImages) {
- if (!mSettingsManager.isCameraBackFacing()) {
- disableButton(button);
- return;
- }
-
if (resIdImages > 0) {
button.overrideImageIds(resIdImages);
}
@@ -286,8 +415,6 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
}
}
});
-
- button.setEnabled(true);
}
/**
@@ -314,8 +441,6 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
}
}
});
-
- button.setEnabled(true);
}
/**
@@ -340,8 +465,6 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
}
}
});
-
- button.setEnabled(true);
}
/**
@@ -366,8 +489,5 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
}
}
});
-
- button.setEnabled(true);
}
-
} \ No newline at end of file
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index e749f6b50..ffc95459f 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1436,6 +1436,7 @@ public class CameraActivity extends Activity
return mSettingsController;
}
+ @Override
public ButtonManager getButtonManager() {
if (mButtonManager == null) {
mButtonManager = new ButtonManager(this);
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 415102d55..50ae81ede 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -317,20 +317,20 @@ public class PhotoUI implements PreviewStatusListener,
private void setupToggleButtons() {
ButtonManager buttonManager = mActivity.getButtonManager();
- buttonManager.enableButton(ButtonManager.BUTTON_CAMERA, R.id.camera_toggle_button,
+ buttonManager.enableButton(ButtonManager.BUTTON_CAMERA,
mCameraCallback, R.array.camera_id_icons);
- buttonManager.enableButton(ButtonManager.BUTTON_FLASH, R.id.flash_toggle_button,
+ buttonManager.enableButton(ButtonManager.BUTTON_FLASH,
null, R.array.camera_flashmode_icons);
if (mActivity.getCurrentModuleIndex() == ModeListView.MODE_PHOTO) {
// Simple photo mode.
- buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS, R.id.hdr_plus_toggle_button);
- buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS, R.id.refocus_toggle_button);
+ buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS);
+ buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS);
} else {
// Advanced photo mode.
- buttonManager.enableButton(ButtonManager.BUTTON_HDRPLUS, R.id.hdr_plus_toggle_button,
+ buttonManager.enableButton(ButtonManager.BUTTON_HDRPLUS,
mHdrCallback, R.array.pref_camera_hdr_plus_icons);
- buttonManager.enableButton(ButtonManager.BUTTON_REFOCUS, R.id.refocus_toggle_button,
+ buttonManager.enableButton(ButtonManager.BUTTON_REFOCUS,
mRefocusCallback, R.array.refocus_icons);
}
}
@@ -338,11 +338,11 @@ public class PhotoUI implements PreviewStatusListener,
private void setupIntentToggleButtons() {
setupToggleButtons();
ButtonManager buttonManager = mActivity.getButtonManager();
- buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL, R.id.cancel_button,
+ buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL,
mCancelCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_DONE, R.id.done_button,
+ buttonManager.enablePushButton(ButtonManager.BUTTON_DONE,
mDoneCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_RETAKE, R.id.retake_button,
+ buttonManager.enablePushButton(ButtonManager.BUTTON_RETAKE,
mRetakeCallback);
}
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index a2ae5b824..273827872 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -155,22 +155,22 @@ public class VideoUI implements PreviewStatusListener, SurfaceHolder.Callback {
private void setupToggleButtons() {
ButtonManager buttonManager = mActivity.getButtonManager();
- buttonManager.enableButton(ButtonManager.BUTTON_CAMERA, R.id.camera_toggle_button,
+ buttonManager.enableButton(ButtonManager.BUTTON_CAMERA,
mCameraCallback, R.array.camera_id_icons);
- buttonManager.enableButton(ButtonManager.BUTTON_TORCH, R.id.flash_toggle_button,
+ buttonManager.enableButton(ButtonManager.BUTTON_TORCH,
mFlashCallback, R.array.video_flashmode_icons);
- buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS, R.id.hdr_plus_toggle_button);
- buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS, R.id.refocus_toggle_button);
+ buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS);
+ buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS);
}
private void setupIntentToggleButtons() {
setupToggleButtons();
ButtonManager buttonManager = mActivity.getButtonManager();
- buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL, R.id.cancel_button,
+ buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL,
mCancelCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_DONE, R.id.done_button,
+ buttonManager.enablePushButton(ButtonManager.BUTTON_DONE,
mDoneCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_REVIEW, R.id.retake_button,
+ buttonManager.enablePushButton(ButtonManager.BUTTON_REVIEW,
mReviewCallback, R.drawable.ic_play);
}
diff --git a/src/com/android/camera/app/AppController.java b/src/com/android/camera/app/AppController.java
index 7558411e1..ab8351876 100644
--- a/src/com/android/camera/app/AppController.java
+++ b/src/com/android/camera/app/AppController.java
@@ -24,6 +24,7 @@ import android.graphics.SurfaceTexture;
import android.net.Uri;
import android.widget.FrameLayout;
+import com.android.camera.ButtonManager;
import com.android.camera.app.LocationManager;
import com.android.camera.ui.ModeListView;
import com.android.camera.SettingsController;
@@ -270,4 +271,9 @@ public interface AppController {
* @return {@code null} if not available yet.
*/
public CameraAppUI getCameraAppUI();
+
+ /**
+ * Returns the {@link com.android.camera.ButtonManager}.
+ */
+ public ButtonManager getButtonManager();
}
diff --git a/src/com/android/camera/app/CameraAppUI.java b/src/com/android/camera/app/CameraAppUI.java
index ccef400e9..7703c7ee2 100644
--- a/src/com/android/camera/app/CameraAppUI.java
+++ b/src/com/android/camera/app/CameraAppUI.java
@@ -550,11 +550,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
R.id.indicator_overlay);
mTextureViewHelper.addPreviewAreaSizeChangedListener(mIndicatorOverlay);
mController.getSettingsManager().addListener(mIndicatorOverlay);
- // Sync the settings state with the indicator state.
- // If camera specific indicators need to be set, and the camera is
- // not yet opened, we will sync the indicators again when the camera is open.
- mIndicatorOverlay.syncIndicators(mController.getSettingsManager(),
- mController.getCurrentModuleIndex());
}
/**
@@ -563,8 +558,8 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
*/
public void onChangeCamera() {
if (mIndicatorOverlay != null) {
- mIndicatorOverlay.syncIndicators(mController.getSettingsManager(),
- mController.getCurrentModuleIndex());
+ // Sync the settings state with the indicator state.
+ mIndicatorOverlay.syncIndicators(mController);
}
}
@@ -612,6 +607,11 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
mBottomBar = (BottomBar) mAppRootView.findViewById(R.id.bottom_bar);
mBottomBar.setupToggle(mIsCaptureIntent);
+
+ mIndicatorOverlay = (IndicatorOverlay) mAppRootView.findViewById(
+ R.id.indicator_overlay);
+ mIndicatorOverlay.setController(mController);
+ mController.getButtonManager().setListener(mIndicatorOverlay);
}
// TODO: Remove this when refactor is done.
diff --git a/src/com/android/camera/widget/IndicatorOverlay.java b/src/com/android/camera/widget/IndicatorOverlay.java
index 5f21b076f..ba7502205 100644
--- a/src/com/android/camera/widget/IndicatorOverlay.java
+++ b/src/com/android/camera/widget/IndicatorOverlay.java
@@ -29,6 +29,8 @@ import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
+import com.android.camera.ButtonManager;
+import com.android.camera.app.AppController;
import com.android.camera.module.ModulesInfo;
import com.android.camera.settings.SettingsManager;
import com.android.camera.ui.PreviewStatusListener;
@@ -46,7 +48,8 @@ import com.android.camera2.R;
*/
public class IndicatorOverlay extends RelativeLayout
implements PreviewStatusListener.PreviewAreaSizeChangedListener,
- SettingsManager.OnSettingChangedListener {
+ SettingsManager.OnSettingChangedListener,
+ ButtonManager.ButtonStatusListener {
private final static String TAG = "IndicatorOverlay";
private int mPreviewWidth;
@@ -59,6 +62,8 @@ public class IndicatorOverlay extends RelativeLayout
private TypedArray mFlashIndicatorVideoIcons;
private TypedArray mHdrIndicatorIcons;
+ private AppController mController;
+
public IndicatorOverlay(Context context, AttributeSet attrs) {
super(context, attrs);
mFlashIndicatorPhotoIcons
@@ -69,29 +74,111 @@ public class IndicatorOverlay extends RelativeLayout
= context.getResources().obtainTypedArray(R.array.pref_camera_hdr_plus_icons);
}
+ /**
+ * Sets a reference to the AppController so that indicators
+ * can be synced from listeners that have no knowledge of the app.
+ */
+ public void setController(AppController controller) {
+ mController = controller;
+ }
+
@Override
public void onFinishInflate() {
mFlashIndicator = (ImageView) findViewById(R.id.flash_indicator);
mHdrIndicator = (ImageView) findViewById(R.id.hdr_indicator);
}
+ @Override
+ public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId) {
+ syncIndicatorWithButton(buttonId);
+ }
+
+ @Override
+ public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId) {
+ syncIndicatorWithButton(buttonId);
+ }
+
+ /**
+ * Syncs a specific indicator's icon and visibility
+ * based on the enabled state and visibility of a button.
+ */
+ private void syncIndicatorWithButton(int buttonId) {
+ switch (buttonId) {
+ case ButtonManager.BUTTON_FLASH: {
+ if (mController != null) {
+ syncFlashIndicator(mController);
+ }
+ }
+ case ButtonManager.BUTTON_TORCH: {
+ if (mController != null) {
+ syncFlashIndicator(mController);
+ }
+ }
+ case ButtonManager.BUTTON_HDRPLUS: {
+ if (mController != null) {
+ syncHdrIndicator(mController);
+ }
+ }
+ default:
+ // Do nothing. The indicator doesn't care
+ // about button that don't correspond to indicators.
+ }
+ }
+
/**
* Sets all indicators to the correct resource and visibility
* based on the current settings.
*/
- public void syncIndicators(SettingsManager settingsManager, int modeIndex) {
+ public void syncIndicators(AppController controller) {
+ if (mController == null) {
+ mController = controller;
+ }
+ syncFlashIndicator(mController);
+ syncHdrIndicator(mController);
+ }
+
+ /**
+ * Sync the icon and visibility of the flash indicator.
+ */
+ private void syncFlashIndicator(AppController controller) {
+ ButtonManager buttonManager = controller.getButtonManager();
// Sync the flash indicator.
- if (modeIndex == ModulesInfo.MODULE_VIDEO) {
- setIndicatorState(settingsManager, SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE,
- mFlashIndicator, mFlashIndicatorVideoIcons);
+ // If flash isn't an enabled and visible option,
+ // do not show the indicator.
+ if (buttonManager.isEnabled(ButtonManager.BUTTON_FLASH)
+ && buttonManager.isVisible(ButtonManager.BUTTON_FLASH)) {
+
+ int modeIndex = controller.getCurrentModuleIndex();
+ if (modeIndex == ModulesInfo.MODULE_VIDEO) {
+ setIndicatorState(controller.getSettingsManager(),
+ SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE,
+ mFlashIndicator, mFlashIndicatorVideoIcons);
+ } else {
+ setIndicatorState(controller.getSettingsManager(),
+ SettingsManager.SETTING_FLASH_MODE,
+ mFlashIndicator, mFlashIndicatorPhotoIcons);
+ }
} else {
- setIndicatorState(settingsManager, SettingsManager.SETTING_FLASH_MODE,
- mFlashIndicator, mFlashIndicatorPhotoIcons);
+ mFlashIndicator.setVisibility(View.INVISIBLE);
}
+ }
+ /**
+ * Sync the icon and the visibility of the hdr indicator.
+ */
+ private void syncHdrIndicator(AppController controller) {
+ ButtonManager buttonManager = controller.getButtonManager();
// Sync the hdr indicator.
- setIndicatorState(settingsManager, SettingsManager.SETTING_CAMERA_HDR,
- mHdrIndicator, mHdrIndicatorIcons);
+ // If hdr isn't an enabled and visible option,
+ // do not show the indicator.
+ if (buttonManager.isEnabled(ButtonManager.BUTTON_HDRPLUS)
+ && buttonManager.isVisible(ButtonManager.BUTTON_HDRPLUS)) {
+ setIndicatorState(controller.getSettingsManager(),
+ SettingsManager.SETTING_CAMERA_HDR,
+ mHdrIndicator, mHdrIndicatorIcons);
+ } else {
+ mHdrIndicator.setVisibility(View.INVISIBLE);
+ }
}
/**