Loading PREUPLOAD.cfg +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp tests/ tools/ bpfmt = -d ktfmt = --kotlinlang-style --include-dirs=services/permission,packages/SystemUI,libs/WindowManager/Shell/src/com/android/wm/shell/freeform,libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode,libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode,apct-tests ktfmt = --kotlinlang-style --include-dirs=services/permission,packages/SystemUI,libs/WindowManager/Shell/src/com/android/wm/shell/freeform,libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode,libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode,apct-tests,tests/Input [Hook Scripts] checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} Loading tests/Input/src/android/hardware/input/InputDeviceBatteryListenerTest.kt +57 −44 Original line number Diff line number Diff line Loading @@ -44,14 +44,12 @@ import org.mockito.junit.MockitoJUnitRunner /** * Tests for [InputManager.InputDeviceBatteryListener]. * * Build/Install/Run: * atest InputTests:InputDeviceBatteryListenerTest * Build/Install/Run: atest InputTests:InputDeviceBatteryListenerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) class InputDeviceBatteryListenerTest { @get:Rule val rule = MockitoJUnit.rule()!! @get:Rule val rule = MockitoJUnit.rule()!! private lateinit var testLooper: TestLooper private var registeredListener: IInputDeviceBatteryListener? = null Loading @@ -60,8 +58,7 @@ class InputDeviceBatteryListenerTest { private lateinit var context: Context private lateinit var inputManager: InputManager @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val inputManagerRule = MockInputManagerRule() @Before fun setUp() { Loading @@ -71,15 +68,16 @@ class InputDeviceBatteryListenerTest { registeredListener = null monitoredDevices.clear() inputManager = InputManager(context) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))) .thenReturn(inputManager) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))).thenReturn(inputManager) // Handle battery listener registration. doAnswer { val deviceId = it.getArgument(0) as Int val listener = it.getArgument(1) as IInputDeviceBatteryListener if (registeredListener != null && registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener != null && registeredListener!!.asBinder() != listener.asBinder() ) { // There can only be one registered battery listener per process. fail("Trying to register a new listener when one already exists") } Loading @@ -89,14 +87,18 @@ class InputDeviceBatteryListenerTest { monitoredDevices.add(deviceId) registeredListener = listener null }.`when`(inputManagerRule.mock).registerBatteryListener(anyInt(), any()) } .`when`(inputManagerRule.mock) .registerBatteryListener(anyInt(), any()) // Handle battery listener being unregistered. doAnswer { val deviceId = it.getArgument(0) as Int val listener = it.getArgument(1) as IInputDeviceBatteryListener if (registeredListener == null || registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener == null || registeredListener!!.asBinder() != listener.asBinder() ) { fail("Trying to unregister a listener that is not registered") } if (!monitoredDevices.remove(deviceId)) { Loading @@ -105,7 +107,9 @@ class InputDeviceBatteryListenerTest { if (monitoredDevices.isEmpty()) { registeredListener = null } }.`when`(inputManagerRule.mock).unregisterBatteryListener(anyInt(), any()) } .`when`(inputManagerRule.mock) .unregisterBatteryListener(anyInt(), any()) } private fun notifyBatteryStateChanged( Loading @@ -113,15 +117,17 @@ class InputDeviceBatteryListenerTest { isPresent: Boolean = true, status: Int = BatteryState.STATUS_FULL, capacity: Float = 1.0f, eventTime: Long = 12345L eventTime: Long = 12345L, ) { registeredListener!!.onBatteryStateChanged(IInputDeviceBatteryState().apply { registeredListener!!.onBatteryStateChanged( IInputDeviceBatteryState().apply { this.deviceId = deviceId this.updateTime = eventTime this.isPresent = isPresent this.status = status this.capacity = capacity }) } ) } @Test Loading @@ -130,7 +136,9 @@ class InputDeviceBatteryListenerTest { // Add a battery listener to monitor battery changes. inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor) { deviceId: Int, eventTime: Long, batteryState: BatteryState -> deviceId: Int, eventTime: Long, batteryState: BatteryState -> callbackCount++ assertEquals(1, deviceId) assertEquals(true, batteryState.isPresent) Loading @@ -149,8 +157,13 @@ class InputDeviceBatteryListenerTest { assertEquals(0, callbackCount) // Notifying battery change for the registered device will notify the listener. notifyBatteryStateChanged(1 /*deviceId*/, true /*isPresent*/, BatteryState.STATUS_DISCHARGING, 0.5f /*capacity*/, 8675309L /*eventTime*/) notifyBatteryStateChanged( 1 /*deviceId*/, true /*isPresent*/, BatteryState.STATUS_DISCHARGING, 0.5f /*capacity*/, 8675309L, /*eventTime*/ ) testLooper.dispatchNext() assertEquals(1, callbackCount) } Loading tests/Input/src/android/hardware/input/InputManagerTest.kt +6 −9 Original line number Diff line number Diff line Loading @@ -38,8 +38,7 @@ import org.mockito.junit.MockitoJUnitRunner /** * Tests for [InputManager]. * * Build/Install/Run: * atest InputTests:InputManagerTest * Build/Install/Run: atest InputTests:InputManagerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) Loading @@ -51,8 +50,7 @@ class InputManagerTest { const val THIRD_DEVICE_ID = 99 } @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val inputManagerRule = MockInputManagerRule() private lateinit var devicesChangedListener: IInputDevicesChangedListener private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>() Loading @@ -64,9 +62,7 @@ class InputManagerTest { context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext())) inputManager = InputManager(context) `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager) `when`(inputManagerRule.mock.inputDeviceIds).then { deviceGenerationMap.keys.toIntArray() } `when`(inputManagerRule.mock.inputDeviceIds).then { deviceGenerationMap.keys.toIntArray() } } private fun notifyDeviceChanged( Loading @@ -74,7 +70,8 @@ class InputManagerTest { associatedDisplayId: Int, usiVersion: HostUsiVersion?, ) { val generation = deviceGenerationMap[deviceId]?.plus(1) val generation = deviceGenerationMap[deviceId]?.plus(1) ?: throw IllegalArgumentException("Device $deviceId was never added!") deviceGenerationMap[deviceId] = generation Loading tests/Input/src/android/hardware/input/KeyGestureEventHandlerTest.kt +68 −58 Original line number Diff line number Diff line Loading @@ -23,6 +23,11 @@ import android.platform.test.flag.junit.SetFlagsRule import android.view.KeyEvent import androidx.test.core.app.ApplicationProvider import com.android.test.input.MockInputManagerRule import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull import kotlin.test.fail import org.junit.Assert.assertThrows import org.junit.Before import org.junit.Rule import org.junit.Test Loading @@ -31,17 +36,11 @@ import org.mockito.Mockito import org.mockito.Mockito.doAnswer import org.mockito.Mockito.`when` import org.mockito.junit.MockitoJUnitRunner import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull import kotlin.test.fail import org.junit.Assert.assertThrows /** * Tests for [InputManager.KeyGestureEventHandler]. * * Build/Install/Run: * atest InputTests:KeyGestureEventHandlerTest * Build/Install/Run: atest InputTests:KeyGestureEventHandlerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) Loading @@ -49,13 +48,15 @@ class KeyGestureEventHandlerTest { companion object { const val DEVICE_ID = 1 val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() .setDeviceId(DEVICE_ID) .setKeycodes(intArrayOf(KeyEvent.KEYCODE_H)) .setModifierState(KeyEvent.META_META_ON or KeyEvent.META_META_LEFT_ON) .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME) .build() val BACK_GESTURE_EVENT = KeyGestureEvent.Builder() val BACK_GESTURE_EVENT = KeyGestureEvent.Builder() .setDeviceId(DEVICE_ID) .setKeycodes(intArrayOf(KeyEvent.KEYCODE_DEL)) .setModifierState(KeyEvent.META_META_ON or KeyEvent.META_META_LEFT_ON) Loading @@ -63,10 +64,8 @@ class KeyGestureEventHandlerTest { .build() } @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() private var registeredListener: IKeyGestureHandler? = null private lateinit var context: Context Loading @@ -76,31 +75,38 @@ class KeyGestureEventHandlerTest { fun setUp() { context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext())) inputManager = InputManager(context) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))) .thenReturn(inputManager) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))).thenReturn(inputManager) // Handle key gesture handler registration. doAnswer { val listener = it.getArgument(1) as IKeyGestureHandler if (registeredListener != null && registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener != null && registeredListener!!.asBinder() != listener.asBinder() ) { // There can only be one registered key gesture handler per process. fail("Trying to register a new listener when one already exists") } registeredListener = listener null }.`when`(inputManagerRule.mock).registerKeyGestureHandler(Mockito.any(), Mockito.any()) } .`when`(inputManagerRule.mock) .registerKeyGestureHandler(Mockito.any(), Mockito.any()) // Handle key gesture handler being unregistered. doAnswer { val listener = it.getArgument(0) as IKeyGestureHandler if (registeredListener == null || registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener == null || registeredListener!!.asBinder() != listener.asBinder() ) { fail("Trying to unregister a listener that is not registered") } registeredListener = null null }.`when`(inputManagerRule.mock).unregisterKeyGestureHandler(Mockito.any()) } .`when`(inputManagerRule.mock) .unregisterKeyGestureHandler(Mockito.any()) } private fun handleKeyGestureEvent(event: KeyGestureEvent) { Loading Loading @@ -143,7 +149,7 @@ class KeyGestureEventHandlerTest { // Adding the handler should register the callback with InputManagerService. inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), callback1 callback1, ) assertNotNull(registeredListener) Loading @@ -151,7 +157,7 @@ class KeyGestureEventHandlerTest { val currListener = registeredListener inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), callback2 callback2, ) assertEquals(currListener, registeredListener) } Loading @@ -164,11 +170,11 @@ class KeyGestureEventHandlerTest { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), callback1 callback1, ) inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), callback2 callback2, ) // Only removing all handlers should remove the internal callback Loading @@ -184,12 +190,14 @@ class KeyGestureEventHandlerTest { var callbackCount1 = 0 var callbackCount2 = 0 // Handler 1 captures all home gestures val callback1 = InputManager.KeyGestureEventHandler { event, _ -> val callback1 = InputManager.KeyGestureEventHandler { event, _ -> callbackCount1++ assertEquals(KeyGestureEvent.KEY_GESTURE_TYPE_HOME, event.keyGestureType) } // Handler 2 captures all back gestures val callback2 = InputManager.KeyGestureEventHandler { event, _ -> val callback2 = InputManager.KeyGestureEventHandler { event, _ -> callbackCount2++ assertEquals(KeyGestureEvent.KEY_GESTURE_TYPE_BACK, event.keyGestureType) } Loading @@ -197,11 +205,11 @@ class KeyGestureEventHandlerTest { // Add both key gesture event handlers inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), callback1 callback1, ) inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), callback2 callback2, ) // Request handling for home key gesture event, should notify only callback1 Loading @@ -228,12 +236,13 @@ class KeyGestureEventHandlerTest { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler handler, ) assertThrows(IllegalArgumentException::class.java) { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), handler listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), handler, ) } } Loading @@ -245,12 +254,13 @@ class KeyGestureEventHandlerTest { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler1 handler1, ) assertThrows(IllegalArgumentException::class.java) { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler2 listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler2, ) } } Loading tests/Input/src/android/hardware/input/KeyGestureEventListenerTest.kt +35 −31 Original line number Diff line number Diff line Loading @@ -43,8 +43,7 @@ import org.mockito.junit.MockitoJUnitRunner /** * Tests for [InputManager.KeyGestureEventListener]. * * Build/Install/Run: * atest InputTests:KeyGestureEventListenerTest * Build/Install/Run: atest InputTests:KeyGestureEventListenerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) Loading @@ -52,7 +51,8 @@ class KeyGestureEventListenerTest { companion object { const val DEVICE_ID = 1 val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() .setDeviceId(DEVICE_ID) .setKeycodes(intArrayOf(KeyEvent.KEYCODE_H)) .setModifierState(KeyEvent.META_META_ON or KeyEvent.META_META_LEFT_ON) Loading @@ -60,10 +60,8 @@ class KeyGestureEventListenerTest { .build() } @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() private val testLooper = TestLooper() private val executor = HandlerExecutor(Handler(testLooper.looper)) Loading @@ -75,31 +73,38 @@ class KeyGestureEventListenerTest { fun setUp() { context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext())) inputManager = InputManager(context) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))) .thenReturn(inputManager) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))).thenReturn(inputManager) // Handle key gesture event listener registration. doAnswer { val listener = it.getArgument(0) as IKeyGestureEventListener if (registeredListener != null && registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener != null && registeredListener!!.asBinder() != listener.asBinder() ) { // There can only be one registered key gesture event listener per process. fail("Trying to register a new listener when one already exists") } registeredListener = listener null }.`when`(inputManagerRule.mock).registerKeyGestureEventListener(any()) } .`when`(inputManagerRule.mock) .registerKeyGestureEventListener(any()) // Handle key gesture event listener being unregistered. doAnswer { val listener = it.getArgument(0) as IKeyGestureEventListener if (registeredListener == null || registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener == null || registeredListener!!.asBinder() != listener.asBinder() ) { fail("Trying to unregister a listener that is not registered") } registeredListener = null null }.`when`(inputManagerRule.mock).unregisterKeyGestureEventListener(any()) } .`when`(inputManagerRule.mock) .unregisterKeyGestureEventListener(any()) } private fun notifyKeyGestureEvent(event: KeyGestureEvent) { Loading @@ -119,8 +124,7 @@ class KeyGestureEventListenerTest { var callbackCount = 0 // Add a key gesture event listener inputManager.registerKeyGestureEventListener(executor) { event: KeyGestureEvent -> inputManager.registerKeyGestureEventListener(executor) { event: KeyGestureEvent -> assertEquals(HOME_GESTURE_EVENT, event) callbackCount++ } Loading Loading
PREUPLOAD.cfg +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp tests/ tools/ bpfmt = -d ktfmt = --kotlinlang-style --include-dirs=services/permission,packages/SystemUI,libs/WindowManager/Shell/src/com/android/wm/shell/freeform,libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode,libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode,apct-tests ktfmt = --kotlinlang-style --include-dirs=services/permission,packages/SystemUI,libs/WindowManager/Shell/src/com/android/wm/shell/freeform,libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode,libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode,apct-tests,tests/Input [Hook Scripts] checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} Loading
tests/Input/src/android/hardware/input/InputDeviceBatteryListenerTest.kt +57 −44 Original line number Diff line number Diff line Loading @@ -44,14 +44,12 @@ import org.mockito.junit.MockitoJUnitRunner /** * Tests for [InputManager.InputDeviceBatteryListener]. * * Build/Install/Run: * atest InputTests:InputDeviceBatteryListenerTest * Build/Install/Run: atest InputTests:InputDeviceBatteryListenerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) class InputDeviceBatteryListenerTest { @get:Rule val rule = MockitoJUnit.rule()!! @get:Rule val rule = MockitoJUnit.rule()!! private lateinit var testLooper: TestLooper private var registeredListener: IInputDeviceBatteryListener? = null Loading @@ -60,8 +58,7 @@ class InputDeviceBatteryListenerTest { private lateinit var context: Context private lateinit var inputManager: InputManager @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val inputManagerRule = MockInputManagerRule() @Before fun setUp() { Loading @@ -71,15 +68,16 @@ class InputDeviceBatteryListenerTest { registeredListener = null monitoredDevices.clear() inputManager = InputManager(context) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))) .thenReturn(inputManager) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))).thenReturn(inputManager) // Handle battery listener registration. doAnswer { val deviceId = it.getArgument(0) as Int val listener = it.getArgument(1) as IInputDeviceBatteryListener if (registeredListener != null && registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener != null && registeredListener!!.asBinder() != listener.asBinder() ) { // There can only be one registered battery listener per process. fail("Trying to register a new listener when one already exists") } Loading @@ -89,14 +87,18 @@ class InputDeviceBatteryListenerTest { monitoredDevices.add(deviceId) registeredListener = listener null }.`when`(inputManagerRule.mock).registerBatteryListener(anyInt(), any()) } .`when`(inputManagerRule.mock) .registerBatteryListener(anyInt(), any()) // Handle battery listener being unregistered. doAnswer { val deviceId = it.getArgument(0) as Int val listener = it.getArgument(1) as IInputDeviceBatteryListener if (registeredListener == null || registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener == null || registeredListener!!.asBinder() != listener.asBinder() ) { fail("Trying to unregister a listener that is not registered") } if (!monitoredDevices.remove(deviceId)) { Loading @@ -105,7 +107,9 @@ class InputDeviceBatteryListenerTest { if (monitoredDevices.isEmpty()) { registeredListener = null } }.`when`(inputManagerRule.mock).unregisterBatteryListener(anyInt(), any()) } .`when`(inputManagerRule.mock) .unregisterBatteryListener(anyInt(), any()) } private fun notifyBatteryStateChanged( Loading @@ -113,15 +117,17 @@ class InputDeviceBatteryListenerTest { isPresent: Boolean = true, status: Int = BatteryState.STATUS_FULL, capacity: Float = 1.0f, eventTime: Long = 12345L eventTime: Long = 12345L, ) { registeredListener!!.onBatteryStateChanged(IInputDeviceBatteryState().apply { registeredListener!!.onBatteryStateChanged( IInputDeviceBatteryState().apply { this.deviceId = deviceId this.updateTime = eventTime this.isPresent = isPresent this.status = status this.capacity = capacity }) } ) } @Test Loading @@ -130,7 +136,9 @@ class InputDeviceBatteryListenerTest { // Add a battery listener to monitor battery changes. inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor) { deviceId: Int, eventTime: Long, batteryState: BatteryState -> deviceId: Int, eventTime: Long, batteryState: BatteryState -> callbackCount++ assertEquals(1, deviceId) assertEquals(true, batteryState.isPresent) Loading @@ -149,8 +157,13 @@ class InputDeviceBatteryListenerTest { assertEquals(0, callbackCount) // Notifying battery change for the registered device will notify the listener. notifyBatteryStateChanged(1 /*deviceId*/, true /*isPresent*/, BatteryState.STATUS_DISCHARGING, 0.5f /*capacity*/, 8675309L /*eventTime*/) notifyBatteryStateChanged( 1 /*deviceId*/, true /*isPresent*/, BatteryState.STATUS_DISCHARGING, 0.5f /*capacity*/, 8675309L, /*eventTime*/ ) testLooper.dispatchNext() assertEquals(1, callbackCount) } Loading
tests/Input/src/android/hardware/input/InputManagerTest.kt +6 −9 Original line number Diff line number Diff line Loading @@ -38,8 +38,7 @@ import org.mockito.junit.MockitoJUnitRunner /** * Tests for [InputManager]. * * Build/Install/Run: * atest InputTests:InputManagerTest * Build/Install/Run: atest InputTests:InputManagerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) Loading @@ -51,8 +50,7 @@ class InputManagerTest { const val THIRD_DEVICE_ID = 99 } @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val inputManagerRule = MockInputManagerRule() private lateinit var devicesChangedListener: IInputDevicesChangedListener private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>() Loading @@ -64,9 +62,7 @@ class InputManagerTest { context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext())) inputManager = InputManager(context) `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager) `when`(inputManagerRule.mock.inputDeviceIds).then { deviceGenerationMap.keys.toIntArray() } `when`(inputManagerRule.mock.inputDeviceIds).then { deviceGenerationMap.keys.toIntArray() } } private fun notifyDeviceChanged( Loading @@ -74,7 +70,8 @@ class InputManagerTest { associatedDisplayId: Int, usiVersion: HostUsiVersion?, ) { val generation = deviceGenerationMap[deviceId]?.plus(1) val generation = deviceGenerationMap[deviceId]?.plus(1) ?: throw IllegalArgumentException("Device $deviceId was never added!") deviceGenerationMap[deviceId] = generation Loading
tests/Input/src/android/hardware/input/KeyGestureEventHandlerTest.kt +68 −58 Original line number Diff line number Diff line Loading @@ -23,6 +23,11 @@ import android.platform.test.flag.junit.SetFlagsRule import android.view.KeyEvent import androidx.test.core.app.ApplicationProvider import com.android.test.input.MockInputManagerRule import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull import kotlin.test.fail import org.junit.Assert.assertThrows import org.junit.Before import org.junit.Rule import org.junit.Test Loading @@ -31,17 +36,11 @@ import org.mockito.Mockito import org.mockito.Mockito.doAnswer import org.mockito.Mockito.`when` import org.mockito.junit.MockitoJUnitRunner import kotlin.test.assertEquals import kotlin.test.assertNotNull import kotlin.test.assertNull import kotlin.test.fail import org.junit.Assert.assertThrows /** * Tests for [InputManager.KeyGestureEventHandler]. * * Build/Install/Run: * atest InputTests:KeyGestureEventHandlerTest * Build/Install/Run: atest InputTests:KeyGestureEventHandlerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) Loading @@ -49,13 +48,15 @@ class KeyGestureEventHandlerTest { companion object { const val DEVICE_ID = 1 val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() .setDeviceId(DEVICE_ID) .setKeycodes(intArrayOf(KeyEvent.KEYCODE_H)) .setModifierState(KeyEvent.META_META_ON or KeyEvent.META_META_LEFT_ON) .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME) .build() val BACK_GESTURE_EVENT = KeyGestureEvent.Builder() val BACK_GESTURE_EVENT = KeyGestureEvent.Builder() .setDeviceId(DEVICE_ID) .setKeycodes(intArrayOf(KeyEvent.KEYCODE_DEL)) .setModifierState(KeyEvent.META_META_ON or KeyEvent.META_META_LEFT_ON) Loading @@ -63,10 +64,8 @@ class KeyGestureEventHandlerTest { .build() } @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() private var registeredListener: IKeyGestureHandler? = null private lateinit var context: Context Loading @@ -76,31 +75,38 @@ class KeyGestureEventHandlerTest { fun setUp() { context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext())) inputManager = InputManager(context) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))) .thenReturn(inputManager) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))).thenReturn(inputManager) // Handle key gesture handler registration. doAnswer { val listener = it.getArgument(1) as IKeyGestureHandler if (registeredListener != null && registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener != null && registeredListener!!.asBinder() != listener.asBinder() ) { // There can only be one registered key gesture handler per process. fail("Trying to register a new listener when one already exists") } registeredListener = listener null }.`when`(inputManagerRule.mock).registerKeyGestureHandler(Mockito.any(), Mockito.any()) } .`when`(inputManagerRule.mock) .registerKeyGestureHandler(Mockito.any(), Mockito.any()) // Handle key gesture handler being unregistered. doAnswer { val listener = it.getArgument(0) as IKeyGestureHandler if (registeredListener == null || registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener == null || registeredListener!!.asBinder() != listener.asBinder() ) { fail("Trying to unregister a listener that is not registered") } registeredListener = null null }.`when`(inputManagerRule.mock).unregisterKeyGestureHandler(Mockito.any()) } .`when`(inputManagerRule.mock) .unregisterKeyGestureHandler(Mockito.any()) } private fun handleKeyGestureEvent(event: KeyGestureEvent) { Loading Loading @@ -143,7 +149,7 @@ class KeyGestureEventHandlerTest { // Adding the handler should register the callback with InputManagerService. inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), callback1 callback1, ) assertNotNull(registeredListener) Loading @@ -151,7 +157,7 @@ class KeyGestureEventHandlerTest { val currListener = registeredListener inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), callback2 callback2, ) assertEquals(currListener, registeredListener) } Loading @@ -164,11 +170,11 @@ class KeyGestureEventHandlerTest { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), callback1 callback1, ) inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), callback2 callback2, ) // Only removing all handlers should remove the internal callback Loading @@ -184,12 +190,14 @@ class KeyGestureEventHandlerTest { var callbackCount1 = 0 var callbackCount2 = 0 // Handler 1 captures all home gestures val callback1 = InputManager.KeyGestureEventHandler { event, _ -> val callback1 = InputManager.KeyGestureEventHandler { event, _ -> callbackCount1++ assertEquals(KeyGestureEvent.KEY_GESTURE_TYPE_HOME, event.keyGestureType) } // Handler 2 captures all back gestures val callback2 = InputManager.KeyGestureEventHandler { event, _ -> val callback2 = InputManager.KeyGestureEventHandler { event, _ -> callbackCount2++ assertEquals(KeyGestureEvent.KEY_GESTURE_TYPE_BACK, event.keyGestureType) } Loading @@ -197,11 +205,11 @@ class KeyGestureEventHandlerTest { // Add both key gesture event handlers inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), callback1 callback1, ) inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), callback2 callback2, ) // Request handling for home key gesture event, should notify only callback1 Loading @@ -228,12 +236,13 @@ class KeyGestureEventHandlerTest { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler handler, ) assertThrows(IllegalArgumentException::class.java) { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), handler listOf(KeyGestureEvent.KEY_GESTURE_TYPE_BACK), handler, ) } } Loading @@ -245,12 +254,13 @@ class KeyGestureEventHandlerTest { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler1 handler1, ) assertThrows(IllegalArgumentException::class.java) { inputManager.registerKeyGestureEventHandler( listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler2 listOf(KeyGestureEvent.KEY_GESTURE_TYPE_HOME), handler2, ) } } Loading
tests/Input/src/android/hardware/input/KeyGestureEventListenerTest.kt +35 −31 Original line number Diff line number Diff line Loading @@ -43,8 +43,7 @@ import org.mockito.junit.MockitoJUnitRunner /** * Tests for [InputManager.KeyGestureEventListener]. * * Build/Install/Run: * atest InputTests:KeyGestureEventListenerTest * Build/Install/Run: atest InputTests:KeyGestureEventListenerTest */ @Presubmit @RunWith(MockitoJUnitRunner::class) Loading @@ -52,7 +51,8 @@ class KeyGestureEventListenerTest { companion object { const val DEVICE_ID = 1 val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() val HOME_GESTURE_EVENT = KeyGestureEvent.Builder() .setDeviceId(DEVICE_ID) .setKeycodes(intArrayOf(KeyEvent.KEYCODE_H)) .setModifierState(KeyEvent.META_META_ON or KeyEvent.META_META_LEFT_ON) Loading @@ -60,10 +60,8 @@ class KeyGestureEventListenerTest { .build() } @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() @get:Rule val rule = SetFlagsRule() @get:Rule val inputManagerRule = MockInputManagerRule() private val testLooper = TestLooper() private val executor = HandlerExecutor(Handler(testLooper.looper)) Loading @@ -75,31 +73,38 @@ class KeyGestureEventListenerTest { fun setUp() { context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext())) inputManager = InputManager(context) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))) .thenReturn(inputManager) `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE))).thenReturn(inputManager) // Handle key gesture event listener registration. doAnswer { val listener = it.getArgument(0) as IKeyGestureEventListener if (registeredListener != null && registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener != null && registeredListener!!.asBinder() != listener.asBinder() ) { // There can only be one registered key gesture event listener per process. fail("Trying to register a new listener when one already exists") } registeredListener = listener null }.`when`(inputManagerRule.mock).registerKeyGestureEventListener(any()) } .`when`(inputManagerRule.mock) .registerKeyGestureEventListener(any()) // Handle key gesture event listener being unregistered. doAnswer { val listener = it.getArgument(0) as IKeyGestureEventListener if (registeredListener == null || registeredListener!!.asBinder() != listener.asBinder()) { if ( registeredListener == null || registeredListener!!.asBinder() != listener.asBinder() ) { fail("Trying to unregister a listener that is not registered") } registeredListener = null null }.`when`(inputManagerRule.mock).unregisterKeyGestureEventListener(any()) } .`when`(inputManagerRule.mock) .unregisterKeyGestureEventListener(any()) } private fun notifyKeyGestureEvent(event: KeyGestureEvent) { Loading @@ -119,8 +124,7 @@ class KeyGestureEventListenerTest { var callbackCount = 0 // Add a key gesture event listener inputManager.registerKeyGestureEventListener(executor) { event: KeyGestureEvent -> inputManager.registerKeyGestureEventListener(executor) { event: KeyGestureEvent -> assertEquals(HOME_GESTURE_EVENT, event) callbackCount++ } Loading