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);
