diff --git a/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt b/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt index a9a05160557..54b1d9588e2 100644 --- a/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt +++ b/src/com/android/settings/accessibility/VibrationMainSwitchPreference.kt @@ -15,13 +15,16 @@ */ package com.android.settings.accessibility +import android.app.settings.SettingsEnums.ACTION_VIBRATION_HAPTICS 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.PreferenceActionMetricsProvider import com.android.settings.R +import com.android.settings.contract.KEY_VIBRATION_HAPTICS import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.SettingsStore @@ -39,6 +42,7 @@ class VibrationMainSwitchPreference : key = Settings.System.VIBRATE_ON, title = R.string.accessibility_vibration_primary_switch_title, ), + PreferenceActionMetricsProvider, PreferenceLifecycleProvider, OnCheckedChangeListener { override val keywords: Int @@ -46,6 +50,11 @@ class VibrationMainSwitchPreference : lateinit var vibrator: Vibrator + override val preferenceActionMetrics: Int + get() = ACTION_VIBRATION_HAPTICS + + override fun tags(context: Context) = arrayOf(KEY_VIBRATION_HAPTICS) + override fun storage(context: Context): KeyValueStore = VibrationMainSwitchToggleStorage(SettingsSystemStore.get(context)) diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreference.kt b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreference.kt index 453593fd5c0..a8227acd84d 100644 --- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreference.kt +++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreference.kt @@ -16,12 +16,14 @@ package com.android.settings.display +import android.app.settings.SettingsEnums.ACTION_AMBIENT_DISPLAY_ALWAYS_ON import android.content.Context import android.hardware.display.AmbientDisplayConfiguration import android.os.SystemProperties import android.os.UserHandle import android.os.UserManager import android.provider.Settings.Secure.DOZE_ALWAYS_ON +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settings.contract.KEY_AMBIENT_DISPLAY_ALWAYS_ON @@ -41,6 +43,7 @@ import com.android.settingslib.metadata.SwitchPreference // LINT.IfChange class AmbientDisplayAlwaysOnPreference : SwitchPreference(KEY, R.string.doze_always_on_title, R.string.doze_always_on_summary), + PreferenceActionMetricsProvider, PreferenceAvailabilityProvider, PreferenceSummaryProvider, PreferenceRestrictionMixin { @@ -48,6 +51,11 @@ class AmbientDisplayAlwaysOnPreference : override val keywords: Int get() = R.string.keywords_always_show_time_info + override val preferenceActionMetrics: Int + get() = ACTION_AMBIENT_DISPLAY_ALWAYS_ON + + override fun tags(context: Context) = arrayOf(KEY_AMBIENT_DISPLAY_ALWAYS_ON) + override val restrictionKeys: Array get() = arrayOf(UserManager.DISALLOW_AMBIENT_DISPLAY) diff --git a/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt b/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt index 0cdca343ea8..2c228af57fa 100644 --- a/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt +++ b/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt @@ -15,30 +15,32 @@ */ package com.android.settings.display -import android.app.settings.SettingsEnums +import android.app.settings.SettingsEnums.OPEN_BATTERY_PERCENTAGE import android.content.Context import android.provider.Settings -import androidx.preference.Preference +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.R import com.android.settings.Utils -import com.android.settings.overlay.FeatureFactory.Companion.featureFactory +import com.android.settings.contract.KEY_BATTERY_PERCENTAGE 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.PreferenceAvailabilityProvider -import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SwitchPreference -import com.android.settingslib.preference.SwitchPreferenceBinding // LINT.IfChange class BatteryPercentageSwitchPreference : SwitchPreference(KEY, R.string.battery_percentage, R.string.battery_percentage_description), - SwitchPreferenceBinding, - PreferenceAvailabilityProvider, - Preference.OnPreferenceChangeListener { + PreferenceActionMetricsProvider, + PreferenceAvailabilityProvider { + + override val preferenceActionMetrics: Int + get() = OPEN_BATTERY_PERCENTAGE + + override fun tags(context: Context) = arrayOf(KEY_BATTERY_PERCENTAGE) override fun storage(context: Context): KeyValueStore = BatteryPercentageStorage(context, SettingsSystemStore.get(context)) @@ -66,22 +68,6 @@ class BatteryPercentageSwitchPreference : override val sensitivityLevel get() = SensitivityLevel.NO_SENSITIVITY - override fun bind(preference: Preference, metadata: PreferenceMetadata) { - super.bind(preference, metadata) - preference.onPreferenceChangeListener = this - } - - override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { - val showPercentage = newValue as Boolean - - featureFactory.metricsFeatureProvider.action( - preference.context, - SettingsEnums.OPEN_BATTERY_PERCENTAGE, - showPercentage, - ) - return true - } - @Suppress("UNCHECKED_CAST") private class BatteryPercentageStorage( private val context: Context, diff --git a/src/com/android/settings/display/BrightnessLevelPreference.kt b/src/com/android/settings/display/BrightnessLevelPreference.kt index 84f88c8abdd..8f0b791b60f 100644 --- a/src/com/android/settings/display/BrightnessLevelPreference.kt +++ b/src/com/android/settings/display/BrightnessLevelPreference.kt @@ -16,6 +16,7 @@ package com.android.settings.display import android.app.ActivityOptions +import android.app.settings.SettingsEnums.ACTION_BRIGHTNESS_LEVEL import android.content.Context import android.content.Intent import android.content.Intent.ACTION_SHOW_BRIGHTNESS_DIALOG @@ -26,9 +27,11 @@ import android.hardware.display.DisplayManager.DisplayListener import android.os.UserManager import android.provider.Settings.System import androidx.preference.Preference +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settings.Utils +import com.android.settings.contract.KEY_BRIGHTNESS_LEVEL import com.android.settings.core.SettingsBaseActivity import com.android.settingslib.RestrictedPreference import com.android.settingslib.datastore.AbstractKeyedDataObservable @@ -56,6 +59,7 @@ class BrightnessLevelPreference : IntRangeValuePreference, PreferenceBinding, PreferenceRestrictionMixin, + PreferenceActionMetricsProvider, PreferenceSummaryProvider, Preference.OnPreferenceClickListener { @@ -68,6 +72,11 @@ class BrightnessLevelPreference : override val keywords: Int get() = R.string.keywords_display_brightness_level + override val preferenceActionMetrics: Int + get() = ACTION_BRIGHTNESS_LEVEL + + override fun tags(context: Context) = arrayOf(KEY_BRIGHTNESS_LEVEL) + override fun getSummary(context: Context): CharSequence? = NumberFormat.getPercentInstance().format(context.brightnessPercent) diff --git a/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt b/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt index 81592cabd31..4d132ddd667 100644 --- a/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt +++ b/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt @@ -15,6 +15,7 @@ */ package com.android.settings.display +import android.app.settings.SettingsEnums.ACTION_SMOOTH_DISPLAY import android.content.Context import android.hardware.display.DisplayManager import android.provider.DeviceConfig @@ -23,7 +24,9 @@ import com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RAT import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateAmongAllDisplays import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay import com.android.server.display.feature.flags.Flags +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.R +import com.android.settings.contract.KEY_SMOOTH_DISPLAY import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedObservableDelegate @@ -41,12 +44,18 @@ import kotlin.math.roundToInt // LINT.IfChange class PeakRefreshRateSwitchPreference : SwitchPreference(KEY, R.string.peak_refresh_rate_title), + PreferenceActionMetricsProvider, PreferenceAvailabilityProvider, PreferenceSummaryProvider, PreferenceLifecycleProvider { private var propertiesChangedListener: DeviceConfig.OnPropertiesChangedListener? = null + override val preferenceActionMetrics: Int + get() = ACTION_SMOOTH_DISPLAY + + override fun tags(context: Context) = arrayOf(KEY_SMOOTH_DISPLAY) + override fun storage(context: Context): KeyValueStore = PeakRefreshRateStore(context, SettingsSystemStore.get(context)) diff --git a/src/com/android/settings/display/darkmode/DarkModeScreen.kt b/src/com/android/settings/display/darkmode/DarkModeScreen.kt index 527cd192b79..86ead6b3fd8 100644 --- a/src/com/android/settings/display/darkmode/DarkModeScreen.kt +++ b/src/com/android/settings/display/darkmode/DarkModeScreen.kt @@ -17,11 +17,14 @@ package com.android.settings.display.darkmode import android.Manifest +import android.app.settings.SettingsEnums.ACTION_DARK_THEME import android.content.Context import android.os.PowerManager import androidx.preference.Preference import androidx.preference.PreferenceScreen +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.R +import com.android.settings.contract.KEY_DARK_THEME import com.android.settings.flags.Flags import com.android.settingslib.PrimarySwitchPreferenceBinding import com.android.settingslib.datastore.KeyValueStore @@ -42,6 +45,7 @@ class DarkModeScreen(context: Context) : PreferenceScreenCreator, PreferenceScreenBinding, // binding for screen page PrimarySwitchPreferenceBinding, // binding for screen entry point widget + PreferenceActionMetricsProvider, BooleanValuePreference, PreferenceSummaryProvider { @@ -56,6 +60,11 @@ class DarkModeScreen(context: Context) : override val keywords: Int get() = R.string.keywords_dark_ui_mode + override val preferenceActionMetrics: Int + get() = ACTION_DARK_THEME + + override fun tags(context: Context) = arrayOf(KEY_DARK_THEME) + override fun getReadPermissions(context: Context) = Permissions.EMPTY override fun getWritePermissions(context: Context) = diff --git a/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt b/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt index 268dea2778a..0eebaa2343a 100644 --- a/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt +++ b/src/com/android/settings/fuelgauge/BatteryHeaderPreference.kt @@ -16,10 +16,13 @@ package com.android.settings.fuelgauge +import android.app.settings.SettingsEnums.ACTION_BATTERY_LEVEL import android.content.Context import androidx.annotation.VisibleForTesting import androidx.preference.Preference +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.R +import com.android.settings.contract.KEY_BATTERY_LEVEL import com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_NOT_PRESENT import com.android.settingslib.Utils import com.android.settingslib.datastore.KeyValueStore @@ -37,7 +40,10 @@ import com.android.settingslib.widget.UsageProgressBarPreference // LINT.IfChange class BatteryHeaderPreference : - IntRangeValuePreference, PreferenceBinding, PreferenceLifecycleProvider { + IntRangeValuePreference, + PreferenceBinding, + PreferenceActionMetricsProvider, + PreferenceLifecycleProvider { @VisibleForTesting var batteryBroadcastReceiver: BatteryBroadcastReceiver? = null @@ -47,6 +53,11 @@ class BatteryHeaderPreference : override val title: Int get() = R.string.summary_placeholder + override val preferenceActionMetrics: Int + get() = ACTION_BATTERY_LEVEL + + override fun tags(context: Context) = arrayOf(KEY_BATTERY_LEVEL) + override fun createWidget(context: Context) = UsageProgressBarPreference(context) override fun bind(preference: Preference, metadata: PreferenceMetadata) { diff --git a/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt b/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt index c9ba7141b49..51e0ddd61db 100644 --- a/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt +++ b/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt @@ -16,10 +16,13 @@ package com.android.settings.network +import android.app.settings.SettingsEnums.ACTION_ADAPTIVE_CONNECTIVITY import android.content.Context import android.net.wifi.WifiManager import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.R +import com.android.settings.contract.KEY_ADAPTIVE_CONNECTIVITY import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedObservableDelegate import com.android.settingslib.datastore.SettingsSecureStore @@ -31,7 +34,13 @@ import com.android.settingslib.metadata.SensitivityLevel // LINT.IfChange class AdaptiveConnectivityTogglePreference : - MainSwitchPreference(KEY, R.string.adaptive_connectivity_main_switch_title) { + MainSwitchPreference(KEY, R.string.adaptive_connectivity_main_switch_title), + PreferenceActionMetricsProvider { + + override val preferenceActionMetrics: Int + get() = ACTION_ADAPTIVE_CONNECTIVITY + + override fun tags(context: Context) = arrayOf(KEY_ADAPTIVE_CONNECTIVITY) override fun storage(context: Context): KeyValueStore = AdaptiveConnectivityToggleStorage(context, SettingsSecureStore.get(context)) diff --git a/src/com/android/settings/notification/CallVolumePreference.kt b/src/com/android/settings/notification/CallVolumePreference.kt index f3ee3ca7022..a0d7561f7f3 100644 --- a/src/com/android/settings/notification/CallVolumePreference.kt +++ b/src/com/android/settings/notification/CallVolumePreference.kt @@ -19,6 +19,7 @@ package com.android.settings.notification import android.Manifest.permission.MODIFY_AUDIO_SETTINGS import android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED import android.Manifest.permission.MODIFY_PHONE_STATE +import android.app.settings.SettingsEnums.ACTION_CALL_VOLUME import android.content.Context import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE import android.media.AudioManager @@ -26,8 +27,10 @@ import android.media.AudioManager.STREAM_BLUETOOTH_SCO import android.media.AudioManager.STREAM_VOICE_CALL import android.os.UserManager import androidx.preference.Preference +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R +import com.android.settings.contract.KEY_CALL_VOLUME import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.Permissions @@ -44,6 +47,7 @@ import com.android.settingslib.preference.PreferenceBinding open class CallVolumePreference : IntRangeValuePreference, PreferenceBinding, + PreferenceActionMetricsProvider, PreferenceAvailabilityProvider, PreferenceIconProvider, PreferenceRestrictionMixin { @@ -53,6 +57,11 @@ open class CallVolumePreference : override val title: Int get() = R.string.call_volume_option_title + override val preferenceActionMetrics: Int + get() = ACTION_CALL_VOLUME + + override fun tags(context: Context) = arrayOf(KEY_CALL_VOLUME) + override fun getIcon(context: Context) = R.drawable.ic_local_phone_24_lib override fun isAvailable(context: Context) = diff --git a/src/com/android/settings/notification/MediaVolumePreference.kt b/src/com/android/settings/notification/MediaVolumePreference.kt index b2a2fbe7bc7..8af2353dfdc 100644 --- a/src/com/android/settings/notification/MediaVolumePreference.kt +++ b/src/com/android/settings/notification/MediaVolumePreference.kt @@ -18,13 +18,16 @@ package com.android.settings.notification import android.Manifest.permission.MODIFY_AUDIO_SETTINGS import android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED +import android.app.settings.SettingsEnums.ACTION_MEDIA_VOLUME import android.content.Context import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE import android.media.AudioManager.STREAM_MUSIC import android.os.UserManager import androidx.preference.Preference +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R +import com.android.settings.contract.KEY_MEDIA_VOLUME import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.Permissions @@ -41,6 +44,7 @@ import com.android.settingslib.preference.PreferenceBinding open class MediaVolumePreference : IntRangeValuePreference, PreferenceBinding, + PreferenceActionMetricsProvider, PreferenceAvailabilityProvider, PreferenceIconProvider, PreferenceRestrictionMixin { @@ -50,6 +54,11 @@ open class MediaVolumePreference : override val title: Int get() = R.string.media_volume_option_title + override val preferenceActionMetrics: Int + get() = ACTION_MEDIA_VOLUME + + override fun tags(context: Context) = arrayOf(KEY_MEDIA_VOLUME) + override fun getIcon(context: Context) = when { VolumeHelper.isMuted(context, STREAM_MUSIC) -> R.drawable.ic_media_stream_off diff --git a/src/com/android/settings/notification/SeparateRingVolumePreference.kt b/src/com/android/settings/notification/SeparateRingVolumePreference.kt index 16e6e5950c9..fba3eb404a7 100644 --- a/src/com/android/settings/notification/SeparateRingVolumePreference.kt +++ b/src/com/android/settings/notification/SeparateRingVolumePreference.kt @@ -21,6 +21,7 @@ import android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED import android.app.INotificationManager import android.app.NotificationManager import android.app.NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED +import android.app.settings.SettingsEnums.ACTION_RING_VOLUME import android.content.BroadcastReceiver import android.content.Context import android.content.Context.NOTIFICATION_SERVICE @@ -39,8 +40,10 @@ import android.os.Vibrator import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS import androidx.preference.Preference +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R +import com.android.settings.contract.KEY_RING_VOLUME import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.Permissions @@ -59,6 +62,7 @@ import com.android.settingslib.preference.PreferenceBinding open class SeparateRingVolumePreference : IntRangeValuePreference, PreferenceBinding, + PreferenceActionMetricsProvider, PreferenceAvailabilityProvider, PreferenceIconProvider, PreferenceLifecycleProvider, @@ -72,6 +76,11 @@ open class SeparateRingVolumePreference : override val title: Int get() = R.string.separate_ring_volume_option_title + override val preferenceActionMetrics: Int + get() = ACTION_RING_VOLUME + + override fun tags(context: Context) = arrayOf(KEY_RING_VOLUME) + override fun getIcon(context: Context) = context.getIconRes() override fun isAvailable(context: Context) = !createAudioHelper(context).isSingleVolume diff --git a/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt b/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt index 21b0e88d7ac..fbe431718ec 100644 --- a/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt +++ b/src/com/android/settings/wifi/tether/WifiHotspotSwitchPreference.kt @@ -17,7 +17,8 @@ package com.android.settings.wifi.tether import android.Manifest -import android.app.settings.SettingsEnums +import android.app.settings.SettingsEnums.ACTION_WIFI_HOTSPOT +import android.app.settings.SettingsEnums.WIFI_TETHER_SETTINGS import android.content.Context import android.content.Intent import android.net.TetheringManager @@ -27,9 +28,11 @@ import android.net.wifi.WifiManager import android.os.UserManager import android.text.BidiFormatter import android.util.Log +import com.android.settings.PreferenceActionMetricsProvider import com.android.settings.PreferenceRestrictionMixin import com.android.settings.R import com.android.settings.Utils +import com.android.settings.contract.KEY_WIFI_HOTSPOT import com.android.settings.core.SubSettingLauncher import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY import com.android.settings.wifi.WifiUtils.canShowWifiHotspot @@ -56,10 +59,16 @@ import com.android.settingslib.wifi.WifiUtils.Companion.getWifiTetherSummaryForC class WifiHotspotSwitchPreference(context: Context, dataSaverStore: KeyValueStore) : SwitchPreference(KEY, R.string.wifi_hotspot_checkbox_text), PrimarySwitchPreferenceBinding, + PreferenceActionMetricsProvider, PreferenceAvailabilityProvider, PreferenceSummaryProvider, PreferenceRestrictionMixin { + override val preferenceActionMetrics: Int + get() = ACTION_WIFI_HOTSPOT + + override fun tags(context: Context) = arrayOf(KEY_WIFI_HOTSPOT) + private val wifiHotspotStore = WifiHotspotStore(context, dataSaverStore) override fun isAvailable(context: Context) = @@ -97,7 +106,7 @@ class WifiHotspotSwitchPreference(context: Context, dataSaverStore: KeyValueStor .apply { setDestination(WifiTetherSettings::class.java.name) setTitleRes(R.string.wifi_hotspot_checkbox_text) - setSourceMetricsCategory(SettingsEnums.WIFI_TETHER_SETTINGS) + setSourceMetricsCategory(WIFI_TETHER_SETTINGS) } .toIntent()