From 722d6088ee55b34b4d335e313b4ec495397e2575 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 18 Jul 2023 15:24:27 +0800 Subject: New AppListSwitchItem New version is single target, the old two target version is renamed to AppListTwoTargetSwitchItem. Bug: 201358903 Test: manual - on App Notification page Change-Id: I1a529ce9e2a99b09e20b78e67d5122f634268687 --- .../template/app/AppListSwitchItem.kt | 12 +- .../template/app/AppListTwoTargetSwitchItem.kt | 44 +++++ .../template/app/AppListSwitchItemTest.kt | 27 +-- .../template/app/AppListTwoTargetSwitchItemTest.kt | 189 +++++++++++++++++++++ 4 files changed, 240 insertions(+), 32 deletions(-) create mode 100644 packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt create mode 100644 packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt index e84668735fab..155905be4261 100644 --- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 The Android Open Source Project + * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,26 +19,26 @@ package com.android.settingslib.spaprivileged.template.app import androidx.compose.runtime.Composable import androidx.compose.runtime.State import com.android.settingslib.spa.framework.theme.SettingsDimension +import com.android.settingslib.spa.widget.preference.SwitchPreference import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel -import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference import com.android.settingslib.spaprivileged.model.app.AppRecord @Composable fun AppListItemModel.AppListSwitchItem( - onClick: () -> Unit, checked: State, changeable: State, onCheckedChange: ((newChecked: Boolean) -> Unit)?, ) { - TwoTargetSwitchPreference( + SwitchPreference( model = object : SwitchPreferenceModel { override val title = label override val summary = this@AppListSwitchItem.summary + override val icon = @Composable { + AppIcon(record.app, SettingsDimension.appIconItemSize) + } override val checked = checked override val changeable = changeable override val onCheckedChange = onCheckedChange }, - icon = { AppIcon(record.app, SettingsDimension.appIconItemSize) }, - onClick = onClick, ) } diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt new file mode 100644 index 000000000000..99d38401829e --- /dev/null +++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.spaprivileged.template.app + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import com.android.settingslib.spa.framework.theme.SettingsDimension +import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel +import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference +import com.android.settingslib.spaprivileged.model.app.AppRecord + +@Composable +fun AppListItemModel.AppListTwoTargetSwitchItem( + onClick: () -> Unit, + checked: State, + changeable: State, + onCheckedChange: ((newChecked: Boolean) -> Unit)?, +) { + TwoTargetSwitchPreference( + model = object : SwitchPreferenceModel { + override val title = label + override val summary = this@AppListTwoTargetSwitchItem.summary + override val checked = checked + override val changeable = changeable + override val onCheckedChange = onCheckedChange + }, + icon = { AppIcon(record.app, SettingsDimension.appIconItemSize) }, + onClick = onClick, + ) +} diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt index abdcd3bc5527..2fd1b10dade8 100644 --- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 The Android Open Source Project + * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,7 +43,6 @@ class AppListSwitchItemTest { fun appLabel_displayed() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(null), changeable = stateOf(false), onCheckedChange = {}, @@ -57,7 +56,6 @@ class AppListSwitchItemTest { fun summary_displayed() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(null), changeable = stateOf(false), onCheckedChange = {}, @@ -67,28 +65,10 @@ class AppListSwitchItemTest { composeTestRule.onNodeWithText(SUMMARY).assertIsDisplayed() } - @Test - fun title_onClick() { - var titleClicked = false - composeTestRule.setContent { - ITEM_MODEL.AppListSwitchItem( - onClick = { titleClicked = true }, - checked = stateOf(false), - changeable = stateOf(false), - onCheckedChange = {}, - ) - } - - composeTestRule.onNodeWithText(LABEL).performClick() - - assertThat(titleClicked).isTrue() - } - @Test fun switch_checkIsNull() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(null), changeable = stateOf(false), onCheckedChange = {}, @@ -102,7 +82,6 @@ class AppListSwitchItemTest { fun switch_checked() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(true), changeable = stateOf(false), onCheckedChange = {}, @@ -116,7 +95,6 @@ class AppListSwitchItemTest { fun switch_notChecked() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(false), changeable = stateOf(false), onCheckedChange = {}, @@ -130,7 +108,6 @@ class AppListSwitchItemTest { fun switch_changeable() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(false), changeable = stateOf(true), onCheckedChange = {}, @@ -144,7 +121,6 @@ class AppListSwitchItemTest { fun switch_notChangeable() { composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(false), changeable = stateOf(false), onCheckedChange = {}, @@ -159,7 +135,6 @@ class AppListSwitchItemTest { var switchClicked = false composeTestRule.setContent { ITEM_MODEL.AppListSwitchItem( - onClick = {}, checked = stateOf(false), changeable = stateOf(true), onCheckedChange = { switchClicked = true }, diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt new file mode 100644 index 000000000000..6e7fc8e4416c --- /dev/null +++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.spaprivileged.template.app + +import android.content.pm.ApplicationInfo +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertIsNotEnabled +import androidx.compose.ui.test.assertIsOff +import androidx.compose.ui.test.assertIsOn +import androidx.compose.ui.test.isToggleable +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.settingslib.spa.framework.compose.stateOf +import com.android.settingslib.spaprivileged.model.app.AppRecord +import com.google.common.truth.Truth.assertThat +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class AppListTwoTargetSwitchItemTest { + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun appLabel_displayed() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(null), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNodeWithText(LABEL).assertIsDisplayed() + } + + @Test + fun summary_displayed() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(null), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNodeWithText(SUMMARY).assertIsDisplayed() + } + + @Test + fun title_onClick() { + var titleClicked = false + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = { titleClicked = true }, + checked = stateOf(false), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNodeWithText(LABEL).performClick() + + assertThat(titleClicked).isTrue() + } + + @Test + fun switch_checkIsNull() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(null), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNode(isToggleable()).assertDoesNotExist() + } + + @Test + fun switch_checked() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(true), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNode(isToggleable()).assertIsOn() + } + + @Test + fun switch_notChecked() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(false), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNode(isToggleable()).assertIsOff() + } + + @Test + fun switch_changeable() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(false), + changeable = stateOf(true), + onCheckedChange = {}, + ) + } + + composeTestRule.onNode(isToggleable()).assertIsEnabled() + } + + @Test + fun switch_notChangeable() { + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(false), + changeable = stateOf(false), + onCheckedChange = {}, + ) + } + + composeTestRule.onNode(isToggleable()).assertIsNotEnabled() + } + + @Test + fun switch_onClick() { + var switchClicked = false + composeTestRule.setContent { + ITEM_MODEL.AppListTwoTargetSwitchItem( + onClick = {}, + checked = stateOf(false), + changeable = stateOf(true), + onCheckedChange = { switchClicked = true }, + ) + } + + composeTestRule.onNode(isToggleable()).performClick() + + assertThat(switchClicked).isTrue() + } + + private companion object { + const val PACKAGE_NAME = "package.name" + const val LABEL = "Label" + const val SUMMARY = "Summary" + val APP = ApplicationInfo().apply { + packageName = PACKAGE_NAME + } + val ITEM_MODEL = AppListItemModel( + record = object : AppRecord { + override val app = APP + }, + label = LABEL, + summary = stateOf(SUMMARY), + ) + } +} -- cgit v1.2.3-59-g8ed1b