Loading tests/Input/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ android_test { "androidx.test.runner", "androidx.test.uiautomator_uiautomator", "compatibility-device-util-axt", "cts-input-lib", "flag-junit", "frameworks-base-testutils", "hamcrest-library", Loading tests/Input/src/com/android/test/input/AnrTest.kt +17 −9 Original line number Diff line number Diff line Loading @@ -21,21 +21,23 @@ import androidx.test.filters.MediumTest import android.app.ActivityManager import android.app.ApplicationExitInfo import android.content.Context import android.graphics.Rect import android.hardware.display.DisplayManager import android.os.Build import android.os.IInputConstants.UNMULTIPLIED_DEFAULT_DISPATCHING_TIMEOUT_MILLIS import android.os.SystemClock import android.provider.Settings import android.provider.Settings.Global.HIDE_ERROR_DIALOGS import android.testing.PollingCheck import android.view.InputDevice import android.view.MotionEvent import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until import com.android.cts.input.UinputTouchScreen import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue Loading Loading @@ -150,6 +152,18 @@ class AnrTest { assertEquals(ApplicationExitInfo.REASON_ANR, reasons[0].reason) } private fun clickOnObject(obj: UiObject2) { val displayManager = instrumentation.context.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val display = displayManager.getDisplay(obj.getDisplayId()) val touchScreen = UinputTouchScreen(instrumentation, display) val rect: Rect = obj.visibleBounds val pointer = touchScreen.touchDown(rect.centerX(), rect.centerY()) pointer.lift() touchScreen.close() } private fun triggerAnr() { startUnresponsiveActivity() val uiDevice: UiDevice = UiDevice.getInstance(instrumentation) Loading @@ -160,13 +174,7 @@ class AnrTest { return } val rect: Rect = obj.visibleBounds val downTime = SystemClock.uptimeMillis() val downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, rect.left.toFloat(), rect.top.toFloat(), 0 /* metaState */) downEvent.source = InputDevice.SOURCE_TOUCHSCREEN instrumentation.uiAutomation.injectInputEvent(downEvent, false /* sync*/) clickOnObject(obj) SystemClock.sleep(DISPATCHING_TIMEOUT.toLong()) // default ANR timeout for gesture monitors } Loading Loading
tests/Input/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ android_test { "androidx.test.runner", "androidx.test.uiautomator_uiautomator", "compatibility-device-util-axt", "cts-input-lib", "flag-junit", "frameworks-base-testutils", "hamcrest-library", Loading
tests/Input/src/com/android/test/input/AnrTest.kt +17 −9 Original line number Diff line number Diff line Loading @@ -21,21 +21,23 @@ import androidx.test.filters.MediumTest import android.app.ActivityManager import android.app.ApplicationExitInfo import android.content.Context import android.graphics.Rect import android.hardware.display.DisplayManager import android.os.Build import android.os.IInputConstants.UNMULTIPLIED_DEFAULT_DISPATCHING_TIMEOUT_MILLIS import android.os.SystemClock import android.provider.Settings import android.provider.Settings.Global.HIDE_ERROR_DIALOGS import android.testing.PollingCheck import android.view.InputDevice import android.view.MotionEvent import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until import com.android.cts.input.UinputTouchScreen import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue Loading Loading @@ -150,6 +152,18 @@ class AnrTest { assertEquals(ApplicationExitInfo.REASON_ANR, reasons[0].reason) } private fun clickOnObject(obj: UiObject2) { val displayManager = instrumentation.context.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val display = displayManager.getDisplay(obj.getDisplayId()) val touchScreen = UinputTouchScreen(instrumentation, display) val rect: Rect = obj.visibleBounds val pointer = touchScreen.touchDown(rect.centerX(), rect.centerY()) pointer.lift() touchScreen.close() } private fun triggerAnr() { startUnresponsiveActivity() val uiDevice: UiDevice = UiDevice.getInstance(instrumentation) Loading @@ -160,13 +174,7 @@ class AnrTest { return } val rect: Rect = obj.visibleBounds val downTime = SystemClock.uptimeMillis() val downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, rect.left.toFloat(), rect.top.toFloat(), 0 /* metaState */) downEvent.source = InputDevice.SOURCE_TOUCHSCREEN instrumentation.uiAutomation.injectInputEvent(downEvent, false /* sync*/) clickOnObject(obj) SystemClock.sleep(DISPATCHING_TIMEOUT.toLong()) // default ANR timeout for gesture monitors } Loading