Merge "Add RestrictionKeys to TogglePermissionAppList"

This commit is contained in:
Chaohui Wang
2022-09-16 10:02:09 +00:00
committed by Android (Google) Code Review
4 changed files with 53 additions and 12 deletions

View File

@@ -34,11 +34,12 @@ import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.widget.preference.SwitchPreference
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import com.android.settingslib.spaprivileged.model.app.AppRecord
import com.android.settingslib.spaprivileged.model.app.PackageManagers
import com.android.settingslib.spaprivileged.model.app.toRoute
import com.android.settingslib.spaprivileged.model.enterprise.Restrictions
import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreference
import kotlinx.coroutines.Dispatchers
private const val ENTRY_NAME = "AllowControl"
@@ -105,7 +106,7 @@ private fun TogglePermissionAppInfoPage(
LaunchedEffect(model, Dispatchers.Default) {
model.initState()
}
SwitchPreference(model)
RestrictedSwitchPreference(model, Restrictions(userId, listModel.switchRestrictionKeys))
}
}

View File

@@ -37,6 +37,8 @@ interface TogglePermissionAppListModel<T : AppRecord> {
val pageTitleResId: Int
val switchTitleResId: Int
val footerResId: Int
val switchRestrictionKeys: List<String>
get() = emptyList()
/**
* Loads the extra info for the App List, and generates the [AppRecord] List.

View File

@@ -22,6 +22,7 @@ import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
@@ -37,6 +38,10 @@ import com.android.settingslib.spa.framework.util.getStringArg
import com.android.settingslib.spaprivileged.R
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.Restrictions
import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProvider
import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreference
import kotlinx.coroutines.flow.Flow
private const val ENTRY_NAME = "AppList"
@@ -127,15 +132,32 @@ private class TogglePermissionInternalAppListModel<T : AppRecord>(
@Composable
override fun getSummary(option: Int, record: T): State<String> {
val restrictionsProvider = remember {
val restrictions = Restrictions(
userId = record.app.userId,
keys = listModel.switchRestrictionKeys,
)
RestrictionsProvider(context, restrictions)
}
val restrictedMode = restrictionsProvider.restrictedMode.observeAsState()
val allowed = listModel.isAllowed(record)
return remember {
derivedStateOf {
when (allowed.value) {
true -> context.getString(R.string.app_permission_summary_allowed)
false -> context.getString(R.string.app_permission_summary_not_allowed)
else -> ""
}
RestrictedSwitchPreference.getSummary(
context = context,
restrictedMode = restrictedMode.value,
noRestrictedSummary = getNoRestrictedSummary(allowed),
checked = allowed,
).value
}
}
}
private fun getNoRestrictedSummary(allowed: State<Boolean?>) = derivedStateOf {
when (allowed.value) {
true -> context.getString(R.string.app_permission_summary_allowed)
false -> context.getString(R.string.app_permission_summary_not_allowed)
else -> context.getString(R.string.summary_placeholder)
}
}
}

View File

@@ -20,6 +20,7 @@ import android.content.Context
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.remember
@@ -55,6 +56,20 @@ fun RestrictedSwitchPreference(model: SwitchPreferenceModel, restrictions: Restr
}
}
object RestrictedSwitchPreference {
fun getSummary(
context: Context,
restrictedMode: RestrictedMode?,
noRestrictedSummary: State<String>,
checked: State<Boolean?>,
): State<String> = when (restrictedMode) {
is NoRestricted -> noRestrictedSummary
is BaseUserRestricted -> stateOf(context.getString(R.string.disabled))
is BlockedByAdmin -> derivedStateOf { restrictedMode.getSummary(checked.value) }
null -> stateOf(context.getString(R.string.summary_placeholder))
}
}
private class RestrictedSwitchPreferenceModel(
private val context: Context,
model: SwitchPreferenceModel,
@@ -62,11 +77,12 @@ private class RestrictedSwitchPreferenceModel(
) : SwitchPreferenceModel {
override val title = model.title
override val summary = when (restrictedMode) {
is NoRestricted -> model.summary
is BaseUserRestricted -> stateOf(context.getString(R.string.disabled))
is BlockedByAdmin -> derivedStateOf { restrictedMode.getSummary(model.checked.value) }
}
override val summary = RestrictedSwitchPreference.getSummary(
context = context,
restrictedMode = restrictedMode,
noRestrictedSummary = model.summary,
checked = model.checked,
)
override val checked = when (restrictedMode) {
is NoRestricted -> model.checked