Use Fake context and settings provider to prevent test flakiness

**Root cause**
The ReduceBrightColorsIntensityPreferenceControllerTest would modify the
settings during test. However, since this is a unit test, it shouldn't
trigger modifying the brightness on the attached test device. Otherwise,
the test would be unstable depends on how stable the device is, which
should be tested by the integration test.

Bug: 397762527
Test: abtd
Flag: EXEMPT test only
Change-Id: I0c0d7327d4356482295121c11c3a1e5ed814ffec
diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp
index 07df3c8..2be75ec 100644
--- a/tests/unit/Android.bp
+++ b/tests/unit/Android.bp
@@ -31,6 +31,7 @@
         "mockito-target-minus-junit4",
         "platform-test-annotations",
         "platform-test-rules",
+        "testables",
         "truth",
         "kotlinx_coroutines_test",
         "SettingsLibPreference-testutils",
diff --git a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java
index bc4709b..371904e 100644
--- a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsIntensityPreferenceControllerTest.java
@@ -18,16 +18,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.res.Resources;
 import android.platform.test.annotations.DisableFlags;
 import android.platform.test.annotations.EnableFlags;
 import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.Settings;
+import android.testing.TestableContext;
+import android.testing.TestableResources;
 
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -46,16 +42,15 @@
 
     @Rule
     public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+    @Rule
+    public final TestableContext mContext =
+            new TestableContext(ApplicationProvider.getApplicationContext());
 
-    private Context mContext;
-    private Resources mResources;
+    private TestableResources mResources = mContext.getOrCreateTestableResources();
     private ReduceBrightColorsIntensityPreferenceController mPreferenceController;
 
     @Before
     public void setUp() {
-        mContext = spy(ApplicationProvider.getApplicationContext());
-        mResources = spy(mContext.getResources());
-        when(mContext.getResources()).thenReturn(mResources);
         mPreferenceController = new ReduceBrightColorsIntensityPreferenceController(mContext,
                 "rbc_intensity");
     }
@@ -63,12 +58,10 @@
     @Test
     @DisableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOffAndDisabled_RbcOnAndAvailable_returnTrue() {
-        doReturn(false).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
-        doReturn(true).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
 
         assertThat(mPreferenceController.isAvailable()).isTrue();
     }
@@ -76,12 +69,11 @@
     @Test
     @DisableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOffAndDisabled_RbcOffAndAvailable_returnTrue() {
-        doReturn(false).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 0);
-        doReturn(true).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(
+                R.bool.config_reduceBrightColorsAvailable, true);
 
         assertThat(mPreferenceController.isAvailable()).isTrue();
     }
@@ -89,12 +81,10 @@
     @Test
     @DisableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOffAndDisabled_RbcOnAndUnavailable_returnFalse() {
-        doReturn(false).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
-        doReturn(false).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, false);
 
         assertThat(mPreferenceController.isAvailable()).isFalse();
     }
@@ -102,12 +92,10 @@
     @Test
     @EnableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOnAndDisabled_RbcOnAndAvailable_returnTrue() {
-        doReturn(false).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
-        doReturn(true).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
 
         assertThat(mPreferenceController.isAvailable()).isTrue();
     }
@@ -115,12 +103,10 @@
     @Test
     @EnableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOnAndDisabled_RbcOffAndAvailable_returnTrue() {
-        doReturn(false).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 0);
-        doReturn(true).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
 
         assertThat(mPreferenceController.isAvailable()).isTrue();
     }
@@ -128,12 +114,10 @@
     @Test
     @EnableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOnAndDisabled_RbcOnAndUnavailable_returnFalse() {
-        doReturn(false).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
-        doReturn(false).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, false);
 
         assertThat(mPreferenceController.isAvailable()).isFalse();
     }
@@ -141,12 +125,10 @@
     @Test
     @EnableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOnAndEnabled_RbcOnAndAvailable_returnFalse() {
-        doReturn(true).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, true);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
-        doReturn(true).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
 
         assertThat(mPreferenceController.isAvailable()).isFalse();
     }
@@ -154,12 +136,10 @@
     @Test
     @EnableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOnAndEnabled_RbcOffAndAvailable_returnFalse() {
-        doReturn(true).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, true);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 0);
-        doReturn(true).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, true);
 
         assertThat(mPreferenceController.isAvailable()).isFalse();
     }
@@ -167,12 +147,10 @@
     @Test
     @EnableFlags(Flags.FLAG_EVEN_DIMMER)
     public void isAvailable_whenEvenDimmerOnAndEnabled_RbcOnAndUnavailable_returnFalse() {
-        doReturn(true).when(mResources).getBoolean(
-                com.android.internal.R.bool.config_evenDimmerEnabled);
+        mResources.addOverride(com.android.internal.R.bool.config_evenDimmerEnabled, true);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, 1);
-        doReturn(false).when(mResources).getBoolean(
-                R.bool.config_reduceBrightColorsAvailable);
+        mResources.addOverride(R.bool.config_reduceBrightColorsAvailable, false);
 
         assertThat(mPreferenceController.isAvailable()).isFalse();
     }
diff --git a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java
index ef27d73..76efd1c 100644
--- a/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceControllerTest.java
@@ -18,13 +18,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.content.Context;
 import android.provider.Settings;
+import android.testing.TestableContext;
 
 import androidx.preference.SwitchPreference;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -37,7 +38,9 @@
     private static final int OFF = 0;
     private static final int UNKNOWN = -1;
 
-    private final Context mContext = ApplicationProvider.getApplicationContext();
+    @Rule
+    public final TestableContext mContext =
+            new TestableContext(ApplicationProvider.getApplicationContext());
     private final SwitchPreference mPreference = new SwitchPreference(mContext);
     private final ReduceBrightColorsPersistencePreferenceController mController =
             new ReduceBrightColorsPersistencePreferenceController(mContext, PREF_KEY);