Fix Startup fails when click "Color correction" of the selection menu in "Color correction" page

Setting provider observar is register onResume() and release of onPause().
The selection menu is activity-base dialog to cause the app does not to monitor the value change.

Bug: 148832544
Test: Manual test
Change-Id: I01354d5096c00ba39336e27aa45169d8768f8594
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index 36b2da1..6d64a23 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -89,10 +89,8 @@
     @Override
     public void onResume() {
         super.onResume();
-
-        mSettingsContentObserver.register(getContentResolver());
-
         updateSwitchBarToggleSwitch();
+        mSettingsContentObserver.register(getContentResolver());
     }
 
     @Override
@@ -199,6 +197,9 @@
     private void updateSwitchBarToggleSwitch() {
         final boolean checked = AccessibilityUtils.getEnabledServicesFromSettings(getPrefContext())
                 .contains(mComponentName);
+        if (mSwitchBar.isChecked() == checked) {
+            return;
+        }
         mSwitchBar.setCheckedInternal(checked);
     }
 
diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
index 283fa90..d25be83 100644
--- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
@@ -17,6 +17,8 @@
 package com.android.settings.accessibility;
 
 import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME;
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
 
 import android.app.settings.SettingsEnums;
 import android.net.Uri;
@@ -26,13 +28,11 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Switch;
 
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.accessibility.AccessibilityUtil.State;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.search.SearchIndexable;
@@ -42,8 +42,7 @@
 
 /** Settings page for color inversion. */
 @SearchIndexable
-public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment
-        implements SwitchBar.OnSwitchChangeListener {
+public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment {
 
     private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED;
     private static final String CATEGORY_FOOTER_KEY = "color_inversion_footer_category";
@@ -58,7 +57,7 @@
 
     @Override
     protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
-        Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? State.OFF : State.ON);
+        Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? ON : OFF);
     }
 
     @Override
@@ -69,7 +68,7 @@
     @Override
     protected void onRemoveSwitchBarToggleSwitch() {
         super.onRemoveSwitchBarToggleSwitch();
-        mSwitchBar.removeOnSwitchChangeListener(this);
+        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
     }
 
     @Override
@@ -79,16 +78,13 @@
     }
 
     @Override
-    public void onSwitchChanged(Switch switchView, boolean isChecked) {
-        Settings.Secure.putInt(getContentResolver(), ENABLED, isChecked ? State.ON : State.OFF);
-    }
-
-    @Override
     protected void onInstallSwitchBarToggleSwitch() {
         super.onInstallSwitchBarToggleSwitch();
-        mSwitchBar.setCheckedInternal(
-                Settings.Secure.getInt(getContentResolver(), ENABLED, State.OFF) == State.ON);
-        mSwitchBar.addOnSwitchChangeListener(this);
+        updateSwitchBarToggleSwitch();
+        mToggleSwitch.setOnBeforeCheckedChangeListener((toggleSwitch, checked) -> {
+            onPreferenceToggled(mPreferenceKey, checked);
+            return false;
+        });
     }
 
     @Override
@@ -101,9 +97,7 @@
         mSettingsContentObserver = new SettingsContentObserver(mHandler, enableServiceFeatureKeys) {
             @Override
             public void onChange(boolean selfChange, Uri uri) {
-                mSwitchBar.setCheckedInternal(
-                        Settings.Secure.getInt(getContentResolver(), ENABLED, State.OFF)
-                                == State.ON);
+                updateSwitchBarToggleSwitch();
             }
         };
         return super.onCreateView(inflater, container, savedInstanceState);
@@ -123,6 +117,7 @@
     @Override
     public void onResume() {
         super.onResume();
+        updateSwitchBarToggleSwitch();
         mSettingsContentObserver.register(getContentResolver());
     }
 
@@ -138,6 +133,14 @@
         showDialog(DIALOG_ID_EDIT_SHORTCUT);
     }
 
+    private void updateSwitchBarToggleSwitch() {
+        final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON;
+        if (mSwitchBar.isChecked() == checked) {
+            return;
+        }
+        mSwitchBar.setCheckedInternal(checked);
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.accessibility_color_inversion_settings);
 }
diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
index 493140c..9a6aefd 100644
--- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -17,6 +17,8 @@
 package com.android.settings.accessibility;
 
 import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME;
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
 
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -28,14 +30,12 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Switch;
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.accessibility.AccessibilityUtil.State;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -47,8 +47,7 @@
 
 @SearchIndexable
 public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePreferenceFragment
-        implements DaltonizerRadioButtonPreferenceController.OnChangeListener,
-        SwitchBar.OnSwitchChangeListener{
+        implements DaltonizerRadioButtonPreferenceController.OnChangeListener {
 
     private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED;
     private static final String CATEGORY_FOOTER_KEY = "daltonizer_footer_category";
@@ -88,9 +87,7 @@
         mSettingsContentObserver = new SettingsContentObserver(mHandler, enableServiceFeatureKeys) {
             @Override
             public void onChange(boolean selfChange, Uri uri) {
-                mSwitchBar.setCheckedInternal(
-                        Settings.Secure.getInt(getContentResolver(), ENABLED, State.OFF)
-                                == State.ON);
+                updateSwitchBarToggleSwitch();
             }
         };
         return super.onCreateView(inflater, container, savedInstanceState);
@@ -109,7 +106,9 @@
     @Override
     public void onResume() {
         super.onResume();
+        updateSwitchBarToggleSwitch();
         mSettingsContentObserver.register(getContentResolver());
+
         for (AbstractPreferenceController controller :
                 buildPreferenceControllers(getPrefContext(), getSettingsLifecycle())) {
             ((DaltonizerRadioButtonPreferenceController) controller).setOnChangeListener(this);
@@ -145,13 +144,13 @@
 
     @Override
     protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
-        Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? State.OFF : State.ON);
+        Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? ON : OFF);
     }
 
     @Override
     protected void onRemoveSwitchBarToggleSwitch() {
         super.onRemoveSwitchBarToggleSwitch();
-        mSwitchBar.removeOnSwitchChangeListener(this);
+        mToggleSwitch.setOnBeforeCheckedChangeListener(null);
     }
 
     @Override
@@ -161,16 +160,13 @@
     }
 
     @Override
-    public void onSwitchChanged(Switch switchView, boolean isChecked) {
-        Settings.Secure.putInt(getContentResolver(), ENABLED, isChecked ? State.ON : State.OFF);
-    }
-
-    @Override
     protected void onInstallSwitchBarToggleSwitch() {
         super.onInstallSwitchBarToggleSwitch();
-        mSwitchBar.setCheckedInternal(
-                Settings.Secure.getInt(getContentResolver(), ENABLED, State.OFF) == State.ON);
-        mSwitchBar.addOnSwitchChangeListener(this);
+        updateSwitchBarToggleSwitch();
+        mToggleSwitch.setOnBeforeCheckedChangeListener((toggleSwitch, checked) -> {
+            onPreferenceToggled(mPreferenceKey, checked);
+            return false;
+        });
     }
 
     @Override
@@ -179,6 +175,14 @@
         showDialog(DialogEnums.EDIT_SHORTCUT);
     }
 
+    private void updateSwitchBarToggleSwitch() {
+        final boolean checked = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON;
+        if (mSwitchBar.isChecked() == checked) {
+            return;
+        }
+        mSwitchBar.setCheckedInternal(checked);
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.accessibility_daltonizer_settings);
 }