From 68d5492bafe5cc1947ec5b02c4e1bff347616926 Mon Sep 17 00:00:00 2001 From: Arpit Singh Date: Wed, 16 Oct 2024 10:55:08 +0000 Subject: [PATCH] Fix a crash in PhysicalKeyboardFragment The crash is caused by using getContext() in a background thread. This CL changes it to use the context passed in as a parameter. Bug: 373789342 Change-Id: Ia0197640b3d01cf305bfd9ebc8465b0c8e0dc016 Test: manual and presubmit Flag: EXEMPT bugfix --- .../inputmethod/PhysicalKeyboardFragment.java | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java index 48100a3081d..edc99897a70 100644 --- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java +++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java @@ -289,11 +289,12 @@ public final class PhysicalKeyboardFragment extends DashboardFragment getActivity().finish(); return; } - ThreadUtils.postOnMainThread(() -> updateHardKeyboards(newHardKeyboards)); + ThreadUtils.postOnMainThread(() -> updateHardKeyboards(context, newHardKeyboards)); }); } - private void updateHardKeyboards(@NonNull List newHardKeyboards) { + private void updateHardKeyboards(@NonNull Context context, + @NonNull List newHardKeyboards) { if (Objects.equals(mLastHardKeyboards, newHardKeyboards)) { // Nothing has changed. Ignore. return; @@ -316,7 +317,7 @@ public final class PhysicalKeyboardFragment extends DashboardFragment final Preference pref = new Preference(getPrefContext()); pref.setTitle(hardKeyboardDeviceInfo.mDeviceName); String currentLayout = - NewKeyboardSettingsUtils.getSelectedKeyboardLayoutLabelForUser(getContext(), + NewKeyboardSettingsUtils.getSelectedKeyboardLayoutLabelForUser(context, UserHandle.myUserId(), hardKeyboardDeviceInfo.mDeviceIdentifier); if (currentLayout != null) { pref.setSummary(currentLayout); @@ -336,7 +337,7 @@ public final class PhysicalKeyboardFragment extends DashboardFragment vendorAndProductId.append("-"); vendorAndProductId.append(productId); mMetricsFeatureProvider.action( - getContext(), + context, SettingsEnums.ACTION_USE_SPECIFIC_KEYBOARD, vendorAndProductId.toString()); } @@ -352,10 +353,10 @@ public final class PhysicalKeyboardFragment extends DashboardFragment || InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2); preferenceScreen.addPreference(mKeyboardA11yCategory); - updateAccessibilityBounceKeysSwitch(); - updateAccessibilitySlowKeysSwitch(); - updateAccessibilityStickyKeysSwitch(); - updateAccessibilityMouseKeysSwitch(); + updateAccessibilityBounceKeysSwitch(context); + updateAccessibilitySlowKeysSwitch(context); + updateAccessibilityStickyKeysSwitch(context); + updateAccessibilityMouseKeysSwitch(context); } } @@ -413,46 +414,47 @@ public final class PhysicalKeyboardFragment extends DashboardFragment mContentObserver, UserHandle.myUserId()); } - updateAccessibilityBounceKeysSwitch(); - updateAccessibilitySlowKeysSwitch(); - updateAccessibilityStickyKeysSwitch(); - updateAccessibilityMouseKeysSwitch(); + final Context context = getContext(); + updateAccessibilityBounceKeysSwitch(context); + updateAccessibilitySlowKeysSwitch(context); + updateAccessibilityStickyKeysSwitch(context); + updateAccessibilityMouseKeysSwitch(context); } private void unregisterSettingsObserver() { getActivity().getContentResolver().unregisterContentObserver(mContentObserver); } - private void updateAccessibilityBounceKeysSwitch() { + private void updateAccessibilityBounceKeysSwitch(@NonNull Context context) { if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled()) { return; } Objects.requireNonNull(mAccessibilityBounceKeys).setChecked( - InputSettings.isAccessibilityBounceKeysEnabled(getContext())); + InputSettings.isAccessibilityBounceKeysEnabled(context)); } - private void updateAccessibilitySlowKeysSwitch() { + private void updateAccessibilitySlowKeysSwitch(@NonNull Context context) { if (!InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) { return; } Objects.requireNonNull(mAccessibilitySlowKeys).setChecked( - InputSettings.isAccessibilitySlowKeysEnabled(getContext())); + InputSettings.isAccessibilitySlowKeysEnabled(context)); } - private void updateAccessibilityStickyKeysSwitch() { + private void updateAccessibilityStickyKeysSwitch(@NonNull Context context) { if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) { return; } Objects.requireNonNull(mAccessibilityStickyKeys).setChecked( - InputSettings.isAccessibilityStickyKeysEnabled(getContext())); + InputSettings.isAccessibilityStickyKeysEnabled(context)); } - private void updateAccessibilityMouseKeysSwitch() { + private void updateAccessibilityMouseKeysSwitch(@NonNull Context context) { if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { return; } Objects.requireNonNull(mAccessibilityMouseKeys).setChecked( - InputSettings.isAccessibilityMouseKeysEnabled(getContext())); + InputSettings.isAccessibilityMouseKeysEnabled(context)); } private void toggleKeyboardShortcutsMenu() { @@ -489,13 +491,13 @@ public final class PhysicalKeyboardFragment extends DashboardFragment @Override public void onChange(boolean selfChange, Uri uri) { if (sAccessibilityBounceKeysUri.equals(uri)) { - updateAccessibilityBounceKeysSwitch(); + updateAccessibilityBounceKeysSwitch(getContext()); } else if (sAccessibilitySlowKeysUri.equals(uri)) { - updateAccessibilitySlowKeysSwitch(); + updateAccessibilitySlowKeysSwitch(getContext()); } else if (sAccessibilityStickyKeysUri.equals(uri)) { - updateAccessibilityStickyKeysSwitch(); + updateAccessibilityStickyKeysSwitch(getContext()); } else if (sAccessibilityMouseKeysUri.equals(uri)) { - updateAccessibilityMouseKeysSwitch(); + updateAccessibilityMouseKeysSwitch(getContext()); } } };