Connection to qrcode api

This commit is contained in:
RIEFOLO MARIANO 2024-04-13 10:58:44 +02:00
parent adaf82d7af
commit 4914bc3666
7 changed files with 42 additions and 10 deletions

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" /> <mapping directory="" vcs="Git" />
</component> </component>
</project> </project>

View File

@ -1,6 +1,7 @@
package it.edu.cassandroferminervi.flowschool.remote package it.edu.cassandroferminervi.flowschool.remote
import it.edu.cassandroferminervi.flowschool.remote.dto.LoginResult import it.edu.cassandroferminervi.flowschool.remote.dto.LoginResult
import it.edu.cassandroferminervi.flowschool.remote.dto.PresenceResult
import it.edu.cassandroferminervi.flowschool.remote.dto.TeacherInfoResult import it.edu.cassandroferminervi.flowschool.remote.dto.TeacherInfoResult
import retrofit2.Response import retrofit2.Response
import retrofit2.http.Field import retrofit2.http.Field
@ -17,14 +18,17 @@ interface ApiService {
@FormUrlEncoded @FormUrlEncoded
@POST("presenza.php") @POST("presenza.php")
suspend fun postPresence(@Field("token") token: String): Response<Boolean> suspend fun postPresence(
@Field("token") token: String,
@Field("codice") qrcode: String
): Response<PresenceResult>
@FormUrlEncoded @FormUrlEncoded
@POST("lista.php") @POST("lista.php")
suspend fun postTeacherList(@Field("token") token: String): Response<List<TeacherInfoResult>> suspend fun postTeacherList(@Field("token") token: String): Response<List<TeacherInfoResult>>
@FormUrlEncoded @FormUrlEncoded
@POST("ricerca.php") @POST("ottieni_prof.php")
suspend fun postTeacherInfo( suspend fun postTeacherInfo(
@Field("token") token: String, @Field("token") token: String,
@Field("profId") teacherId: Int @Field("profId") teacherId: Int

View File

@ -0,0 +1,6 @@
package it.edu.cassandroferminervi.flowschool.remote.dto
import androidx.annotation.Keep
@Keep
data class PresenceResult(val success: Boolean)

View File

@ -14,10 +14,11 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import it.edu.cassandroferminervi.flowschool.util.QrAnalyzer import it.edu.cassandroferminervi.flowschool.util.QrAnalyzer
@Composable @Composable
fun CameraScreen() { fun CameraScreen(navigator: DestinationsNavigator, token: String) {
val localContext = LocalContext.current val localContext = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current val lifecycleOwner = LocalLifecycleOwner.current
val cameraProviderFuture = remember { val cameraProviderFuture = remember {
@ -37,7 +38,7 @@ fun CameraScreen() {
val imageAnalysis = ImageAnalysis.Builder().build() val imageAnalysis = ImageAnalysis.Builder().build()
imageAnalysis.setAnalyzer( imageAnalysis.setAnalyzer(
ContextCompat.getMainExecutor(context), ContextCompat.getMainExecutor(context),
QrAnalyzer(context) QrAnalyzer(context, navigator, token)
) )
runCatching { runCatching {

View File

@ -12,15 +12,16 @@ import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
import com.google.accompanist.permissions.shouldShowRationale import com.google.accompanist.permissions.shouldShowRationale
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
@OptIn(ExperimentalPermissionsApi::class) @OptIn(ExperimentalPermissionsApi::class)
@Destination @Destination
@Composable @Composable
fun PermissionScreen(token: String) { fun PermissionScreen(navigator: DestinationsNavigator, token: String) {
val cameraPermissionState = rememberPermissionState(android.Manifest.permission.CAMERA) val cameraPermissionState = rememberPermissionState(android.Manifest.permission.CAMERA)
if (cameraPermissionState.status.isGranted) { if (cameraPermissionState.status.isGranted) {
CameraScreen() CameraScreen(navigator, token)
} else { } else {
Box( Box(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,

View File

@ -2,6 +2,7 @@ package it.edu.cassandroferminervi.flowschool.util
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent
import android.widget.Toast import android.widget.Toast
import androidx.camera.core.ImageAnalysis import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageProxy import androidx.camera.core.ImageProxy
@ -9,8 +10,14 @@ import com.google.mlkit.vision.barcode.BarcodeScannerOptions
import com.google.mlkit.vision.barcode.BarcodeScanning 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
import com.ramcosta.composedestinations.HomeScreenDestination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import it.edu.cassandroferminervi.flowschool.remote.RetrofitInstance
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class QrAnalyzer(private val context: Context) : ImageAnalysis.Analyzer { class QrAnalyzer(private val context: Context, val navigator: DestinationsNavigator, val token: String) : ImageAnalysis.Analyzer {
private val options = BarcodeScannerOptions.Builder() private val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE) .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build() .build()
@ -29,7 +36,19 @@ class QrAnalyzer(private val context: Context) : ImageAnalysis.Analyzer {
barcode?.takeIf { it.isNotEmpty() } barcode?.takeIf { it.isNotEmpty() }
?.mapNotNull { it.rawValue } ?.mapNotNull { it.rawValue }
?.joinToString(",") ?.joinToString(",")
?.let { Toast.makeText(context, it, Toast.LENGTH_SHORT).show() } ?.let {
Toast.makeText(context, it, Toast.LENGTH_SHORT).show()
CoroutineScope(Dispatchers.Main).launch {
val response = RetrofitInstance.api.postPresence(token, it)
val resBody = response.body()
if (resBody != null && resBody.success) {
navigator.navigate(HomeScreenDestination(token))
} else {
Toast.makeText(context, "Errore", Toast.LENGTH_LONG).show()
}
}
}
}.addOnCompleteListener { }.addOnCompleteListener {
imageProxy.close() imageProxy.close()
} }