Add test for setAllowClickWhenDisabled

Bug: 183240322
Test: atest
Change-Id: I8983ebc937bfc033431e2a3dd5cbc840f29f82bf
diff --git a/tests/tests/view/src/android/view/cts/ViewTest.java b/tests/tests/view/src/android/view/cts/ViewTest.java
index 9dd4928..9b6fa2b 100644
--- a/tests/tests/view/src/android/view/cts/ViewTest.java
+++ b/tests/tests/view/src/android/view/cts/ViewTest.java
@@ -2346,6 +2346,65 @@
     }
 
     @Test
+    public void testSetAllowClickWhenDisabled() throws Throwable {
+        MockView mockView = (MockView) mActivity.findViewById(R.id.mock_view);
+
+        mActivityRule.runOnUiThread(() -> {
+            mockView.setClickable(true);
+            mockView.setEnabled(false);
+        });
+
+        View.OnClickListener listener = mock(View.OnClickListener.class);
+        mockView.setOnClickListener(listener);
+
+        int[] xy = new int[2];
+        mockView.getLocationOnScreen(xy);
+
+        final int viewWidth = mockView.getWidth();
+        final int viewHeight = mockView.getHeight();
+        final float x = xy[0] + viewWidth / 2.0f;
+        final float y = xy[1] + viewHeight / 2.0f;
+
+        long downTime = SystemClock.uptimeMillis();
+        long eventTime = SystemClock.uptimeMillis();
+        MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN,
+                x, y, 0);
+        downTime = SystemClock.uptimeMillis();
+        eventTime = SystemClock.uptimeMillis();
+        MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP,
+                x, y, 0);
+
+        assertFalse(mockView.hasCalledOnTouchEvent());
+        mockView.dispatchTouchEvent(downEvent);
+        mockView.dispatchTouchEvent(upEvent);
+
+        mInstrumentation.waitForIdleSync();
+        assertTrue(mockView.hasCalledOnTouchEvent());
+
+        verifyZeroInteractions(listener);
+
+        mActivityRule.runOnUiThread(() -> {
+            mockView.setAllowClickWhenDisabled(true);
+        });
+
+        downTime = SystemClock.uptimeMillis();
+        eventTime = SystemClock.uptimeMillis();
+        downEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN,
+                x, y, 0);
+        downTime = SystemClock.uptimeMillis();
+        eventTime = SystemClock.uptimeMillis();
+        upEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP,
+                x, y, 0);
+
+        mockView.dispatchTouchEvent(downEvent);
+        mockView.dispatchTouchEvent(upEvent);
+
+        mInstrumentation.waitForIdleSync();
+
+        verify(listener, times(1)).onClick(mockView);
+    }
+
+    @Test
     public void testAddTouchables() {
         View view = new View(mActivity);
         ArrayList<View> result = new ArrayList<>();