diff options
| author | 2022-12-13 20:08:02 +0800 | |
|---|---|---|
| committer | 2022-12-13 20:08:02 +0800 | |
| commit | e8201d28eac237901e1161d04d68aa2928725f7f (patch) | |
| tree | fbf00a2b23a169239eba8a906440d63f5b776766 | |
| parent | 0a9d5c28d43b718350bba9095591b39fde976fff (diff) | |
Add more tests for TogglePermissionAppListPageTest
Bug: 260660819
Test: Unit test
Test: Manually with Settings
Change-Id: Idacfa2f0636538d5cd5e0a3038ca4f9f9f9aac5a
4 files changed, 150 insertions, 44 deletions
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 5ae5adaff634..62db7bd02f7b 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 @@ -93,7 +93,7 @@ internal class TogglePermissionAppInfoPageProvider( ) { val context = LocalContext.current val internalListModel = remember { - TogglePermissionInternalAppListModel(context, listModel) + TogglePermissionInternalAppListModel(context, listModel, ::RestrictionsProviderImpl) } val record = remember { listModel.transformItem(app) } if (!remember { listModel.isChangeable(record) }) return 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 00eb60793217..f65e31040ff6 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 @@ -42,6 +42,7 @@ 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.RestrictionsProviderFactory import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl import com.android.settingslib.spaprivileged.template.preference.RestrictedSwitchPreference import kotlinx.coroutines.flow.Flow @@ -64,41 +65,18 @@ internal class TogglePermissionAppListPageProvider( val permissionType = parameter.getStringArg(PERMISSION, arguments)!! val appListPage = SettingsPage.create(name, parameter = parameter, arguments = arguments) val appInfoPage = TogglePermissionAppInfoPageProvider.buildPageData(permissionType) - val entryList = mutableListOf<SettingsEntry>() // TODO: add more categories, such as personal, work, cloned, etc. - for (category in listOf("personal")) { - entryList.add( - SettingsEntryBuilder.createLinkFrom("${ENTRY_NAME}_$category", appListPage) - .setLink(toPage = appInfoPage) - .build() - ) + return listOf("personal").map { category -> + SettingsEntryBuilder.createLinkFrom("${ENTRY_NAME}_$category", appListPage) + .setLink(toPage = appInfoPage) + .build() } - return entryList } @Composable override fun Page(arguments: Bundle?) { - TogglePermissionAppList(arguments?.getString(PERMISSION)!!) - } - - @Composable - private fun TogglePermissionAppList(permissionType: String) { - val listModel = appListTemplate.rememberModel(permissionType) - val context = LocalContext.current - val internalListModel = remember { - TogglePermissionInternalAppListModel(context, listModel) - } - AppListPage( - title = stringResource(listModel.pageTitleResId), - listModel = internalListModel, - ) { - AppListItem( - onClick = TogglePermissionAppInfoPageProvider.navigator( - permissionType = permissionType, - app = record.app, - ), - ) - } + val permissionType = arguments?.getString(PERMISSION)!! + appListTemplate.rememberModel(permissionType).TogglePermissionAppList(permissionType) } companion object { @@ -132,9 +110,34 @@ internal class TogglePermissionAppListPageProvider( } } +@Composable +internal fun <T : AppRecord> TogglePermissionAppListModel<T>.TogglePermissionAppList( + permissionType: String, + restrictionsProviderFactory: RestrictionsProviderFactory = ::RestrictionsProviderImpl, + appList: @Composable AppListInput<T>.() -> Unit = { AppList() }, +) { + val context = LocalContext.current + val internalListModel = remember { + TogglePermissionInternalAppListModel(context, this, restrictionsProviderFactory) + } + AppListPage( + title = stringResource(pageTitleResId), + listModel = internalListModel, + appList = appList, + ) { + AppListItem( + onClick = TogglePermissionAppInfoPageProvider.navigator( + permissionType = permissionType, + app = record.app, + ), + ) + } +} + internal class TogglePermissionInternalAppListModel<T : AppRecord>( private val context: Context, private val listModel: TogglePermissionAppListModel<T>, + private val restrictionsProviderFactory: RestrictionsProviderFactory, ) : AppListModel<T> { override fun transform(userIdFlow: Flow<Int>, appListFlow: Flow<List<ApplicationInfo>>) = listModel.transform(userIdFlow, appListFlow) @@ -147,12 +150,12 @@ internal class TogglePermissionInternalAppListModel<T : AppRecord>( @Composable fun getSummary(record: T): State<String> { - val restrictionsProvider = remember { + val restrictionsProvider = remember(record.app.userId) { val restrictions = Restrictions( userId = record.app.userId, keys = listModel.switchRestrictionKeys, ) - RestrictionsProviderImpl(context, restrictions) + restrictionsProviderFactory(context, restrictions) } val restrictedMode = restrictionsProvider.restrictedModeState() val allowed = listModel.isAllowed(record) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/scaffold/RestrictedMenuItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/scaffold/RestrictedMenuItem.kt index 8c1421a66564..86b6f027997d 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/scaffold/RestrictedMenuItem.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/scaffold/RestrictedMenuItem.kt @@ -16,7 +16,6 @@ package com.android.settingslib.spaprivileged.template.scaffold -import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext @@ -24,7 +23,7 @@ import com.android.settingslib.spa.widget.scaffold.MoreOptionsScope import com.android.settingslib.spaprivileged.model.enterprise.BaseUserRestricted import com.android.settingslib.spaprivileged.model.enterprise.BlockedByAdmin import com.android.settingslib.spaprivileged.model.enterprise.Restrictions -import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProvider +import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderFactory import com.android.settingslib.spaprivileged.model.enterprise.RestrictionsProviderImpl @Composable @@ -41,7 +40,7 @@ internal fun MoreOptionsScope.RestrictedMenuItemImpl( text: String, restrictions: Restrictions, onClick: () -> Unit, - restrictionsProviderFactory: (Context, Restrictions) -> RestrictionsProvider, + restrictionsProviderFactory: RestrictionsProviderFactory, ) { val context = LocalContext.current val restrictionsProvider = remember(restrictions) { diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt index 355dfb6b3ae1..75b884cbad44 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt @@ -17,14 +17,22 @@ package com.android.settingslib.spaprivileged.template.app import android.content.Context +import android.content.pm.ApplicationInfo import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.State import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settingslib.spaprivileged.test.R +import com.android.settingslib.spa.framework.compose.stateOf +import com.android.settingslib.spa.testutils.FakeNavControllerWrapper +import com.android.settingslib.spaprivileged.R +import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted +import com.android.settingslib.spaprivileged.tests.testutils.FakeRestrictionsProvider +import com.android.settingslib.spaprivileged.tests.testutils.TestAppRecord import com.android.settingslib.spaprivileged.tests.testutils.TestTogglePermissionAppListModel import com.google.common.truth.Truth.assertThat import org.junit.Rule @@ -38,10 +46,97 @@ class TogglePermissionAppListPageTest { private val context: Context = ApplicationProvider.getApplicationContext() + private val fakeNavControllerWrapper = FakeNavControllerWrapper() + + private val fakeRestrictionsProvider = FakeRestrictionsProvider() + + @Test + fun internalAppListModel_whenAllowed() { + fakeRestrictionsProvider.restrictedMode = NoRestricted + val listModel = TestTogglePermissionAppListModel(isAllowed = true) + val internalAppListModel = TogglePermissionInternalAppListModel( + context = context, + listModel = listModel, + restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, + ) + + val summaryState = getSummary(internalAppListModel) + + assertThat(summaryState.value).isEqualTo( + context.getString(R.string.app_permission_summary_allowed) + ) + } + + @Test + fun internalAppListModel_whenNotAllowed() { + fakeRestrictionsProvider.restrictedMode = NoRestricted + val listModel = TestTogglePermissionAppListModel(isAllowed = false) + val internalAppListModel = TogglePermissionInternalAppListModel( + context = context, + listModel = listModel, + restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, + ) + + val summaryState = getSummary(internalAppListModel) + + assertThat(summaryState.value).isEqualTo( + context.getString(R.string.app_permission_summary_not_allowed) + ) + } + + @Test + fun internalAppListModel_whenComputingAllowed() { + fakeRestrictionsProvider.restrictedMode = NoRestricted + val listModel = TestTogglePermissionAppListModel(isAllowed = null) + val internalAppListModel = TogglePermissionInternalAppListModel( + context = context, + listModel = listModel, + restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, + ) + + val summaryState = getSummary(internalAppListModel) + + assertThat(summaryState.value).isEqualTo( + context.getString(R.string.summary_placeholder) + ) + } + + @Test + fun appListItem_onClick_navigate() { + val listModel = TestTogglePermissionAppListModel() + composeTestRule.setContent { + listModel.TogglePermissionAppList( + permissionType = PERMISSION_TYPE, + restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, + ) { + fakeNavControllerWrapper.Wrapper { + AppListItemModel( + record = listModel.transformItem(APP), + label = LABEL, + summary = stateOf(SUMMARY), + ).appItem() + } + } + } + + composeTestRule.onNodeWithText(LABEL).performClick() + + assertThat(fakeNavControllerWrapper.navigateCalledWith) + .isEqualTo("TogglePermissionAppInfoPage/test.PERMISSION/package.name/0") + } + @Test - fun appListInjectEntry_titleDisplayed() { + fun getRoute() { + val route = TogglePermissionAppListPageProvider.getRoute(PERMISSION_TYPE) + + assertThat(route).isEqualTo("TogglePermissionAppList/test.PERMISSION") + } + + @Test + fun buildInjectEntry_titleDisplayed() { + val listModel = TestTogglePermissionAppListModel() val entry = TogglePermissionAppListPageProvider.buildInjectEntry(PERMISSION_TYPE) { - TestTogglePermissionAppListModel() + listModel }.build() composeTestRule.setContent { @@ -50,18 +145,27 @@ class TogglePermissionAppListPageTest { } } - composeTestRule.onNodeWithText(context.getString(R.string.test_permission_title)) + composeTestRule.onNodeWithText(context.getString(listModel.pageTitleResId)) .assertIsDisplayed() } - @Test - fun appListRoute() { - val route = TogglePermissionAppListPageProvider.getRoute(PERMISSION_TYPE) - - assertThat(route).isEqualTo("TogglePermissionAppList/test.PERMISSION") + private fun getSummary( + internalAppListModel: TogglePermissionInternalAppListModel<TestAppRecord>, + ): State<String> { + lateinit var summary: State<String> + composeTestRule.setContent { + summary = internalAppListModel.getSummary(record = TestAppRecord(APP)) + } + return summary } private companion object { const val PERMISSION_TYPE = "test.PERMISSION" + const val PACKAGE_NAME = "package.name" + const val LABEL = "Label" + const val SUMMARY = "Summary" + val APP = ApplicationInfo().apply { + packageName = PACKAGE_NAME + } } } |