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.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
|
||||||
@@ -283,6 +340,13 @@ fun LightmeterHomeScreen(
|
|||||||
unit = "s"
|
unit = "s"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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),
|
||||||
|
|||||||
Reference in New Issue
Block a user