mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
Fix and setup compose previews (#5526)
This commit is contained in:
@@ -28,7 +28,10 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.lawnchair.ui.ModalBottomSheetContent
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.util.bottomSheetHandler
|
||||
import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
|
||||
@Composable
|
||||
fun ClickablePreference(
|
||||
@@ -90,3 +93,17 @@ fun PreferenceClickConfirmation(
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
|
||||
@PreviewLawnchair
|
||||
@Composable
|
||||
private fun ClickablePreferencePreview() {
|
||||
LawnchairTheme {
|
||||
PreferenceGroupPreviewContainer {
|
||||
ClickablePreference(
|
||||
label = "Label",
|
||||
subtitle = "Subtitle",
|
||||
onClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.util.PreviewLawnchair
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
import com.android.launcher3.R
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -36,10 +36,15 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.lawnchair.preferences.PreferenceAdapter
|
||||
import app.lawnchair.preferences.rememberTransformAdapter
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
import com.android.launcher3.R
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@@ -80,10 +85,36 @@ fun SliderPreference(
|
||||
showUnit: String = "",
|
||||
) {
|
||||
var adapterValue by adapter
|
||||
var sliderValue by remember { mutableFloatStateOf(adapterValue) }
|
||||
|
||||
DisposableEffect(adapterValue) {
|
||||
sliderValue = adapterValue
|
||||
SliderPreference(
|
||||
label = label,
|
||||
value = adapterValue,
|
||||
onValueChangeFinished = { newValue ->
|
||||
adapterValue = newValue
|
||||
},
|
||||
valueRange = valueRange,
|
||||
step = step,
|
||||
modifier = modifier,
|
||||
showAsPercentage = showAsPercentage,
|
||||
showUnit = showUnit,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun SliderPreference(
|
||||
label: String,
|
||||
value: Float,
|
||||
onValueChangeFinished: (Float) -> Unit,
|
||||
valueRange: ClosedFloatingPointRange<Float>,
|
||||
step: Float,
|
||||
modifier: Modifier = Modifier,
|
||||
showAsPercentage: Boolean = false,
|
||||
showUnit: String = "",
|
||||
) {
|
||||
var sliderValue by remember { mutableFloatStateOf(value) }
|
||||
|
||||
DisposableEffect(value) {
|
||||
sliderValue = value
|
||||
onDispose { }
|
||||
}
|
||||
|
||||
@@ -126,7 +157,7 @@ fun SliderPreference(
|
||||
Slider(
|
||||
value = sliderValue,
|
||||
onValueChange = { newValue -> sliderValue = newValue },
|
||||
onValueChangeFinished = { adapterValue = sliderValue },
|
||||
onValueChangeFinished = { onValueChangeFinished(sliderValue) },
|
||||
valueRange = valueRange,
|
||||
steps = getSteps(valueRange, step),
|
||||
modifier = Modifier
|
||||
@@ -159,3 +190,26 @@ fun snapSliderValue(start: Float, value: Float, step: Float): Float {
|
||||
val snappedDistance = stepsFromStart * step
|
||||
return start + snappedDistance
|
||||
}
|
||||
|
||||
@PreviewLawnchair
|
||||
@Composable
|
||||
private fun SliderPreferencePreview(
|
||||
@PreviewParameter(SliderPreferencePreviewParameterProvider::class) sliderValue: Float,
|
||||
) {
|
||||
LawnchairTheme {
|
||||
PreferenceGroupPreviewContainer {
|
||||
SliderPreference(
|
||||
label = "Label",
|
||||
value = sliderValue,
|
||||
onValueChangeFinished = {},
|
||||
valueRange = 0f..1f,
|
||||
step = 0.1f,
|
||||
showAsPercentage = true,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class SliderPreferencePreviewParameterProvider : PreviewParameterProvider<Float> {
|
||||
override val values = sequenceOf(0f, 0.25f, 0.5f, 0.75f, 1f)
|
||||
}
|
||||
|
||||
@@ -30,12 +30,15 @@ import androidx.compose.material3.ripple
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.lawnchair.preferences.PreferenceAdapter
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.theme.dividerColor
|
||||
import app.lawnchair.ui.util.PreviewLawnchair
|
||||
import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
|
||||
@Composable
|
||||
fun SwitchPreference(
|
||||
@@ -118,13 +121,21 @@ fun SwitchPreference(
|
||||
|
||||
@PreviewLawnchair
|
||||
@Composable
|
||||
private fun SwitchPreferencePreview() {
|
||||
private fun SwitchPreferencePreview(
|
||||
@PreviewParameter(SwitchPreferencePreviewParameterProvider::class) checked: Boolean,
|
||||
) {
|
||||
LawnchairTheme {
|
||||
SwitchPreference(
|
||||
checked = true,
|
||||
onCheckedChange = {},
|
||||
label = "Example switch",
|
||||
description = "Sample description text",
|
||||
)
|
||||
PreferenceGroupPreviewContainer {
|
||||
SwitchPreference(
|
||||
checked = checked,
|
||||
onCheckedChange = {},
|
||||
label = "Label",
|
||||
description = "Description",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class SwitchPreferencePreviewParameterProvider : PreviewParameterProvider<Boolean> {
|
||||
override val values = sequenceOf(true, false)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,10 @@ import androidx.compose.ui.unit.dp
|
||||
import app.lawnchair.preferences.PreferenceAdapter
|
||||
import app.lawnchair.ui.ModalBottomSheetContent
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.util.bottomSheetHandler
|
||||
import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
|
||||
@Composable
|
||||
fun TextPreference(
|
||||
@@ -106,3 +109,17 @@ fun TextPreferenceDialog(
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@PreviewLawnchair
|
||||
@Composable
|
||||
private fun TextPreferencePreview() {
|
||||
LawnchairTheme {
|
||||
PreferenceGroupPreviewContainer {
|
||||
TextPreference(
|
||||
value = "Value",
|
||||
onChange = {},
|
||||
label = "Label",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.util.preview.PreferenceGroupPreviewContainer
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
|
||||
@Composable
|
||||
fun WarningPreference(
|
||||
@@ -32,3 +35,15 @@ fun WarningPreference(
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@PreviewLawnchair
|
||||
@Composable
|
||||
private fun WarningPreferencePreview() {
|
||||
LawnchairTheme {
|
||||
PreferenceGroupPreviewContainer {
|
||||
WarningPreference(
|
||||
text = "Text",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.zIndex
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.util.PreviewLawnchair
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
|
||||
@Composable
|
||||
fun PreferenceSearchScaffold(
|
||||
|
||||
@@ -29,8 +29,8 @@ import app.lawnchair.ui.preferences.components.controls.SliderPreference
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
|
||||
import app.lawnchair.ui.theme.LawnchairTheme
|
||||
import app.lawnchair.ui.theme.dividerColor
|
||||
import app.lawnchair.ui.util.PreviewLawnchair
|
||||
import app.lawnchair.ui.util.bottomSheetHandler
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
import com.android.launcher3.R
|
||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
||||
import com.google.accompanist.permissions.PermissionState
|
||||
|
||||
@@ -23,7 +23,7 @@ import app.lawnchair.ui.preferences.components.controls.WarningPreference
|
||||
import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceGroup
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceLayout
|
||||
import app.lawnchair.ui.util.PreviewLawnchair
|
||||
import app.lawnchair.ui.util.preview.PreviewLawnchair
|
||||
import app.lawnchair.util.isOnePlusStock
|
||||
import com.android.launcher3.R
|
||||
import com.android.launcher3.Utilities
|
||||
|
||||
@@ -23,6 +23,8 @@ import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.material3.ColorScheme
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.darkColorScheme
|
||||
import androidx.compose.material3.lightColorScheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
@@ -32,6 +34,7 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalInspectionMode
|
||||
import app.lawnchair.preferences.observeAsState
|
||||
import app.lawnchair.preferences.preferenceManager
|
||||
import app.lawnchair.preferences2.asState
|
||||
@@ -84,6 +87,8 @@ fun ComponentActivity.EdgeToEdge() {
|
||||
|
||||
@Composable
|
||||
fun getColorScheme(darkTheme: Boolean): ColorScheme {
|
||||
if (LocalInspectionMode.current) return getPreviewColorScheme(darkTheme)
|
||||
|
||||
val context = LocalContext.current
|
||||
val preferenceManager2 = preferenceManager2()
|
||||
val accentColor by preferenceManager2.accentColor.asState()
|
||||
@@ -96,8 +101,16 @@ fun getColorScheme(darkTheme: Boolean): ColorScheme {
|
||||
return colorScheme.toComposeColorScheme(isDark = darkTheme)
|
||||
}
|
||||
|
||||
private fun getPreviewColorScheme(darkTheme: Boolean) = if (darkTheme) {
|
||||
darkColorScheme()
|
||||
} else {
|
||||
lightColorScheme()
|
||||
}
|
||||
|
||||
val isSelectedThemeDark: Boolean
|
||||
@Composable get() {
|
||||
if (LocalInspectionMode.current) return isAutoThemeDark
|
||||
|
||||
val themeChoice by preferenceManager().launcherTheme.observeAsState()
|
||||
return when (themeChoice) {
|
||||
ThemeChoice.LIGHT -> false
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
package app.lawnchair.ui.util
|
||||
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.tooling.preview.Wallpapers
|
||||
|
||||
@Preview(
|
||||
apiLevel = 33,
|
||||
name = "Normal",
|
||||
showBackground = true,
|
||||
wallpaper = Wallpapers.NONE,
|
||||
)
|
||||
@Preview(
|
||||
apiLevel = 33,
|
||||
name = "Normal Night",
|
||||
showBackground = true,
|
||||
uiMode = Configuration.UI_MODE_NIGHT_YES,
|
||||
wallpaper = Wallpapers.NONE,
|
||||
)
|
||||
@Preview(
|
||||
apiLevel = 33,
|
||||
name = "Themed",
|
||||
showBackground = true,
|
||||
wallpaper = Wallpapers.RED_DOMINATED_EXAMPLE,
|
||||
)
|
||||
@Preview(
|
||||
apiLevel = 33,
|
||||
name = "Themed Night",
|
||||
showBackground = true,
|
||||
uiMode = Configuration.UI_MODE_NIGHT_YES,
|
||||
wallpaper = Wallpapers.RED_DOMINATED_EXAMPLE,
|
||||
)
|
||||
annotation class PreviewLawnchair
|
||||
|
||||
object PreviewUtils {
|
||||
// todo
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package app.lawnchair.ui.util.preview
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.lawnchair.ui.preferences.components.layout.PreferenceGroup
|
||||
|
||||
@Composable
|
||||
fun PreferenceGroupPreviewContainer(
|
||||
modifier: Modifier = Modifier,
|
||||
content: @Composable () -> Unit,
|
||||
) {
|
||||
Box(
|
||||
modifier = modifier.background(MaterialTheme.colorScheme.surfaceDim),
|
||||
) {
|
||||
PreferenceGroup(
|
||||
heading = "Group Heading",
|
||||
description = "Group description",
|
||||
showDescription = true,
|
||||
content = content,
|
||||
modifier = Modifier.padding(vertical = 16.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package app.lawnchair.ui.util.preview
|
||||
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.tooling.preview.Wallpapers
|
||||
|
||||
@Preview(
|
||||
name = "Light",
|
||||
showBackground = true,
|
||||
wallpaper = Wallpapers.NONE,
|
||||
)
|
||||
@Preview(
|
||||
name = "Dark",
|
||||
showBackground = true,
|
||||
uiMode = Configuration.UI_MODE_NIGHT_YES,
|
||||
wallpaper = Wallpapers.NONE,
|
||||
)
|
||||
annotation class PreviewLawnchair
|
||||
Reference in New Issue
Block a user