From 5a1c436fda7c8e3d250e03368d37941e021766b0 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Thu, 15 Dec 2022 12:27:56 +0800 Subject: [PATCH] Move AppItem into AppListModel For better unit testings. The AppItem used to be write with AppListPage, which is a little bit hard to test, by moving it into AppListModel, AppItem could be tested as other methods in AppListModel. Also add more test cases for TogglePermissionAppInfoPage and TogglePermissionAppListPage. Bug: 260660819 Test: Unit test Test: Manually with Settings Change-Id: I646add1434d435ca3a8dbf7b34f39a705bae8754 --- .../spaprivileged/model/app/AppListModel.kt | 7 ++ .../spaprivileged/template/app/AppList.kt | 15 +-- .../spaprivileged/template/app/AppListPage.kt | 2 - .../app/TogglePermissionAppInfoPage.kt | 47 ++++---- .../template/app/TogglePermissionAppList.kt | 2 +- .../app/TogglePermissionAppListPage.kt | 32 ++++-- .../template/app/AppListPageTest.kt | 1 - .../spaprivileged/template/app/AppListTest.kt | 1 - .../app/TogglePermissionAppInfoPageTest.kt | 104 +++++++++++++++++- .../app/TogglePermissionAppListPageTest.kt | 76 ++++++------- .../TestTogglePermissionAppListModel.kt | 14 ++- 11 files changed, 207 insertions(+), 94 deletions(-) diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListModel.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListModel.kt index 69999089b280b..af5c5dcd37d56 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListModel.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppListModel.kt @@ -4,6 +4,8 @@ import android.content.pm.ApplicationInfo import android.icu.text.CollationKey import androidx.compose.runtime.Composable import androidx.compose.runtime.State +import com.android.settingslib.spaprivileged.template.app.AppListItem +import com.android.settingslib.spaprivileged.template.app.AppListItemModel import kotlinx.coroutines.flow.Flow data class AppEntry( @@ -69,4 +71,9 @@ interface AppListModel { */ @Composable fun getSummary(option: Int, record: T): State? = null + + @Composable + fun AppListItemModel.AppItem() { + AppListItem {} + } } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt index 2e0d85302b4c1..deec267454d63 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt @@ -60,7 +60,6 @@ data class AppListInput( val listModel: AppListModel, val state: AppListState, val header: @Composable () -> Unit, - val appItem: @Composable AppListItemModel.() -> Unit, val bottomPadding: Dp, ) @@ -80,15 +79,13 @@ internal fun AppListInput.AppListImpl( ) { LogCompositions(TAG, config.userId.toString()) val appListData = appListDataSupplier() - AppListWidget(appListData, listModel, header, appItem, bottomPadding) + listModel.AppListWidget(appListData, header, bottomPadding) } @Composable -private fun AppListWidget( +private fun AppListModel.AppListWidget( appListData: State?>, - listModel: AppListModel, header: @Composable () -> Unit, - appItem: @Composable (itemState: AppListItemModel) -> Unit, bottomPadding: Dp, ) { val timeMeasurer = rememberTimeMeasurer(TAG) @@ -108,14 +105,14 @@ private fun AppListWidget( } items(count = list.size, key = { option to list[it].record.app.packageName }) { - remember(list) { listModel.getGroupTitleIfFirst(option, list, it) } + remember(list) { getGroupTitleIfFirst(option, list, it) } ?.let { group -> CategoryTitle(title = group) } val appEntry = list[it] - val summary = listModel.getSummary(option, appEntry.record) ?: "".toState() - appItem(remember(appEntry) { + val summary = getSummary(option, appEntry.record) ?: "".toState() + remember(appEntry) { AppListItemModel(appEntry.record, appEntry.label, summary) - }) + }.AppItem() } } } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt index cb35fb0b27c72..318bcd93d39d5 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListPage.kt @@ -48,7 +48,6 @@ fun AppListPage( moreOptions: @Composable MoreOptionsScope.() -> Unit = {}, header: @Composable () -> Unit = {}, appList: @Composable AppListInput.() -> Unit = { AppList() }, - appItem: @Composable AppListItemModel.() -> Unit, ) { val showSystem = rememberSaveable { mutableStateOf(false) } SearchScaffold( @@ -77,7 +76,6 @@ fun AppListPage( searchQuery = searchQuery, ), header = header, - appItem = appItem, bottomPadding = bottomPadding, ) appList(appListInput) 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 62db7bd02f7b5..76cff0bba8757 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 @@ -85,27 +85,6 @@ internal class TogglePermissionAppInfoPageProvider( fun navigator(permissionType: String, app: ApplicationInfo) = navigator(route = "$PAGE_NAME/$permissionType/${app.toRoute()}") - @Composable - fun EntryItem( - permissionType: String, - app: ApplicationInfo, - listModel: TogglePermissionAppListModel, - ) { - val context = LocalContext.current - val internalListModel = remember { - TogglePermissionInternalAppListModel(context, listModel, ::RestrictionsProviderImpl) - } - val record = remember { listModel.transformItem(app) } - if (!remember { listModel.isChangeable(record) }) return - Preference( - object : PreferenceModel { - override val title = stringResource(listModel.pageTitleResId) - override val summary = internalListModel.getSummary(record) - override val onClick = navigator(permissionType, app) - } - ) - } - fun buildPageData(permissionType: String): SettingsPage { return SettingsPage.create( name = PAGE_NAME, @@ -116,6 +95,32 @@ internal class TogglePermissionAppInfoPageProvider( } } +@Composable +internal fun TogglePermissionAppListModel.TogglePermissionAppInfoPageEntryItem( + permissionType: String, + app: ApplicationInfo, +) { + val record = remember { transformItem(app) } + if (!remember { isChangeable(record) }) return + val context = LocalContext.current + val internalListModel = remember { + TogglePermissionInternalAppListModel( + context = context, + permissionType = permissionType, + listModel = this, + restrictionsProviderFactory = ::RestrictionsProviderImpl, + ) + } + Preference( + object : PreferenceModel { + override val title = stringResource(pageTitleResId) + override val summary = internalListModel.getSummary(record) + override val onClick = + TogglePermissionAppInfoPageProvider.navigator(permissionType, app) + } + ) +} + @VisibleForTesting @Composable internal fun TogglePermissionAppListModel.TogglePermissionAppInfoPage( diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt index 5d49d24ecf8e2..ce8fc9df7c38a 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt @@ -96,7 +96,7 @@ interface TogglePermissionAppListProvider { @Composable fun InfoPageEntryItem(app: ApplicationInfo) { val listModel = rememberContext(::createModel) - TogglePermissionAppInfoPageProvider.EntryItem(permissionType, app, listModel) + listModel.TogglePermissionAppInfoPageEntryItem(permissionType, app) } } 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 f65e31040ff6b..cbc4822f2896a 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 @@ -117,25 +117,23 @@ internal fun TogglePermissionAppListModel.TogglePermissionApp appList: @Composable AppListInput.() -> 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( + listModel = remember { + TogglePermissionInternalAppListModel( + context = context, permissionType = permissionType, - app = record.app, - ), - ) - } + listModel = this, + restrictionsProviderFactory = restrictionsProviderFactory, + ) + }, + appList = appList, + ) } internal class TogglePermissionInternalAppListModel( private val context: Context, + private val permissionType: String, private val listModel: TogglePermissionAppListModel, private val restrictionsProviderFactory: RestrictionsProviderFactory, ) : AppListModel { @@ -178,4 +176,14 @@ internal class TogglePermissionInternalAppListModel( null -> context.getString(R.string.summary_placeholder) } } + + @Composable + override fun AppListItemModel.AppItem() { + AppListItem( + onClick = TogglePermissionAppInfoPageProvider.navigator( + permissionType = permissionType, + app = record.app, + ), + ) + } } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt index f2267f61847c5..62413864c7df1 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt @@ -122,7 +122,6 @@ class AppListPageTest { title = TITLE, listModel = TestAppListModel(options), header = header, - appItem = { AppListItem {} }, appList = { appListState.value = this }, ) } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt index 267766992d2c5..0154aa1944265 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt @@ -99,7 +99,6 @@ class AppListTest { searchQuery = "".toState(), ), header = header, - appItem = { AppListItem {} }, bottomPadding = 0.dp, ) appListInput.AppListImpl { stateOf(AppListData(appEntries, option = 0)) } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt index ecad08a0aca24..14cb698f7d041 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPageTest.kt @@ -20,13 +20,18 @@ import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertIsNotEnabled import androidx.compose.ui.test.assertIsOff import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onRoot +import androidx.compose.ui.test.performClick import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.settingslib.spa.testutils.FakeNavControllerWrapper +import com.android.settingslib.spaprivileged.R import com.android.settingslib.spaprivileged.model.app.IPackageManagers import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted import com.android.settingslib.spaprivileged.tests.testutils.FakeRestrictionsProvider @@ -55,6 +60,8 @@ class TogglePermissionAppInfoPageTest { @Mock private lateinit var packageManagers: IPackageManagers + private val fakeNavControllerWrapper = FakeNavControllerWrapper() + private val fakeRestrictionsProvider = FakeRestrictionsProvider() private val appListTemplate = @@ -78,7 +85,58 @@ class TogglePermissionAppInfoPageTest { } @Test - fun title_isDisplayed() { + fun entryItem_whenNotChangeable_notDisplayed() { + val listModel = TestTogglePermissionAppListModel(isChangeable = false) + + setEntryItem(listModel) + + composeTestRule.onRoot().assertIsNotDisplayed() + } + + @Test + fun entryItem_whenChangeable_titleDisplayed() { + val listModel = TestTogglePermissionAppListModel(isChangeable = true) + + setEntryItem(listModel) + + composeTestRule.onNodeWithText(context.getString(listModel.pageTitleResId)) + .assertIsDisplayed() + } + + @Test + fun entryItem_whenAllowed_summaryIsAllowed() { + val listModel = TestTogglePermissionAppListModel(isAllowed = true, isChangeable = true) + + setEntryItem(listModel) + + composeTestRule.onNodeWithText(context.getString(R.string.app_permission_summary_allowed)) + .assertIsDisplayed() + } + + @Test + fun entryItem_whenNotAllowed_summaryIsNotAllowed() { + val listModel = TestTogglePermissionAppListModel(isAllowed = false, isChangeable = true) + + setEntryItem(listModel) + + composeTestRule.onNodeWithText( + context.getString(R.string.app_permission_summary_not_allowed) + ).assertIsDisplayed() + } + + @Test + fun entryItem_onClick() { + val listModel = TestTogglePermissionAppListModel(isChangeable = true) + + setEntryItem(listModel) + composeTestRule.onRoot().performClick() + + assertThat(fakeNavControllerWrapper.navigateCalledWith) + .isEqualTo("TogglePermissionAppInfoPage/test.PERMISSION/package.name/0") + } + + @Test + fun infoPage_title_isDisplayed() { val listModel = TestTogglePermissionAppListModel() setTogglePermissionAppInfoPage(listModel) @@ -88,7 +146,7 @@ class TogglePermissionAppInfoPageTest { } @Test - fun whenAllowed_switchIsOn() { + fun infoPage_whenAllowed_switchIsOn() { val listModel = TestTogglePermissionAppListModel(isAllowed = true) setTogglePermissionAppInfoPage(listModel) @@ -98,7 +156,7 @@ class TogglePermissionAppInfoPageTest { } @Test - fun whenNotAllowed_switchIsOff() { + fun infoPage_whenNotAllowed_switchIsOff() { val listModel = TestTogglePermissionAppListModel(isAllowed = false) setTogglePermissionAppInfoPage(listModel) @@ -108,7 +166,31 @@ class TogglePermissionAppInfoPageTest { } @Test - fun whenNotChangeable_switchNotEnabled() { + fun infoPage_whenChangeableAndClick() { + val listModel = TestTogglePermissionAppListModel(isAllowed = false, isChangeable = true) + + setTogglePermissionAppInfoPage(listModel) + composeTestRule.onNodeWithText(context.getString(listModel.switchTitleResId)) + .performClick() + + composeTestRule.onNodeWithText(context.getString(listModel.switchTitleResId)) + .assertIsOn() + } + + @Test + fun infoPage_whenNotChangeableAndClick() { + val listModel = TestTogglePermissionAppListModel(isAllowed = false, isChangeable = false) + + setTogglePermissionAppInfoPage(listModel) + composeTestRule.onNodeWithText(context.getString(listModel.switchTitleResId)) + .performClick() + + composeTestRule.onNodeWithText(context.getString(listModel.switchTitleResId)) + .assertIsOff() + } + + @Test + fun infoPage_whenNotChangeable_switchNotEnabled() { val listModel = TestTogglePermissionAppListModel(isAllowed = false, isChangeable = false) setTogglePermissionAppInfoPage(listModel) @@ -119,7 +201,7 @@ class TogglePermissionAppInfoPageTest { } @Test - fun footer_isDisplayed() { + fun infoPage_footer_isDisplayed() { val listModel = TestTogglePermissionAppListModel() setTogglePermissionAppInfoPage(listModel) @@ -128,6 +210,17 @@ class TogglePermissionAppInfoPageTest { .assertIsDisplayed() } + private fun setEntryItem(listModel: TestTogglePermissionAppListModel) { + composeTestRule.setContent { + fakeNavControllerWrapper.Wrapper { + listModel.TogglePermissionAppInfoPageEntryItem( + permissionType = PERMISSION_TYPE, + app = APP, + ) + } + } + } + private fun setTogglePermissionAppInfoPage(listModel: TestTogglePermissionAppListModel) { composeTestRule.setContent { listModel.TogglePermissionAppInfoPage( @@ -140,6 +233,7 @@ class TogglePermissionAppInfoPageTest { } private companion object { + const val PERMISSION_TYPE = "test.PERMISSION" const val USER_ID = 0 const val PACKAGE_NAME = "package.name" val APP = ApplicationInfo().apply { 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 75b884cbad44c..961ec10cccd9c 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 @@ -51,50 +51,49 @@ class TogglePermissionAppListPageTest { private val fakeRestrictionsProvider = FakeRestrictionsProvider() @Test - fun internalAppListModel_whenAllowed() { + fun pageTitle() { + val listModel = TestTogglePermissionAppListModel() + + composeTestRule.setContent { + listModel.TogglePermissionAppList( + permissionType = PERMISSION_TYPE, + restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, + appList = {}, + ) + } + + composeTestRule.onNodeWithText(context.getString(listModel.pageTitleResId)) + .assertIsDisplayed() + } + + @Test + fun summary_whenAllowed() { fakeRestrictionsProvider.restrictedMode = NoRestricted val listModel = TestTogglePermissionAppListModel(isAllowed = true) - val internalAppListModel = TogglePermissionInternalAppListModel( - context = context, - listModel = listModel, - restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, - ) - val summaryState = getSummary(internalAppListModel) + val summaryState = getSummary(listModel) - assertThat(summaryState.value).isEqualTo( - context.getString(R.string.app_permission_summary_allowed) - ) + assertThat(summaryState.value) + .isEqualTo(context.getString(R.string.app_permission_summary_allowed)) } @Test - fun internalAppListModel_whenNotAllowed() { + fun summary_whenNotAllowed() { fakeRestrictionsProvider.restrictedMode = NoRestricted val listModel = TestTogglePermissionAppListModel(isAllowed = false) - val internalAppListModel = TogglePermissionInternalAppListModel( - context = context, - listModel = listModel, - restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, - ) - val summaryState = getSummary(internalAppListModel) + val summaryState = getSummary(listModel) - assertThat(summaryState.value).isEqualTo( - context.getString(R.string.app_permission_summary_not_allowed) - ) + assertThat(summaryState.value) + .isEqualTo(context.getString(R.string.app_permission_summary_not_allowed)) } @Test - fun internalAppListModel_whenComputingAllowed() { + fun summary_whenComputingAllowed() { fakeRestrictionsProvider.restrictedMode = NoRestricted val listModel = TestTogglePermissionAppListModel(isAllowed = null) - val internalAppListModel = TogglePermissionInternalAppListModel( - context = context, - listModel = listModel, - restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, - ) - val summaryState = getSummary(internalAppListModel) + val summaryState = getSummary(listModel) assertThat(summaryState.value).isEqualTo( context.getString(R.string.summary_placeholder) @@ -105,16 +104,13 @@ class TogglePermissionAppListPageTest { fun appListItem_onClick_navigate() { val listModel = TestTogglePermissionAppListModel() composeTestRule.setContent { - listModel.TogglePermissionAppList( - permissionType = PERMISSION_TYPE, - restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, - ) { - fakeNavControllerWrapper.Wrapper { + fakeNavControllerWrapper.Wrapper { + with(createInternalAppListModel(listModel)) { AppListItemModel( record = listModel.transformItem(APP), label = LABEL, summary = stateOf(SUMMARY), - ).appItem() + ).AppItem() } } } @@ -149,12 +145,18 @@ class TogglePermissionAppListPageTest { .assertIsDisplayed() } - private fun getSummary( - internalAppListModel: TogglePermissionInternalAppListModel, - ): State { + private fun createInternalAppListModel(listModel: TestTogglePermissionAppListModel) = + TogglePermissionInternalAppListModel( + context = context, + permissionType = PERMISSION_TYPE, + listModel = listModel, + restrictionsProviderFactory = { _, _ -> fakeRestrictionsProvider }, + ) + + private fun getSummary(listModel: TestTogglePermissionAppListModel): State { lateinit var summary: State composeTestRule.setContent { - summary = internalAppListModel.getSummary(record = TestAppRecord(APP)) + summary = createInternalAppListModel(listModel).getSummary(record = TestAppRecord(APP)) } return summary } diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/tests/testutils/TestTogglePermissionAppListModel.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/tests/testutils/TestTogglePermissionAppListModel.kt index b13fbb3e8e41a..1bfc7ed637af0 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/tests/testutils/TestTogglePermissionAppListModel.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/tests/testutils/TestTogglePermissionAppListModel.kt @@ -18,28 +18,32 @@ package com.android.settingslib.spaprivileged.tests.testutils import android.content.pm.ApplicationInfo import androidx.compose.runtime.Composable -import com.android.settingslib.spa.framework.compose.stateOf -import com.android.settingslib.spaprivileged.test.R +import androidx.compose.runtime.mutableStateOf import com.android.settingslib.spaprivileged.template.app.TogglePermissionAppListModel +import com.android.settingslib.spaprivileged.test.R import kotlinx.coroutines.flow.Flow class TestTogglePermissionAppListModel( - private val isAllowed: Boolean? = null, + isAllowed: Boolean? = null, private val isChangeable: Boolean = false, ) : TogglePermissionAppListModel { override val pageTitleResId = R.string.test_permission_title override val switchTitleResId = R.string.test_permission_switch_title override val footerResId = R.string.test_permission_footer + private val isAllowedState = mutableStateOf(isAllowed) + override fun transformItem(app: ApplicationInfo) = TestAppRecord(app = app) override fun filter(userIdFlow: Flow, recordListFlow: Flow>) = recordListFlow @Composable - override fun isAllowed(record: TestAppRecord) = stateOf(isAllowed) + override fun isAllowed(record: TestAppRecord) = isAllowedState override fun isChangeable(record: TestAppRecord) = isChangeable - override fun setAllowed(record: TestAppRecord, newAllowed: Boolean) {} + override fun setAllowed(record: TestAppRecord, newAllowed: Boolean) { + isAllowedState.value = newAllowed + } }