From 206d27d778ba88e5e02ca4e922624a353d33abd2 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Fri, 7 Mar 2025 00:25:32 +0800 Subject: [PATCH] [Catalyst] Extract datastore for VibrationMainSwitchPreference NO_IFTTT=Catalyst only Bug: 368360218 Flag: EXEMPT refactor Test: atest Change-Id: I3c308b0ed1462a10ddd0daf55f30996a23e747d7 --- .../VibrationMainSwitchPreference.kt | 51 ++++++++++--------- .../VibrationIntensityScreenTest.kt | 14 ++--- .../accessibility/VibrationScreenTest.kt | 13 ++--- 3 files changed, 42 insertions(+), 36 deletions(-) diff --git a/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt b/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt index 9c182886d18..c488e27b700 100644 --- a/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt +++ b/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt @@ -26,7 +26,6 @@ import com.android.settings.contract.KEY_VIBRATION_HAPTICS import com.android.settings.metrics.PreferenceActionMetricsProvider import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedObservableDelegate -import com.android.settingslib.datastore.SettingsStore import com.android.settingslib.datastore.SettingsSystemStore import com.android.settingslib.metadata.BooleanValuePreference import com.android.settingslib.metadata.PreferenceMetadata @@ -56,8 +55,7 @@ class VibrationMainSwitchPreference : override fun tags(context: Context) = arrayOf(KEY_VIBRATION_HAPTICS) - override fun storage(context: Context): KeyValueStore = - VibrationMainSwitchToggleStorage(SettingsSystemStore.get(context)) + override fun storage(context: Context): KeyValueStore = VibrationMainSwitchStore(context) override fun getReadPermissions(context: Context) = SettingsSystemStore.getReadPermissions() @@ -81,34 +79,41 @@ class VibrationMainSwitchPreference : if (newValue == true) { // Play a haptic as preview for the main toggle only when touch feedback is enabled. VibrationPreferenceConfig.playVibrationPreview( - preference.context.getSystemService(Vibrator::class.java), + preference.context.vibrator, VibrationAttributes.USAGE_TOUCH, ) } return true } - /** Provides SettingsStore for vibration main switch with custom default value. */ - @Suppress("UNCHECKED_CAST") - private class VibrationMainSwitchToggleStorage(private val settingsStore: SettingsStore) : - KeyedObservableDelegate(settingsStore), KeyValueStore { - - override fun contains(key: String) = settingsStore.contains(key) - - override fun getDefaultValue(key: String, valueType: Class) = - DEFAULT_VALUE as T - - override fun getValue(key: String, valueType: Class) = - (settingsStore.getBoolean(key) ?: DEFAULT_VALUE) as T - - override fun setValue(key: String, valueType: Class, value: T?) { - settingsStore.setBoolean(key, value as Boolean?) - } - } - companion object { const val KEY = Settings.System.VIBRATE_ON - const val DEFAULT_VALUE = true } } + +/** Provides SettingsStore for vibration main switch with custom default value. */ +@Suppress("UNCHECKED_CAST") +class VibrationMainSwitchStore( + context: Context, + private val settingsStore: KeyValueStore = SettingsSystemStore.get(context), +) : KeyedObservableDelegate(settingsStore), KeyValueStore { + + override fun contains(key: String) = settingsStore.contains(key) + + override fun getDefaultValue(key: String, valueType: Class) = DEFAULT_VALUE as T + + override fun getValue(key: String, valueType: Class) = + settingsStore.getValue(key, valueType) ?: getDefaultValue(key, valueType) + + override fun setValue(key: String, valueType: Class, value: T?) = + settingsStore.setValue(key, valueType, value) + + companion object { + private const val DEFAULT_VALUE = true + } +} + +val Context.vibrator: Vibrator + get() = getSystemService(Vibrator::class.java)!! + // LINT.ThenChange(VibrationMainSwitchPreferenceController.java) diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt index 40ed9a3dda8..2b2a6f0b101 100644 --- a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt +++ b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt @@ -21,8 +21,8 @@ import android.content.res.Resources import android.os.Vibrator import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settings.flags.Flags import com.android.settings.R +import com.android.settings.flags.Flags import com.android.settingslib.preference.CatalystScreenTestCase import com.google.common.truth.Truth.assertThat import org.junit.Test @@ -35,7 +35,7 @@ import org.mockito.kotlin.stub // LINT.IfChange @RunWith(AndroidJUnit4::class) class VibrationIntensityScreenTest : CatalystScreenTestCase() { - private lateinit var vibrator: Vibrator + private lateinit var mockVibrator: Vibrator private val resourcesSpy: Resources = spy((ApplicationProvider.getApplicationContext() as Context).resources) @@ -44,9 +44,10 @@ class VibrationIntensityScreenTest : CatalystScreenTestCase() { object : ContextWrapper(ApplicationProvider.getApplicationContext()) { override fun getSystemService(name: String): Any? = when { - name == getSystemServiceName(Vibrator::class.java) -> vibrator + name == VIBRATOR_SERVICE -> mockVibrator else -> super.getSystemService(name) } + override fun getResources(): Resources = resourcesSpy } @@ -62,7 +63,7 @@ class VibrationIntensityScreenTest : CatalystScreenTestCase() { @Test fun isAvailable_noVibrator_unavailable() { - vibrator = mock { on { hasVibrator() } doReturn false } + mockVibrator = mock { on { hasVibrator() } doReturn false } resourcesSpy.stub { on { getInteger(R.integer.config_vibration_supported_intensity_levels) } doReturn 3 } @@ -71,7 +72,7 @@ class VibrationIntensityScreenTest : CatalystScreenTestCase() { @Test fun isAvailable_hasVibratorAndSingleIntensityLevel_unavailable() { - vibrator = mock { on { hasVibrator() } doReturn true } + mockVibrator = mock { on { hasVibrator() } doReturn true } resourcesSpy.stub { on { getInteger(R.integer.config_vibration_supported_intensity_levels) } doReturn 1 } @@ -80,7 +81,7 @@ class VibrationIntensityScreenTest : CatalystScreenTestCase() { @Test fun isAvailable_hasVibratorAndMultipleIntensityLevels_available() { - vibrator = mock { on { hasVibrator() } doReturn true } + mockVibrator = mock { on { hasVibrator() } doReturn true } resourcesSpy.stub { on { getInteger(R.integer.config_vibration_supported_intensity_levels) } doReturn 2 } @@ -88,4 +89,3 @@ class VibrationIntensityScreenTest : CatalystScreenTestCase() { } } // LINT.ThenChange(VibrationPreferenceControllerTest.java) - diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationScreenTest.kt b/tests/robotests/src/com/android/settings/accessibility/VibrationScreenTest.kt index c6e5265a52c..ba113f6a84d 100644 --- a/tests/robotests/src/com/android/settings/accessibility/VibrationScreenTest.kt +++ b/tests/robotests/src/com/android/settings/accessibility/VibrationScreenTest.kt @@ -21,8 +21,8 @@ import android.content.res.Resources import android.os.Vibrator import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settings.flags.Flags import com.android.settings.R +import com.android.settings.flags.Flags import com.android.settingslib.preference.CatalystScreenTestCase import com.google.common.truth.Truth.assertThat import org.junit.Test @@ -35,7 +35,7 @@ import org.mockito.kotlin.stub // LINT.IfChange @RunWith(AndroidJUnit4::class) class VibrationScreenTest : CatalystScreenTestCase() { - private lateinit var vibrator: Vibrator + private lateinit var mockVibrator: Vibrator private val resourcesSpy: Resources = spy((ApplicationProvider.getApplicationContext() as Context).resources) @@ -44,9 +44,10 @@ class VibrationScreenTest : CatalystScreenTestCase() { object : ContextWrapper(ApplicationProvider.getApplicationContext()) { override fun getSystemService(name: String): Any? = when { - name == getSystemServiceName(Vibrator::class.java) -> vibrator + name == VIBRATOR_SERVICE -> mockVibrator else -> super.getSystemService(name) } + override fun getResources(): Resources = resourcesSpy } @@ -62,7 +63,7 @@ class VibrationScreenTest : CatalystScreenTestCase() { @Test fun isAvailable_noVibrator_unavailable() { - vibrator = mock { on { hasVibrator() } doReturn false } + mockVibrator = mock { on { hasVibrator() } doReturn false } resourcesSpy.stub { on { getInteger(R.integer.config_vibration_supported_intensity_levels) } doReturn 1 } @@ -71,7 +72,7 @@ class VibrationScreenTest : CatalystScreenTestCase() { @Test fun isAvailable_hasVibratorAndMultipleIntensityLevels_unavailable() { - vibrator = mock { on { hasVibrator() } doReturn true } + mockVibrator = mock { on { hasVibrator() } doReturn true } resourcesSpy.stub { on { getInteger(R.integer.config_vibration_supported_intensity_levels) } doReturn 3 } @@ -80,7 +81,7 @@ class VibrationScreenTest : CatalystScreenTestCase() { @Test fun isAvailable_hasVibratorAndSingleIntensityLevel_available() { - vibrator = mock { on { hasVibrator() } doReturn true } + mockVibrator = mock { on { hasVibrator() } doReturn true } resourcesSpy.stub { on { getInteger(R.integer.config_vibration_supported_intensity_levels) } doReturn 1 }