Skip to content

Commit

Permalink
Add SettingsRadioButton
Browse files Browse the repository at this point in the history
  • Loading branch information
alorma committed Mar 5, 2024
1 parent 385e777 commit 2858005
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.alorma.compose.settings.ui

import androidx.compose.foundation.selection.toggleable
import androidx.compose.material3.ListItemColors
import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.RadioButton
import androidx.compose.material3.RadioButtonColors
import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.Dp
import com.alorma.compose.settings.ui.internal.SettingsTileScaffold

@Composable
fun SettingsRadioButton(
state: Boolean,
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
icon: @Composable (() -> Unit)? = null,
subtitle: @Composable (() -> Unit)? = null,
checkboxColors: RadioButtonColors = RadioButtonDefaults.colors(),
colors: ListItemColors = ListItemDefaults.colors(),
tonalElevation: Dp = ListItemDefaults.Elevation,
shadowElevation: Dp = ListItemDefaults.Elevation,
onClick: () -> Unit,
) {
SettingsTileScaffold(
modifier = Modifier.toggleable(
enabled = enabled,
value = state,
role = Role.RadioButton,
onValueChange = { onClick() },
).then(modifier),
enabled = enabled,
title = title,
subtitle = subtitle,
icon = icon,
colors = colors,
tonalElevation = tonalElevation,
shadowElevation = shadowElevation,
) {
RadioButton(
enabled = enabled,
selected = state,
onClick = onClick,
colors = checkboxColors,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import com.alorma.compose.settings.storage.memory.rememberMemoryIntSettingState
import com.alorma.compose.settings.storage.memory.rememberMemoryTriStateSettingState
import com.alorma.compose.settings.ui.SettingsCheckbox
import com.alorma.compose.settings.ui.SettingsMenuLink
import com.alorma.compose.settings.ui.SettingsRadioButton
import com.alorma.compose.settings.ui.SettingsSlider
import com.alorma.compose.settings.ui.SettingsSwitch
import com.alorma.compose.settings.ui.SettingsTriStateCheckbox
Expand All @@ -58,6 +59,7 @@ fun SettingsScreen(settings: Settings) {
SettingsSwitchSampleSection(settings, iconState.value)
SettingsCheckboxSampleSection(settings, iconState.value)
SettingsTriStateCheckboxSampleSection(settings, iconState.value)
SettingsRadioButtonSampleSection(settings, iconState.value)
SettingsMenuLinkSectionSample(iconState.value)
SettingsSliderSectionSample(settings, iconState.value)
SettingsSelectorsSample(settings, iconState.value)
Expand Down Expand Up @@ -115,6 +117,25 @@ private fun SettingsCheckboxSampleSection(settings: Settings, showIcon: Boolean)
}
}

@Composable
private fun SettingsRadioButtonSampleSection(settings: Settings, showIcon: Boolean) {
SampleSection(title = "SettingsRadioButton Tile") {
val radioButtonDiskState = rememberStringSettingState(
key = "radioButtonDiskState",
settings = settings,
)
SampleData.items.forEach { sampleItem ->
SettingsRadioButton(
state = radioButtonDiskState.value == sampleItem.key,
title = { Text(text = sampleItem.title) },
subtitle = { Text(text = sampleItem.description) },
icon = iconSampleOrNull(showIcon),
onClick = { radioButtonDiskState.value = sampleItem.key },
)
}
}
}

@Composable
private fun SettingsTriStateCheckboxSampleSection(settings: Settings, showIcon: Boolean) {
SampleSection(title = "SettingsTriStateCheckbox Tile") {
Expand Down

0 comments on commit 2858005

Please sign in to comment.