From dfa7d6ffbd056fdbbf20d66c292b5789156965be Mon Sep 17 00:00:00 2001 From: Iamlooker Date: Thu, 30 Jun 2022 12:47:06 +0530 Subject: [PATCH] Add pooling container for previews New Preference Toolkit --- build.gradle.kts | 2 + .../settings/components/PreferenceSlider.kt | 42 +++++++++++++++++++ .../settings/components/PreferenceSwitch.kt | 42 +++++++++++++++++++ .../settings/components/PrefernceDataType.kt | 35 ++++++++++++++++ .../looker/droidify/utility/PreferenceType.kt | 14 +++++++ 5 files changed, 135 insertions(+) create mode 100644 src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSlider.kt create mode 100644 src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSwitch.kt create mode 100644 src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PrefernceDataType.kt create mode 100644 src/main/kotlin/com/looker/droidify/utility/PreferenceType.kt diff --git a/build.gradle.kts b/build.gradle.kts index 68233e0e..009f7eba 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -213,6 +213,8 @@ dependencies { debugImplementation("androidx.compose.ui:ui-tooling:$composeVersion") debugImplementation("androidx.compose.ui:ui-tooling-preview:$composeVersion") + debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0-rc01") + debugImplementation("androidx.customview:customview:1.2.0-alpha01") } // using a task as a preBuild dependency instead of a function that takes some time insures that it runs diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSlider.kt b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSlider.kt new file mode 100644 index 00000000..b9bc14f8 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSlider.kt @@ -0,0 +1,42 @@ +package com.looker.droidify.ui.compose.pages.settings.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Slider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun PreferenceSlider( + modifier: Modifier = Modifier, + title: String, + steps: Int = 20, + valueRange: ClosedFloatingPointRange = 10f..200f, + value: () -> Float, + onChange: (Float) -> Unit +) { + Column( + modifier = modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surface, MaterialTheme.shapes.extraLarge) + .padding(16.dp), + verticalArrangement = Arrangement.SpaceBetween, + horizontalAlignment = Alignment.Start + ) { + Text(text = title, style = MaterialTheme.typography.titleMedium) + Slider( + modifier = Modifier.fillMaxWidth(), + value = value(), + valueRange = valueRange, + steps = steps, + onValueChange = onChange + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSwitch.kt b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSwitch.kt new file mode 100644 index 00000000..34fce5b0 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PreferenceSwitch.kt @@ -0,0 +1,42 @@ +package com.looker.droidify.ui.compose.pages.settings.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun PreferenceSwitch( + modifier: Modifier = Modifier, + switchTitle: String, + switchDescription: String, + checkedState: () -> Boolean, + onCheck: (Boolean) -> Unit +) { + Row( + modifier = modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surface, MaterialTheme.shapes.extraLarge) + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column( + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.spacedBy(6.dp) + ) { + Text(text = switchTitle, style = MaterialTheme.typography.titleSmall) + Text(text = switchDescription, style = MaterialTheme.typography.bodyMedium) + } + Switch(checked = checkedState(), onCheckedChange = onCheck) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PrefernceDataType.kt b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PrefernceDataType.kt new file mode 100644 index 00000000..aaf5ce95 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/components/PrefernceDataType.kt @@ -0,0 +1,35 @@ +package com.looker.droidify.ui.compose.pages.settings.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun PreferenceWithData( + modifier: Modifier = Modifier, + title: String, + description: String, + onClick: () -> Unit +) { + Column( + modifier = modifier + .fillMaxWidth() + .clickable(onClick = onClick) + .background(MaterialTheme.colorScheme.surface, MaterialTheme.shapes.extraLarge) + .padding(16.dp), + verticalArrangement = Arrangement.SpaceBetween, + horizontalAlignment = Alignment.Start + ) { + Text(text = title, style = MaterialTheme.typography.titleSmall) + Text(text = description, style = MaterialTheme.typography.bodyMedium) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/utility/PreferenceType.kt b/src/main/kotlin/com/looker/droidify/utility/PreferenceType.kt new file mode 100644 index 00000000..94deb339 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/utility/PreferenceType.kt @@ -0,0 +1,14 @@ +package com.looker.droidify.utility + +sealed interface PreferenceType { + data class Switch(val title: String, val description: String, val key: String) : PreferenceType + + data class Slider( + val title: String, + val value: Float, + val range: ClosedFloatingPointRange, + val key: String + ) : PreferenceType + + data class Data(val title: String, val description: String, val key: String) : PreferenceType +} \ No newline at end of file