From 9ebe42ffceeab911e115c046b9f3c2e387e6e276 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 30 Aug 2022 13:39:12 +0800 Subject: [PATCH] Create TogglePermissionAppListProvider Refactor to align with SPA. Bug: 235727273 Test: Manual test with Test App Change-Id: I2c2db7d00aa3ef050fe602e2b3549607321cfb3e --- .../app/TogglePermissionAppInfoPage.kt | 7 ++-- ...istModel.kt => TogglePermissionAppList.kt} | 36 +++++++++++-------- .../app/TogglePermissionAppListPage.kt | 4 +-- 3 files changed, 26 insertions(+), 21 deletions(-) rename packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/{TogglePermissionAppListModel.kt => TogglePermissionAppList.kt} (80%) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt index dac79a0fbb163..eb9ce5e77c933 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt @@ -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) } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt similarity index 80% rename from packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt rename to packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt index a2848392a2f08..3cc5854b95e40 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt @@ -47,20 +47,14 @@ interface TogglePermissionAppListModel { fun setAllowed(record: T, newAllowed: Boolean) } -interface TogglePermissionAppListModelFactory { - fun createModel( - permission: String, - context: Context, - ): TogglePermissionAppListModel +interface TogglePermissionAppListProvider { + val permissionType: String - fun createPageProviders(): List = listOf( - TogglePermissionAppListPageProvider(this), - TogglePermissionAppInfoPageProvider(this), - ) + fun createModel(context: Context): TogglePermissionAppListModel @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, +) { + private val listModelProviderMap = allProviders.associateBy { it.permissionType } + + fun createPageProviders(): List = listOf( + TogglePermissionAppListPageProvider(this), + TogglePermissionAppInfoPageProvider(this), + ) + + @Composable + internal fun rememberModel(permissionType: String) = rememberContext { context -> + listModelProviderMap.getValue(permissionType).createModel(context) + } +} diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt index a4d9058fde4d3..f2eb96277b9bc 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt @@ -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)