From a1af0493780344ed2be130a4dd7a2be38949be6b Mon Sep 17 00:00:00 2001 From: Vania Januar Date: Thu, 27 Apr 2023 15:51:13 +0100 Subject: [PATCH] Guard against null input device in StylusDeviceUpdater Bug: 279170207 Test: StylusDeviceUpdaterTest Change-Id: Ib4a3f12eaceb87370c800a9dc7eda819c706cd3b --- .../stylus/StylusDeviceUpdater.java | 9 ++++++++- .../stylus/StylusDeviceUpdaterTest.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java b/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java index da6e1789b0c..947c5acc83b 100644 --- a/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java +++ b/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java @@ -100,6 +100,8 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, @Override public void onInputDeviceAdded(int deviceId) { InputDevice inputDevice = mInputManager.getInputDevice(deviceId); + if (inputDevice == null) return; + if (inputDevice.supportsSource(InputDevice.SOURCE_STYLUS) && !inputDevice.isExternal()) { try { @@ -121,7 +123,10 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, @Override public void onInputDeviceChanged(int deviceId) { - if (mInputManager.getInputDevice(deviceId).supportsSource(InputDevice.SOURCE_STYLUS)) { + InputDevice inputDevice = mInputManager.getInputDevice(deviceId); + if (inputDevice == null) return; + + if (inputDevice.supportsSource(InputDevice.SOURCE_STYLUS)) { forceUpdate(); } } @@ -189,6 +194,8 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, boolean hasConnectedBluetoothStylusDevice() { for (int deviceId : mInputManager.getInputDeviceIds()) { InputDevice device = mInputManager.getInputDevice(deviceId); + if (device == null) continue; + if (device.supportsSource(InputDevice.SOURCE_STYLUS) && mInputManager.getInputDeviceBluetoothAddress(deviceId) != null) { return true; diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java index 7fb17e2eb2c..afdbb8beba2 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import android.content.Context; import android.content.Intent; @@ -108,6 +109,15 @@ public class StylusDeviceUpdaterTest { any()); } + @Test + public void onInputDeviceAdded_null_doesNothing() { + doReturn(null).when(mInputManager).getInputDevice(0); + mStylusDeviceUpdater.onInputDeviceAdded(0); + + verify(mInputManager).getInputDevice(0); + verifyNoMoreInteractions(mInputManager); + } + @Test public void onInputDeviceAdded_internalStylus_registersBatteryListener() { mStylusDeviceUpdater.onInputDeviceAdded(1); @@ -124,6 +134,15 @@ public class StylusDeviceUpdaterTest { any()); } + @Test + public void onInputDeviceChanged_null_doesNothing() { + doReturn(null).when(mInputManager).getInputDevice(0); + mStylusDeviceUpdater.onInputDeviceChanged(0); + + verify(mInputManager).getInputDevice(0); + verifyNoMoreInteractions(mInputManager); + } + @Test public void click_usiPreference_launchUsiDetailsPage() { doReturn(mSettingsActivity).when(mDashboardFragment).getContext();