From 785af0c15ab9e2177da43ecf081498877243e558 Mon Sep 17 00:00:00 2001 From: Peter_Liang Date: Tue, 12 May 2020 14:10:21 +0800 Subject: [PATCH] Add the settings content observer for shortcut preference. Root cause: Didn't update the UI when settings value chagned. Next: Add the settings content observer. Bug: 155837154 Test: manual test Change-Id: Icee0bb50f88987ea6c8a0be59bd936628a32ca1e --- .../ToggleFeaturePreferenceFragment.java | 19 +++++++++++++++++-- ...ScreenMagnificationPreferenceFragment.java | 6 ++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 6b0759a92e1..f8b64fb7949 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -30,6 +30,7 @@ import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; import android.os.UserHandle; import android.provider.Settings; import android.text.Html; @@ -96,6 +97,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference private int mUserShortcutTypes = UserShortcutType.EMPTY; private CheckBox mSoftwareTypeCheckBox; private CheckBox mHardwareTypeCheckBox; + private SettingsContentObserver mSettingsContentObserver; // For html description of accessibility service, must follow the rule, such as // , a11y settings will get the resources successfully. @@ -133,6 +135,17 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference removeDialog(DialogEnums.EDIT_SHORTCUT); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); }; + + final List shortcutFeatureKeys = new ArrayList<>(); + shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS); + shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE); + mSettingsContentObserver = new SettingsContentObserver(new Handler(), shortcutFeatureKeys) { + @Override + public void onChange(boolean selfChange, Uri uri) { + updateShortcutPreferenceData(); + updateShortcutPreference(); + } + }; return super.onCreateView(inflater, container, savedInstanceState); } @@ -229,6 +242,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference final AccessibilityManager am = getPrefContext().getSystemService( AccessibilityManager.class); am.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + mSettingsContentObserver.register(getContentResolver()); updateShortcutPreferenceData(); updateShortcutPreference(); } @@ -238,6 +252,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference final AccessibilityManager am = getPrefContext().getSystemService( AccessibilityManager.class); am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + mSettingsContentObserver.unregister(getContentResolver()); super.onPause(); } @@ -618,7 +633,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference getShortcutTypeSummary(getPrefContext())); } - private void updateShortcutPreferenceData() { + protected void updateShortcutPreferenceData() { if (mComponentName == null) { return; } @@ -651,7 +666,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference mShortcutPreference.setTitle(title); } - private void updateShortcutPreference() { + protected void updateShortcutPreference() { if (mComponentName == null) { return; } diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 23fb153b5bf..52f8f71d57c 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -467,7 +467,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends showDialog(DialogEnums.MAGNIFICATION_EDIT_SHORTCUT); } - private void updateShortcutPreferenceData() { + @Override + protected void updateShortcutPreferenceData() { // Get the user shortcut type from settings provider. mUserShortcutType = getUserShortcutTypeFromSettings(getPrefContext()); if (mUserShortcutType != UserShortcutType.EMPTY) { @@ -489,7 +490,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends mShortcutPreference.setTitle(title); } - private void updateShortcutPreference() { + @Override + protected void updateShortcutPreference() { final int shortcutTypes = getUserShortcutTypes(getPrefContext(), UserShortcutType.SOFTWARE); mShortcutPreference.setChecked( hasMagnificationValuesInSettings(getPrefContext(), shortcutTypes));