From 0e164b41bf4f476c8bb36c024e6308ae1544be31 Mon Sep 17 00:00:00 2001 From: Jona Heitzer Date: Mon, 5 Aug 2024 21:07:02 +0200 Subject: [PATCH] Add sliders to set ISO and aperture --- .../java/eu/wa5p/lightmeter/MainActivity.kt | 114 +++++++++++++++--- 1 file changed, 96 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt b/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt index 85815b8..69bc4d7 100644 --- a/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt +++ b/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt @@ -11,11 +11,11 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState @@ -27,6 +27,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import eu.wa5p.lightmeter.ui.theme.LightMeterTheme +import kotlin.math.roundToInt const val TAG: String = "lightmeter MainActivity" @@ -104,16 +105,22 @@ fun LightmeterListItem( ) { Row(modifier = Modifier.padding(bottom = 8.dp)) { Text( - modifier = Modifier.weight(0.4f).padding(all = 8.dp), + modifier = Modifier + .weight(0.4f) + .padding(all = 8.dp), text = label ) Text( - modifier = Modifier.weight(0.4f).padding(all = 8.dp), + modifier = Modifier + .weight(0.4f) + .padding(all = 8.dp), textAlign = TextAlign.Right, text = value ) Text( - modifier = Modifier.weight(0.2f).padding(all = 8.dp), + modifier = Modifier + .weight(0.2f) + .padding(all = 8.dp), text = unit ) } @@ -131,14 +138,86 @@ fun LightmeterListItemPreview() { } } +// TODO: Recalculate state on change +@Composable +fun IsoSlider(state: MutableState) { + Row( + modifier = Modifier.padding(all = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + modifier = Modifier.weight(0.3f), + text = "ISO" + ) + Slider( + modifier = Modifier.weight(0.7f), + value = state.value.iso.toFloat(), + onValueChange = { value -> + state.value = state.value.copy(iso = value.roundToInt()) + }, + valueRange = 1f..2000f + ) + } +} + +val previewlightmeterState = mutableStateOf( + LightmeterState( + illuminance = 0.0, + aperture = 1.8, + iso = 100, + shutterSpeed = 0.01 + ) +) + +@Preview(showBackground = true) +@Composable +fun IsoSliderPreview() { + LightMeterTheme { + IsoSlider( + state = remember { previewlightmeterState } + ) + } +} + +// TODO: Recalculate state on change +@Composable +fun ApertureSlider(state: MutableState) { + Row( + modifier = Modifier.padding(all = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + modifier = Modifier.weight(0.3f), + text = "Aperture" + ) + Slider( + modifier = Modifier.weight(0.7f), + value = state.value.aperture.toFloat(), + onValueChange = { value -> + state.value = state.value.copy(aperture = value.toDouble()) + }, + valueRange = 0.85f..22f + ) + } +} + +@Preview(showBackground = true) +@Composable +fun ApertureSliderPreview() { + LightMeterTheme { + ApertureSlider(state = remember { previewlightmeterState }) + } +} + @Composable fun LightmeterHomeScreen(state: MutableState) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center + Column(modifier = Modifier + .fillMaxSize() + .padding(top = 64.dp) + .padding(all = 32.dp) ) { Column( - verticalArrangement = Arrangement.Center + verticalArrangement = Arrangement.Top ) { LightmeterListItem( label = "Illuminance", @@ -161,6 +240,14 @@ fun LightmeterHomeScreen(state: MutableState) { unit = "s" ) } + + Column( + modifier = Modifier.padding(top = 64.dp), + verticalArrangement = Arrangement.Bottom + ) { + IsoSlider(state = state) + ApertureSlider(state = state) + } } } @@ -169,16 +256,7 @@ fun LightmeterHomeScreen(state: MutableState) { fun LightmeterHomeScreenPreview() { LightMeterTheme { LightmeterHomeScreen( - state = remember { - mutableStateOf( - LightmeterState( - illuminance = 0.0, - aperture = 1.8, - iso = 100, - shutterSpeed = 0.01 - ) - ) - } + state = remember { previewlightmeterState } ) } } \ No newline at end of file