diff --git a/app/src/main/java/ru/myitschool/work/domain/auth/CheckAndSaveAuthDataUseCase.kt b/app/src/main/java/ru/myitschool/work/domain/auth/CheckAndSaveAuthDataUseCase.kt index c4a11d7..ae55372 100644 --- a/app/src/main/java/ru/myitschool/work/domain/auth/CheckAndSaveAuthDataUseCase.kt +++ b/app/src/main/java/ru/myitschool/work/domain/auth/CheckAndSaveAuthDataUseCase.kt @@ -10,7 +10,10 @@ class CheckAndSaveAuthDataUseCase( textPassword: String ): Result { return repository.checkAndSave(textLogin, textPassword).mapCatching { success -> - if (!success) error("Login or password is incorrect") + if (!success) { + error("Login or password is incorrect") + + } } } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt index b202168..82d533d 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt @@ -118,7 +118,11 @@ private fun Content( if (state.error != null) { Text( modifier = Modifier.testTag(TestIds.Auth.ERROR), - text = state.error, + text = if (viewModel.incorrectAttemptNum > 5) { + "Превышен лимит попыток входа" + } else { + state.error + }, style = MaterialTheme.typography.bodyMedium, color = Color.Red, ) diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt index 4886d3b..b751292 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt @@ -27,6 +27,8 @@ class AuthViewModel : ViewModel() { error = null ) ) + + var incorrectAttemptNum = 0 val uiState: StateFlow = _uiState.asStateFlow() private val _actionFlow: MutableSharedFlow = MutableSharedFlow() @@ -46,6 +48,9 @@ class AuthViewModel : ViewModel() { error = error.message ) } + if (error.message == "Login or password is incorrect") { + incorrectAttemptNum += 1; + } } ) } @@ -56,7 +61,7 @@ class AuthViewModel : ViewModel() { oldState.copy( isEnabledSend = (checkLoginFormatUseCase.invoke(intent.textLogin) && checkPasswordFormatUseCase.invoke( intent.textLogin, intent.textPassword - )), + ) && incorrectAttemptNum <= 5), error = null ) } diff --git a/khBGPU.apk b/khBGPU.apk new file mode 100644 index 0000000..0a433b8 Binary files /dev/null and b/khBGPU.apk differ