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.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign 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 androidx.compose.ui.unit.sp
import eu.wa5p.lightmeter.ui.theme.LightMeterTheme import eu.wa5p.lightmeter.ui.theme.LightMeterTheme
import kotlin.math.abs 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 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) 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 { class MainActivity : ComponentActivity(), SensorEventListener {
private lateinit var sensorManager: SensorManager private lateinit var sensorManager: SensorManager
private var illuminanceSensor: Sensor? = null 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 @Composable
fun IsoSlider(state: MutableState<LightmeterState>, recalculateShutterSpeed: () -> Unit) { fun IsoSlider(state: MutableState<LightmeterState>, recalculateShutterSpeed: () -> Unit) {
// Convert common ISO values to the range used by the slider // Convert common ISO values to the range used by the slider
@@ -284,6 +341,13 @@ fun LightmeterHomeScreen(
) )
} }
Column (
modifier = Modifier.padding(top = 64.dp),
verticalArrangement = Arrangement.Center
) {
ShutterSpeed(state = state)
}
Column( Column(
modifier = Modifier.padding(top = 64.dp), modifier = Modifier.padding(top = 64.dp),
verticalArrangement = Arrangement.Bottom verticalArrangement = Arrangement.Bottom