diff --git a/src/com/android/settings/network/AirplaneModePreference.kt b/src/com/android/settings/network/AirplaneModePreference.kt
index 164e3a9..96fbe76 100644
--- a/src/com/android/settings/network/AirplaneModePreference.kt
+++ b/src/com/android/settings/network/AirplaneModePreference.kt
@@ -152,7 +152,7 @@
         data: Intent?,
     ): Boolean {
         if (requestCode == REQUEST_CODE_EXIT_ECM && resultCode == Activity.RESULT_OK) {
-            storage(context).setValue(KEY, Boolean::class.javaObjectType, true)
+            storage(context).setBoolean(KEY, true)
         }
         return true
     }
diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationMainSwitchPreferenceTest.kt b/tests/robotests/src/com/android/settings/accessibility/VibrationMainSwitchPreferenceTest.kt
index fd781bc..17ba358 100644
--- a/tests/robotests/src/com/android/settings/accessibility/VibrationMainSwitchPreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/accessibility/VibrationMainSwitchPreferenceTest.kt
@@ -72,6 +72,6 @@
         preference.createAndBindWidget(context)
 
     private fun setVibrateOn(enabled: Boolean?) =
-        preference.storage(context).setValue(VIBRATE_ON, Boolean::class.javaObjectType, enabled)
+        preference.storage(context).setBoolean(VIBRATE_ON, enabled)
 }
 // LINT.ThenChange(VibrationMainSwitchPreferenceControllerTest.java)
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/BluetoothMainSwitchPreferenceTest.kt b/tests/robotests/src/com/android/settings/connecteddevice/BluetoothMainSwitchPreferenceTest.kt
index 03039ac..15db130 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/BluetoothMainSwitchPreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/connecteddevice/BluetoothMainSwitchPreferenceTest.kt
@@ -29,21 +29,17 @@
 import org.mockito.kotlin.spy
 import org.mockito.kotlin.verify
 import org.mockito.kotlin.whenever
-import org.robolectric.RuntimeEnvironment
 
 @RunWith(AndroidJUnit4::class)
 class BluetoothMainSwitchPreferenceTest {
-    @get:Rule
-    val setFlagsRule = SetFlagsRule()
+    @get:Rule val setFlagsRule = SetFlagsRule()
     private val context: Context = ApplicationProvider.getApplicationContext()
     private lateinit var bluetoothAdapter: BluetoothAdapter
     private lateinit var bluetoothMainSwitchPreference: BluetoothMainSwitchPreference
 
     @Before
     fun setUp() {
-        bluetoothAdapter = spy(
-            BluetoothAdapter.getDefaultAdapter()
-        )
+        bluetoothAdapter = spy(BluetoothAdapter.getDefaultAdapter())
         whenever(bluetoothAdapter.state).thenReturn(BluetoothAdapter.STATE_ON)
         bluetoothMainSwitchPreference = BluetoothMainSwitchPreference(bluetoothAdapter)
     }
@@ -62,19 +58,19 @@
 
     @Test
     fun storageSetOff_turnOff() {
-        bluetoothMainSwitchPreference.storage(context).setValue(
-            bluetoothMainSwitchPreference.key, Boolean::class.javaObjectType, false
-        )
+        bluetoothMainSwitchPreference
+            .storage(context)
+            .setBoolean(bluetoothMainSwitchPreference.key, false)
 
         verify(bluetoothAdapter).disable()
     }
 
     @Test
     fun storageSetOn_turnOn() {
-        bluetoothMainSwitchPreference.storage(context).setValue(
-            bluetoothMainSwitchPreference.key, Boolean::class.javaObjectType, true
-        )
+        bluetoothMainSwitchPreference
+            .storage(context)
+            .setBoolean(bluetoothMainSwitchPreference.key, true)
 
         verify(bluetoothAdapter).enable()
     }
-}
\ No newline at end of file
+}
diff --git a/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt b/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt
index f96b30f..2a9a129 100644
--- a/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt
@@ -117,11 +117,8 @@
         batteryPercentageSwitchPreference.createAndBindWidget(context)
 
     private fun showBatteryPercentage(on: Boolean) =
