Add more tests for TogglePermissionAppListPageTest
Bug: 260660819 Test: Unit test Test: Manually with Settings Change-Id: Idacfa2f0636538d5cd5e0a3038ca4f9f9f9aac5a
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 appListInjectEntry_titleDisplayed() {
|
||||
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 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user