am 9af0b4f7: Add new listener to GestureOverlayView. This listener fires whenever the overlay thinks the user is starting a new gesture. This allows Home to snap the workspace back to its original position during a gesture operation.

Merge commit '9af0b4f7be14f2b3ed0ecc843c57ea47ec288e55'

* commit '9af0b4f7be14f2b3ed0ecc843c57ea47ec288e55':
  Add new listener to GestureOverlayView. This listener fires whenever the overlay thinks the user is starting a new gesture. This allows Home to snap the workspace back to its original position during a gesture operation.
diff --git a/api/current.xml b/api/current.xml
index 80d6702..1550631 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -50084,6 +50084,19 @@
 <parameter name="listener" type="android.gesture.GestureOverlayView.OnGesturePerformedListener">
 </parameter>
 </method>
+<method name="addOnGesturingListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.gesture.GestureOverlayView.OnGesturingListener">
+</parameter>
+</method>
 <method name="cancelClearAnimation"
  return="void"
  abstract="false"
@@ -50284,6 +50297,17 @@
  visibility="public"
 >
 </method>
+<method name="removeAllOnGesturingListeners"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="removeOnGestureListener"
  return="void"
  abstract="false"
@@ -50310,6 +50334,19 @@
 <parameter name="listener" type="android.gesture.GestureOverlayView.OnGesturePerformedListener">
 </parameter>
 </method>
+<method name="removeOnGesturingListener"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="listener" type="android.gesture.GestureOverlayView.OnGesturingListener">
+</parameter>
+</method>
 <method name="setEventsInterceptionEnabled"
  return="void"
  abstract="false"
@@ -50589,6 +50626,40 @@
 </parameter>
 </method>
 </interface>
+<interface name="GestureOverlayView.OnGesturingListener"
+ abstract="true"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<method name="onGesturingEnded"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="overlay" type="android.gesture.GestureOverlayView">
+</parameter>
+</method>
+<method name="onGesturingStarted"
+ return="void"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="overlay" type="android.gesture.GestureOverlayView">
+</parameter>
+</method>
+</interface>
 <class name="GesturePoint"
  extends="java.lang.Object"
  abstract="false"
diff --git a/core/java/android/gesture/GestureOverlayView.java b/core/java/android/gesture/GestureOverlayView.java
index 227cf3d..6f2c2a7 100755
--- a/core/java/android/gesture/GestureOverlayView.java
+++ b/core/java/android/gesture/GestureOverlayView.java
@@ -106,6 +106,9 @@
     // TODO: Make this a list of WeakReferences
     private final ArrayList<OnGesturePerformedListener> mOnGesturePerformedListeners =
             new ArrayList<OnGesturePerformedListener>();
+    // TODO: Make this a list of WeakReferences
+    private final ArrayList<OnGesturingListener> mOnGesturingListeners =
+            new ArrayList<OnGesturingListener>();
 
     private boolean mHandleGestureActions;
 
@@ -319,6 +322,18 @@
         mHandleGestureActions = false;
     }
 
+    public void addOnGesturingListener(OnGesturingListener listener) {
+        mOnGesturingListeners.add(listener);
+    }
+
+    public void removeOnGesturingListener(OnGesturingListener listener) {
+        mOnGesturingListeners.remove(listener);
+    }
+
+    public void removeAllOnGesturingListeners() {
+        mOnGesturingListeners.clear();
+    }
+
     public boolean isGesturing() {
         return mIsGesturing;
     }
@@ -401,7 +416,7 @@
                 MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
 
         final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
-        final int count = listeners.size();
+        int count = listeners.size();
         for (int i = 0; i < count; i++) {
             listeners.get(i).onGestureCancelled(this, event);
         }
@@ -411,6 +426,12 @@
         clear(false);
         mIsGesturing = false;
         mStrokeBuffer.clear();
+
+        final ArrayList<OnGesturingListener> otherListeners = mOnGesturingListeners;
+        count = otherListeners.size();
+        for (int i = 0; i < count; i++) {
+            otherListeners.get(i).onGesturingEnded(this);
+        }
     }
 
     @Override
@@ -577,6 +598,12 @@
 
                         mIsGesturing = true;
                         setCurrentColor(mCertainGestureColor);
+
+                        final ArrayList<OnGesturingListener> listeners = mOnGesturingListeners;
+                        int count = listeners.size();
+                        for (int i = 0; i < count; i++) {
+                            listeners.get(i).onGesturingStarted(this);
+                        }
                     }
                 }
             }
@@ -621,6 +648,12 @@
 
         mStrokeBuffer.clear();
         mIsGesturing = false;
+
+        final ArrayList<OnGesturingListener> listeners = mOnGesturingListeners;
+        int count = listeners.size();
+        for (int i = 0; i < count; i++) {
+            listeners.get(i).onGesturingEnded(this);
+        }
     }
 
     private void cancelGesture(MotionEvent event) {
@@ -635,12 +668,10 @@
     }
 
     private void fireOnGesturePerformed() {
-        final ArrayList<OnGesturePerformedListener> actionListeners =
-                mOnGesturePerformedListeners;
+        final ArrayList<OnGesturePerformedListener> actionListeners = mOnGesturePerformedListeners;
         final int count = actionListeners.size();
         for (int i = 0; i < count; i++) {
-            actionListeners.get(i).onGesturePerformed(GestureOverlayView.this,
-                    mCurrentGesture);
+            actionListeners.get(i).onGesturePerformed(GestureOverlayView.this, mCurrentGesture);
         }
     }
 
@@ -683,6 +714,12 @@
         }
     }
 
+    public static interface OnGesturingListener {
+        void onGesturingStarted(GestureOverlayView overlay);
+
+        void onGesturingEnded(GestureOverlayView overlay);
+    }
+
     public static interface OnGestureListener {
         void onGestureStarted(GestureOverlayView overlay, MotionEvent event);