diff --git a/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt b/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt index 99ba005..0ae8140 100644 --- a/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt +++ b/app/src/main/java/eu/wa5p/lightmeter/MainActivity.kt @@ -23,9 +23,11 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import eu.wa5p.lightmeter.ui.theme.LightMeterTheme import kotlin.math.abs @@ -34,6 +36,30 @@ const val TAG: String = "lightmeter MainActivity" private val commonIsoValues = listOf(50, 100, 200, 400, 800, 1600, 3200, 6400) private val commonApertureValues = listOf(0.85, 1.4, 2.0, 2.8, 4.0, 5.6, 8.0, 11.0, 16.0, 22.0) +data class ShutterSpeed(val value: Double, val label: String) +val shutterSpeeds = listOf( + ShutterSpeed(1.0 / 8000, "1/8000 s"), + ShutterSpeed(1.0 / 4000, "1/4000 s"), + ShutterSpeed(1.0 / 2000, "1/2000 s"), + ShutterSpeed(1.0 / 1000, "1/1000 s"), + ShutterSpeed(1.0 / 500, "1/500 s"), + ShutterSpeed(1.0 / 250, "1/250 s"), + ShutterSpeed(1.0 / 125, "1/125 s"), + ShutterSpeed(1.0 / 60, "1/60 s"), + ShutterSpeed(1.0 / 30, "1/30 s"), + ShutterSpeed(1.0 / 15, "1/15 s"), + ShutterSpeed(1.0 / 8, "1/8 s"), + ShutterSpeed(1.0 / 4, "1/4 s"), + ShutterSpeed(1.0 / 2, "1/2 s"), + ShutterSpeed(1.0, "1 s"), + ShutterSpeed(2.0, "2 s"), + ShutterSpeed(4.0, "4 s"), + ShutterSpeed(8.0, "8 s"), + ShutterSpeed(15.0, "15 s"), + ShutterSpeed(30.0, "30 s"), + ShutterSpeed(60.0, "60 s") +) + class MainActivity : ComponentActivity(), SensorEventListener { private lateinit var sensorManager: SensorManager private var illuminanceSensor: Sensor? = null @@ -151,6 +177,37 @@ fun LightmeterListItemPreview() { } } +private fun formatShutterSpeed(shutterSpeed: Double): String { + val closestShutterSpeed = shutterSpeeds.minByOrNull { + abs(it.value - shutterSpeed) + } + + return closestShutterSpeed?.label ?: "Unknown" +} + +@Composable +fun ShutterSpeed(state: MutableState) { + Row(modifier = Modifier.padding(bottom = 8.dp)) { + Text( + modifier = Modifier + .weight(0.5f) + .padding(all = 8.dp), + textAlign = TextAlign.Center, + fontWeight = FontWeight.Bold, + fontSize = 24.sp, + text = formatShutterSpeed(state.value.shutterSpeed) + ) + } +} + +@Preview(showBackground = true) +@Composable +fun PreviewShutterSpeed() { + LightMeterTheme { + ShutterSpeed(state = previewlightmeterState) + } +} + @Composable fun IsoSlider(state: MutableState, recalculateShutterSpeed: () -> Unit) { // Convert common ISO values to the range used by the slider @@ -283,6 +340,13 @@ fun LightmeterHomeScreen( unit = "s" ) } + + Column ( + modifier = Modifier.padding(top = 64.dp), + verticalArrangement = Arrangement.Center + ) { + ShutterSpeed(state = state) + } Column( modifier = Modifier.padding(top = 64.dp),