From e6d7bcb6555b615db6e3399ea71cf7df3e62bc06 Mon Sep 17 00:00:00 2001 From: Andrea Brighi Date: Sun, 14 May 2023 17:23:41 +0200 Subject: [PATCH] refactor(app): add CameraViewWithPermission --- .../app/ui/common/CameraViewWithPermission.kt | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 app/src/main/kotlin/com/intelligentbackpack/app/ui/common/CameraViewWithPermission.kt diff --git a/app/src/main/kotlin/com/intelligentbackpack/app/ui/common/CameraViewWithPermission.kt b/app/src/main/kotlin/com/intelligentbackpack/app/ui/common/CameraViewWithPermission.kt new file mode 100644 index 00000000..a6609555 --- /dev/null +++ b/app/src/main/kotlin/com/intelligentbackpack/app/ui/common/CameraViewWithPermission.kt @@ -0,0 +1,100 @@ +package com.intelligentbackpack.app.ui.common + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.provider.Settings +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import androidx.core.content.ContextCompat +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.PermissionRequired +import com.google.accompanist.permissions.PermissionState +import com.intelligentbackpack.app.sensor.BarcodeAnalyser +import com.intelligentbackpack.app.ui.shape.CutOutShape + +@OptIn(ExperimentalPermissionsApi::class) +@Composable +@androidx.annotation.OptIn(androidx.camera.core.ExperimentalGetImage::class) +fun CameraViewWithPermission( + topBar: @Composable () -> Unit, + message: @Composable () -> Unit, + barcodeAnalyser: BarcodeAnalyser, + permissionState: PermissionState, + onBack: () -> Unit, + context: Context = LocalContext.current, +) { + Column( + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.End, + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + ) { + PermissionRequired( + permissionState = permissionState, + permissionNotGrantedContent = { + PermissionsDenied( + message = { Text(text = "Can't open camera without permission") }, + onBackMessage = { Text(text = "Insert ISBN manually") }, + onBack = onBack, + changePermissions = { + permissionState.launchPermissionRequest() + }, + changePermissionsMessage = { Text(text = "Enable permission") }) + }, + permissionNotAvailableContent = { + PermissionsDenied( + message = { Text(text = "Permission not available, please enable it in settings") }, + onBackMessage = { Text(text = "Insert ISBN manually") }, + onBack = onBack, + changePermissions = { + ContextCompat.startActivity( + context, + Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + data = Uri.fromParts( + "package", + context.packageName, + null + ) + }, + null + ) + } + ) { Text("Activate permission in settings") } + } + ) { + Box { + PreviewViewComposable( + modifier = Modifier.fillMaxSize(), + barcodeAnalyser = barcodeAnalyser, + ) + Surface( + shape = CutOutShape(), + color = Color.Black.copy(alpha = 0.45f), + modifier = Modifier.fillMaxSize() + ) { } + Column( + modifier = Modifier + .padding(top = 54.dp, start = 32.dp, end = 32.dp, bottom = 54.dp) + ) { + topBar() + message() + } + } + } + } +}