Skip to content

Commit

Permalink
Add enabled to SettingsGroup
Browse files Browse the repository at this point in the history
Fix padding in Sample
  • Loading branch information
TinyHai committed May 23, 2024
1 parent 981d75f commit 415078d
Show file tree
Hide file tree
Showing 11 changed files with 109 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.alorma.compose.settings.sample.shared.previews

import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.PreviewParameter
import com.alorma.compose.settings.ui.SettingsCheckbox
import com.alorma.compose.settings.ui.SettingsGroup
import com.alorma.compose.settings.ui.SettingsMenuLink
import com.alorma.compose.settings.ui.SettingsSwitch
import theme.ComposeSettingsTheme

@SuperPreviews
@Composable
internal fun SettingsGroupPreview(
@PreviewParameter(provider = BooleanStateProvider::class) state: Boolean,
) {
ComposeSettingsTheme {
Surface {
SettingsGroup(
title = {
Text(text = "SettingsGroupPreview")
},
enabled = state,
) {
SettingsMenuLink(
title = { Text(text = "Menu link tile") },
onClick = {},
)
SettingsCheckbox(
state = true,
title = { Text(text = "Checkbox tile") },
onCheckedChange = {},
)
SettingsSwitch(
state = true,
title = { Text(text = "Switch tile") },
onCheckedChange = {},
)
}
}
}
}
3 changes: 2 additions & 1 deletion composeApp/src/commonMain/kotlin/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,15 @@ fun App(
) {
when (windowSizeClass.widthSizeClass) {
WindowWidthSizeClass.Compact, WindowWidthSizeClass.Medium -> {
SettingsScreen()
SettingsScreen(modifier = Modifier.padding(it))
}

else -> {
val drawerState = rememberDrawerState(DrawerValue.Open)
val scope = rememberCoroutineScope()

DismissibleNavigationDrawer(
modifier = Modifier.padding(it),
drawerState = drawerState,
drawerContent = {
DismissibleDrawerSheet { SettingsScreen() }
Expand Down
46 changes: 39 additions & 7 deletions composeApp/src/commonMain/kotlin/SettingsScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
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
import com.alorma.compose.settings.ui.*
import internal.MultiChoiceAlertDialog
import internal.SampleData
import internal.SampleSection
Expand Down Expand Up @@ -56,6 +51,7 @@ fun SettingsScreen(modifier: Modifier = Modifier) {
SettingsMenuLinkSectionSample(iconState.value)
SettingsSliderSectionSample(iconState.value)
SettingsSelectorsSample(iconState.value)
SettingsGroupSectionSample(iconState.value)
}
}
}
Expand Down Expand Up @@ -332,10 +328,46 @@ private fun SettingsSelectorsSample(showIcon: Boolean) {
items = items.toImmutableList(),
selectedItemKeys = multipleSelectionState.value?.split("|").orEmpty().toImmutableList(),
onItemsSelected = { selectedItemKey ->
multipleSelectionState.value = selectedItemKey.joinToString("|")
if (selectedItemKey.isNotEmpty()) {
multipleSelectionState.value = selectedItemKey.joinToString("|")
}
showMultiChoiceDialog.value = false
},
)
}
}
}

