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
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 48100a3..edc9989 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -289,11 +289,12 @@
getActivity().finish();
return;
}
- ThreadUtils.postOnMainThread(() -> updateHardKeyboards(newHardKeyboards));
+ ThreadUtils.postOnMainThread(() -> updateHardKeyboards(context, newHardKeyboards));
});
}
- private void updateHardKeyboards(@NonNull List<HardKeyboardDeviceInfo> newHardKeyboards) {
+ private void updateHardKeyboards(@NonNull Context context,
+ @NonNull List<HardKeyboardDeviceInfo> newHardKeyboards) {
if (Objects.equals(mLastHardKeyboards, newHardKeyboards)) {
// Nothing has changed. Ignore.
return;
@@ -316,7 +317,7 @@
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 @@
vendorAndProductId.append("-");
vendorAndProductId.append(productId);
mMetricsFeatureProvider.action(
- getContext(),
+ context,
SettingsEnums.ACTION_USE_SPECIFIC_KEYBOARD,
vendorAndProductId.toString());
}
@@ -352,10 +353,10 @@
|| 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 @@
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 @@
@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());
}
}
};