-        batteryPercentageSwitchPreference
-            .storage(context)
-            .setValue(
+        batteryPercentageSwitchPreference.storage(context).setBoolean(
                 Settings.System.SHOW_BATTERY_PERCENT,
-                Boolean::class.javaObjectType,
                 on,
             )
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreferenceTest.kt b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreferenceTest.kt
index 052ba75..ef190a7 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreferenceTest.kt
@@ -75,18 +75,14 @@
 
     @Test
     fun storeSetOn_setPowerSaveMode() {
-        batterySaverPreference
-            .storage(context)
-            .setValue(batterySaverPreference.key, Boolean::class.javaObjectType, true)
+        batterySaverPreference.storage(context).setBoolean(batterySaverPreference.key, true)
 
         verify(powerManager).setPowerSaveModeEnabled(true)
     }
 
     @Test
     fun storeSetOff_unsetPowerSaveMode() {
-        batterySaverPreference
-            .storage(context)
-            .setValue(batterySaverPreference.key, Boolean::class.javaObjectType, false)
+        batterySaverPreference.storage(context).setBoolean(batterySaverPreference.key, false)
 
         verify(powerManager).setPowerSaveModeEnabled(false)
     }
diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt
index c0ad07e..a06a1fe 100644
--- a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt
@@ -96,11 +96,11 @@
     private fun setAdaptiveConnectivityEnabled(enabled: Boolean) =
         adaptiveConnectivityTogglePreference
             .storage(context)
-            .setValue(ADAPTIVE_CONNECTIVITY_ENABLED, Boolean::class.javaObjectType, enabled)
+            .setBoolean(ADAPTIVE_CONNECTIVITY_ENABLED, enabled)
 
     private fun getAdaptiveConnectivityEnabled() =
         adaptiveConnectivityTogglePreference
             .storage(context)
-            .getValue(ADAPTIVE_CONNECTIVITY_ENABLED, Boolean::class.javaObjectType)
+            .getBoolean(ADAPTIVE_CONNECTIVITY_ENABLED)
 }
 // LINT.ThenChange(AdaptiveConnectivityTogglePreferenceControllerTest.java)
diff --git a/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceTest.kt b/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceTest.kt
index 640ded9..a0f380f 100644
--- a/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/network/AirplaneModePreferenceTest.kt
@@ -88,9 +88,7 @@
         SettingsGlobalStore.get(context).setInt(Settings.Global.AIRPLANE_MODE_ON, 1)
 
         val getValue =
-            airplaneModePreference
-                .storage(context)
-                .getValue(AirplaneModePreference.KEY, Boolean::class.javaObjectType)
+            airplaneModePreference.storage(context).getBoolean(AirplaneModePreference.KEY)
 
         assertThat(getValue).isTrue()
     }
@@ -100,9 +98,7 @@
         SettingsGlobalStore.get(context).setInt(Settings.Global.AIRPLANE_MODE_ON, 0)
 
         val getValue =
-            airplaneModePreference
-                .storage(context)
-                .getValue(AirplaneModePreference.KEY, Boolean::class.javaObjectType)
+            airplaneModePreference.storage(context).getBoolean(AirplaneModePreference.KEY)
 
         assertThat(getValue).isFalse()
     }
diff --git a/tests/unit/src/com/android/settings/wifi/WifiSwitchPreferenceTest.kt b/tests/unit/src/com/android/settings/wifi/WifiSwitchPreferenceTest.kt
index 49d36a9..41de090 100644
--- a/tests/unit/src/com/android/settings/wifi/WifiSwitchPreferenceTest.kt
+++ b/tests/unit/src/com/android/settings/wifi/WifiSwitchPreferenceTest.kt
@@ -49,9 +49,7 @@
     fun getValue_defaultOn_returnOn() {
         mockWifiManager.stub { on { isWifiEnabled } doReturn true }
 
-        val getValue = wifiSwitchPreference
-            .storage(context)
-            .getValue(WifiSwitchPreference.KEY, Boolean::class.javaObjectType)
+        val getValue = wifiSwitchPreference.storage(context).getBoolean(WifiSwitchPreference.KEY)
 
         assertThat(getValue).isTrue()
     }
@@ -60,9 +58,7 @@
     fun getValue_defaultOff_returnOff() {
         mockWifiManager.stub { on { isWifiEnabled } doReturn false }
 
-        val getValue = wifiSwitchPreference
-            .storage(context)
-            .getValue(WifiSwitchPreference.KEY, Boolean::class.javaObjectType)
+        val getValue = wifiSwitchPreference.storage(context).getBoolean(WifiSwitchPreference.KEY)
 
         assertThat(getValue).isFalse()
     }
@@ -87,4 +83,4 @@
 
     private fun getSwitchPreference(): SwitchPreferenceCompat =
         wifiSwitchPreference.createAndBindWidget(context)
-}
\ No newline at end of file
+}
