Merge "Fix crash: ArrayIndexOutOfBounds on restoring backlight" into udc-dev am: 78a9212630

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22806556

Change-Id: I21683f6c4864e4e49daa7756b75604eedd9b118f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Vaibhav Devmurari
2023-04-24 11:07:31 +00:00
committed by Automerger Merge Worker
2 changed files with 22 additions and 15 deletions

View File

@@ -199,8 +199,11 @@ final class KeyboardBacklightController implements
} }
if (brightness.isPresent()) { if (brightness.isPresent()) {
int brightnessValue = Math.max(0, Math.min(MAX_BRIGHTNESS, brightness.getAsInt())); int brightnessValue = Math.max(0, Math.min(MAX_BRIGHTNESS, brightness.getAsInt()));
int brightnessLevel = Arrays.binarySearch(BRIGHTNESS_VALUE_FOR_LEVEL, brightnessValue); int index = Arrays.binarySearch(BRIGHTNESS_VALUE_FOR_LEVEL, brightnessValue);
updateBacklightState(inputDevice.getId(), keyboardBacklight, brightnessLevel, if (index < 0) {
index = Math.min(NUM_BRIGHTNESS_CHANGE_STEPS, -(index + 1));
}
updateBacklightState(inputDevice.getId(), keyboardBacklight, index,
false /* isTriggeredByKeyPress */); false /* isTriggeredByKeyPress */);
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, "Restoring brightness level " + brightness.getAsInt()); Slog.d(TAG, "Restoring brightness level " + brightness.getAsInt());

View File

@@ -250,20 +250,24 @@ class KeyboardBacklightControllerTests {
`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight) `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
`when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight)) `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
for (level in 1 until BRIGHTNESS_VALUE_FOR_LEVEL.size) {
dataStore.setKeyboardBacklightBrightness( dataStore.setKeyboardBacklightBrightness(
keyboardWithBacklight.descriptor, keyboardWithBacklight.descriptor,
LIGHT_ID, LIGHT_ID,
MAX_BRIGHTNESS BRIGHTNESS_VALUE_FOR_LEVEL[level] - 1
) )
keyboardBacklightController.onInputDeviceAdded(DEVICE_ID) keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
keyboardBacklightController.notifyUserActivity() keyboardBacklightController.notifyUserActivity()
testLooper.dispatchNext() testLooper.dispatchNext()
assertEquals( assertEquals(
"Keyboard backlight level should be restored to the level saved in the data store", "Keyboard backlight level should be restored to the level saved in the data " +
Color.argb(MAX_BRIGHTNESS, 0, 0, 0), "store",
Color.argb(BRIGHTNESS_VALUE_FOR_LEVEL[level], 0, 0, 0),
lightColorMap[LIGHT_ID] lightColorMap[LIGHT_ID]
) )
keyboardBacklightController.onInputDeviceRemoved(DEVICE_ID)
}
} }
@Test @Test