Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e94e4cdc authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 03e7eacc 865e9b29
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -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
}

/** 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)
    }
}

fun Context.hasBaseUserRestriction(restrictionKey: String) =
    RestrictedLockUtilsInternal.hasBaseUserRestriction(this, restrictionKey, UserHandle.myUserId())
/** 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) }
}
+5 −5
Original line number Diff line number Diff line
@@ -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())
                    val context = preference.context
                    val restrictionKeys = metadata.restrictionKeys
                    if (!context.hasBaseUserRestriction(restrictionKeys)) {
                        setDisabledByAdmin(context.getRestrictionEnforcedAdmin(restrictionKeys))
                    }
                }
            }
+2 −2
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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()

Loading