summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chaohui Wang <chaohuiw@google.com> 2022-12-13 20:08:02 +0800
committer Chaohui Wang <chaohuiw@google.com> 2022-12-13 20:08:02 +0800
commite8201d28eac237901e1161d04d68aa2928725f7f (patch)
treefbf00a2b23a169239eba8a906440d63f5b776766
parent0a9d5c28d43b718350bba9095591b39fde976fff (diff)
Add more tests for TogglePermissionAppListPageTest
Bug: 260660819 Test: Unit test Test: Manually with Settings Change-Id: Idacfa2f0636538d5cd5e0a3038ca4f9f9f9aac5a
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt2
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt65
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/scaffold/RestrictedMenuItem.kt5
-rw-r--r--packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt122
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
+ }
}
}