am 781f55b2: Make the responsive region larger for the Picture/Video mode switch.

Merge commit '781f55b23ec3c3f97189efaba9d214183109f769'

* commit '781f55b23ec3c3f97189efaba9d214183109f769':
  Make the responsive region larger for the Picture/Video mode switch.
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 727b7d3..ff0471c 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -747,6 +747,7 @@
             inflater.inflate(R.layout.camera_control, rootView);
             mSwitcher = ((Switcher) findViewById(R.id.camera_switch));
             mSwitcher.setOnSwitchListener(this);
+            mSwitcher.addTouchView(findViewById(R.id.camera_switch_set));
         }
 
         // Make sure preview is started.
diff --git a/src/com/android/camera/Switcher.java b/src/com/android/camera/Switcher.java
index 06e0af5..3c7fc44 100644
--- a/src/com/android/camera/Switcher.java
+++ b/src/com/android/camera/Switcher.java
@@ -22,10 +22,11 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.MotionEvent;
+import android.view.View;
 import android.view.animation.AnimationUtils;
 import android.widget.ImageView;
 
-public class Switcher extends ImageView {
+public class Switcher extends ImageView implements View.OnTouchListener {
     private static final String TAG = "Switcher";
 
     public interface OnSwitchListener {
@@ -46,6 +47,13 @@
     }
 
     public void setSwitch(boolean onOff) {
+        if (mSwitch == onOff) return;
+        mSwitch = onOff;
+        invalidate();
+    }
+
+    // Try to change the switch position. (The client can veto it.)
+    private void tryToSetSwitch(boolean onOff) {
         try {
             if (mSwitch == onOff) return;
 
@@ -85,12 +93,12 @@
 
             case MotionEvent.ACTION_UP:
                 trackTouchEvent(event);
-                setSwitch(mPosition >= available / 2);
+                tryToSetSwitch(mPosition >= available / 2);
                 setPressed(false);
                 break;
 
             case MotionEvent.ACTION_CANCEL:
-                setSwitch(mSwitch);
+                tryToSetSwitch(mSwitch);
                 setPressed(false);
                 break;
         }
@@ -160,4 +168,15 @@
         canvas.restoreToCount(saveCount);
     }
 
+    // Consume the touch events for the specified view.
+    public void addTouchView(View v) {
+        v.setOnTouchListener(this);
+    }
+
+    // This implements View.OnTouchListener so we intercept the touch events
+    // and pass them to ourselves.
+    public boolean onTouch(View v, MotionEvent event) {
+        onTouchEvent(event);
+        return true;
+    }
 }
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 0d10b09..ba6296d 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -259,6 +259,7 @@
             mThumbController.loadData(ImageManager.getLastVideoThumbPath());
             mSwitcher = ((Switcher) findViewById(R.id.camera_switch));
             mSwitcher.setOnSwitchListener(this);
+            mSwitcher.addTouchView(findViewById(R.id.camera_switch_set));
         } else {
             View controlBar = inflater.inflate(
                     R.layout.attach_camera_control, rootView);