diff --git a/build.gradle.kts b/build.gradle.kts index f5909e1..2cf16c4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,4 +5,5 @@ plugins { alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.hilt) apply false + id("org.jetbrains.kotlin.plugin.serialization") version "1.7.10" apply false } \ No newline at end of file diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 93b6d2b..1c36f88 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -3,6 +3,7 @@ plugins { alias(libs.plugins.kotlin.android) id("kotlin-kapt") id("com.google.dagger.hilt.android") + id("org.jetbrains.kotlin.plugin.serialization") } android { @@ -47,4 +48,5 @@ dependencies { implementation(libs.retrofit) implementation(libs.converter.gson) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2") } \ No newline at end of file diff --git a/data/src/main/java/com/nto/data/utils/Constants.kt b/data/src/main/java/com/nto/data/utils/Constants.kt index be7d551..e13ba6b 100644 --- a/data/src/main/java/com/nto/data/utils/Constants.kt +++ b/data/src/main/java/com/nto/data/utils/Constants.kt @@ -1,9 +1,20 @@ package com.nto.data.utils -sealed class Destinations{ +import kotlinx.serialization.Serializable + +sealed class Destinations { + @Serializable object Login + + @Serializable object Profile + + @Serializable object Scan + + @Serializable object Admin + + @Serializable object Options } \ No newline at end of file diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts index 40c7d65..b2c55ab 100644 --- a/presentation/build.gradle.kts +++ b/presentation/build.gradle.kts @@ -4,6 +4,7 @@ plugins { alias(libs.plugins.kotlin.compose) id("kotlin-kapt") id("com.google.dagger.hilt.android") + id("org.jetbrains.kotlin.plugin.serialization") } android { @@ -69,8 +70,9 @@ dependencies { kapt(libs.hilt.compiler) implementation(libs.hilt) implementation (libs.hilt.navigation) - implementation(libs.navigation) - + implementation("com.journeyapps:zxing-android-embedded:4.3.0") + implementation("androidx.navigation:navigation-compose:2.8.3") lintChecks(libs.lint.checks) lintChecks(libs.lint.checks.compose) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2") } \ No newline at end of file diff --git a/presentation/src/main/AndroidManifest.xml b/presentation/src/main/AndroidManifest.xml index df16903..6531e46 100644 --- a/presentation/src/main/AndroidManifest.xml +++ b/presentation/src/main/AndroidManifest.xml @@ -2,12 +2,12 @@ + \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/CustomCaptureActivity.kt b/presentation/src/main/java/com/nto/presentation/CustomCaptureActivity.kt new file mode 100644 index 0000000..3cb8e75 --- /dev/null +++ b/presentation/src/main/java/com/nto/presentation/CustomCaptureActivity.kt @@ -0,0 +1,5 @@ +package com.nto.presentation + +import com.journeyapps.barcodescanner.CaptureActivity + +class CustomCaptureActivity : CaptureActivity() \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/composable/Destinations.kt b/presentation/src/main/java/com/nto/presentation/composable/Destinations.kt new file mode 100644 index 0000000..2f312cf --- /dev/null +++ b/presentation/src/main/java/com/nto/presentation/composable/Destinations.kt @@ -0,0 +1 @@ +package com.nto.presentation.composable diff --git a/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt b/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt index ef9c063..9c133b6 100644 --- a/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt +++ b/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt @@ -14,21 +14,21 @@ fun Navigation(navController: NavHostController, modifier: Modifier = Modifier) NavHost( navController = navController, modifier = modifier, - startDestination = Destinations.Login.toString() + startDestination = Destinations.Profile ) { - composable(Destinations.Login.toString()) { + composable { LoginScreen(navController) } - composable(Destinations.Profile.toString()){ + composable { ProfileScreen(navController) } - composable(Destinations.Scan.toString()){ + composable { //TODO } - composable(Destinations.Admin.toString()){ + composable { //TODO } - composable(Destinations.Options.toString()){ + composable { //TODO } } diff --git a/presentation/src/main/java/com/nto/presentation/screens/loginScreen/LoginViewModel.kt b/presentation/src/main/java/com/nto/presentation/screens/loginScreen/LoginViewModel.kt index 86c2d36..995baca 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/loginScreen/LoginViewModel.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/loginScreen/LoginViewModel.kt @@ -51,7 +51,7 @@ class LoginViewModel @Inject constructor(private val useCase: LoginUseCase, @App } if (result.successful) { Dispatchers.Main { - navController.navigate(Destinations.Profile.toString()) + navController.navigate(Destinations.Profile) } } } diff --git a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt index 170576d..f4ccfac 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileScreen.kt @@ -1,5 +1,8 @@ package com.nto.presentation.screens.profileScreen +import android.content.ContentValues.TAG +import android.util.Log +import androidx.activity.compose.rememberLauncherForActivityResult import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -35,6 +38,9 @@ import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController +import com.journeyapps.barcodescanner.ScanContract +import com.journeyapps.barcodescanner.ScanOptions +import com.nto.presentation.CustomCaptureActivity import com.nto.presentation.R import com.nto.presentation.composable.DecoratedButton import com.nto.presentation.composable.cards.VisitCard @@ -48,7 +54,16 @@ fun ProfileScreen( viewModel: ProfileViewModel = hiltViewModel(), ) { val state = viewModel.state.collectAsState().value - + val scannerLauncher = rememberLauncherForActivityResult( + contract = ScanContract(), + onResult = { result -> Log.i(TAG, "scanned code: ${result.contents}") } + ) + val scanOptions = ScanOptions() + scanOptions.setPrompt("") + scanOptions.setBeepEnabled(false) + scanOptions.setDesiredBarcodeFormats(ScanOptions.QR_CODE) + scanOptions.setOrientationLocked(false) + scanOptions.setCaptureActivity(CustomCaptureActivity::class.java) Column( modifier = modifier.background(NTOTheme.colors.primaryBackground) ) { @@ -210,10 +225,11 @@ fun ProfileScreen( stringResource(R.string.lablel_scan), false, modifier = Modifier - .padding(10.dp) + .padding(bottom = 10.dp) .fillMaxWidth() - .height(50.dp) + .height(62.dp) ) { + scannerLauncher.launch(scanOptions) viewModel.scan(navController) } } diff --git a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt index 384b7d2..e783a79 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/profileScreen/ProfileViewModel.kt @@ -35,11 +35,11 @@ class ProfileViewModel @Inject constructor(private val useCase: ProfileUseCase) } fun scan(navController: NavController) { - navController.navigate(Destinations.Scan.toString()) + navController.navigate(Destinations.Scan) } fun option(navController: NavController) { - navController.navigate(Destinations.Options.toString()) + navController.navigate(Destinations.Options) } init { diff --git a/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultScreen.kt b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultScreen.kt new file mode 100644 index 0000000..ebc1bd4 --- /dev/null +++ b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultScreen.kt @@ -0,0 +1,2 @@ +package com.nto.presentation.screens.scanResult +