WIP: was storing first time but issues while stopping video

This commit is contained in:
2024-01-30 20:03:20 +01:00
parent 9f663db12a
commit 4b2eb8def9
17 changed files with 748 additions and 43 deletions

View File

@@ -1,46 +1,138 @@
package com.urkob.wittrail_android
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.urkob.wittrail_android.ui.theme.WittrailAndroidTheme
import android.util.Log
import android.widget.Button
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
class MainActivity : ComponentActivity() {
class MainActivity : AppCompatActivity() {
companion object {
private const val REQUEST_CAMERA_PERMISSION = 101
private val REQUIRED_PERMISSIONS =
mutableListOf (
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO
).apply {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}.toTypedArray()
}
private var useFrontCamera: Boolean = false
private lateinit var startFrontCameraButton: Button
private lateinit var startBackCameraButton: Button
private lateinit var stopCameraButton: Button
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
WittrailAndroidTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
setContentView(R.layout.activity_main)
startFrontCameraButton = findViewById(R.id.startFrontCameraButton)
startBackCameraButton = findViewById(R.id.startBackCameraButton)
stopCameraButton = findViewById(R.id.stopCameraButton)
if (!allPermissionsGranted()) {
requestPermissions()
} else {
Log.e("main", "INIT START CAMERA")
initStartCamera()
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
WittrailAndroidTheme {
Greeting("Android")
private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
ContextCompat.checkSelfPermission(
baseContext, it) == PackageManager.PERMISSION_GRANTED
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun requestPermissions() {
activityResultLauncher.launch(REQUIRED_PERMISSIONS)
}
@RequiresApi(Build.VERSION_CODES.O)
private val activityResultLauncher =
registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions())
{ permissions ->
// Handle Permission granted/rejected
var permissionGranted = true
permissions.entries.forEach {
if (it.key in REQUIRED_PERMISSIONS && !it.value)
permissionGranted = false
}
if (!permissionGranted) {
Toast.makeText(baseContext,
"Permission request denied",
Toast.LENGTH_SHORT).show()
} else {
Log.e("main", "INIT START CAMERA")
initStartCamera()
}
}
private fun hasCameraPermission() =
ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
private fun requestCameraPermission() {
ActivityCompat.requestPermissions(
this, arrayOf(Manifest.permission.CAMERA), REQUEST_CAMERA_PERMISSION
)
}
@RequiresApi(Build.VERSION_CODES.O)
private fun initStartCamera(){
startFrontCameraButton.setOnClickListener {
useFrontCamera = true
if (hasCameraPermission()) {
startRecordingService(useFrontCamera)
} else {
requestCameraPermission()
}
}
startBackCameraButton.setOnClickListener {
useFrontCamera = false
if (hasCameraPermission()) {
startRecordingService(useFrontCamera)
} else {
requestCameraPermission()
}
}
stopCameraButton.setOnClickListener {
stopRecordingService()
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun startRecordingService(useFrontCamera: Boolean) {
Log.e("main", "startRecordingService")
val serviceIntent = Intent(this, RecordingService::class.java).apply {
action = RecordingService.ACTION_START_RECORDING
putExtra("useFrontCamera", useFrontCamera)
}
startForegroundService(serviceIntent)
// startService(serviceIntent)
}
private fun stopRecordingService() {
Log.e("main", "stopRecordingService")
val serviceIntent = Intent(this, RecordingService::class.java).apply {
action = RecordingService.ACTION_STOP_RECORDING
}
stopForeground(STOP_FOREGROUND_DETACH)
stopService(serviceIntent)
}
}