Add prominent shutter speed display
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user