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

Commit 9fb9a355 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "New RestrictedTwoTargetSwitchPreference" into main

parents 7676e823 fa89fa1f
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