Add prominent shutter speed display

This commit is contained in:
2024-08-05 22:12:43 +02:00
parent 1a40373093
commit 1a1a1e6ca0
@@ -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<LightmeterState>) {
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<LightmeterState>, 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),