diff options
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 20 | ||||
-rw-r--r-- | src/com/android/camera/ShutterButton.java | 49 | ||||
-rwxr-xr-x | src/com/android/camera/ui/CameraControls.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/ui/OneUICameraControls.java | 2 |
5 files changed, 71 insertions, 4 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 21b191cdf..d8d08722b 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -1145,6 +1145,8 @@ public class PhotoModule return; } + mUI.doShutterAnimation(); + Location loc = getLocationAccordPictureFormat(mParameters.get(KEY_PICTURE_FORMAT)); mLongShotCaptureCount++; diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index b08c8f108..a075de464 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -649,11 +649,29 @@ public class PhotoUI implements PieListener, // called from onResume but only the first time public void initializeFirstTime() { // Initialize shutter button. - mShutterButton.setImageResource(R.drawable.btn_new_shutter); + mShutterButton.setImageResource(R.drawable.shutter_button_anim); + mShutterButton.setOnClickListener(new OnClickListener() + { + @Override + public void onClick(View v) { + if (!CameraControls.isAnimating()) + doShutterAnimation(); + if (mController.isImageCaptureIntent()) { + mCameraControls.setTitleBarVisibility(View.VISIBLE); + } + } + }); + mShutterButton.setOnShutterButtonListener(mController); mShutterButton.setVisibility(View.VISIBLE); } + public void doShutterAnimation() { + AnimationDrawable frameAnimation = (AnimationDrawable) mShutterButton.getDrawable(); + frameAnimation.stop(); + frameAnimation.start(); + } + // called from onResume every other time public void initializeSecondTime(Camera.Parameters params) { initializeZoom(params); diff --git a/src/com/android/camera/ShutterButton.java b/src/com/android/camera/ShutterButton.java index 22223510c..b35658070 100644 --- a/src/com/android/camera/ShutterButton.java +++ b/src/com/android/camera/ShutterButton.java @@ -22,12 +22,14 @@ import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; +import com.android.camera.ui.RotateImageView; + /** * 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 * pressed state changes. */ -public class ShutterButton extends ImageView { +public class ShutterButton extends RotateImageView { private class LongClickListener implements View.OnLongClickListener { public boolean onLongClick(View v) { @@ -82,6 +84,51 @@ public class ShutterButton extends ImageView { setLongClickable(enable); } + /** + * Hook into the drawable state changing to get changes to isPressed -- the + * onPressed listener doesn't always get called when the pressed state + * changes. + */ + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + final boolean pressed = isPressed(); + if (pressed != mOldPressed) { + if (!pressed) { + // When pressing the physical camera button the sequence of + // events is: + // focus pressed, optional camera pressed, focus released. + // We want to emulate this sequence of events with the shutter + // button. When clicking using a trackball button, the view + // system changes the drawable state before posting click + // notification, so the sequence of events is: + // pressed(true), optional click, pressed(false) + // When clicking using touch events, the view system changes the + // drawable state after posting click notification, so the + // sequence of events is: + // pressed(true), pressed(false), optional click + // Since we're emulating the physical camera button, we want to + // have the same order of events. So we want the optional click + // callback to be delivered before the pressed(false) callback. + // + // To do this, we delay the posting of the pressed(false) event + // slightly by pushing it on the event queue. This moves it + // after the optional click notification, so our client always + // sees events in this sequence: + // pressed(true), optional click, pressed(false) + post(new Runnable() { + @Override + public void run() { + callShutterButtonFocus(pressed); + } + }); + } else { + callShutterButtonFocus(pressed); + } + mOldPressed = pressed; + } + } + private void callShutterButtonFocus(boolean pressed) { if (mListener != null) { mListener.onShutterButtonFocus(pressed); diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java index 54355078c..4abe3809c 100755 --- a/src/com/android/camera/ui/CameraControls.java +++ b/src/com/android/camera/ui/CameraControls.java @@ -1081,7 +1081,7 @@ public class CameraControls extends RotatableLayout { View[] views = { mSceneModeSwitcher, mFilterModeSwitcher, mFrontBackSwitcher, TsMakeupManager.HAS_TS_MAKEUP ? mTsMakeupSwitcher : mHdrSwitcher,mBokehSwitcher, - mMenu, mPreview, mSwitcher, mMute, mReviewRetakeButton, + mMenu, mShutter, mPreview, mSwitcher, mMute, mReviewRetakeButton, mReviewCancelButton, mReviewDoneButton, mExitPanorama }; for (View v : views) { diff --git a/src/com/android/camera/ui/OneUICameraControls.java b/src/com/android/camera/ui/OneUICameraControls.java index 04c828604..c5daba52f 100644 --- a/src/com/android/camera/ui/OneUICameraControls.java +++ b/src/com/android/camera/ui/OneUICameraControls.java @@ -229,7 +229,7 @@ public class OneUICameraControls extends RotatableLayout { mViews = new View[]{ mSceneModeSwitcher, mFilterModeSwitcher, mFrontBackSwitcher, - mTsMakeupSwitcher, mFlashButton, mPreview, mVideoShutter, + mTsMakeupSwitcher, mFlashButton, mShutter, mPreview, mVideoShutter, mPauseButton, mCancelButton }; mBottomLargeSize = getResources().getDimensionPixelSize( |