Add sliders to set ISO and aperture

This commit is contained in:
2024-08-05 21:07:02 +02:00
parent 04f0093ad7
commit 0e164b41bf
@@ -11,11 +11,11 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Slider
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState 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.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.wa5p.lightmeter.ui.theme.LightMeterTheme import eu.wa5p.lightmeter.ui.theme.LightMeterTheme
import kotlin.math.roundToInt
const val TAG: String = "lightmeter MainActivity" const val TAG: String = "lightmeter MainActivity"
@@ -104,16 +105,22 @@ fun LightmeterListItem(
) { ) {
Row(modifier = Modifier.padding(bottom = 8.dp)) { Row(modifier = Modifier.padding(bottom = 8.dp)) {
Text( Text(
modifier = Modifier.weight(0.4f).padding(all = 8.dp), modifier = Modifier
.weight(0.4f)
.padding(all = 8.dp),
text = label text = label
) )
Text( Text(
modifier = Modifier.weight(0.4f).padding(all = 8.dp), modifier = Modifier
.weight(0.4f)
.padding(all = 8.dp),
textAlign = TextAlign.Right, textAlign = TextAlign.Right,
text = value text = value
) )
Text( Text(
modifier = Modifier.weight(0.2f).padding(all = 8.dp), modifier = Modifier
.weight(0.2f)
.padding(all = 8.dp),
text = unit text = unit
) )
} }
@@ -131,14 +138,86 @@ fun LightmeterListItemPreview() {
} }
} }
// TODO: Recalculate state on change
@Composable
fun IsoSlider(state: MutableState<LightmeterState>) {
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<LightmeterState>) {
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 @Composable
fun LightmeterHomeScreen(state: MutableState<LightmeterState>) { fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
Box( Column(modifier = Modifier
modifier = Modifier.fillMaxSize(), .fillMaxSize()
contentAlignment = Alignment.Center .padding(top = 64.dp)
.padding(all = 32.dp)
) { ) {
Column( Column(
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Top
) { ) {
LightmeterListItem( LightmeterListItem(
label = "Illuminance", label = "Illuminance",
@@ -161,6 +240,14 @@ fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
unit = "s" 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<LightmeterState>) {
fun LightmeterHomeScreenPreview() { fun LightmeterHomeScreenPreview() {
LightMeterTheme { LightMeterTheme {
LightmeterHomeScreen( LightmeterHomeScreen(
state = remember { state = remember { previewlightmeterState }
mutableStateOf(
LightmeterState(
illuminance = 0.0,
aperture = 1.8,
iso = 100,
shutterSpeed = 0.01
)
)
}
) )
} }
} }