summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorErin Dahlgren <edahlgren@google.com>2014-02-25 19:16:12 -0800
committerErin Dahlgren <edahlgren@google.com>2014-02-26 11:29:06 -0800
commit5d18769f53db81d401488811250570290a73626b (patch)
tree8c48805c014406cd6364f1834ffeeeebb3169676 /src
parent09a34b12c8049a6a0f4d09635af6742e3a40e70e (diff)
downloadandroid_packages_apps_Camera2-5d18769f53db81d401488811250570290a73626b.tar.gz
android_packages_apps_Camera2-5d18769f53db81d401488811250570290a73626b.tar.bz2
android_packages_apps_Camera2-5d18769f53db81d401488811250570290a73626b.zip
Generalize shutter button listeners and add one for mode options.
Bug: 13099000 Change-Id: Ib0726c70a9e4aa06197550f29360bacb2dda4783
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/CameraActivity.java3
-rw-r--r--src/com/android/camera/PhotoModule.java2
-rwxr-xr-xsrc/com/android/camera/ShutterButton.java36
-rw-r--r--src/com/android/camera/VideoModule.java4
-rw-r--r--src/com/android/camera/app/CameraAppUI.java28
-rw-r--r--src/com/android/camera/module/ModuleController.java3
-rw-r--r--src/com/android/camera/widget/ModeOptionsOverlay.java13
7 files changed, 62 insertions, 27 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 7c955722d..9ccbc30f8 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1597,9 +1597,9 @@ public class CameraActivity extends Activity
}
setModuleFromModeIndex(modeIndex);
- mCameraAppUI.clearModuleUI();
mCameraAppUI.resetBottomControls(mCurrentModule, modeIndex);
+ mCameraAppUI.addShutterListener(mCurrentModule);
openModule(mCurrentModule);
mCurrentModule.onOrientationChanged(mLastRawOrientation);
// Store the module index so we can use it the next time the Camera
@@ -1749,6 +1749,7 @@ public class CameraActivity extends Activity
private void closeModule(CameraModule module) {
module.pause();
+ mCameraAppUI.clearModuleUI();
}
private void performDeletion() {
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 91fd10659..42fa04fcb 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -88,7 +88,6 @@ public class PhotoModule
ModuleController,
MemoryListener,
FocusOverlayManager.Listener,
- ShutterButton.OnShutterButtonListener,
SensorEventListener,
SettingsManager.OnSettingChangedListener {
@@ -335,7 +334,6 @@ public class PhotoModule
mUI = new PhotoUI(mActivity, this, mActivity.getModuleLayoutRoot());
mActivity.setPreviewStatusListener(mUI);
- mActivity.getCameraAppUI().setBottomBarShutterListener(this);
SettingsManager settingsManager = mActivity.getSettingsManager();
mCameraId = Integer.parseInt(settingsManager.get(SettingsManager.SETTING_CAMERA_ID));
diff --git a/src/com/android/camera/ShutterButton.java b/src/com/android/camera/ShutterButton.java
index be4a240cf..2a0296eb7 100755
--- a/src/com/android/camera/ShutterButton.java
+++ b/src/com/android/camera/ShutterButton.java
@@ -22,6 +22,9 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
+import java.util.List;
+import java.util.ArrayList;
+
/**
* A button designed to be used for the on-screen shutter button.
* It's currently an {@code ImageView} that can call a delegate when the
@@ -46,15 +49,30 @@ public class ShutterButton extends ImageView {
void onShutterButtonClick();
}
- private OnShutterButtonListener mListener;
+ private List<OnShutterButtonListener> mListeners
+ = new ArrayList<OnShutterButtonListener>();
private boolean mOldPressed;
public ShutterButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
- public void setOnShutterButtonListener(OnShutterButtonListener listener) {
- mListener = listener;
+ /**
+ * Add an {@link OnShutterButtonListener} to a set of listeners.
+ */
+ public void addOnShutterButtonListener(OnShutterButtonListener listener) {
+ if (!mListeners.contains(listener)) {
+ mListeners.add(listener);
+ }
+ }
+
+ /**
+ * Remove an {@link OnShutterButtonListener} from a set of listeners.
+ */
+ public void removeOnShutterButtonListener(OnShutterButtonListener listener) {
+ if (mListeners.contains(listener)) {
+ mListeners.remove(listener);
+ }
}
@Override
@@ -116,16 +134,18 @@ public class ShutterButton extends ImageView {
}
private void callShutterButtonFocus(boolean pressed) {
- if (mListener != null) {
- mListener.onShutterButtonFocus(pressed);
+ for (OnShutterButtonListener listener : mListeners) {
+ listener.onShutterButtonFocus(pressed);
}
}
@Override
- public boolean performClick() {
+ public boolean performClick() {
boolean result = super.performClick();
- if (mListener != null && getVisibility() == View.VISIBLE) {
- mListener.onShutterButtonClick();
+ if (getVisibility() == View.VISIBLE) {
+ for (OnShutterButtonListener listener : mListeners) {
+ listener.onShutterButtonClick();
+ }
}
return result;
}
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index fd07db29a..7d7a654f1 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -84,7 +84,6 @@ public class VideoModule extends CameraModule
implements ModuleController,
VideoController,
MemoryListener,
- ShutterButton.OnShutterButtonListener,
MediaRecorder.OnErrorListener,
MediaRecorder.OnInfoListener, FocusOverlayManager.Listener {
@@ -324,7 +323,6 @@ public class VideoModule extends CameraModule
mAppController = mActivity;
mUI = new VideoUI(mActivity, this, mActivity.getModuleLayoutRoot());
mActivity.setPreviewStatusListener(mUI);
- mActivity.getCameraAppUI().setBottomBarShutterListener(this);
SettingsManager settingsManager = mActivity.getSettingsManager();
mCameraId = Integer.parseInt(settingsManager.get(SettingsManager.SETTING_CAMERA_ID));
@@ -1194,6 +1192,8 @@ public class VideoModule extends CameraModule
mUI.setSwipingEnabled(false);
mUI.showFocusUI(false);
+ // A special case of mode options closing: during capture it should
+ // not be possible to change mode state.
mAppController.getCameraAppUI().hideModeOptions();
mAppController.getCameraAppUI().animateBottomBarToCircle(R.drawable.ic_stop);
diff --git a/src/com/android/camera/app/CameraAppUI.java b/src/com/android/camera/app/CameraAppUI.java
index 860a1d307..8de09ca9e 100644
--- a/src/com/android/camera/app/CameraAppUI.java
+++ b/src/com/android/camera/app/CameraAppUI.java
@@ -419,7 +419,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
private final FilmstripLayout mFilmstripLayout;
private TextureView mTextureView;
private FrameLayout mModuleUI;
- private View mShutterButton;
+ private ShutterButton mShutterButton;
private BottomBar mBottomBar;
private ModeOptionsOverlay mModeOptionsOverlay;
private boolean mShouldShowShimmy = false;
@@ -1003,6 +1003,10 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
resetBottomControls(mController.getCurrentModuleController(),
mController.getCurrentModuleIndex());
+ mShutterButton = (ShutterButton) mCameraRootView.findViewById(R.id.shutter_button);
+ addShutterListener(mController.getCurrentModuleController());
+ addShutterListener(mModeOptionsOverlay);
+
mGridLines = (GridLines) mCameraRootView.findViewById(R.id.grid_lines);
mTextureViewHelper.addPreviewAreaSizeChangedListener(mGridLines);
@@ -1029,7 +1033,6 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
mModeOptionsToggle = mCameraRootView.findViewById(R.id.mode_options_toggle);
mBottomBar.addOnLayoutChangeListener(mBottomBarLayoutChangeListener);
mFocusOverlay = mCameraRootView.findViewById(R.id.focus_overlay);
- mShutterButton = mCameraRootView.findViewById(R.id.shutter_button);
}
/**
@@ -1050,6 +1053,7 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
if (mModuleUI != null) {
mModuleUI.removeAllViews();
}
+ removeShutterListener(mController.getCurrentModuleController());
mTextureViewHelper.addPreviewAreaSizeChangedListener(null);
mPreviewStatusListener = null;
@@ -1394,17 +1398,17 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
}
/**
- * If the bottom bar is visible (hence has been drawn),
- * this sets a {@link #ShutterButton.OnShutterButtonListener}
- * on the global shutter button,
+ * Add a {@link #ShutterButton.OnShutterButtonListener} to the shutter button.
*/
- public void setBottomBarShutterListener(
- ShutterButton.OnShutterButtonListener listener) {
- ShutterButton shutterButton
- = (ShutterButton) mCameraRootView.findViewById(R.id.shutter_button);
- if (shutterButton != null) {
- shutterButton.setOnShutterButtonListener(listener);
- }
+ public void addShutterListener(ShutterButton.OnShutterButtonListener listener) {
+ mShutterButton.addOnShutterButtonListener(listener);
+ }
+
+ /**
+ * Remove a {@link #ShutterButton.OnShutterButtonListener} from the shutter button.
+ */
+ public void removeShutterListener(ShutterButton.OnShutterButtonListener listener) {
+ mShutterButton.removeOnShutterButtonListener(listener);
}
/**
diff --git a/src/com/android/camera/module/ModuleController.java b/src/com/android/camera/module/ModuleController.java
index 1f0065021..a61c590e3 100644
--- a/src/com/android/camera/module/ModuleController.java
+++ b/src/com/android/camera/module/ModuleController.java
@@ -17,6 +17,7 @@
package com.android.camera.module;
import com.android.camera.CameraActivity;
+import com.android.camera.ShutterButton;
import com.android.camera.app.CameraAppUI.BottomBarUISpec;
import com.android.camera.app.CameraManager;
import com.android.camera.hardware.HardwareSpec;
@@ -24,7 +25,7 @@ import com.android.camera.hardware.HardwareSpec;
/**
* The controller at app level.
*/
-public interface ModuleController {
+public interface ModuleController extends ShutterButton.OnShutterButtonListener {
/** Preview is fully visible. */
public static final int VISIBILITY_VISIBLE = 0;
/** Preview is covered by e.g. the transparent mode drawer. */
diff --git a/src/com/android/camera/widget/ModeOptionsOverlay.java b/src/com/android/camera/widget/ModeOptionsOverlay.java
index 54dd82e00..b7bb681d3 100644
--- a/src/com/android/camera/widget/ModeOptionsOverlay.java
+++ b/src/com/android/camera/widget/ModeOptionsOverlay.java
@@ -30,6 +30,7 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import com.android.camera.ShutterButton;
import com.android.camera.ui.PreviewOverlay;
import com.android.camera.ui.PreviewStatusListener;
import com.android.camera.ui.TopRightWeightedLayout;
@@ -43,7 +44,8 @@ import com.android.camera2.R;
public class ModeOptionsOverlay extends FrameLayout
implements PreviewStatusListener.PreviewAreaSizeChangedListener,
PreviewOverlay.OnPreviewTouchedListener,
- IndicatorIconController.OnIndicatorVisibilityChangedListener {
+ IndicatorIconController.OnIndicatorVisibilityChangedListener,
+ ShutterButton.OnShutterButtonListener {
private final static String TAG = "ModeOptionsOverlay";
@@ -103,6 +105,15 @@ public class ModeOptionsOverlay extends FrameLayout
showCorrectToggleView(mThreeDots, mIndicators);
}
+ @Override
+ public void onShutterButtonClick() {
+ closeModeOptions();
+ }
+
+ @Override
+ public void onShutterButtonFocus(boolean pressed) {
+ }
+
/**
* Schedule (or re-schedule) the options menu to be closed after a number
* of milliseconds. If the options menu is already closed, nothing is