Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa89fa1f authored by Chaohui Wang's avatar Chaohui Wang
Browse files

New RestrictedTwoTargetSwitchPreference

Bug: 329000499
Test: manual - on Mobile Settings
Test: unit tests
Change-Id: I6d50b545bde33b5b54658fe295798f64048ea3d8
parent a2073989
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ fun TwoTargetButtonPreference(
        TwoTargetPreference(
            title = title,
            summary = summary,
            onClick = onClick,
            primaryOnClick = onClick,
            icon = icon,
        ) {
            IconButton(onClick = onButtonClick) {
+4 −2
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ import com.android.settingslib.spa.framework.theme.divider
internal fun TwoTargetPreference(
    title: String,
    summary: () -> String,
    onClick: () -> Unit,
    primaryEnabled: () -> Boolean = { true },
    primaryOnClick: (() -> Unit)?,
    icon: @Composable (() -> Unit)? = null,
    widget: @Composable () -> Unit,
) {
@@ -50,7 +51,8 @@ internal fun TwoTargetPreference(
                    override val title = title
                    override val summary = summary
                    override val icon = icon
                    override val onClick = onClick
                    override val enabled = primaryEnabled
                    override val onClick = primaryOnClick
                }
            )
        }
+4 −2
Original line number Diff line number Diff line
@@ -24,13 +24,15 @@ import com.android.settingslib.spa.widget.ui.SettingsSwitch
fun TwoTargetSwitchPreference(
    model: SwitchPreferenceModel,
    icon: @Composable (() -> Unit)? = null,
    onClick: () -> Unit,
    primaryEnabled: () -> Boolean = { true },
    primaryOnClick: (() -> Unit)?,
) {
    EntryHighlight {
        TwoTargetPreference(
            title = model.title,
            summary = model.summary,
            onClick = onClick,
            primaryEnabled = primaryEnabled,
            primaryOnClick = primaryOnClick,
            icon = icon,
        ) {
            SettingsSwitch(
+49 −20
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsNotEnabled
import androidx.compose.ui.test.assertIsOff
import androidx.compose.ui.test.assertIsOn
import androidx.compose.ui.test.isToggleable
@@ -46,7 +47,7 @@ class TwoTargetSwitchPreferenceTest {
            TestTwoTargetSwitchPreference(changeable = true)
        }

        composeTestRule.onNodeWithText("TwoTargetSwitchPreference").assertIsDisplayed()
        composeTestRule.onNodeWithText(TITLE).assertIsDisplayed()
    }

    @Test
@@ -79,7 +80,7 @@ class TwoTargetSwitchPreferenceTest {
    }

    @Test
    fun clickable_canBeClick() {
    fun clickable_primaryEnabled_canBeClick() {
        var clicked = false
        composeTestRule.setContent {
            TestTwoTargetSwitchPreference(changeable = false) {
@@ -87,26 +88,54 @@ class TwoTargetSwitchPreferenceTest {
            }
        }

        composeTestRule.onNodeWithText("TwoTargetSwitchPreference").performClick()
        composeTestRule.onNodeWithText(TITLE).performClick()
        assertThat(clicked).isTrue()
    }

    @Test
    fun clickable_primaryNotEnabled_assertIsNotEnabled() {
        composeTestRule.setContent {
            TestTwoTargetSwitchPreference(changeable = false, primaryEnabled = false)
        }

        composeTestRule.onNodeWithText(TITLE).assertIsNotEnabled()
    }

    @Test
    fun clickable_primaryNotEnabled_canNotBeClick() {
        var clicked = false
        composeTestRule.setContent {
            TestTwoTargetSwitchPreference(changeable = false, primaryEnabled = false) {
                clicked = true
            }
        }

        composeTestRule.onNodeWithText(TITLE).performClick()
        assertThat(clicked).isFalse()
    }

    @Composable
    private fun TestTwoTargetSwitchPreference(
        changeable: Boolean,
    onClick: () -> Unit = {},
        primaryEnabled: Boolean = true,
        primaryOnClick: () -> Unit = {},
    ) {
        var checked by rememberSaveable { mutableStateOf(false) }
        TwoTargetSwitchPreference(
            model = remember {
                object : SwitchPreferenceModel {
                override val title = "TwoTargetSwitchPreference"
                    override val title = TITLE
                    override val checked = { checked }
                    override val changeable = { changeable }
                    override val onCheckedChange = { newChecked: Boolean -> checked = newChecked }
                }
            },
        onClick = onClick,
            primaryEnabled = { primaryEnabled },
            primaryOnClick = primaryOnClick,
        )
    }

    private companion object {
        const val TITLE = "Title"
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -38,6 +38,6 @@ fun <T : AppRecord> AppListItemModel<T>.AppListTwoTargetSwitchItem(
            override val onCheckedChange = onCheckedChange
        },
        icon = { AppIcon(record.app, SettingsDimension.appIconItemSize) },
        onClick = onClick,
        primaryOnClick = onClick,
    )
}
Loading