qr scanner

This commit is contained in:
sathwikcs
2024-10-16 17:45:56 +05:30
parent dcee750197
commit 42ac1fc8c4
2 changed files with 51 additions and 66 deletions

View File

@@ -12,13 +12,12 @@ import androidx.compose.ui.unit.dp
import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.PermissionState
import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.shouldShowRationale
@Composable @Composable
fun DefaultScreen( fun DefaultScreen(
qrCodeValue: String?, qrCodeValue: String?,
onScanClick: () -> Unit,
onRetryClick: () -> Unit
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@@ -30,27 +29,8 @@ fun DefaultScreen(
qrCodeValue?.let { qrCodeValue?.let {
Text(text = "Scanned Value: $it", modifier = Modifier.padding(16.dp)) Text(text = "Scanned Value: $it", modifier = Modifier.padding(16.dp))
} }
Button(onClick = if (qrCodeValue == null) onScanClick else onRetryClick) {
Text(if (qrCodeValue == null) "Scan" else "Retry")
}
} }
} }
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun RequestPermissions(
cameraPermissionState: PermissionState,
locationPermissionState: PermissionState
) {
val context = LocalContext.current
LaunchedEffect(Unit) {
cameraPermissionState.launchPermissionRequest()
locationPermissionState.launchPermissionRequest()
}
if (!cameraPermissionState.status.isGranted) {
Toast.makeText(context, "Camera permission is required", Toast.LENGTH_LONG).show()
}
if (!locationPermissionState.status.isGranted) {
Toast.makeText(context, "Location permission is required", Toast.LENGTH_LONG).show()
}
}

View File

@@ -6,10 +6,12 @@ import androidx.camera.core.*
import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView import androidx.camera.view.PreviewView
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material3.OutlinedCard
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
@@ -18,12 +20,14 @@ import com.google.mlkit.vision.barcode.BarcodeScanning
import com.google.mlkit.vision.barcode.common.Barcode import com.google.mlkit.vision.barcode.common.Barcode
import com.google.mlkit.vision.common.InputImage import com.google.mlkit.vision.common.InputImage
@SuppressLint("UnsafeOptInUsageError")
@Composable @Composable
fun QRCodeScannerScreen( fun QRCodeScannerScreen(
onQRCodeScanned: (String) -> Unit, onQRCodeScanned: (String) -> Unit,
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current lifecycleOwner: LifecycleOwner = androidx.lifecycle.compose.LocalLifecycleOwner.current
) { ) {
OutlinedCard(
modifier = Modifier.padding(10.dp)
) {
val context = LocalContext.current val context = LocalContext.current
val previewView = remember { PreviewView(context) } val previewView = remember { PreviewView(context) }
@@ -71,6 +75,7 @@ fun QRCodeScannerScreen(
.aspectRatio(1f), .aspectRatio(1f),
factory = { previewView } factory = { previewView }
) )
}
} }
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")