diff options
4 files changed, 29 insertions, 6 deletions
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/card/CardPageProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/card/CardPageProvider.kt index d5cf1a35b4df..79c5ebbce5fa 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/card/CardPageProvider.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/card/CardPageProvider.kt @@ -88,11 +88,13 @@ object CardPageProvider : SettingsPageProvider { @Composable private fun SettingsCardWithoutIcon() { + val sampleTitle = stringResource(R.string.sample_title) + var title by remember { mutableStateOf(sampleTitle) } SettingsCard( CardModel( - title = stringResource(R.string.sample_title), + title = title, text = stringResource(R.string.sample_text), - ) + ) { title = "Clicked" } ) } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/CardModel.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/CardModel.kt index 960ebccf6c25..8100fd58f5a0 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/CardModel.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/CardModel.kt @@ -45,4 +45,6 @@ data class CardModel( /** If specified, this color will be used to tint the icon and the buttons. */ val containerColor: Color = Color.Unspecified, + + val onClick: (() -> Unit)? = null, ) diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt index 700fa487ed73..621825a82c1e 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/card/SettingsCard.kt @@ -17,6 +17,7 @@ package com.android.settingslib.spa.widget.card import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope @@ -102,10 +103,11 @@ internal fun SettingsCardImpl(model: CardModel) { AnimatedVisibility(visible = model.isVisible()) { SettingsCardContent(containerColor = model.containerColor) { Column( - modifier = Modifier.padding( - horizontal = SettingsDimension.dialogItemPaddingHorizontal, - vertical = SettingsDimension.itemPaddingAround, - ), + modifier = (model.onClick?.let { Modifier.clickable(onClick = it) } ?: Modifier) + .padding( + horizontal = SettingsDimension.dialogItemPaddingHorizontal, + vertical = SettingsDimension.itemPaddingAround, + ), verticalArrangement = Arrangement.spacedBy(SettingsDimension.itemPaddingAround) ) { CardHeader(model.imageVector, model.tintColor, model.onDismiss) diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/card/SettingsCardTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/card/SettingsCardTest.kt index b5b2525bffdd..ffc7e86665dd 100644 --- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/card/SettingsCardTest.kt +++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/card/SettingsCardTest.kt @@ -141,6 +141,23 @@ class SettingsCardTest { composeTestRule.onNodeWithText(TEXT).isNotDisplayed() } + @Test + fun settingsCard_clickable() { + var clicked by mutableStateOf(false) + composeTestRule.setContent { + SettingsCard( + CardModel( + title = TITLE, + text = "", + ) { clicked = true } + ) + } + + composeTestRule.onNodeWithText(TITLE).performClick() + + assertThat(clicked).isTrue() + } + private companion object { const val TITLE = "Title" const val TEXT = "Text" |