Merge "[Catalyst] Support multiple restriction keys" into main

This commit is contained in:
Treehugger Robot
2024-11-12 09:30:52 +00:00
committed by Android (Google) Code Review
11 changed files with 48 additions and 31 deletions

View File

@@ -18,27 +18,42 @@ package com.android.settings
import android.content.Context
import android.os.UserHandle
import android.os.UserManager
import androidx.annotation.CallSuper
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin
import com.android.settingslib.RestrictedLockUtilsInternal
import com.android.settingslib.metadata.PreferenceRestrictionProvider
/** Mixin to support restriction. */
interface PreferenceRestrictionMixin : PreferenceRestrictionProvider {
val restrictionKey: String
/**
* Keys for restriction.
*
* Preference is restricted when **ANY** key in the list is restricted.
*/
val restrictionKeys: Array<String>
val useAdminDisabledSummary: Boolean
get() = false
@CallSuper fun isEnabled(context: Context) = !context.hasBaseUserRestriction(restrictionKey)
@CallSuper fun isEnabled(context: Context) = !context.hasBaseUserRestriction(restrictionKeys)
override fun isRestricted(context: Context) =
RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
context,
restrictionKey,
UserHandle.myUserId(),
) != null
context.getRestrictionEnforcedAdmin(restrictionKeys) != null
}
fun Context.hasBaseUserRestriction(restrictionKey: String) =
RestrictedLockUtilsInternal.hasBaseUserRestriction(this, restrictionKey, UserHandle.myUserId())
/** Returns the admin that has enforced restriction on given keys. */
fun Context.getRestrictionEnforcedAdmin(restrictionKeys: Array<String>): EnforcedAdmin? {
val userId = UserHandle.myUserId()
return restrictionKeys.firstNotNullOfOrNull {
RestrictedLockUtilsInternal.checkIfRestrictionEnforced(this, it, userId)
}
}
/** Returns if there is **any** base user restriction on given keys. */
fun Context.hasBaseUserRestriction(restrictionKeys: Array<String>): Boolean {
val userManager = getSystemService(UserManager::class.java) ?: return false
val userHandle = UserHandle.of(UserHandle.myUserId())
return restrictionKeys.any { userManager.hasBaseUserRestriction(it, userHandle) }
}

View File

@@ -16,7 +16,6 @@
package com.android.settings
import android.os.UserHandle
import androidx.preference.Preference
import com.android.settingslib.RestrictedPreferenceHelperProvider
import com.android.settingslib.metadata.PreferenceHierarchyNode
@@ -37,10 +36,11 @@ class SettingsPreferenceBindingFactory : DefaultPreferenceBindingFactory() {
if (metadata is PreferenceRestrictionMixin) {
if (preference is RestrictedPreferenceHelperProvider) {
preference.getRestrictedPreferenceHelper().apply {
val restrictionKey = metadata.restrictionKey
if (!preference.context.hasBaseUserRestriction(restrictionKey)) {
useAdminDisabledSummary(metadata.useAdminDisabledSummary)
checkRestrictionAndSetDisabled(restrictionKey, UserHandle.myUserId())
useAdminDisabledSummary(metadata.useAdminDisabledSummary)
val context = preference.context
val restrictionKeys = metadata.restrictionKeys
if (!context.hasBaseUserRestriction(restrictionKeys)) {
setDisabledByAdmin(context.getRestrictionEnforcedAdmin(restrictionKeys))
}
}
}

View File

@@ -74,8 +74,8 @@ class AutoBrightnessScreen :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_CONFIG_BRIGHTNESS
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_CONFIG_BRIGHTNESS)
override val useAdminDisabledSummary: Boolean
get() = true

View File

@@ -71,8 +71,8 @@ class BrightnessLevelPreference :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_CONFIG_BRIGHTNESS
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_CONFIG_BRIGHTNESS)
override val useAdminDisabledSummary: Boolean
get() = true

View File

@@ -40,8 +40,8 @@ class MobileNetworkListScreen : PreferenceScreenCreator, PreferenceRestrictionMi
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)
override fun isFlagEnabled(context: Context) = Flags.catalystMobileNetworkList()

View File

@@ -45,8 +45,8 @@ class NetworkProviderScreen :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_CONFIG_WIFI
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_CONFIG_WIFI)
override fun isFlagEnabled(context: Context) = Flags.catalystInternetSettings()

View File

@@ -54,8 +54,8 @@ class TetherScreen :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_CONFIG_TETHERING
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_CONFIG_TETHERING)
override fun isFlagEnabled(context: Context) = Flags.catalystTetherSettings()

View File

@@ -57,8 +57,8 @@ open class CallVolumePreference :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_ADJUST_VOLUME
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_ADJUST_VOLUME)
override fun storage(context: Context): KeyValueStore {
val helper = createAudioHelper(context)

View File

@@ -58,8 +58,8 @@ open class MediaVolumePreference :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_ADJUST_VOLUME
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_ADJUST_VOLUME)
override fun storage(context: Context): KeyValueStore {
val helper = createAudioHelper(context)

View File

@@ -67,8 +67,8 @@ open class SeparateRingVolumePreference :
override fun isEnabled(context: Context) = super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKey: String
get() = UserManager.DISALLOW_ADJUST_VOLUME
override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_ADJUST_VOLUME)
override fun storage(context: Context): KeyValueStore {
val helper = createAudioHelper(context)

View File

@@ -34,7 +34,9 @@ class UserRestrictionBindingHelper(
screenBindingHelper.forEachRecursively {
val metadata = it.metadata
if (metadata is PreferenceRestrictionMixin) {
getOrPut(metadata.restrictionKey) { mutableSetOf() }.add(metadata.key)
for (restrictionKey in metadata.restrictionKeys) {
getOrPut(restrictionKey) { mutableSetOf() }.add(metadata.key)
}
}
}
}