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 e13ba6b..3e1d48a 100644 --- a/data/src/main/java/com/nto/data/utils/Constants.kt +++ b/data/src/main/java/com/nto/data/utils/Constants.kt @@ -10,7 +10,9 @@ sealed class Destinations { object Profile @Serializable - object Scan + data class Scan( + val value: String + ) @Serializable object Admin 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 9c133b6..58fbed4 100644 --- a/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt +++ b/presentation/src/main/java/com/nto/presentation/composable/Navigation.kt @@ -8,6 +8,7 @@ import androidx.navigation.compose.composable import com.nto.data.utils.Destinations import com.nto.presentation.screens.loginScreen.LoginScreen import com.nto.presentation.screens.profileScreen.ProfileScreen +import com.nto.presentation.screens.scanResult.ScanResultScreen @Composable fun Navigation(navController: NavHostController, modifier: Modifier = Modifier) { @@ -23,7 +24,7 @@ fun Navigation(navController: NavHostController, modifier: Modifier = Modifier) ProfileScreen(navController) } composable { - //TODO + ScanResultScreen(navController) } composable { //TODO 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 8342c44..5e8582e 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 @@ -59,7 +59,7 @@ fun ProfileScreen( val scannerLauncher = rememberLauncherForActivityResult( contract = ScanContract(), - onResult = { result -> Log.i(TAG, "scanned code: ${result.contents}") } + onResult = { result -> navController.navigate(Destinations.Scan(result.contents)) } ) val scanOptions = ScanOptions() scanOptions.setPrompt("") @@ -240,7 +240,6 @@ fun ProfileScreen( .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 ea6c10a..5bb86f7 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 @@ -42,10 +42,6 @@ class ProfileViewModel @Inject constructor( //TODO } - fun scan(navController: NavController) { - navController.navigate(Destinations.Scan) - } - fun option(navController: NavController) { navController.navigate(Destinations.Options) } 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 index ebc1bd4..c3ec02b 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultScreen.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultScreen.kt @@ -1,2 +1,48 @@ package com.nto.presentation.screens.scanResult +import androidx.compose.foundation.Image +import androidx.compose.foundation.gestures.snapping.SnapPosition +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.nto.presentation.R + +@Composable +fun ScanResultScreen( + navController: NavController, + modifier: Modifier = Modifier, + viewModel: ScanResultViewModel = hiltViewModel() +) { + val state by viewModel.state.collectAsState() + Scaffold { paddingValues -> + Column( + Modifier + .padding(paddingValues) + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Image( + painter = painterResource( + id = when (state) { + ScanResultState.Success -> R.drawable.ic_scan_success + ScanResultState.Error -> R.drawable.ic_scan_error + ScanResultState.Warning -> R.drawable.ic_scan_warning + } + ), contentDescription = "" + ) + Text(text = "Код отсканирован") + } + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultState.kt b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultState.kt new file mode 100644 index 0000000..299a910 --- /dev/null +++ b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultState.kt @@ -0,0 +1,5 @@ +package com.nto.presentation.screens.scanResult + +enum class ScanResultState { + Success, Error, Warning +} \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultViewModel.kt b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultViewModel.kt new file mode 100644 index 0000000..7bbb381 --- /dev/null +++ b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultViewModel.kt @@ -0,0 +1,25 @@ +package com.nto.presentation.screens.scanResult + +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.navigation.toRoute +import com.nto.data.utils.Destinations +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import javax.inject.Inject + +@HiltViewModel +class ScanResultViewModel @Inject constructor( + savedStateHandle: SavedStateHandle +): ViewModel() { + val value = savedStateHandle.toRoute().value + private val _state = MutableStateFlow(ScanResultState.Success) + val state get() = _state.asStateFlow() + + init { + // TODO: create method to scan qr on server + } + + +} \ No newline at end of file diff --git a/presentation/src/main/java/com/nto/presentation/theme/Type.kt b/presentation/src/main/java/com/nto/presentation/theme/Type.kt index 6d7210d..3831d5f 100644 --- a/presentation/src/main/java/com/nto/presentation/theme/Type.kt +++ b/presentation/src/main/java/com/nto/presentation/theme/Type.kt @@ -3,13 +3,34 @@ package com.nto.presentation.theme import android.annotation.SuppressLint import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.text.ExperimentalTextApi import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontVariation import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp import com.nto.presentation.R +@OptIn(ExperimentalTextApi::class) +val raleway = FontFamily( + Font(R.font.raleway, FontWeight.SemiBold, variationSettings = FontVariation.Settings( + FontVariation.weight(FontWeight.SemiBold.weight) + )), + Font(R.font.raleway, FontWeight.Medium, variationSettings = FontVariation.Settings( + FontVariation.weight(FontWeight.Medium.weight) + )), + Font(R.font.raleway, FontWeight.Normal, variationSettings = FontVariation.Settings( + FontVariation.weight(FontWeight.Normal.weight) + )) +) +@OptIn(ExperimentalTextApi::class) +val playfair = FontFamily( + Font(R.font.playfair, FontWeight.Bold, variationSettings = FontVariation.Settings( + FontVariation.weight(FontWeight.Bold.weight) + )) +) + private val RalewayFontFamily = FontFamily( Font(R.font.raleway) ) diff --git a/presentation/src/main/res/drawable/ic_scan_error.xml b/presentation/src/main/res/drawable/ic_scan_error.xml new file mode 100644 index 0000000..f978084 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_scan_error.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_scan_success.xml b/presentation/src/main/res/drawable/ic_scan_success.xml new file mode 100644 index 0000000..75944a4 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_scan_success.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_scan_warning.xml b/presentation/src/main/res/drawable/ic_scan_warning.xml new file mode 100644 index 0000000..feaf2ce --- /dev/null +++ b/presentation/src/main/res/drawable/ic_scan_warning.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/font/playfair.ttf b/presentation/src/main/res/font/playfair.ttf index 503b7c4..eafb6ff 100644 Binary files a/presentation/src/main/res/font/playfair.ttf and b/presentation/src/main/res/font/playfair.ttf differ diff --git a/presentation/src/main/res/font/raleway.ttf b/presentation/src/main/res/font/raleway.ttf index 774b382..33969e8 100644 Binary files a/presentation/src/main/res/font/raleway.ttf and b/presentation/src/main/res/font/raleway.ttf differ