Merge "Create TogglePermissionAppListProvider"
This commit is contained in:
@@ -30,7 +30,6 @@ import androidx.navigation.NavType
|
||||
import androidx.navigation.navArgument
|
||||
import com.android.settingslib.spa.framework.common.SettingsPageProvider
|
||||
import com.android.settingslib.spa.framework.compose.navigator
|
||||
import com.android.settingslib.spa.framework.compose.rememberContext
|
||||
import com.android.settingslib.spa.widget.preference.SwitchPreference
|
||||
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
|
||||
import com.android.settingslib.spaprivileged.model.app.AppRecord
|
||||
@@ -44,7 +43,7 @@ private const val PACKAGE_NAME = "packageName"
|
||||
private const val USER_ID = "userId"
|
||||
|
||||
internal class TogglePermissionAppInfoPageProvider(
|
||||
private val factory: TogglePermissionAppListModelFactory,
|
||||
private val appListTemplate: TogglePermissionAppListTemplate,
|
||||
) : SettingsPageProvider {
|
||||
override val name = NAME
|
||||
|
||||
@@ -57,10 +56,10 @@ internal class TogglePermissionAppInfoPageProvider(
|
||||
@Composable
|
||||
override fun Page(arguments: Bundle?) {
|
||||
checkNotNull(arguments)
|
||||
val permission = checkNotNull(arguments.getString(PERMISSION))
|
||||
val permissionType = checkNotNull(arguments.getString(PERMISSION))
|
||||
val packageName = checkNotNull(arguments.getString(PACKAGE_NAME))
|
||||
val userId = arguments.getInt(USER_ID)
|
||||
val listModel = rememberContext { context -> factory.createModel(permission, context) }
|
||||
val listModel = appListTemplate.rememberModel(permissionType)
|
||||
TogglePermissionAppInfoPage(listModel, packageName, userId)
|
||||
}
|
||||
|
||||
|
||||
@@ -47,20 +47,14 @@ interface TogglePermissionAppListModel<T : AppRecord> {
|
||||
fun setAllowed(record: T, newAllowed: Boolean)
|
||||
}
|
||||
|
||||
interface TogglePermissionAppListModelFactory {
|
||||
fun createModel(
|
||||
permission: String,
|
||||
context: Context,
|
||||
): TogglePermissionAppListModel<out AppRecord>
|
||||
interface TogglePermissionAppListProvider {
|
||||
val permissionType: String
|
||||
|
||||
fun createPageProviders(): List<SettingsPageProvider> = listOf(
|
||||
TogglePermissionAppListPageProvider(this),
|
||||
TogglePermissionAppInfoPageProvider(this),
|
||||
)
|
||||
fun createModel(context: Context): TogglePermissionAppListModel<out AppRecord>
|
||||
|
||||
@Composable
|
||||
fun EntryItem(permissionType: String) {
|
||||
val listModel = rememberModel(permissionType)
|
||||
fun EntryItem() {
|
||||
val listModel = rememberContext(::createModel)
|
||||
Preference(
|
||||
object : PreferenceModel {
|
||||
override val title = stringResource(listModel.pageTitleResId)
|
||||
@@ -74,10 +68,22 @@ interface TogglePermissionAppListModelFactory {
|
||||
*
|
||||
* Expose route to enable enter from non-SPA pages.
|
||||
*/
|
||||
fun getRoute(permissionType: String): String =
|
||||
fun getRoute(): String =
|
||||
TogglePermissionAppListPageProvider.getRoute(permissionType)
|
||||
}
|
||||
|
||||
@Composable
|
||||
internal fun TogglePermissionAppListModelFactory.rememberModel(permission: String) =
|
||||
rememberContext { context -> createModel(permission, context) }
|
||||
class TogglePermissionAppListTemplate(
|
||||
allProviders: List<TogglePermissionAppListProvider>,
|
||||
) {
|
||||
private val listModelProviderMap = allProviders.associateBy { it.permissionType }
|
||||
|
||||
fun createPageProviders(): List<SettingsPageProvider> = listOf(
|
||||
TogglePermissionAppListPageProvider(this),
|
||||
TogglePermissionAppInfoPageProvider(this),
|
||||
)
|
||||
|
||||
@Composable
|
||||
internal fun rememberModel(permissionType: String) = rememberContext { context ->
|
||||
listModelProviderMap.getValue(permissionType).createModel(context)
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ private const val NAME = "TogglePermissionAppList"
|
||||
private const val PERMISSION = "permission"
|
||||
|
||||
internal class TogglePermissionAppListPageProvider(
|
||||
private val factory: TogglePermissionAppListModelFactory,
|
||||
private val appListTemplate: TogglePermissionAppListTemplate,
|
||||
) : SettingsPageProvider {
|
||||
override val name = NAME
|
||||
|
||||
@@ -55,7 +55,7 @@ internal class TogglePermissionAppListPageProvider(
|
||||
|
||||
@Composable
|
||||
private fun TogglePermissionAppList(permissionType: String) {
|
||||
val listModel = factory.rememberModel(permissionType)
|
||||
val listModel = appListTemplate.rememberModel(permissionType)
|
||||
val context = LocalContext.current
|
||||
val internalListModel = remember {
|
||||
TogglePermissionInternalAppListModel(context, listModel)
|
||||
|
||||
Reference in New Issue
Block a user