removed unwanted classes
This commit is contained in:
@@ -1,2 +0,0 @@
|
|||||||
package `in`.sminnovations.smi_attendance_admin.screens.home.ui.componets
|
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package `in`.sminnovations.smi_attendance_admin.screens.home.ui.componets
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.height
|
|
||||||
import androidx.compose.foundation.layout.width
|
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.material3.Button
|
|
||||||
import androidx.compose.material3.ButtonDefaults
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.compose.ui.unit.sp
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun LargeButton(
|
|
||||||
text: String,
|
|
||||||
onClick: () -> Unit,
|
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
|
||||||
Button(
|
|
||||||
onClick = onClick,
|
|
||||||
modifier = modifier
|
|
||||||
.height(56.dp)
|
|
||||||
.width(200.dp),
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
containerColor = MaterialTheme.colorScheme.primary,
|
|
||||||
contentColor = MaterialTheme.colorScheme.onPrimary
|
|
||||||
),
|
|
||||||
shape = RoundedCornerShape(28.dp)
|
|
||||||
) {
|
|
||||||
Text(
|
|
||||||
text = text,
|
|
||||||
fontSize = 18.sp,
|
|
||||||
fontWeight = FontWeight.Bold
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package `in`.sminnovations.smi_attendance_admin.screens.home.ui.componets
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun DefaultScreen(
|
|
||||||
qrCodeValue: String?,
|
|
||||||
) {
|
|
||||||
Column(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.padding(16.dp),
|
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
|
||||||
verticalArrangement = Arrangement.Center
|
|
||||||
) {
|
|
||||||
qrCodeValue?.let {
|
|
||||||
Text(text = "Scanned Value: $it", modifier = Modifier.padding(16.dp))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
package `in`.sminnovations.smi_attendance_admin.screens.home.ui.componets
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.util.Log
|
|
||||||
import androidx.camera.core.*
|
|
||||||
import androidx.camera.lifecycle.ProcessCameraProvider
|
|
||||||
import androidx.camera.view.PreviewView
|
|
||||||
import androidx.compose.foundation.layout.*
|
|
||||||
import androidx.compose.material3.OutlinedCard
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.lifecycle.LifecycleOwner
|
|
||||||
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
|
|
||||||
import com.google.mlkit.vision.barcode.BarcodeScanning
|
|
||||||
import com.google.mlkit.vision.barcode.common.Barcode
|
|
||||||
import com.google.mlkit.vision.common.InputImage
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun QRCodeScannerScreen(
|
|
||||||
onQRCodeScanned: (String) -> Unit,
|
|
||||||
lifecycleOwner: LifecycleOwner = androidx.lifecycle.compose.LocalLifecycleOwner.current
|
|
||||||
) {
|
|
||||||
OutlinedCard(
|
|
||||||
modifier = Modifier.padding(10.dp)
|
|
||||||
) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
val previewView = remember { PreviewView(context) }
|
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
|
|
||||||
val cameraProvider = cameraProviderFuture.get()
|
|
||||||
|
|
||||||
val preview = Preview.Builder().build().apply {
|
|
||||||
setSurfaceProvider(previewView.surfaceProvider)
|
|
||||||
}
|
|
||||||
|
|
||||||
val barcodeScanner = BarcodeScanning.getClient(
|
|
||||||
BarcodeScannerOptions.Builder()
|
|
||||||
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
|
|
||||||
.build()
|
|
||||||
)
|
|
||||||
|
|
||||||
val imageAnalyzer = ImageAnalysis.Builder()
|
|
||||||
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
|
|
||||||
.build()
|
|
||||||
.also { analyzer ->
|
|
||||||
analyzer.setAnalyzer(ContextCompat.getMainExecutor(context)) { imageProxy ->
|
|
||||||
processImageProxy(imageProxy, barcodeScanner) { value ->
|
|
||||||
onQRCodeScanned(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
cameraProvider.unbindAll()
|
|
||||||
cameraProvider.bindToLifecycle(
|
|
||||||
lifecycleOwner,
|
|
||||||
CameraSelector.DEFAULT_BACK_CAMERA,
|
|
||||||
preview,
|
|
||||||
imageAnalyzer
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e("QRCodeScanner", "Camera binding failed", e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AndroidView(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.aspectRatio(1f),
|
|
||||||
factory = { previewView }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
|
||||||
private fun processImageProxy(
|
|
||||||
imageProxy: ImageProxy,
|
|
||||||
scanner: com.google.mlkit.vision.barcode.BarcodeScanner,
|
|
||||||
onQRCodeScanned: (String) -> Unit
|
|
||||||
) {
|
|
||||||
val mediaImage = imageProxy.image
|
|
||||||
if (mediaImage != null) {
|
|
||||||
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
|
|
||||||
scanner.process(image)
|
|
||||||
.addOnSuccessListener { barcodes ->
|
|
||||||
barcodes.firstOrNull()?.rawValue?.let { qrCodeValue ->
|
|
||||||
onQRCodeScanned(qrCodeValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.addOnFailureListener {
|
|
||||||
Log.e("QRCodeScanner", "Barcode processing failed", it)
|
|
||||||
}
|
|
||||||
.addOnCompleteListener {
|
|
||||||
imageProxy.close()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
imageProxy.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package `in`.sminnovations.smi_attendance_admin.screens.home.ui.componets
|
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
|
||||||
import com.google.accompanist.permissions.PermissionState
|
|
||||||
import com.google.accompanist.permissions.isGranted
|
|
||||||
|
|
||||||
@OptIn(ExperimentalPermissionsApi::class)
|
|
||||||
@Composable
|
|
||||||
fun RequestPermissions(
|
|
||||||
cameraPermissionState: PermissionState,
|
|
||||||
locationPermissionState: PermissionState
|
|
||||||
) {
|
|
||||||
LaunchedEffect(cameraPermissionState.status.isGranted, locationPermissionState.status.isGranted) {
|
|
||||||
when {
|
|
||||||
!cameraPermissionState.status.isGranted -> {
|
|
||||||
cameraPermissionState.launchPermissionRequest()
|
|
||||||
}
|
|
||||||
!locationPermissionState.status.isGranted -> {
|
|
||||||
locationPermissionState.launchPermissionRequest()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user