From 99801206ab3aac841661139e245b6f5e862356f9 Mon Sep 17 00:00:00 2001 From: Vania Januar Date: Wed, 12 Apr 2023 11:57:42 +0100 Subject: [PATCH] StylusManager registers bluetooth devices present before start. In case SystemUI crashes and StylusManager restarts, StylusManager will now detect currently connected bluetooth devices at start. Bug: 277738343 Test: StylusManagerTest Change-Id: If94992e14ab8a0025062fe44ac5c54d6c21a7627 --- .../android/systemui/stylus/StylusManager.kt | 2 ++ .../systemui/stylus/StylusManagerTest.kt | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt b/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt index 3805019d597ff..412b3150489cc 100644 --- a/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt +++ b/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt @@ -353,6 +353,8 @@ constructor( // before CoreStartables run, and will not be removed. // In many cases, it reports the battery level of the stylus. registerBatteryListener(deviceId) + } else if (device.bluetoothAddress != null) { + onStylusBluetoothConnected(deviceId, device.bluetoothAddress) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt index 17f8ec2136a42..0b3dd660532b8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt @@ -101,9 +101,12 @@ class StylusManagerTest : SysuiTestCase() { whenever(stylusDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(true) whenever(btStylusDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(true) + whenever(btStylusDevice.isExternal).thenReturn(true) + whenever(stylusDevice.bluetoothAddress).thenReturn(null) whenever(btStylusDevice.bluetoothAddress).thenReturn(STYLUS_BT_ADDRESS) + whenever(btStylusDevice.batteryState).thenReturn(batteryState) whenever(stylusDevice.batteryState).thenReturn(batteryState) whenever(batteryState.capacity).thenReturn(0.5f) @@ -147,6 +150,27 @@ class StylusManagerTest : SysuiTestCase() { verify(inputManager, times(1)).registerInputDeviceListener(any(), any()) } + @Test + fun startListener_hasNotStarted_registersExistingBluetoothDevice() { + whenever(inputManager.inputDeviceIds).thenReturn(intArrayOf(BT_STYLUS_DEVICE_ID)) + + stylusManager = + StylusManager( + mContext, + inputManager, + bluetoothAdapter, + handler, + EXECUTOR, + featureFlags, + uiEventLogger + ) + + stylusManager.startListener() + + verify(bluetoothAdapter, times(1)) + .addOnMetadataChangedListener(bluetoothDevice, EXECUTOR, stylusManager) + } + @Test fun startListener_hasStarted_doesNothing() { stylusManager.startListener()