Loading res/xml/accessibility_vibration_intensity_settings.xml +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ android:title="@string/accessibility_vibration_settings_title"> <com.android.settingslib.widget.MainSwitchPreference android:key="vibration_intensity_switch_main" android:key="vibrate_on" android:title="@string/accessibility_vibration_primary_switch_title" app:keywords="@string/keywords_accessibility_vibration_primary_switch" app:controller="com.android.settings.accessibility.VibrationMainSwitchPreferenceController"/> Loading res/xml/accessibility_vibration_settings.xml +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ android:title="@string/accessibility_vibration_settings_title"> <com.android.settingslib.widget.MainSwitchPreference android:key="vibration_switch_main" android:key="vibrate_on" android:title="@string/accessibility_vibration_primary_switch_title" app:keywords="@string/keywords_accessibility_vibration_primary_switch" app:controller="com.android.settings.accessibility.VibrationMainSwitchPreferenceController"/> Loading src/com/android/settings/accessibility/VibrationIntensityScreen.kt +19 −2 Original line number Diff line number Diff line Loading @@ -19,18 +19,32 @@ import android.content.Context import androidx.fragment.app.Fragment import com.android.settings.R import com.android.settings.flags.Flags import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator /** * Accessibility settings for vibration intensities. */ // TODO(b/368360218): investigate if we still need this screen once we finish the migration. // We might be able to consolidate this into VibrationScreen with PreferenceHierarchy choosing // between toggle or slider preferences based on device config, depending on how overlays are done. // LINT.IfChange @ProvidePreferenceScreen class VibrationIntensityScreen : PreferenceScreenCreator { class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { override val key: String get() = KEY override val title: Int get() = R.string.accessibility_vibration_settings_title override val keywords: Int get() = R.string.keywords_vibration override fun isAvailable(context: Context) = context.isVibratorAvailable() && context.getSupportedVibrationIntensityLevels() > 1 override fun isFlagEnabled(context: Context): Boolean = Flags.catalystVibrationIntensityScreen() override fun hasCompleteHierarchy() = false Loading @@ -38,9 +52,12 @@ class VibrationIntensityScreen : PreferenceScreenCreator { override fun fragmentClass(): Class<out Fragment>? = VibrationIntensitySettingsFragment::class.java override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { +VibrationMainSwitchPreference() } companion object { const val KEY = "vibration_intensity_screen" } } // LINT.ThenChange(VibrationPreferenceController.java) src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.accessibility import android.content.Context import android.os.VibrationAttributes import android.os.Vibrator import android.provider.Settings import android.widget.CompoundButton import android.widget.CompoundButton.OnCheckedChangeListener import com.android.settings.R 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.MainSwitchPreference import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.preference.MainSwitchPreferenceBinding /** * Accessibility settings for vibration. */ // LINT.IfChange class VibrationMainSwitchPreference : MainSwitchPreference( key = Settings.System.VIBRATE_ON, title = R.string.accessibility_vibration_primary_switch_title, ), PreferenceLifecycleProvider, OnCheckedChangeListener { override val keywords: Int get() = R.string.keywords_accessibility_vibration_primary_switch lateinit var vibrator: Vibrator override fun storage(context: Context): KeyValueStore = VibrationMainSwitchToggleStorage(SettingsSystemStore.get(context)) override fun getReadPermit(context: Context, myUid: Int, callingUid: Int) = ReadWritePermit.ALLOW override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = ReadWritePermit.ALLOW override fun onResume(context: PreferenceLifecycleContext) { vibrator = context.getSystemService(Vibrator::class.java) context.findPreference<com.android.settingslib.widget.MainSwitchPreference>(key) ?.addOnSwitchChangeListener(this) } override fun onPause(context: PreferenceLifecycleContext) { context.findPreference<com.android.settingslib.widget.MainSwitchPreference>(key) ?.removeOnSwitchChangeListener(this) } override fun onCheckedChanged(button: CompoundButton, isChecked: Boolean) { if (isChecked) { // Play a haptic as preview for the main toggle only when touch feedback is enabled. VibrationPreferenceConfig.playVibrationPreview( vibrator, VibrationAttributes.USAGE_TOUCH ) } } /** Provides SettingsStore for vibration main switch with custom default value. */ @Suppress("UNCHECKED_CAST") private class VibrationMainSwitchToggleStorage( private val settingsStore: SettingsStore, ) : KeyedObservableDelegate<String>(settingsStore), KeyValueStore { override fun contains(key: String) = settingsStore.contains(key) override fun <T : Any> getDefaultValue(key: String, valueType: Class<T>) = DEFAULT_VALUE as T override fun <T : Any> getValue(key: String, valueType: Class<T>) = (settingsStore.getBoolean(key) ?: DEFAULT_VALUE) as T override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) { settingsStore.setBoolean(key, value as Boolean?) } } companion object { const val DEFAULT_VALUE = true } } // LINT.ThenChange(VibrationMainSwitchPreferenceController.java) src/com/android/settings/accessibility/VibrationMainSwitchPreferenceController.java +2 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; * will disable the entire settings screen once the settings is turned OFF. All device haptics will * be disabled by this setting, except the flagged alerts and accessibility touch feedback. */ // LINT.IfChange public class VibrationMainSwitchPreferenceController extends SettingsMainSwitchPreferenceController implements LifecycleObserver, OnStart, OnStop { Loading Loading @@ -106,3 +107,4 @@ public class VibrationMainSwitchPreferenceController extends SettingsMainSwitchP return R.string.menu_key_accessibility; } } // LINT.ThenChange(VibrationMainSwitchPreference.kt) Loading
res/xml/accessibility_vibration_intensity_settings.xml +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ android:title="@string/accessibility_vibration_settings_title"> <com.android.settingslib.widget.MainSwitchPreference android:key="vibration_intensity_switch_main" android:key="vibrate_on" android:title="@string/accessibility_vibration_primary_switch_title" app:keywords="@string/keywords_accessibility_vibration_primary_switch" app:controller="com.android.settings.accessibility.VibrationMainSwitchPreferenceController"/> Loading
res/xml/accessibility_vibration_settings.xml +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ android:title="@string/accessibility_vibration_settings_title"> <com.android.settingslib.widget.MainSwitchPreference android:key="vibration_switch_main" android:key="vibrate_on" android:title="@string/accessibility_vibration_primary_switch_title" app:keywords="@string/keywords_accessibility_vibration_primary_switch" app:controller="com.android.settings.accessibility.VibrationMainSwitchPreferenceController"/> Loading
src/com/android/settings/accessibility/VibrationIntensityScreen.kt +19 −2 Original line number Diff line number Diff line Loading @@ -19,18 +19,32 @@ import android.content.Context import androidx.fragment.app.Fragment import com.android.settings.R import com.android.settings.flags.Flags import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator /** * Accessibility settings for vibration intensities. */ // TODO(b/368360218): investigate if we still need this screen once we finish the migration. // We might be able to consolidate this into VibrationScreen with PreferenceHierarchy choosing // between toggle or slider preferences based on device config, depending on how overlays are done. // LINT.IfChange @ProvidePreferenceScreen class VibrationIntensityScreen : PreferenceScreenCreator { class VibrationIntensityScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider { override val key: String get() = KEY override val title: Int get() = R.string.accessibility_vibration_settings_title override val keywords: Int get() = R.string.keywords_vibration override fun isAvailable(context: Context) = context.isVibratorAvailable() && context.getSupportedVibrationIntensityLevels() > 1 override fun isFlagEnabled(context: Context): Boolean = Flags.catalystVibrationIntensityScreen() override fun hasCompleteHierarchy() = false Loading @@ -38,9 +52,12 @@ class VibrationIntensityScreen : PreferenceScreenCreator { override fun fragmentClass(): Class<out Fragment>? = VibrationIntensitySettingsFragment::class.java override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { +VibrationMainSwitchPreference() } companion object { const val KEY = "vibration_intensity_screen" } } // LINT.ThenChange(VibrationPreferenceController.java)
src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.accessibility import android.content.Context import android.os.VibrationAttributes import android.os.Vibrator import android.provider.Settings import android.widget.CompoundButton import android.widget.CompoundButton.OnCheckedChangeListener import com.android.settings.R 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.MainSwitchPreference import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.preference.MainSwitchPreferenceBinding /** * Accessibility settings for vibration. */ // LINT.IfChange class VibrationMainSwitchPreference : MainSwitchPreference( key = Settings.System.VIBRATE_ON, title = R.string.accessibility_vibration_primary_switch_title, ), PreferenceLifecycleProvider, OnCheckedChangeListener { override val keywords: Int get() = R.string.keywords_accessibility_vibration_primary_switch lateinit var vibrator: Vibrator override fun storage(context: Context): KeyValueStore = VibrationMainSwitchToggleStorage(SettingsSystemStore.get(context)) override fun getReadPermit(context: Context, myUid: Int, callingUid: Int) = ReadWritePermit.ALLOW override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = ReadWritePermit.ALLOW override fun onResume(context: PreferenceLifecycleContext) { vibrator = context.getSystemService(Vibrator::class.java) context.findPreference<com.android.settingslib.widget.MainSwitchPreference>(key) ?.addOnSwitchChangeListener(this) } override fun onPause(context: PreferenceLifecycleContext) { context.findPreference<com.android.settingslib.widget.MainSwitchPreference>(key) ?.removeOnSwitchChangeListener(this) } override fun onCheckedChanged(button: CompoundButton, isChecked: Boolean) { if (isChecked) { // Play a haptic as preview for the main toggle only when touch feedback is enabled. VibrationPreferenceConfig.playVibrationPreview( vibrator, VibrationAttributes.USAGE_TOUCH ) } } /** Provides SettingsStore for vibration main switch with custom default value. */ @Suppress("UNCHECKED_CAST") private class VibrationMainSwitchToggleStorage( private val settingsStore: SettingsStore, ) : KeyedObservableDelegate<String>(settingsStore), KeyValueStore { override fun contains(key: String) = settingsStore.contains(key) override fun <T : Any> getDefaultValue(key: String, valueType: Class<T>) = DEFAULT_VALUE as T override fun <T : Any> getValue(key: String, valueType: Class<T>) = (settingsStore.getBoolean(key) ?: DEFAULT_VALUE) as T override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) { settingsStore.setBoolean(key, value as Boolean?) } } companion object { const val DEFAULT_VALUE = true } } // LINT.ThenChange(VibrationMainSwitchPreferenceController.java)
src/com/android/settings/accessibility/VibrationMainSwitchPreferenceController.java +2 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; * will disable the entire settings screen once the settings is turned OFF. All device haptics will * be disabled by this setting, except the flagged alerts and accessibility touch feedback. */ // LINT.IfChange public class VibrationMainSwitchPreferenceController extends SettingsMainSwitchPreferenceController implements LifecycleObserver, OnStart, OnStop { Loading Loading @@ -106,3 +107,4 @@ public class VibrationMainSwitchPreferenceController extends SettingsMainSwitchP return R.string.menu_key_accessibility; } } // LINT.ThenChange(VibrationMainSwitchPreference.kt)