From c0f4e11076b87ad7993b5f62abdb4067c1936c51 Mon Sep 17 00:00:00 2001 From: Peter Liang Date: Fri, 9 Dec 2022 20:42:47 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20the=20summary=20of=20Color=20inversion=20?= =?UTF-8?q?or=20correction=20didn=E2=80=99t=20be=20updated=20after=20the?= =?UTF-8?q?=20content=20change.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Action: Observe the settings content change and then update the corresponding preference state. Bug: 245441772 Test: manual test Change-Id: I6205c2ebe0d1eda141e9b3bd00e4a21dfdba1760 --- .../accessibility/ColorAndMotionFragment.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/accessibility/ColorAndMotionFragment.java b/src/com/android/settings/accessibility/ColorAndMotionFragment.java index 7f550537766..921aa4e9745 100644 --- a/src/com/android/settings/accessibility/ColorAndMotionFragment.java +++ b/src/com/android/settings/accessibility/ColorAndMotionFragment.java @@ -19,6 +19,7 @@ package com.android.settings.accessibility; import android.app.settings.SettingsEnums; import android.hardware.display.ColorDisplayManager; import android.os.Bundle; +import android.os.Handler; import android.provider.Settings; import androidx.preference.Preference; @@ -28,8 +29,12 @@ import androidx.preference.SwitchPreference; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.search.SearchIndexable; +import java.util.ArrayList; +import java.util.List; + /** Accessibility settings for color and motion. */ @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) public class ColorAndMotionFragment extends DashboardFragment { @@ -46,18 +51,48 @@ public class ColorAndMotionFragment extends DashboardFragment { private Preference mDisplayDaltonizerPreferenceScreen; private SwitchPreference mToggleDisableAnimationsPreference; private SwitchPreference mToggleLargePointerIconPreference; + private AccessibilitySettingsContentObserver mSettingsContentObserver; + + private final List mShortcutFeatureKeys = new ArrayList<>(); @Override public int getMetricsCategory() { return SettingsEnums.ACCESSIBILITY_COLOR_AND_MOTION; } - @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); initializeAllPreferences(); updateSystemPreferences(); + + mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED); + mShortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED); + + mSettingsContentObserver = new AccessibilitySettingsContentObserver(new Handler()); + mSettingsContentObserver.registerKeysToObserverCallback(mShortcutFeatureKeys, + key -> updatePreferencesState()); + } + + private void updatePreferencesState() { + final List controllers = new ArrayList<>(); + getPreferenceControllers().forEach(controllers::addAll); + controllers.forEach(controller -> controller.updateState( + findPreference(controller.getPreferenceKey()))); + } + + @Override + public void onStart() { + super.onStart(); + + mSettingsContentObserver.register(getContentResolver()); + } + + @Override + public void onStop() { + super.onStop(); + + mSettingsContentObserver.unregister(getContentResolver()); } @Override