Merge "[Catalyst] Implement metrics/tags for Settings Catalyst" into main

This commit is contained in:
Treehugger Robot
2025-02-09 16:55:47 -08:00
committed by Android (Google) Code Review
12 changed files with 114 additions and 28 deletions

View File

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

View File

@@ -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<String>
get() = arrayOf(UserManager.DISALLOW_AMBIENT_DISPLAY)

View File

@@ -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,

View File

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

View File

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

View File

@@ -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) =

View File

@@ -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) {

View File

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

View File

@@ -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) =

View File

@@ -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

View File

@@ -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

View File

@@ -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()