diff options
-rw-r--r-- | res/layout-land/camera_controls.xml | 1 | ||||
-rw-r--r-- | res/layout-port/camera_controls.xml | 3 | ||||
-rw-r--r-- | src/com/android/camera/PreviewGestures.java | 37 |
3 files changed, 35 insertions, 6 deletions
diff --git a/res/layout-land/camera_controls.xml b/res/layout-land/camera_controls.xml index 59a83e008..683f0e50b 100644 --- a/res/layout-land/camera_controls.xml +++ b/res/layout-land/camera_controls.xml @@ -23,7 +23,6 @@ android:id="@+id/blocker" android:layout_height="match_parent" android:layout_width="@dimen/switcher_size" - android:clickable="true" android:layout_gravity="right" /> <include layout="@layout/menu_indicators" diff --git a/res/layout-port/camera_controls.xml b/res/layout-port/camera_controls.xml index e3fdce88a..76e23be98 100644 --- a/res/layout-port/camera_controls.xml +++ b/res/layout-port/camera_controls.xml @@ -23,8 +23,7 @@ android:id="@+id/blocker" android:layout_width="match_parent" android:layout_height="@dimen/switcher_size" - android:layout_gravity="bottom" - android:clickable="true" /> + android:layout_gravity="bottom" /> <include layout="@layout/menu_indicators" android:layout_width="80dip" 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<View> mReceivers; + private List<View> 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<View>(); + } + 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()); |