summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout-land/camera_controls.xml1
-rw-r--r--res/layout-port/camera_controls.xml3
-rw-r--r--src/com/android/camera/PreviewGestures.java37
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());