Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.flashlightpro
- import android.hardware.camera2.CameraManager
- import android.os.Bundle
- import androidx.activity.ComponentActivity
- import androidx.activity.OnBackPressedCallback
- import androidx.activity.compose.setContent
- import androidx.compose.foundation.layout.Arrangement
- import androidx.compose.foundation.layout.Column
- import androidx.compose.foundation.layout.fillMaxSize
- import androidx.compose.foundation.layout.fillMaxWidth
- import androidx.compose.foundation.layout.padding
- import androidx.compose.material3.Button
- import androidx.compose.material3.Slider
- import androidx.compose.material3.Text
- import androidx.compose.runtime.Composable
- import androidx.compose.runtime.getValue
- import androidx.compose.runtime.mutableStateOf
- import androidx.compose.runtime.remember
- import androidx.compose.runtime.setValue
- import androidx.compose.ui.Alignment
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.res.stringResource
- import androidx.compose.ui.tooling.preview.Preview
- import androidx.compose.ui.unit.dp
- import com.example.flashlightpro.controller.FlashlightController
- import com.example.flashlightpro.features.StrobeLightFeature
- class MainActivity : ComponentActivity() {
- private lateinit var flashlightController: FlashlightController
- private var isBlinking = false
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- val cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
- val cameraId = cameraManager.cameraIdList[0]
- val strobeLightFeature = StrobeLightFeature(cameraManager, cameraId)
- flashlightController = FlashlightController(strobeLightFeature)
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- if (isBlinking) {
- flashlightController.stopBlinking()
- }
- finish()
- }
- })
- setContent {
- var buttonText by remember { mutableStateOf(stringResource(R.string.start_blinking)) }
- var sliderPosition by remember { mutableStateOf(0.5f) }
- MyComposeUI(
- onBlinkStartStop = {
- isBlinking = !isBlinking
- if (isBlinking) {
- flashlightController.startBlinking(sliderPosition)
- buttonText = stringResource(R.string.stop_blinking)
- } else {
- flashlightController.stopBlinking()
- buttonText = stringResource(R.string.start_blinking)
- }
- },
- onSpeedChange = { speed: Float ->
- sliderPosition = speed
- if (isBlinking) {
- flashlightController.startBlinking(speed)
- }
- },
- buttonText = buttonText,
- sliderPosition = sliderPosition
- )
- }
- }
- @Composable
- fun MyComposeUI(
- onBlinkStartStop: () -> Unit,
- onSpeedChange: (Float) -> Unit,
- buttonText: String,
- sliderPosition: Float
- ) {
- Column(
- modifier = Modifier
- .fillMaxSize()
- .padding(16.dp),
- verticalArrangement = Arrangement.SpaceBetween
- ) {
- Text(
- text = stringResource(R.string.app_name),
- modifier = Modifier.align(Alignment.CenterHorizontally)
- )
- Button(
- onClick = onBlinkStartStop,
- modifier = Modifier.align(Alignment.CenterHorizontally)
- ) {
- Text(text = buttonText)
- }
- Slider(
- value = sliderPosition,
- onValueChange = onSpeedChange,
- modifier = Modifier
- .fillMaxWidth()
- .padding(top = 16.dp)
- )
- }
- }
- // This is the preview Composable with no parameters
- @Preview(showBackground = true)
- @Composable
- fun PreviewMyComposeUI() {
- MyComposeUI(
- onBlinkStartStop = {},
- onSpeedChange = {},
- buttonText = stringResource(R.string.start_blinking),
- sliderPosition = 0.5f
- )
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment