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

Commit 327377b8 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Create TogglePermissionAppListProvider"

parents c085efb7 9ebe42ff
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -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)
    }

+21 −15
Original line number Diff line number Diff line
@@ -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)
}

class TogglePermissionAppListTemplate(
    allProviders: List<TogglePermissionAppListProvider>,
) {
    private val listModelProviderMap = allProviders.associateBy { it.permissionType }

    fun createPageProviders(): List<SettingsPageProvider> = listOf(
        TogglePermissionAppListPageProvider(this),
        TogglePermissionAppInfoPageProvider(this),
    )

    @Composable
internal fun TogglePermissionAppListModelFactory.rememberModel(permission: String) =
    rememberContext { context -> createModel(permission, context) }
    internal fun rememberModel(permissionType: String) = rememberContext { context ->
        listModelProviderMap.getValue(permissionType).createModel(context)
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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)