diff --git a/src/com/android/settings/accessibility/ToggleForceInvertPreferenceController.java b/src/com/android/settings/accessibility/ToggleForceInvertPreferenceController.java index 3f2cc130ffe..be738e31efa 100644 --- a/src/com/android/settings/accessibility/ToggleForceInvertPreferenceController.java +++ b/src/com/android/settings/accessibility/ToggleForceInvertPreferenceController.java @@ -16,11 +16,16 @@ package com.android.settings.accessibility; +import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; +import static com.android.settings.accessibility.AccessibilityUtil.State.ON; + import android.content.Context; +import android.content.res.Configuration; import android.provider.Settings; import android.view.accessibility.Flags; -import androidx.annotation.VisibleForTesting; +import androidx.annotation.NonNull; +import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; @@ -28,27 +33,28 @@ import com.android.settings.core.TogglePreferenceController; /** A toggle preference controller for force invert (force dark). */ public class ToggleForceInvertPreferenceController extends TogglePreferenceController { - public static final String SETTINGS_KEY = - Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED; - - @VisibleForTesting - static final int ON = 1; - @VisibleForTesting - static final int OFF = 0; - public ToggleForceInvertPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public boolean isChecked() { - return Settings.Secure.getInt(mContext.getContentResolver(), SETTINGS_KEY, OFF) != OFF; + return Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED, OFF) != OFF; } @Override public boolean setChecked(boolean isChecked) { return Settings.Secure.putInt(mContext.getContentResolver(), - SETTINGS_KEY, isChecked ? ON : OFF); + Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED, isChecked ? ON : OFF); + } + + @Override + public void updateState(@NonNull Preference preference) { + super.updateState(preference); + final boolean isDarkModeActivated = (mContext.getResources().getConfiguration().uiMode + & Configuration.UI_MODE_NIGHT_YES) != 0; + preference.setEnabled(isDarkModeActivated); } @Override diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleForceInvertPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleForceInvertPreferenceControllerTest.java index e4fd2c8b8a3..a2b259f60e2 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleForceInvertPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleForceInvertPreferenceControllerTest.java @@ -23,13 +23,18 @@ import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import android.content.Context; +import android.content.res.Configuration; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.provider.Settings; +import androidx.preference.Preference; import androidx.test.core.app.ApplicationProvider; import com.android.settings.core.BasePreferenceController; @@ -69,6 +74,30 @@ public class ToggleForceInvertPreferenceControllerTest { .isEqualTo(BasePreferenceController.AVAILABLE); } + @Test + public void updateState_darkModeOn_preferenceEnabled() { + Configuration config = mContext.getResources().getConfiguration(); + config.uiMode = Configuration.UI_MODE_NIGHT_YES; + mContext.getResources().updateConfiguration(config, null); + + Preference preference = mock(Preference.class); + mController.updateState(preference); + + verify(preference).setEnabled(true); + } + + @Test + public void updateState_darkModeOff_preferenceDisabled() { + Configuration config = mContext.getResources().getConfiguration(); + config.uiMode = Configuration.UI_MODE_NIGHT_NO; + mContext.getResources().updateConfiguration(config, null); + + Preference preference = mock(Preference.class); + mController.updateState(preference); + + verify(preference).setEnabled(false); + } + @Test public void settingOff_reflectsCorrectValue() { setEnabled(false);