diff --git a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt index 3ad2ee0c09..bea5df7d5a 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt @@ -48,7 +48,6 @@ fun AppDrawerPreferences() { label = stringResource(id = R.string.hidden_apps_label), subtitle = resources.getQuantityString(R.plurals.apps_count, hiddenAppsCount(), hiddenAppsCount()), destination = subRoute(name = AppDrawerRoutes.HIDDEN_APPS), - showDivider = false ) SliderPreference( label = stringResource(id = R.string.background_opacity), @@ -62,7 +61,6 @@ fun AppDrawerPreferences() { SwitchPreference( adapter = prefs.searchAutoShowKeyboard.getAdapter(), label = stringResource(id = R.string.pref_search_auto_show_keyboard), - showDivider = false ) SwitchPreference( adapter = prefs.useFuzzySearch.getAdapter(), @@ -76,7 +74,6 @@ fun AppDrawerPreferences() { adapter = prefs.allAppsColumns.getAdapter(), step = 1, valueRange = 3..10, - showDivider = false ) } PreferenceGroup(heading = stringResource(id = R.string.icons)) { @@ -86,7 +83,6 @@ fun AppDrawerPreferences() { step = 0.1f, valueRange = 0.5F..1.5F, showAsPercentage = true, - showDivider = false ) val allAppsIconLabels = prefs.allAppsIconLabels.getAdapter() SwitchPreference( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt index c5ed842a92..58f2ebce78 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt @@ -42,7 +42,6 @@ fun DockPreferences() { SwitchPreference( adapter = prefs.enableHotseatQsb.getAdapter(), label = stringResource(id = R.string.hotseat_qsb_label), - showDivider = false ) } PreferenceGroup(heading = stringResource(id = R.string.grid)) { @@ -51,7 +50,6 @@ fun DockPreferences() { adapter = prefs.hotseatColumns.getAdapter(), step = 1, valueRange = 3..10, - showDivider = false ) } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt index c526a0be44..709eedf6b4 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt @@ -43,7 +43,6 @@ fun FolderPreferences() { adapter = prefs.folderColumns.getAdapter(), step = 1, valueRange = 2..5, - showDivider = false ) SliderPreference( label = stringResource(id = R.string.max_folder_rows), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt index 3837a48df5..8c30ce415c 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt @@ -103,12 +103,12 @@ fun FontSelection(fontPref: BasePreferenceManager.FontPref) { preferenceGroupItems( filteredItems, isFirstChild = true, - key = { _, family -> family.toString() } + key = { _, family -> family.toString() }, + dividerStartIndent = 40.dp ) { index, family -> FontSelectionItem( adapter = adapter, - family = family, - showDivider = index != 0 + family = family ) } } @@ -118,8 +118,7 @@ fun FontSelection(fontPref: BasePreferenceManager.FontPref) { @Composable private fun FontSelectionItem( adapter: PreferenceAdapter, - family: FontCache.Family, - showDivider: Boolean + family: FontCache.Family ) { val selected = family.variants.any { it.value == adapter.state.value } PreferenceTemplate( @@ -155,8 +154,6 @@ private fun FontSelectionItem( } } else null, modifier = Modifier.clickable { adapter.onChange(family.default) }, - showDivider = showDivider, - dividerIndent = 40.dp, verticalPadding = 0.dp ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt index 739355d016..fdd0dca8e9 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt @@ -51,7 +51,6 @@ fun GeneralPreferences() { adapter = prefs.allowRotation.getAdapter(), label = stringResource(id = R.string.home_screen_rotation_label), description = stringResource(id = R.string.home_screen_rotaton_description), - showDivider = false ) NotificationDotsPreference() NavigationActionPreference( @@ -69,20 +68,19 @@ fun GeneralPreferences() { ) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val wrapAdaptiveIcons = prefs.wrapAdaptiveIcons.observeAsState() + val wrapAdaptiveIcons = prefs.wrapAdaptiveIcons.getAdapter() PreferenceGroup( heading = stringResource(id = R.string.auto_adaptive_icons_label), description = stringResource(id = (R.string.adaptive_icon_background_description)), - showDescription = wrapAdaptiveIcons.value + showDescription = wrapAdaptiveIcons.state.value ) { SwitchPreference( - adapter = prefs.wrapAdaptiveIcons.getAdapter(), + adapter = wrapAdaptiveIcons, label = stringResource(id = R.string.auto_adaptive_icons_label), description = stringResource(id = R.string.auto_adaptive_icons_description), - showDivider = false ) AnimatedVisibility( - visible = wrapAdaptiveIcons.value, + visible = wrapAdaptiveIcons.state.value, enter = expandVertically() + fadeIn(), exit = shrinkVertically() + fadeOut() ) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt index 229f99be39..b26e8789d0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt @@ -90,13 +90,12 @@ fun HiddenAppsPreferences() { } preferenceGroupItems( items = apps, - isFirstChild = true - ) { index, app -> + isFirstChild = true, + dividerStartIndent = 40.dp + ) { _, app -> AppItem( app = app, onClick = toggleHiddenApp, - showDivider = index != 0, - widgetSize = 24.dp, ) { Checkbox( checked = hiddenApps.contains(app.key.toString()), @@ -112,11 +111,8 @@ fun HiddenAppsPreferences() { PreferenceLazyColumn( enabled = false, ) { - preferenceGroupItems(count = 20, isFirstChild = true) { index -> - AppItemPlaceholder( - showDivider = index != 0, - widgetSize = 24.dp, - ) { + preferenceGroupItems(count = 20, isFirstChild = true, dividerStartIndent = 40.dp) { + AppItemPlaceholder { Spacer(Modifier.width(24.dp)) } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt index bedf322fff..a2a67cf465 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt @@ -44,7 +44,6 @@ fun HomeScreenPreferences() { SwitchPreference( prefs.addIconToHome.getAdapter(), label = stringResource(id = R.string.auto_add_shortcuts_label), - showDivider = false ) SwitchPreference( prefs.wallpaperScrolling.getAdapter(), @@ -62,7 +61,6 @@ fun HomeScreenPreferences() { label = stringResource(id = R.string.minus_one_enable), description = if (feedAvailable) null else stringResource(id = R.string.minus_one_unavailable), enabled = feedAvailable, - showDivider = false ) SwitchPreference( prefs.smartSpaceEnable.getAdapter(), @@ -83,7 +81,6 @@ fun HomeScreenPreferences() { adapter = prefs.workspaceColumns.getAdapter(), step = 1, valueRange = 3..10, - showDivider = false ) SliderPreference( label = stringResource(id = R.string.home_screen_rows), @@ -99,7 +96,6 @@ fun HomeScreenPreferences() { step = 0.1f, valueRange = 0.5F..1.5F, showAsPercentage = true, - showDivider = false ) val showHomeLabels = prefs.showHomeLabels.getAdapter() SwitchPreference( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt index d71db7cc4a..99e0fb225a 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt @@ -55,14 +55,13 @@ fun IconPackPreferences() { PreferenceLayoutLazyColumn(label = stringResource(id = R.string.icon_pack)) { preferenceGroupItems( items = iconPacks, - isFirstChild = true - ) { index, iconPack -> + isFirstChild = true, + dividerStartIndent = 40.dp + ) { _, iconPack -> AppItem( label = iconPack.name, icon = remember(iconPack) { iconPack.icon.toBitmap() }, onClick = { iconPackPackage = iconPack.packageName }, - showDivider = index != 0, - widgetSize = 24.dp, ) { RadioButton( selected = iconPackPackage == iconPack.packageName, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt index e9a4805e26..ea4f8f1cab 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt @@ -28,7 +28,6 @@ fun QuickstepPreferences() { SwitchPreference( adapter = prefs.clearAllAsAction.getAdapter(), label = stringResource(id = R.string.clear_all_as_action_label), - showDivider = false ) } val overrideWindowCornerRadius by prefs.overrideWindowCornerRadius.observeAsState() @@ -40,7 +39,6 @@ fun QuickstepPreferences() { SwitchPreference( adapter = prefs.overrideWindowCornerRadius.getAdapter(), label = stringResource(id = R.string.override_window_corner_radius_label), - showDivider = false ) AnimatedVisibility( visible = overrideWindowCornerRadius, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt index dff33816ea..e282532737 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/About.kt @@ -233,8 +233,7 @@ fun About() { name = it.name, description = stringResource(it.descriptionRes), url = it.socialUrl, - photoUrl = it.photoUrl, - showDivider = index != 0 + photoUrl = it.photoUrl ) } } @@ -244,16 +243,14 @@ fun About() { name = it.name, description = stringResource(it.descriptionRes), url = it.socialUrl, - photoUrl = it.photoUrl, - showDivider = index != 0 + photoUrl = it.photoUrl ) } } PreferenceGroup { NavigationActionPreference( label = stringResource(id = R.string.acknowledgements), - destination = subRoute(name = AboutRoutes.LICENSES), - showDivider = false, + destination = subRoute(name = AboutRoutes.LICENSES) ) ClickablePreference( label = stringResource(id = R.string.translate), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt index 593c1b66fe..174d4656ef 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt @@ -35,7 +35,7 @@ import app.lawnchair.ui.preferences.components.PreferenceTemplate import coil.compose.rememberImagePainter @Composable -fun ContributorRow(name: String, description: String, photoUrl: String, url: String, showDivider: Boolean = true) { +fun ContributorRow(name: String, description: String, photoUrl: String, url: String, showDivider: Boolean = false) { val context = LocalContext.current PreferenceTemplate( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/licenses/Licenses.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/licenses/Licenses.kt index e94b096f4a..6dd5525a09 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/licenses/Licenses.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/licenses/Licenses.kt @@ -57,14 +57,14 @@ fun Licenses() { LoadingScreen(optionalLicenses) { licenses -> PreferenceLayoutLazyColumn(label = stringResource(id = R.string.acknowledgements)) { preferenceGroupItems(licenses, isFirstChild = true) { index, license -> - LicenseItem(license = license, index = index, showDivider = index != 0) + LicenseItem(license = license, index = index) } } } } @Composable -fun LicenseItem(license: License, index: Int, showDivider: Boolean) { +fun LicenseItem(license: License, index: Int) { val navController = LocalNavController.current val destination = subRoute(name = "$index") @@ -78,7 +78,6 @@ fun LicenseItem(license: License, index: Int, showDivider: Boolean) { }, modifier = Modifier .clickable { navController.navigate(route = destination) }, - showDivider = showDivider ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/AccentColorPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/AccentColorPreference.kt index 41cf8f5544..2db75dd71c 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/AccentColorPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/AccentColorPreference.kt @@ -33,7 +33,7 @@ val presets = presetColors.map { @Composable @ExperimentalMaterialApi @ExperimentalAnimationApi -fun AccentColorPreference(showDivider: Boolean = true) { +fun AccentColorPreference(showDivider: Boolean = false) { ColorPreference( previewColor = MaterialTheme.colors.primary.toArgb(), customColorAdapter = preferenceManager().accentColor.getAdapter(), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt index 17c8e292c3..a078b7095a 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt @@ -37,7 +37,7 @@ import com.google.accompanist.placeholder.material.placeholder fun AppItem( app: App, onClick: (app: App) -> Unit, - showDivider: Boolean = true, + showDivider: Boolean = false, widgetSize: Dp = 0.dp, widget: (@Composable () -> Unit)? = null, ) { @@ -56,7 +56,7 @@ fun AppItem( label: String, icon: Bitmap, onClick: () -> Unit, - showDivider: Boolean = true, + showDivider: Boolean = false, widgetSize: Dp = 0.dp, widget: (@Composable () -> Unit)? = null, ) { @@ -84,7 +84,7 @@ fun AppItem( @Composable fun AppItemPlaceholder( - showDivider: Boolean = true, + showDivider: Boolean = false, widgetSize: Dp = 0.dp, widget: (@Composable () -> Unit)? = null, ) { @@ -118,7 +118,7 @@ fun AppItemPlaceholder( @Composable private fun AppItemLayout( modifier: Modifier = Modifier, - showDivider: Boolean = true, + showDivider: Boolean = false, widgetSize: Dp = 0.dp, widget: (@Composable () -> Unit)? = null, icon: @Composable () -> Unit, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/ClickablePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/ClickablePreference.kt index c375700f77..724860e7da 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/ClickablePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/ClickablePreference.kt @@ -29,7 +29,7 @@ fun ClickablePreference( label: String, subtitle: String? = null, onClick: () -> Unit, - showDivider: Boolean = true + showDivider: Boolean = false ) { PreferenceTemplate( title = { Text(text = label) }, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/DividerColumn.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/DividerColumn.kt new file mode 100644 index 0000000000..f42022c70e --- /dev/null +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/DividerColumn.kt @@ -0,0 +1,90 @@ +package app.lawnchair.ui.preferences.components + +import androidx.compose.material.MaterialTheme +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.Layout +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import kotlin.math.roundToInt + +@Composable +fun DividerColumn( + modifier: Modifier = Modifier, + color: Color = MaterialTheme.colors.onSurface.copy(alpha = 0.12f), + thickness: Dp = 1.dp, + startIndent: Dp = 0.dp, + endIndent: Dp = 0.dp, + content: @Composable () -> Unit +) { + val state = remember { DividersState() } + val density = LocalDensity.current + val thicknessPx = with(density) { thickness.toPx() } + val startIndentPx = with(density) { (startIndent + 16.dp).toPx() } + val endIndentPx = with(density) { (endIndent + 16.dp).toPx() } + Layout( + modifier = modifier + .drawDividers(state, color, thicknessPx, startIndentPx, endIndentPx), + content = content + ) { measurables, constraints -> + // Don't constrain child views further, measure them with given constraints + // List of measured children + val placeables = measurables.map { measurable -> + // Measure each children + measurable.measure(constraints) + } + + val width = constraints.maxWidth + val dividersHeight = thicknessPx.roundToInt() * (placeables.size - 1) + val height = placeables.sumOf { it.height } + dividersHeight + + layout(width, height) { + val dividerPositions = mutableListOf() + // Track the y co-ord we have placed children up to + var yPosition = 0 + + // Place children in the parent layout + placeables.forEachIndexed { index, placeable -> + if (index > 0) { + dividerPositions.add(yPosition) + yPosition += thicknessPx.roundToInt() + } + + // Position item on the screen + placeable.placeRelative(x = 0, y = yPosition) + + // Record the y co-ord placed up to + yPosition += placeable.height + } + + state.dividerPositions = dividerPositions + } + } +} + +private fun Modifier.drawDividers( + state: DividersState, + color: Color, + thickness: Float, + startIndentPx: Float, + endIndentPx: Float +): Modifier { + return drawBehind { + state.dividerPositions.forEach { yPos -> + drawRect( + color = color, + topLeft = Offset(startIndentPx, yPos.toFloat()), + size = Size(size.width - startIndentPx - endIndentPx, thickness) + ) + } + } +} + +private class DividersState { + var dividerPositions by mutableStateOf(emptyList()) +} diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt index 53379b3b07..a2d4678384 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/FontPreference.kt @@ -13,7 +13,7 @@ import app.lawnchair.ui.preferences.LocalNavController fun FontPreference( adapter: PreferenceAdapter, label: String, - showDivider: Boolean = true + showDivider: Boolean = false ) { val navController = LocalNavController.current diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt index c862c1b7b1..08d8ca215f 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt @@ -21,12 +21,15 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Divider import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import app.lawnchair.util.smartBorder @@ -35,11 +38,22 @@ fun LazyListScope.preferenceGroupItems( heading: String? = null, isFirstChild: Boolean, key: ((index: Int) -> Any)? = null, + showDividers: Boolean = true, + dividerStartIndent: Dp = 0.dp, + dividerEndIndent: Dp = 0.dp, itemContent: @Composable LazyItemScope.(index: Int) -> Unit ) { + val actualStartIndent = 16.dp + dividerStartIndent + val actualEndIndent = 16.dp + dividerEndIndent item { PreferenceGroupHeading(heading, isFirstChild) } items(count, key) { PreferenceGroupItem(cutTop = it > 0, cutBottom = it < count - 1) { + if (showDividers && it > 0) { + Divider( + modifier = Modifier + .padding(start = actualStartIndent, end = actualEndIndent) + ) + } itemContent(it) } } @@ -50,20 +64,30 @@ inline fun LazyListScope.preferenceGroupItems( heading: String? = null, isFirstChild: Boolean, noinline key: ((index: Int, item: T) -> Any)? = null, + showDividers: Boolean = true, + dividerStartIndent: Dp = 0.dp, + dividerEndIndent: Dp = 0.dp, crossinline itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit ) { preferenceGroupItems( items.size, heading, isFirstChild, - if (key != null) { index: Int -> key(index, items[index]) } else null + if (key != null) { index: Int -> key(index, items[index]) } else null, + showDividers = showDividers, + dividerStartIndent = dividerStartIndent, + dividerEndIndent = dividerEndIndent, ) { itemContent(it, items[it]) } } @Composable -fun PreferenceGroupItem(cutTop: Boolean, cutBottom: Boolean, content: @Composable () -> Unit) { +fun PreferenceGroupItem( + cutTop: Boolean, + cutBottom: Boolean, + content: @Composable () -> Unit +) { val shape = remember(cutTop, cutBottom) { val top = if (cutTop) 0.dp else 12.dp val bottom = if (cutBottom) 0.dp else 12.dp diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt index cd2fa29e31..f5825dbd9b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt @@ -26,7 +26,7 @@ fun ListPreference( entries: List>, label: String, enabled: Boolean = true, - showDivider: Boolean = true + showDivider: Boolean = false ) { val sheetState = rememberBottomSheetState(initialValue = ModalBottomSheetValue.Hidden) val scope = rememberCoroutineScope() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt index 84bc62dbde..525ddce3ea 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt @@ -27,7 +27,7 @@ fun NavigationActionPreference( label: String, subtitle: String? = null, destination: String, - showDivider: Boolean = true + showDivider: Boolean = false ) { val navController = LocalNavController.current diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt index 840db54b4b..c86720d1e7 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt @@ -23,6 +23,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import app.lawnchair.util.smartBorder @@ -33,20 +35,31 @@ fun PreferenceGroup( isFirstChild: Boolean = false, description: String? = null, showDescription: Boolean = true, + showDividers: Boolean = true, + dividerStartIndent: Dp = 0.dp, + dividerEndIndent: Dp = 0.dp, content: @Composable () -> Unit ) { PreferenceGroupHeading(heading, isFirstChild) - Column( - modifier = Modifier - .padding(horizontal = 16.dp) - .smartBorder( - 1.dp, - color = MaterialTheme.colors.onBackground.copy(alpha = 0.12F), - shape = MaterialTheme.shapes.large - ) - .clip(shape = MaterialTheme.shapes.large) - ) { - content() + val columnModifier = Modifier + .padding(horizontal = 16.dp) + .smartBorder( + 1.dp, + color = MaterialTheme.colors.onBackground.copy(alpha = 0.12F), + shape = MaterialTheme.shapes.large + ) + .clip(shape = MaterialTheme.shapes.large) + if (showDividers) { + DividerColumn( + modifier = columnModifier, + startIndent = dividerStartIndent, + endIndent = dividerEndIndent, + content = content + ) + } else { + Column(modifier = columnModifier) { + content() + } } PreferenceGroupDescription(description, showDescription) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt index 4cbf2a343f..158ec5f33b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt @@ -35,7 +35,7 @@ fun PreferenceTemplate( startWidget: (@Composable () -> Unit)? = null, endWidget: (@Composable () -> Unit)? = null, enabled: Boolean = true, - showDivider: Boolean = true, + showDivider: Boolean = false, dividerIndent: Dp = 0.dp, applyPaddings: Boolean = true, horizontalPadding: Dp = 16.dp, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt index ecd980e73a..7705ef3911 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt @@ -33,7 +33,7 @@ fun SliderPreference( valueRange: ClosedRange, step: Int, showAsPercentage: Boolean = false, - showDivider: Boolean = true + showDivider: Boolean = false ) { val transformedAdapter = rememberTransformAdapter( adapter = adapter, @@ -59,7 +59,7 @@ fun SliderPreference( valueRange: ClosedFloatingPointRange, step: Float, showAsPercentage: Boolean = false, - showDivider: Boolean = true + showDivider: Boolean = false ) { var adapterValue by adapter var sliderValue by remember { mutableStateOf(adapterValue) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt index d05756bffa..986e3c8df8 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt @@ -32,7 +32,7 @@ fun SwitchPreference( label: String, description: String? = null, enabled: Boolean = true, - showDivider: Boolean = true + showDivider: Boolean = false ) { // TODO: Wrap overflowing text instead of using an ellipsis. PreferenceTemplate( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt index 92c54bfc55..0e11191f5e 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt @@ -24,7 +24,7 @@ val themeEntries = listOf( @ExperimentalMaterialApi @Composable -fun ThemePreference(showDivider: Boolean = true) { +fun ThemePreference(showDivider: Boolean = false) { ListPreference( adapter = preferenceManager().launcherTheme.getAdapter(), entries = themeEntries,