From 4ff414daa2dd75446aaf0957dc433d74c03f3c1a Mon Sep 17 00:00:00 2001 From: Doris Liu Date: Tue, 16 Apr 2013 09:50:56 -0700 Subject: Allow swiping to filmstrip from blocker bar Bug: 8607910 Change-Id: I69bfcf8d95d6071be7d65fbf433916740cbb655c --- src/com/android/camera/PreviewGestures.java | 37 ++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src/com/android/camera') diff --git a/src/com/android/camera/PreviewGestures.java b/src/com/android/camera/PreviewGestures.java index 351da0afd..b968a0244 100644 --- a/src/com/android/camera/PreviewGestures.java +++ b/src/com/android/camera/PreviewGestures.java @@ -59,6 +59,7 @@ public class PreviewGestures private MotionEvent mCurrent; private ScaleGestureDetector mScale; private List mReceivers; + private List mUnclickableAreas; private int mMode; private int mSlop; private int mTapTimeout; @@ -127,12 +128,41 @@ public class PreviewGestures mReceivers.add(v); } + public void addUnclickableArea(View v) { + if (mUnclickableAreas == null) { + mUnclickableAreas = new ArrayList(); + } + mUnclickableAreas.add(v); + } + public void clearTouchReceivers() { if (mReceivers != null) { mReceivers.clear(); } } + public void clearUnclickableAreas() { + if (mUnclickableAreas != null) { + mUnclickableAreas.clear(); + } + } + + private boolean checkClickable(MotionEvent m) { + if (mUnclickableAreas != null) { + for (View v : mUnclickableAreas) { + if (isInside(m, v)) { + return false; + } + } + } + return true; + } + + public void reset() { + clearTouchReceivers(); + clearUnclickableAreas(); + } + public boolean dispatchTouch(MotionEvent m) { if (!mEnabled) { return mActivity.superDispatchTouchEvent(m); @@ -149,7 +179,7 @@ public class PreviewGestures mMode = MODE_PIE; return sendToPie(m); } - if (mPie != null && !mZoomOnly) { + if (mPie != null && !mZoomOnly && checkClickable(m)) { mHandler.sendEmptyMessageDelayed(MSG_PIE, TIMEOUT_PIE); } if (mZoom != null) { @@ -216,9 +246,10 @@ public class PreviewGestures } if (MotionEvent.ACTION_UP == m.getActionMasked()) { cancelPie(); - cancelActivityTouchHandling(m); // must have been tap - if (m.getEventTime() - mDown.getEventTime() < mTapTimeout) { + if (m.getEventTime() - mDown.getEventTime() < mTapTimeout + && checkClickable(m)) { + cancelActivityTouchHandling(m); mTapListener.onSingleTapUp(null, (int) mDown.getX() - mOverlay.getWindowPositionX(), (int) mDown.getY() - mOverlay.getWindowPositionY()); -- cgit v1.2.3