Merge "CTS Tests for GestureDetector" into mnc-dev
diff --git a/tests/tests/view/src/android/view/cts/GestureDetectorCtsActivity.java b/tests/tests/view/src/android/view/cts/GestureDetectorCtsActivity.java
index f02a0d6..1c02a89 100644
--- a/tests/tests/view/src/android/view/cts/GestureDetectorCtsActivity.java
+++ b/tests/tests/view/src/android/view/cts/GestureDetectorCtsActivity.java
@@ -25,6 +25,7 @@
 import android.view.ViewGroup;
 import android.view.GestureDetector.SimpleOnGestureListener;
 import android.view.View.OnTouchListener;
+import android.view.View.OnGenericMotionListener;
 import android.widget.Button;
 
 public class GestureDetectorCtsActivity extends Activity {
@@ -38,6 +39,7 @@
     public boolean onDoubleTap;
     public boolean onDoubleTapEvent;
     public boolean onSingleTapConfirmed;
+    public boolean onContextClick;
 
     private GestureDetector mGestureDetector;
     private MockOnGestureListener mOnGestureListener;
@@ -56,6 +58,7 @@
 
         mGestureDetector = new GestureDetector(this, mOnGestureListener, mHandler);
         mGestureDetector.setOnDoubleTapListener(mOnGestureListener);
+        mGestureDetector.setContextClickListener(mOnGestureListener);
         mView = new View(this);
         mButton = new Button(this);
         mTop = new Button(this);
@@ -86,7 +89,13 @@
         return mGestureDetector;
     }
 
+    public MockOnGestureListener getListener() {
+        return mOnGestureListener;
+    }
+
     public class MockOnGestureListener extends SimpleOnGestureListener {
+        private MotionEvent mPreviousContextClickEvent;
+
         public boolean onDown(MotionEvent e) {
             isDown = true;
             return true;
@@ -129,14 +138,29 @@
             onSingleTapConfirmed = true;
             return false;
         }
+
+        public boolean onContextClick(MotionEvent e) {
+            onContextClick = true;
+            mPreviousContextClickEvent = e;
+            return false;
+        }
+
+        public MotionEvent getPreviousContextClickEvent() {
+            return mPreviousContextClickEvent;
+        }
     }
 
-    class MockOnTouchListener implements OnTouchListener {
+    class MockOnTouchListener implements OnTouchListener, OnGenericMotionListener {
 
         public boolean onTouch(View v, MotionEvent event) {
             mGestureDetector.onTouchEvent(event);
             return true;
         }
+
+        public boolean onGenericMotion(View v, MotionEvent event) {
+            mGestureDetector.onGenericMotionEvent(event);
+            return true;
+        }
     }
 
 }
diff --git a/tests/tests/view/src/android/view/cts/GestureDetectorTest.java b/tests/tests/view/src/android/view/cts/GestureDetectorTest.java
index c568cf1..f06455d 100644
--- a/tests/tests/view/src/android/view/cts/GestureDetectorTest.java
+++ b/tests/tests/view/src/android/view/cts/GestureDetectorTest.java
@@ -19,18 +19,31 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.SystemClock;
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.UiThreadTest;
+import android.view.cts.GestureDetectorCtsActivity.MockOnGestureListener;
 import android.view.GestureDetector;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
 import android.view.GestureDetector.SimpleOnGestureListener;
 
 public class GestureDetectorTest extends
         ActivityInstrumentationTestCase2<GestureDetectorCtsActivity> {
 
+    private static final float X_3F = 3.0f;
+    private static final float Y_4F = 4.0f;
+
     private GestureDetector mGestureDetector;
     private GestureDetectorCtsActivity mActivity;
+    private MockOnGestureListener mListener;
     private Context mContext;
 
+    private long mDownTime;
+    private long mEventTime;
+    private MotionEvent mButtonPressPrimaryMotionEvent;
+    private MotionEvent mButtonPressSecondaryMotionEvent;
+
     public GestureDetectorTest() {
         super("com.android.cts.view", GestureDetectorCtsActivity.class);
     }
@@ -40,6 +53,7 @@
         super.setUp();
         mActivity = getActivity();
         mGestureDetector = mActivity.getGestureDetector();
+        mListener = mActivity.getListener();
         mContext = getInstrumentation().getTargetContext();
         mActivity.isDown = false;
         mActivity.isScroll = false;
@@ -50,6 +64,17 @@
         mActivity.onDoubleTap = false;
         mActivity.onDoubleTapEvent = false;
         mActivity.onSingleTapConfirmed = false;
+        mActivity.onContextClick = false;
+
+        mDownTime = SystemClock.uptimeMillis();
+        mEventTime = SystemClock.uptimeMillis();
+        mButtonPressPrimaryMotionEvent = MotionEvent.obtain(mDownTime, mEventTime,
+                MotionEvent.ACTION_BUTTON_PRESS, X_3F, Y_4F, 0);
+        mButtonPressPrimaryMotionEvent.setActionButton(MotionEvent.BUTTON_STYLUS_PRIMARY);
+
+        mButtonPressSecondaryMotionEvent = MotionEvent.obtain(mDownTime, mEventTime,
+                MotionEvent.ACTION_BUTTON_PRESS, X_3F, Y_4F, 0);
+        mButtonPressSecondaryMotionEvent.setActionButton(MotionEvent.BUTTON_SECONDARY);
     }
 
     @UiThreadTest
@@ -75,4 +100,35 @@
         mGestureDetector.setIsLongpressEnabled(false);
         assertFalse(mGestureDetector.isLongpressEnabled());
     }
+
+    public void testOnSetContextClickListener() {
+        mActivity.onContextClick = false;
+        mGestureDetector.setContextClickListener(null);
+        mGestureDetector.onGenericMotionEvent(mButtonPressPrimaryMotionEvent);
+        assertFalse(mActivity.onContextClick);
+
+        mGestureDetector.setContextClickListener(mListener);
+        mGestureDetector.onGenericMotionEvent(mButtonPressPrimaryMotionEvent);
+        assertTrue(mActivity.onContextClick);
+        assertSame(mButtonPressPrimaryMotionEvent, mListener.getPreviousContextClickEvent());
+    }
+
+    public void testOnContextClick() {
+        mActivity.onContextClick = false;
+        mListener.onContextClick(mButtonPressPrimaryMotionEvent);
+        assertTrue(mActivity.onContextClick);
+        assertSame(mButtonPressPrimaryMotionEvent, mListener.getPreviousContextClickEvent());
+
+        mActivity.onContextClick = false;
+        mGestureDetector.onGenericMotionEvent(mButtonPressSecondaryMotionEvent);
+        assertTrue(mActivity.onContextClick);
+        assertSame(mButtonPressSecondaryMotionEvent, mListener.getPreviousContextClickEvent());
+    }
+
+    public void testOnGenericMotionEvent() {
+        mActivity.onContextClick = false;
+        mGestureDetector.onGenericMotionEvent(mButtonPressPrimaryMotionEvent);
+        assertTrue(mActivity.onContextClick);
+        assertSame(mButtonPressPrimaryMotionEvent, mListener.getPreviousContextClickEvent());
+    }
 }