Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt +6 −8 Original line number Diff line number Diff line Loading @@ -41,8 +41,6 @@ import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.IPackageManagers import com.android.settingslib.spaprivileged.model.app.PackageManagers import com.android.settingslib.spaprivileged.model.app.toRoute import com.android.settingslib.spaprivileged.model.enterprise.EnhancedConfirmation import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderFactory import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreference Loading Loading @@ -155,12 +153,12 @@ internal fun <T : AppRecord> TogglePermissionAppListModel<T>.TogglePermissionApp override val changeable = { isChangeable } override val onCheckedChange: (Boolean) -> Unit = { setAllowed(record, it) } } val restrictions = Restrictions(userId = userId, keys = switchRestrictionKeys, enhancedConfirmation = enhancedConfirmationKey?.let { EnhancedConfirmation( key = it, packageName = packageName) }) RestrictedSwitchPreference(switchModel, restrictions, restrictionsProviderFactory) RestrictedSwitchPreference( model = switchModel, restrictions = getRestrictions(userId, packageName), ifBlockedByAdminOverrideCheckedValueTo = switchifBlockedByAdminOverrideCheckedValueTo, restrictionsProviderFactory = restrictionsProviderFactory, ) InfoPageAdditionalContent(record, isAllowed) } } Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt +22 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.compose.rememberContext import com.android.settingslib.spa.framework.util.asyncMapItem import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.enterprise.EnhancedConfirmation import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import kotlinx.coroutines.flow.Flow /** Loading @@ -38,6 +40,16 @@ interface TogglePermissionAppListModel<T : AppRecord> { val switchRestrictionKeys: List<String> get() = emptyList() /** * If this is not null, and on a switch UI restricted by admin, the switch's checked status will * be overridden. * * And if there is an admin summary, such as "Enabled by admin" or "Disabled by admin", will * also be overridden. */ val switchifBlockedByAdminOverrideCheckedValueTo: Boolean? get() = null val enhancedConfirmationKey: String? get() = null Loading Loading @@ -101,6 +113,16 @@ fun <T : AppRecord> TogglePermissionAppListModel<T>.isChangeableWithSystemUidChe record: T, ): Boolean = !record.isSystemOrRootUid() && isChangeable(record) fun <T : AppRecord> TogglePermissionAppListModel<T>.getRestrictions( userId: Int, packageName: String, ) = Restrictions( userId = userId, keys = switchRestrictionKeys, enhancedConfirmation = enhancedConfirmationKey?.let { key -> EnhancedConfirmation(key, packageName) }, ) interface TogglePermissionAppListProvider { val permissionType: String Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +7 −13 Original line number Diff line number Diff line Loading @@ -42,8 +42,6 @@ import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder import com.android.settingslib.spaprivileged.model.app.AppListModel import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.userId import com.android.settingslib.spaprivileged.model.enterprise.EnhancedConfirmation import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderFactory import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.model.enterprise.rememberRestrictedMode Loading Loading @@ -151,23 +149,19 @@ internal class TogglePermissionInternalAppListModel<T : AppRecord>( @Composable fun getSummary(record: T): () -> String { val restrictions = remember(record.app.userId, record.app.packageName) { Restrictions( val restrictions = listModel.getRestrictions( userId = record.app.userId, keys = listModel.switchRestrictionKeys, enhancedConfirmation = listModel.enhancedConfirmationKey?.let { EnhancedConfirmation( key = it, packageName = record.app.packageName) }) } packageName = record.app.packageName, ) val restrictedMode by restrictionsProviderFactory.rememberRestrictedMode(restrictions) val allowed = listModel.isAllowed(record) return RestrictedSwitchPreferenceModel.getSummary( context = context, restrictedModeSupplier = { restrictedMode }, summaryIfNoRestricted = { getSummaryIfNoRestricted(allowed()) }, checked = allowed, checkedIfNoRestricted = allowed, checkedIfBlockedByAdmin = listModel.switchifBlockedByAdminOverrideCheckedValueTo, restrictedModeSupplier = { restrictedMode }, ) } Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt +20 −2 Original line number Diff line number Diff line Loading @@ -25,12 +25,25 @@ import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProvid import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreferenceModel.Companion.RestrictedSwitchWrapper /** * @param ifBlockedByAdminOverrideCheckedValueTo if this is not null and there is an admin * restriction, the switch's checked status will be overridden. * * And if there is an admin summary, such as "Enabled by admin" or "Disabled by admin", will also * be overridden. */ @Composable fun RestrictedSwitchPreference( model: SwitchPreferenceModel, restrictions: Restrictions, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, ) { RestrictedSwitchPreference(model, restrictions, ::RestrictionsProviderImpl) RestrictedSwitchPreference( model = model, restrictions = restrictions, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, restrictionsProviderFactory = ::RestrictionsProviderImpl, ) } @VisibleForTesting Loading @@ -38,13 +51,18 @@ fun RestrictedSwitchPreference( internal fun RestrictedSwitchPreference( model: SwitchPreferenceModel, restrictions: Restrictions, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, restrictionsProviderFactory: RestrictionsProviderFactory, ) { if (restrictions.isEmpty()) { SwitchPreference(model) return } restrictionsProviderFactory.RestrictedSwitchWrapper(model, restrictions) { restrictionsProviderFactory.RestrictedSwitchWrapper( model = model, restrictions = restrictions, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, ) { SwitchPreference(it) } } packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreferenceModel.kt +40 −21 Original line number Diff line number Diff line Loading @@ -42,26 +42,29 @@ internal class RestrictedSwitchPreferenceModel( context: Context, model: SwitchPreferenceModel, private val restrictedMode: RestrictedMode?, private val ifBlockedByAdminOverrideCheckedValueTo: Boolean?, ) : SwitchPreferenceModel { override val title = model.title override val summary = getSummary( override val checked = when (restrictedMode) { null -> ({ null }) is NoRestricted -> model.checked is BaseUserRestricted -> ({ false }) is BlockedByAdmin -> ({ ifBlockedByAdminOverrideCheckedValueTo ?: model.checked() }) is BlockedByEcm -> model.checked } override val summary = getSummary( context = context, restrictedModeSupplier = { restrictedMode }, summaryIfNoRestricted = model.summary, checked = model.checked, checkedIfNoRestricted = checked, ) override val icon = model.icon override val checked = when (restrictedMode) { null -> ({ null }) is NoRestricted -> model.checked is BaseUserRestricted -> ({ false }) is BlockedByAdmin -> model.checked is BlockedByEcm -> model.checked } override val changeable = restrictedMode.restrictEnabled(model.changeable) override val onCheckedChange = restrictedMode.restrictOnClick(model.onCheckedChange) Loading Loading @@ -112,11 +115,19 @@ internal class RestrictedSwitchPreferenceModel( fun RestrictedSwitchWrapper( model: SwitchPreferenceModel, restrictedMode: RestrictedMode?, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, content: @Composable (SwitchPreferenceModel) -> Unit, ) { val context = LocalContext.current val restrictedSwitchPreferenceModel = remember(restrictedMode, model) { RestrictedSwitchPreferenceModel(context, model, restrictedMode) val restrictedSwitchPreferenceModel = remember(restrictedMode, model) { RestrictedSwitchPreferenceModel( context = context, model = model, restrictedMode = restrictedMode, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, ) } restrictedSwitchPreferenceModel.RestrictionWrapper { content(restrictedSwitchPreferenceModel) Loading @@ -127,23 +138,31 @@ internal class RestrictedSwitchPreferenceModel( fun RestrictionsProviderFactory.RestrictedSwitchWrapper( model: SwitchPreferenceModel, restrictions: Restrictions, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, content: @Composable (SwitchPreferenceModel) -> Unit, ) { RestrictedSwitchWrapper(model, rememberRestrictedMode(restrictions).value, content) RestrictedSwitchWrapper( model = model, restrictedMode = rememberRestrictedMode(restrictions).value, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, content = content, ) } fun getSummary( context: Context, restrictedModeSupplier: () -> RestrictedMode?, summaryIfNoRestricted: () -> String, checked: () -> Boolean?, checkedIfNoRestricted: () -> Boolean?, checkedIfBlockedByAdmin: Boolean? = null, restrictedModeSupplier: () -> RestrictedMode?, ): () -> String = { when (val restrictedMode = restrictedModeSupplier()) { is NoRestricted -> summaryIfNoRestricted() is BaseUserRestricted -> context.getString(com.android.settingslib.R.string.disabled) is BlockedByAdmin -> restrictedMode.getSummary(checked()) is BlockedByAdmin -> restrictedMode.getSummary(checkedIfBlockedByAdmin ?: checkedIfNoRestricted()) is BlockedByEcm -> context.getString(com.android.settingslib.R.string.disabled) Loading Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt +6 −8 Original line number Diff line number Diff line Loading @@ -41,8 +41,6 @@ import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.IPackageManagers import com.android.settingslib.spaprivileged.model.app.PackageManagers import com.android.settingslib.spaprivileged.model.app.toRoute import com.android.settingslib.spaprivileged.model.enterprise.EnhancedConfirmation import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderFactory import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreference Loading Loading @@ -155,12 +153,12 @@ internal fun <T : AppRecord> TogglePermissionAppListModel<T>.TogglePermissionApp override val changeable = { isChangeable } override val onCheckedChange: (Boolean) -> Unit = { setAllowed(record, it) } } val restrictions = Restrictions(userId = userId, keys = switchRestrictionKeys, enhancedConfirmation = enhancedConfirmationKey?.let { EnhancedConfirmation( key = it, packageName = packageName) }) RestrictedSwitchPreference(switchModel, restrictions, restrictionsProviderFactory) RestrictedSwitchPreference( model = switchModel, restrictions = getRestrictions(userId, packageName), ifBlockedByAdminOverrideCheckedValueTo = switchifBlockedByAdminOverrideCheckedValueTo, restrictionsProviderFactory = restrictionsProviderFactory, ) InfoPageAdditionalContent(record, isAllowed) } } Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt +22 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.framework.compose.rememberContext import com.android.settingslib.spa.framework.util.asyncMapItem import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.enterprise.EnhancedConfirmation import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import kotlinx.coroutines.flow.Flow /** Loading @@ -38,6 +40,16 @@ interface TogglePermissionAppListModel<T : AppRecord> { val switchRestrictionKeys: List<String> get() = emptyList() /** * If this is not null, and on a switch UI restricted by admin, the switch's checked status will * be overridden. * * And if there is an admin summary, such as "Enabled by admin" or "Disabled by admin", will * also be overridden. */ val switchifBlockedByAdminOverrideCheckedValueTo: Boolean? get() = null val enhancedConfirmationKey: String? get() = null Loading Loading @@ -101,6 +113,16 @@ fun <T : AppRecord> TogglePermissionAppListModel<T>.isChangeableWithSystemUidChe record: T, ): Boolean = !record.isSystemOrRootUid() && isChangeable(record) fun <T : AppRecord> TogglePermissionAppListModel<T>.getRestrictions( userId: Int, packageName: String, ) = Restrictions( userId = userId, keys = switchRestrictionKeys, enhancedConfirmation = enhancedConfirmationKey?.let { key -> EnhancedConfirmation(key, packageName) }, ) interface TogglePermissionAppListProvider { val permissionType: String Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +7 −13 Original line number Diff line number Diff line Loading @@ -42,8 +42,6 @@ import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder import com.android.settingslib.spaprivileged.model.app.AppListModel import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.userId import com.android.settingslib.spaprivileged.model.enterprise.EnhancedConfirmation import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderFactory import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.model.enterprise.rememberRestrictedMode Loading Loading @@ -151,23 +149,19 @@ internal class TogglePermissionInternalAppListModel<T : AppRecord>( @Composable fun getSummary(record: T): () -> String { val restrictions = remember(record.app.userId, record.app.packageName) { Restrictions( val restrictions = listModel.getRestrictions( userId = record.app.userId, keys = listModel.switchRestrictionKeys, enhancedConfirmation = listModel.enhancedConfirmationKey?.let { EnhancedConfirmation( key = it, packageName = record.app.packageName) }) } packageName = record.app.packageName, ) val restrictedMode by restrictionsProviderFactory.rememberRestrictedMode(restrictions) val allowed = listModel.isAllowed(record) return RestrictedSwitchPreferenceModel.getSummary( context = context, restrictedModeSupplier = { restrictedMode }, summaryIfNoRestricted = { getSummaryIfNoRestricted(allowed()) }, checked = allowed, checkedIfNoRestricted = allowed, checkedIfBlockedByAdmin = listModel.switchifBlockedByAdminOverrideCheckedValueTo, restrictedModeSupplier = { restrictedMode }, ) } Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt +20 −2 Original line number Diff line number Diff line Loading @@ -25,12 +25,25 @@ import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProvid import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreferenceModel.Companion.RestrictedSwitchWrapper /** * @param ifBlockedByAdminOverrideCheckedValueTo if this is not null and there is an admin * restriction, the switch's checked status will be overridden. * * And if there is an admin summary, such as "Enabled by admin" or "Disabled by admin", will also * be overridden. */ @Composable fun RestrictedSwitchPreference( model: SwitchPreferenceModel, restrictions: Restrictions, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, ) { RestrictedSwitchPreference(model, restrictions, ::RestrictionsProviderImpl) RestrictedSwitchPreference( model = model, restrictions = restrictions, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, restrictionsProviderFactory = ::RestrictionsProviderImpl, ) } @VisibleForTesting Loading @@ -38,13 +51,18 @@ fun RestrictedSwitchPreference( internal fun RestrictedSwitchPreference( model: SwitchPreferenceModel, restrictions: Restrictions, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, restrictionsProviderFactory: RestrictionsProviderFactory, ) { if (restrictions.isEmpty()) { SwitchPreference(model) return } restrictionsProviderFactory.RestrictedSwitchWrapper(model, restrictions) { restrictionsProviderFactory.RestrictedSwitchWrapper( model = model, restrictions = restrictions, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, ) { SwitchPreference(it) } }
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreferenceModel.kt +40 −21 Original line number Diff line number Diff line Loading @@ -42,26 +42,29 @@ internal class RestrictedSwitchPreferenceModel( context: Context, model: SwitchPreferenceModel, private val restrictedMode: RestrictedMode?, private val ifBlockedByAdminOverrideCheckedValueTo: Boolean?, ) : SwitchPreferenceModel { override val title = model.title override val summary = getSummary( override val checked = when (restrictedMode) { null -> ({ null }) is NoRestricted -> model.checked is BaseUserRestricted -> ({ false }) is BlockedByAdmin -> ({ ifBlockedByAdminOverrideCheckedValueTo ?: model.checked() }) is BlockedByEcm -> model.checked } override val summary = getSummary( context = context, restrictedModeSupplier = { restrictedMode }, summaryIfNoRestricted = model.summary, checked = model.checked, checkedIfNoRestricted = checked, ) override val icon = model.icon override val checked = when (restrictedMode) { null -> ({ null }) is NoRestricted -> model.checked is BaseUserRestricted -> ({ false }) is BlockedByAdmin -> model.checked is BlockedByEcm -> model.checked } override val changeable = restrictedMode.restrictEnabled(model.changeable) override val onCheckedChange = restrictedMode.restrictOnClick(model.onCheckedChange) Loading Loading @@ -112,11 +115,19 @@ internal class RestrictedSwitchPreferenceModel( fun RestrictedSwitchWrapper( model: SwitchPreferenceModel, restrictedMode: RestrictedMode?, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, content: @Composable (SwitchPreferenceModel) -> Unit, ) { val context = LocalContext.current val restrictedSwitchPreferenceModel = remember(restrictedMode, model) { RestrictedSwitchPreferenceModel(context, model, restrictedMode) val restrictedSwitchPreferenceModel = remember(restrictedMode, model) { RestrictedSwitchPreferenceModel( context = context, model = model, restrictedMode = restrictedMode, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, ) } restrictedSwitchPreferenceModel.RestrictionWrapper { content(restrictedSwitchPreferenceModel) Loading @@ -127,23 +138,31 @@ internal class RestrictedSwitchPreferenceModel( fun RestrictionsProviderFactory.RestrictedSwitchWrapper( model: SwitchPreferenceModel, restrictions: Restrictions, ifBlockedByAdminOverrideCheckedValueTo: Boolean? = null, content: @Composable (SwitchPreferenceModel) -> Unit, ) { RestrictedSwitchWrapper(model, rememberRestrictedMode(restrictions).value, content) RestrictedSwitchWrapper( model = model, restrictedMode = rememberRestrictedMode(restrictions).value, ifBlockedByAdminOverrideCheckedValueTo = ifBlockedByAdminOverrideCheckedValueTo, content = content, ) } fun getSummary( context: Context, restrictedModeSupplier: () -> RestrictedMode?, summaryIfNoRestricted: () -> String, checked: () -> Boolean?, checkedIfNoRestricted: () -> Boolean?, checkedIfBlockedByAdmin: Boolean? = null, restrictedModeSupplier: () -> RestrictedMode?, ): () -> String = { when (val restrictedMode = restrictedModeSupplier()) { is NoRestricted -> summaryIfNoRestricted() is BaseUserRestricted -> context.getString(com.android.settingslib.R.string.disabled) is BlockedByAdmin -> restrictedMode.getSummary(checked()) is BlockedByAdmin -> restrictedMode.getSummary(checkedIfBlockedByAdmin ?: checkedIfNoRestricted()) is BlockedByEcm -> context.getString(com.android.settingslib.R.string.disabled) Loading