diff options
author | Erin Dahlgren <edahlgren@google.com> | 2014-02-25 19:16:12 -0800 |
---|---|---|
committer | Erin Dahlgren <edahlgren@google.com> | 2014-02-26 11:29:06 -0800 |
commit | 5d18769f53db81d401488811250570290a73626b (patch) | |
tree | 8c48805c014406cd6364f1834ffeeeebb3169676 /src | |
parent | 09a34b12c8049a6a0f4d09635af6742e3a40e70e (diff) | |
download | android_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.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 2 | ||||
-rwxr-xr-x | src/com/android/camera/ShutterButton.java | 36 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/app/CameraAppUI.java | 28 | ||||
-rw-r--r-- | src/com/android/camera/module/ModuleController.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/widget/ModeOptionsOverlay.java | 13 |
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 |