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 995baca..5c279d3 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,11 @@ class LoginViewModel @Inject constructor(private val useCase: LoginUseCase, @App } if (result.successful) { Dispatchers.Main { - navController.navigate(Destinations.Profile) + navController.navigate(Destinations.Profile) { + popUpTo() { + inclusive = true + } + } } } } 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 de8db8b..7cdd9f2 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 @@ -72,7 +72,7 @@ fun ProfileScreen( LaunchedEffect(state.isUnauthorized) { if (state.isUnauthorized) { - viewModel.logout(navController) + navController.navigate(Destinations.Login) } } 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 c3ec02b..6bd2f91 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,11 +1,18 @@ package com.nto.presentation.screens.scanResult +import androidx.compose.foundation.BorderStroke 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.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -13,10 +20,20 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.DefaultShadowColor import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController +import com.nto.data.utils.Destinations import com.nto.presentation.R +import com.nto.presentation.theme.NTOTheme +import com.nto.presentation.theme.playfair +import com.nto.presentation.theme.raleway @Composable fun ScanResultScreen( @@ -25,7 +42,37 @@ fun ScanResultScreen( viewModel: ScanResultViewModel = hiltViewModel() ) { val state by viewModel.state.collectAsState() - Scaffold { paddingValues -> + Scaffold(bottomBar = { + val buttonColor = when (state) { + ScanResultState.Success -> NTOTheme.colors.button + ScanResultState.Error -> NTOTheme.colors.buttonAdmin + ScanResultState.Warning -> NTOTheme.colors.warning + } + OutlinedButton( + onClick = { + navController.navigate(Destinations.Profile) { + popUpTo { + inclusive = true + } + } + }, + shape = RoundedCornerShape(10.dp), + colors = ButtonDefaults.outlinedButtonColors( + contentColor = buttonColor, + containerColor = Color.Transparent + ), + border = BorderStroke(width = 2.dp, color = buttonColor), + modifier = Modifier.padding(horizontal = 24.dp, vertical = 32.dp) + .fillMaxWidth() + .height(62.dp) + ) { + Text( + text = stringResource(R.string.close), + fontSize = 14.sp, + fontWeight = FontWeight.SemiBold + ) + } + }) { paddingValues -> Column( Modifier .padding(paddingValues) @@ -42,7 +89,27 @@ fun ScanResultScreen( } ), contentDescription = "" ) - Text(text = "Код отсканирован") + Text( + text = stringResource(R.string.code_scanned), + fontFamily = playfair, + fontSize = 36.sp, + color = NTOTheme.colors.primaryText + ) + Spacer(Modifier.height(8.dp)) + Text( + text = stringResource( + when (state) { + ScanResultState.Success -> R.string.code_scanned_success + ScanResultState.Error -> R.string.code_scanned_error + ScanResultState.Warning -> R.string.code_scanned_warning + } + ), + fontSize = 20.sp, + fontWeight = FontWeight.Medium, + color = NTOTheme.colors.primaryText, + fontFamily = raleway + ) + Spacer(Modifier.height(60.dp)) } } } \ 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 index 7bbb381..60eada5 100644 --- a/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultViewModel.kt +++ b/presentation/src/main/java/com/nto/presentation/screens/scanResult/ScanResultViewModel.kt @@ -8,6 +8,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import javax.inject.Inject +import kotlin.random.Random @HiltViewModel class ScanResultViewModel @Inject constructor( @@ -19,6 +20,12 @@ class ScanResultViewModel @Inject constructor( init { // TODO: create method to scan qr on server + _state.value = when (Random.nextInt(0, 3)) { + 0 -> ScanResultState.Success + 1 -> ScanResultState.Error + 2 -> ScanResultState.Warning + else -> ScanResultState.Warning + } } diff --git a/presentation/src/main/java/com/nto/presentation/theme/Color.kt b/presentation/src/main/java/com/nto/presentation/theme/Color.kt index 5e2e364..42b52aa 100644 --- a/presentation/src/main/java/com/nto/presentation/theme/Color.kt +++ b/presentation/src/main/java/com/nto/presentation/theme/Color.kt @@ -11,6 +11,7 @@ val Background = Color(0xFFFEFBFF) val Green = Color(0xFF738D73) val GreenDisabled = Color(0xFFCAD5CA) val Error = Color(0xFFD28989) +val Warning = Color(0xFFCFC37F) @Immutable data class AppColors( @@ -24,6 +25,7 @@ data class AppColors( val buttonDisabled: Color, val buttonAdmin: Color, val tint: Color, + val warning: Color, ) @@ -39,7 +41,8 @@ val LocalAppColors = staticCompositionLocalOf { button = Color.Unspecified, buttonDisabled = Color.Unspecified, buttonAdmin = Color.Unspecified, - tint = Color.Unspecified + tint = Color.Unspecified, + warning = Color.Unspecified ) } @@ -53,5 +56,6 @@ val extendedColor = AppColors( button = Green, buttonDisabled = GreenDisabled, buttonAdmin = Error, - tint = Color.Black + tint = Color.Black, + warning = Warning ) \ No newline at end of file diff --git a/presentation/src/main/res/values-en/strings.xml b/presentation/src/main/res/values-en/strings.xml index 8b5690f..ab71b0f 100644 --- a/presentation/src/main/res/values-en/strings.xml +++ b/presentation/src/main/res/values-en/strings.xml @@ -1,4 +1,25 @@ - presentation + SKUF Company + Sign in + Login + Password + Sign to your account to continue + Sign in + Profile + Enter by code + Enter by card + Last visit: + Visits + Scan QR + Tester + Developer + Designer + Analytics + Administrator + Code scanned + Success + Enter was cancelled + Something went wrong + Close \ No newline at end of file diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index f31c39a..ac23097 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - presentation + СКУД Войти Логин Пароль @@ -18,4 +18,9 @@ Дизайнер Аналитик Администратор + Код отсканирован + Успешно + Вход был отменён + Что-то пошло не так + Закрыть \ No newline at end of file