Initial Commit

As of now, only the illuminance value itself is beeing updated, no calculations are done.
This commit is contained in:
2024-08-05 19:22:54 +02:00
commit 886357a34d
48 changed files with 1403 additions and 0 deletions
@@ -0,0 +1,171 @@
package eu.wa5p.lightmeter
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
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.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import eu.wa5p.lightmeter.ui.theme.LightMeterTheme
const val TAG: String = "lightmeter MainActivity"
class MainActivity : ComponentActivity(), SensorEventListener {
private lateinit var sensorManager: SensorManager
private var illuminanceSensor: Sensor? = null
private var lightmeterState = mutableStateOf(
LightmeterState(
illuminance = 0.0,
aperture = 1.8,
iso = 100,
shutterSpeed = 0.01
)
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
LightMeterTheme {
LightmeterHomeScreen(state = lightmeterState )
}
}
// Get an instance of the sensor service, and use that to get an instance of
// a particular sensor.
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
illuminanceSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
}
override fun onSensorChanged(event: SensorEvent?) {
event?.values?.let {
for (v in it) {
Log.d(TAG, "sensor changed: $v lux")
lightmeterState.value = lightmeterState.value.copy(illuminance = v.toDouble())
}
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
Log.d(TAG, "accuracy changed: sensor: ${sensor?.name}. accuracy: $accuracy")
}
override fun onResume() {
// Register a listener for the sensor.
super.onResume()
sensorManager.registerListener(this, illuminanceSensor, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause()
sensorManager.unregisterListener(this)
}
}
@Composable
fun LightmeterListItem(
label: String,
value: String,
unit: String
) {
Row(modifier = Modifier.padding(bottom = 8.dp)) {
Text(
modifier = Modifier.weight(0.4f).padding(all = 8.dp),
text = label
)
Text(
modifier = Modifier.weight(0.4f).padding(all = 8.dp),
textAlign = TextAlign.Right,
text = value
)
Text(
modifier = Modifier.weight(0.2f).padding(all = 8.dp),
text = unit
)
}
}
@Preview(showBackground = true)
@Composable
fun LightmeterListItemPreview() {
LightMeterTheme {
LightmeterListItem(
label = "Illuminance",
value = "1234",
unit = "lux"
)
}
}
@Composable
fun LightmeterHomeScreen(state: MutableState<LightmeterState>) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Column(
verticalArrangement = Arrangement.Center
) {
LightmeterListItem(
label = "Illuminance",
value = "%.2f".format(state.value.illuminance),
unit = "lux"
)
LightmeterListItem(
label = "ISO",
value = state.value.iso.toString(),
unit = ""
)
LightmeterListItem(
label = "Aperture",
value = "%.2f".format(state.value.aperture),
unit = "f"
)
LightmeterListItem(
label = "Shutter Speed",
value = "%.2f".format(state.value.shutterSpeed),
unit = "s"
)
}
}
}
@Preview(showBackground = true)
@Composable
fun LightmeterHomeScreenPreview() {
LightMeterTheme {
LightmeterHomeScreen(
state = remember {
mutableStateOf(
LightmeterState(
illuminance = 0.0,
aperture = 1.8,
iso = 100,
shutterSpeed = 0.01
)
)
}
)
}
}