diff --git a/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt b/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt index 69bc4d7..dd39bab 100644 --- a/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt +++ b/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt @@ -48,7 +48,10 @@ class MainActivity : ComponentActivity(), SensorEventListener { enableEdgeToEdge() setContent { LightMeterTheme { - LightmeterHomeScreen(state = lightmeterState ) + LightmeterHomeScreen( + state = lightmeterState, + recalculateShutterSpeed = { recalculateShutterSpeed() } + ) } } @@ -56,18 +59,25 @@ class MainActivity : ComponentActivity(), SensorEventListener { illuminanceSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT) } - private fun updateLightmeterState(illuminance: Double) { + private fun recalculateShutterSpeed() { + val illuminance = lightmeterState.value.illuminance val iso = lightmeterState.value.iso val aperture = lightmeterState.value.aperture val shutterSpeed = (aperture * aperture) / (illuminance * (iso / 100)) lightmeterState.value = lightmeterState.value.copy( - illuminance = illuminance, iso = iso, aperture = aperture, shutterSpeed = shutterSpeed ) } + private fun updateLightmeterState(illuminance: Double) { + lightmeterState.value = lightmeterState.value.copy( + illuminance = illuminance + ) + recalculateShutterSpeed() + } + override fun onSensorChanged(event: SensorEvent?) { event?.values?.let { for (v in it) { @@ -138,9 +148,8 @@ fun LightmeterListItemPreview() { } } -// TODO: Recalculate state on change @Composable -fun IsoSlider(state: MutableState) { +fun IsoSlider(state: MutableState, recalculateShutterSpeed: () -> Unit) { Row( modifier = Modifier.padding(all = 8.dp), verticalAlignment = Alignment.CenterVertically @@ -154,6 +163,7 @@ fun IsoSlider(state: MutableState) { value = state.value.iso.toFloat(), onValueChange = { value -> state.value = state.value.copy(iso = value.roundToInt()) + recalculateShutterSpeed() }, valueRange = 1f..2000f ) @@ -169,19 +179,24 @@ val previewlightmeterState = mutableStateOf( ) ) +fun previewRecalculateShutterSpeed() {} + @Preview(showBackground = true) @Composable fun IsoSliderPreview() { LightMeterTheme { IsoSlider( - state = remember { previewlightmeterState } + state = remember { previewlightmeterState }, + recalculateShutterSpeed = { previewRecalculateShutterSpeed() } ) } } -// TODO: Recalculate state on change @Composable -fun ApertureSlider(state: MutableState) { +fun ApertureSlider( + state: MutableState, + recalculateShutterSpeed: () -> Unit +) { Row( modifier = Modifier.padding(all = 8.dp), verticalAlignment = Alignment.CenterVertically @@ -195,6 +210,7 @@ fun ApertureSlider(state: MutableState) { value = state.value.aperture.toFloat(), onValueChange = { value -> state.value = state.value.copy(aperture = value.toDouble()) + recalculateShutterSpeed() }, valueRange = 0.85f..22f ) @@ -205,12 +221,18 @@ fun ApertureSlider(state: MutableState) { @Composable fun ApertureSliderPreview() { LightMeterTheme { - ApertureSlider(state = remember { previewlightmeterState }) + ApertureSlider( + state = remember { previewlightmeterState }, + recalculateShutterSpeed = { previewRecalculateShutterSpeed() } + ) } } @Composable -fun LightmeterHomeScreen(state: MutableState) { +fun LightmeterHomeScreen( + state: MutableState, + recalculateShutterSpeed: () -> Unit +) { Column(modifier = Modifier .fillMaxSize() .padding(top = 64.dp) @@ -245,8 +267,14 @@ fun LightmeterHomeScreen(state: MutableState) { modifier = Modifier.padding(top = 64.dp), verticalArrangement = Arrangement.Bottom ) { - IsoSlider(state = state) - ApertureSlider(state = state) + IsoSlider( + state = state, + recalculateShutterSpeed = recalculateShutterSpeed + ) + ApertureSlider( + state = state, + recalculateShutterSpeed = recalculateShutterSpeed + ) } } } @@ -256,7 +284,8 @@ fun LightmeterHomeScreen(state: MutableState) { fun LightmeterHomeScreenPreview() { LightMeterTheme { LightmeterHomeScreen( - state = remember { previewlightmeterState } + state = remember { previewlightmeterState }, + recalculateShutterSpeed = { previewRecalculateShutterSpeed() } ) } } \ No newline at end of file