[Catalyst] Support restriction for Sound settings

NO_IFTTT=Catalyst only

Bug: 377600992
Flag: com.android.settings.flags.catalyst_sound_screen
Test: testdpc
Change-Id: I2d768155f450f415c2279bbff69f94e8934b4383
This commit is contained in:
Jacky Wang
2024-11-06 11:58:10 +08:00
parent f18e3bafe6
commit d33b0a5114
3 changed files with 28 additions and 55 deletions

View File

@@ -20,18 +20,16 @@ import android.content.Context
import android.media.AudioManager import android.media.AudioManager
import android.media.AudioManager.STREAM_BLUETOOTH_SCO import android.media.AudioManager.STREAM_BLUETOOTH_SCO
import android.media.AudioManager.STREAM_VOICE_CALL import android.media.AudioManager.STREAM_VOICE_CALL
import android.os.UserHandle import android.os.UserManager
import android.os.UserManager.DISALLOW_ADJUST_VOLUME
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.RestrictedLockUtilsInternal
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceIconProvider
import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceRestrictionProvider
import com.android.settingslib.metadata.RangeValue import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.preference.PreferenceBinding import com.android.settingslib.preference.PreferenceBinding
@@ -44,7 +42,7 @@ open class CallVolumePreference :
RangeValue, RangeValue,
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
PreferenceIconProvider, PreferenceIconProvider,
PreferenceRestrictionProvider { PreferenceRestrictionMixin {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -55,18 +53,12 @@ open class CallVolumePreference :
override fun isAvailable(context: Context) = override fun isAvailable(context: Context) =
context.resources.getBoolean(R.bool.config_show_call_volume) && context.resources.getBoolean(R.bool.config_show_call_volume) &&
!createAudioHelper(context).isSingleVolume() !createAudioHelper(context).isSingleVolume
override fun isRestricted(context: Context) = override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
RestrictedLockUtilsInternal.hasBaseUserRestriction(
context, override val restrictionKey: String
DISALLOW_ADJUST_VOLUME, get() = UserManager.DISALLOW_ADJUST_VOLUME
UserHandle.myUserId()
) || RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
context,
DISALLOW_ADJUST_VOLUME,
UserHandle.myUserId()
) != null
override fun storage(context: Context): KeyValueStore { override fun storage(context: Context): KeyValueStore {
val helper = createAudioHelper(context) val helper = createAudioHelper(context)

View File

@@ -18,18 +18,16 @@ package com.android.settings.notification
import android.content.Context import android.content.Context
import android.media.AudioManager.STREAM_MUSIC import android.media.AudioManager.STREAM_MUSIC
import android.os.UserHandle
import android.os.UserManager import android.os.UserManager
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.RestrictedLockUtilsInternal
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceIconProvider
import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceRestrictionProvider
import com.android.settingslib.metadata.RangeValue import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.preference.PreferenceBinding import com.android.settingslib.preference.PreferenceBinding
@@ -42,7 +40,7 @@ open class MediaVolumePreference :
RangeValue, RangeValue,
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
PreferenceIconProvider, PreferenceIconProvider,
PreferenceRestrictionProvider { PreferenceRestrictionMixin {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -58,17 +56,10 @@ open class MediaVolumePreference :
override fun isAvailable(context: Context) = override fun isAvailable(context: Context) =
context.resources.getBoolean(R.bool.config_show_media_volume) context.resources.getBoolean(R.bool.config_show_media_volume)
override fun isRestricted(context: Context) = override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
RestrictedLockUtilsInternal.hasBaseUserRestriction(
context, override val restrictionKey: String
UserManager.DISALLOW_ADJUST_VOLUME, get() = UserManager.DISALLOW_ADJUST_VOLUME
UserHandle.myUserId(),
) ||
RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
context,
UserManager.DISALLOW_ADJUST_VOLUME,
UserHandle.myUserId(),
) != null
override fun storage(context: Context): KeyValueStore { override fun storage(context: Context): KeyValueStore {
val helper = createAudioHelper(context) val helper = createAudioHelper(context)
@@ -107,9 +98,9 @@ open class MediaVolumePreference :
open fun createAudioHelper(context: Context) = AudioHelper(context) open fun createAudioHelper(context: Context) = AudioHelper(context)
fun updateContentDescription(preference: VolumeSeekBarPreference) { private fun updateContentDescription(preference: VolumeSeekBarPreference) {
when { when {
preference.isMuted() -> preference.isMuted ->
preference.updateContentDescription( preference.updateContentDescription(
preference.context.getString( preference.context.getString(
R.string.volume_content_description_silent_mode, R.string.volume_content_description_silent_mode,

View File

@@ -24,21 +24,19 @@ import android.media.AudioManager.RINGER_MODE_SILENT
import android.media.AudioManager.RINGER_MODE_VIBRATE import android.media.AudioManager.RINGER_MODE_VIBRATE
import android.media.AudioManager.STREAM_RING import android.media.AudioManager.STREAM_RING
import android.os.ServiceManager import android.os.ServiceManager
import android.os.UserHandle import android.os.UserManager
import android.os.UserManager.DISALLOW_ADJUST_VOLUME
import android.os.Vibrator import android.os.Vibrator
import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS
import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS import android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS
import androidx.preference.Preference import androidx.preference.Preference
import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.RestrictedLockUtilsInternal
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceIconProvider import com.android.settingslib.metadata.PreferenceIconProvider
import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceRestrictionProvider
import com.android.settingslib.metadata.RangeValue import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.preference.PreferenceBinding import com.android.settingslib.preference.PreferenceBinding
@@ -51,7 +49,8 @@ open class SeparateRingVolumePreference :
RangeValue, RangeValue,
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
PreferenceIconProvider, PreferenceIconProvider,
PreferenceRestrictionProvider { PreferenceRestrictionMixin {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -64,21 +63,12 @@ open class SeparateRingVolumePreference :
else -> R.drawable.ic_ring_volume else -> R.drawable.ic_ring_volume
} }
override fun isAvailable(context: Context) = !createAudioHelper(context).isSingleVolume() override fun isAvailable(context: Context) = !createAudioHelper(context).isSingleVolume
override fun isEnabled(context: Context) = override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
!RestrictedLockUtilsInternal.hasBaseUserRestriction(
context,
DISALLOW_ADJUST_VOLUME,
UserHandle.myUserId(),
)
override fun isRestricted(context: Context) = override val restrictionKey: String
RestrictedLockUtilsInternal.checkIfRestrictionEnforced( get() = UserManager.DISALLOW_ADJUST_VOLUME
context,
DISALLOW_ADJUST_VOLUME,
UserHandle.myUserId(),
) != null
override fun storage(context: Context): KeyValueStore { override fun storage(context: Context): KeyValueStore {
val helper = createAudioHelper(context) val helper = createAudioHelper(context)
@@ -118,7 +108,7 @@ open class SeparateRingVolumePreference :
open fun createAudioHelper(context: Context) = AudioHelper(context) open fun createAudioHelper(context: Context) = AudioHelper(context)
fun updateContentDescription(preference: VolumeSeekBarPreference) { private fun updateContentDescription(preference: VolumeSeekBarPreference) {
val context = preference.context val context = preference.context
val ringerMode = getEffectiveRingerMode(context) val ringerMode = getEffectiveRingerMode(context)
when (ringerMode) { when (ringerMode) {
@@ -152,13 +142,13 @@ open class SeparateRingVolumePreference :
} }
} }
fun getSuppressionText(context: Context): String? { private fun getSuppressionText(context: Context): String? {
val suppressor = NotificationManager.from(context).getEffectsSuppressor() val suppressor = NotificationManager.from(context).getEffectsSuppressor()
val notificationManager = val notificationManager =
INotificationManager.Stub.asInterface( INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE) ServiceManager.getService(Context.NOTIFICATION_SERVICE)
) )
val hints = notificationManager.getHintsFromListenerNoToken() val hints = notificationManager.hintsFromListenerNoToken
return when { return when {
hintsMatch(hints) -> SuppressorHelper.getSuppressionText(context, suppressor) hintsMatch(hints) -> SuppressorHelper.getSuppressionText(context, suppressor)
else -> null else -> null