@Composable
private fun SettingsGroupSectionSample(showIcon: Boolean) {
SampleSection(title = "SettingsGroup") {
val groupEnabled = remember { mutableStateOf(true) }
SettingsGroup(
title = { Text("Group title") },
enabled = groupEnabled.value
) {
SettingsSwitch(
state = groupEnabled.value,
title = { Text(text = "Group Enabled") },
subtitle = { Text(text = "This Switch is always enabled") },
icon = iconSampleOrNull(showIcon),
enabled = true,
onCheckedChange = { groupEnabled.value = it },
)
SettingsMenuLink(
title = { Text(text = "Menu") },
onClick = { },
icon = iconSampleOrNull(showIcon),
)

val state = remember { mutableStateOf(false) }
SettingsCheckbox(
state = state.value,
title = { Text(text = "Checkbox") },
subtitle = { Text(text = "Checkbox subtitle") },
icon = iconSampleOrNull(showIcon),
onCheckedChange = { state.value = it },
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.alorma.compose.settings.ui.base.internal

import androidx.compose.runtime.compositionLocalOf

val LocalSettingsGroupEnabled = compositionLocalOf {
true
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.alorma.compose.settings.ui.base.internal.LocalSettingsGroupEnabled
import com.alorma.compose.settings.ui.base.internal.SettingsTileScaffold

@Composable
Expand All @@ -22,7 +23,7 @@ fun SettingsSlider(
modifier: Modifier = Modifier,
subtitle: @Composable (() -> Unit)? = null,
icon: @Composable (() -> Unit)? = null,
enabled: Boolean = true,
enabled: Boolean = LocalSettingsGroupEnabled.current,
valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
steps: Int = 0,
onValueChangeFinished: (() -> Unit)? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ 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.base.internal.LocalSettingsGroupEnabled
import com.alorma.compose.settings.ui.base.internal.SettingsTileScaffold

@Composable
fun SettingsCheckbox(
state: Boolean,
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
enabled: Boolean = LocalSettingsGroupEnabled.current,
icon: @Composable (() -> Unit)? = null,
subtitle: @Composable (() -> Unit)? = null,
checkboxColors: CheckboxColors = CheckboxDefaults.colors(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ProvideTextStyle
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.alorma.compose.settings.ui.base.internal.LocalSettingsGroupEnabled

@Composable
fun SettingsGroup(
modifier: Modifier = Modifier,
enabled: Boolean = true,
contentPadding: PaddingValues = PaddingValues(0.dp),
title: @Composable (() -> Unit)? = null,
content: @Composable ColumnScope.() -> Unit,
Expand All @@ -31,7 +34,9 @@ fun SettingsGroup(
if (title != null) {
SettingsGroupTitle(title)
}
content()
CompositionLocalProvider(LocalSettingsGroupEnabled provides enabled) {
content()
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ import androidx.compose.material3.ListItemDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import com.alorma.compose.settings.ui.base.internal.LocalSettingsGroupEnabled
import com.alorma.compose.settings.ui.base.internal.SettingsTileScaffold

@Composable
fun SettingsMenuLink(
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
enabled: Boolean = LocalSettingsGroupEnabled.current,
icon: (@Composable () -> Unit)? = null,
subtitle: (@Composable () -> Unit)? = null,
action: (@Composable () -> Unit)? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ 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.base.internal.LocalSettingsGroupEnabled
import com.alorma.compose.settings.ui.base.internal.SettingsTileScaffold

@Composable
fun SettingsRadioButton(
state: Boolean,
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
enabled: Boolean = LocalSettingsGroupEnabled.current,
icon: @Composable (() -> Unit)? = null,
subtitle: @Composable (() -> Unit)? = null,
checkboxColors: RadioButtonColors = RadioButtonDefaults.colors(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ 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.base.internal.LocalSettingsGroupEnabled
import com.alorma.compose.settings.ui.base.internal.SettingsTileScaffold

@Composable
fun SettingsSwitch(
state: Boolean,
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
enabled: Boolean = LocalSettingsGroupEnabled.current,
icon: @Composable (() -> Unit)? = null,
subtitle: @Composable (() -> Unit)? = null,
switchColors: SwitchColors = SwitchDefaults.colors(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.unit.Dp
import com.alorma.compose.settings.ui.base.internal.LocalSettingsGroupEnabled
import com.alorma.compose.settings.ui.base.internal.SettingsTileScaffold

@Composable
fun SettingsTriStateCheckbox(
state: Boolean?,
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
enabled: Boolean = LocalSettingsGroupEnabled.current,
icon: @Composable (() -> Unit)? = null,
subtitle: @Composable (() -> Unit)? = null,
checkboxColors: CheckboxColors = CheckboxDefaults.colors(),
Expand Down

0 comments on commit 415078d

Please sign in to comment.