REPAIR and Redesign and cool val login and pasw
This commit is contained in:
parent
277db36d79
commit
44fbaf461c
@ -56,18 +56,17 @@ class AuthFragment: Fragment(R.layout.fragment_auth) {
|
|||||||
@SuppressLint("ResourceAsColor")
|
@SuppressLint("ResourceAsColor")
|
||||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||||
binding.error.visibility = View.GONE
|
binding.error.visibility = View.GONE
|
||||||
val username = s.toString()
|
// val username = s.toString()
|
||||||
val valid = isUsernameValid(username)
|
// val valid = isUsernameValid(username)
|
||||||
|
//
|
||||||
if (valid) {
|
// if (valid) {
|
||||||
binding.hint.visibility = View.INVISIBLE
|
// binding.hint.visibility = View.INVISIBLE
|
||||||
}else{
|
// }else{
|
||||||
binding.login.error = getString(R.string.login_hint)
|
// binding.login.error = getString(R.string.login_hint)
|
||||||
}
|
// }
|
||||||
// binding.hint.visibility = if(valid) View.INVISIBLE else View.VISIBLE
|
// binding.hint.visibility = if(valid) View.INVISIBLE else View.VISIBLE
|
||||||
binding.next.isEnabled = valid
|
// binding.next.isEnabled = valid
|
||||||
val color = if (valid) R.color.primary else R.color.secondary
|
|
||||||
binding.next.backgroundTintList = ContextCompat.getColorStateList(requireContext(), color)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun afterTextChanged(s: Editable?) {}
|
override fun afterTextChanged(s: Editable?) {}
|
||||||
@ -94,37 +93,95 @@ class AuthFragment: Fragment(R.layout.fragment_auth) {
|
|||||||
// })
|
// })
|
||||||
}
|
}
|
||||||
private fun getPasswordValidError(password: String): String {
|
private fun getPasswordValidError(password: String): String {
|
||||||
if (password.length < 8){ return "LenError" }
|
if (password.length < 8) {
|
||||||
val letterRegex = Regex("^(?=.*[A-Z]).+$")
|
return "LenError"
|
||||||
if(!letterRegex.matches(password)){ return "UpperCaseError"}
|
}
|
||||||
val digitRegex = Regex("^(?=.*\\\\d).+$")
|
|
||||||
if(!digitRegex.matches(password)){ return "DigitCaseError"}
|
|
||||||
|
|
||||||
return "NoErrors"
|
return "NoErrors"
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isUsernameValid(username: String): Boolean {
|
private fun validatePasswordAndSetError(password: String) {
|
||||||
|
val errorType = getPasswordValidError(password)
|
||||||
|
|
||||||
|
when (errorType) {
|
||||||
|
"LenError" -> {
|
||||||
|
binding.password.error = getString(R.string.error_password_too_short)
|
||||||
|
}
|
||||||
|
|
||||||
|
"NoErrors" -> {
|
||||||
|
binding.password.error = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private fun getLoginValidError(username: String): String {
|
||||||
val alf = "^[a-zA-Z0-9_]+$".toRegex()
|
val alf = "^[a-zA-Z0-9_]+$".toRegex()
|
||||||
return username.isNotEmpty() &&
|
if (username.isEmpty()) {
|
||||||
username.length >= 3 &&
|
return "EmptyError"
|
||||||
!username[0].isDigit() &&
|
|
||||||
alf.matches(username)
|
|
||||||
}
|
}
|
||||||
private fun isPasswordValid(password: String): Boolean {
|
if (username.length < 3) {
|
||||||
return password.isNotEmpty() &&
|
return "LenError"
|
||||||
password.length >= 8
|
|
||||||
}
|
}
|
||||||
|
if (username[0].isDigit()) {
|
||||||
|
return "StartsWithDigitError"
|
||||||
|
}
|
||||||
|
if (!alf.matches(username)) {
|
||||||
|
return "InvalidCharactersError"
|
||||||
|
}
|
||||||
|
return "NoErrors"
|
||||||
|
}
|
||||||
|
// private fun isPasswordValid(password: String): Boolean {
|
||||||
|
// return password.isNotEmpty() &&
|
||||||
|
// password.length >= 8
|
||||||
|
// }
|
||||||
|
|
||||||
// private fun subscribe() {
|
// private fun subscribe() {
|
||||||
// viewModel.state.collectWhenStarted(this) { state ->
|
// viewModel.state.collectWhenStarted(this) { state ->
|
||||||
// binding.login.setOnClickListener(this::onLoginButtonClicked)
|
// binding.login.setOnClickListener(this::onLoginButtonClicked)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
private fun validateLoginAndSetError(username: String) {
|
||||||
|
val errorType = getLoginValidError(username)
|
||||||
|
|
||||||
|
when (errorType) {
|
||||||
|
"EmptyError" -> {
|
||||||
|
binding.login.error = getString(R.string.error_login_empty)
|
||||||
|
}
|
||||||
|
"LenError" -> {
|
||||||
|
binding.login.error = getString(R.string.error_login_too_short)
|
||||||
|
}
|
||||||
|
"StartsWithDigitError" -> {
|
||||||
|
binding.login.error = getString(R.string.error_login_starts_with_digit)
|
||||||
|
}
|
||||||
|
"InvalidCharactersError" -> {
|
||||||
|
binding.login.error = getString(R.string.error_login_invalid_characters)
|
||||||
|
}
|
||||||
|
"NoErrors" -> {
|
||||||
|
binding.login.error = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
private fun onLoginButtonClicked(view: View) {
|
private fun onLoginButtonClicked(view: View) {
|
||||||
val login = binding.login.text.toString()
|
val login = binding.login.text.toString()
|
||||||
val password = binding.password.text.toString()
|
val password = binding.password.text.toString()
|
||||||
if (login.isEmpty()) return
|
if (getPasswordValidError(password) != "NoErrors") {
|
||||||
|
|
||||||
|
|
||||||
|
val color = R.color.secondary
|
||||||
|
binding.next.backgroundTintList = ContextCompat.getColorStateList(requireContext(), color)
|
||||||
|
validatePasswordAndSetError(password)
|
||||||
|
}else{
|
||||||
|
val color = R.color.primary
|
||||||
|
binding.next.backgroundTintList = ContextCompat.getColorStateList(requireContext(), color)
|
||||||
|
}
|
||||||
|
// if (login.isEmpty()) return
|
||||||
|
if (getLoginValidError(login) != "NoErrors") {
|
||||||
|
val color = R.color.secondary
|
||||||
|
binding.next.backgroundTintList = ContextCompat.getColorStateList(requireContext(), color)
|
||||||
|
validateLoginAndSetError(login)
|
||||||
|
}else{
|
||||||
|
val color = R.color.primary
|
||||||
|
binding.next.backgroundTintList = ContextCompat.getColorStateList(requireContext(), color)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
viewModel.login(login, password)
|
viewModel.login(login, password)
|
||||||
}
|
}
|
||||||
|
@ -36,19 +36,29 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:paddingTop="50dp">
|
android:paddingTop="50dp">
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:cardCornerRadius="80dp"
|
||||||
|
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:elevation="10dp">
|
||||||
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_margin="10dp"
|
android:layout_margin="10dp"
|
||||||
android:id="@+id/avatar"
|
android:id="@+id/avatar"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="150dp"
|
||||||
android:layout_height="150dp"
|
android:layout_height="150dp"
|
||||||
android:foregroundGravity="center"
|
android:foregroundGravity="center"
|
||||||
android:importantForAccessibility="no"
|
android:importantForAccessibility="no"
|
||||||
android:src="@drawable/_user_"
|
android:src="@drawable/_user_"
|
||||||
|
|
||||||
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/title"
|
app:layout_constraintBottom_toTopOf="@+id/title"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<androidx.constraintlayout.helper.widget.Flow
|
<androidx.constraintlayout.helper.widget.Flow
|
||||||
android:id="@+id/flow"
|
android:id="@+id/flow"
|
||||||
|
@ -26,4 +26,11 @@
|
|||||||
<string name="profile">Profile</string>
|
<string name="profile">Profile</string>
|
||||||
<string name="serverIsUnabailable">Server is unavailable</string>
|
<string name="serverIsUnabailable">Server is unavailable</string>
|
||||||
<string name="AdminFragment">Checking the session employee</string>
|
<string name="AdminFragment">Checking the session employee</string>
|
||||||
|
<string name="error_password_too_short">The password must contain at least 8 characters</string>
|
||||||
|
<string name="error_password_no_uppercase">The password must contain at least one uppercase letter</string>
|
||||||
|
<string name="error_password_no_digit">The password must contain at least one digit</string>
|
||||||
|
<string name="error_login_empty">The username cannot be empty</string>
|
||||||
|
<string name="error_login_too_short">Login must contain at least 3 characters</string>
|
||||||
|
<string name="error_login_starts_with_digit">Login cannot start with a digit</string>
|
||||||
|
<string name="error_login_invalid_characters">Login can contain only letters, numbers, and underscores</string>
|
||||||
</resources>
|
</resources>
|
@ -20,8 +20,14 @@
|
|||||||
<string name="title_profile">Профиль</string>
|
<string name="title_profile">Профиль</string>
|
||||||
<string name="change_rights">Изменить права входа с помощью смартфона</string>
|
<string name="change_rights">Изменить права входа с помощью смартфона</string>
|
||||||
<string name="admin">Панель администратора</string>
|
<string name="admin">Панель администратора</string>
|
||||||
<string name="authFragment">Log in to your account</string>
|
<string name="profile">Профиль</string>
|
||||||
<string name="qrScanFragment">QR code scanning</string>
|
<string name="authFragment">Войдите в свою учетную запись</string>
|
||||||
<string name="qrResultFragment">Scan result</string>
|
<string name="qrScanFragment">Сканирование QR-кода</string>
|
||||||
<string name="AdminFragment">Checking the session employee</string>
|
<string name="qrResultFragment">Результат проверки</string>
|
||||||
|
<string name="AdminFragment">Проверка сотрудника</string>
|
||||||
|
<string name="noInternet">Нет связи с интернетом</string>
|
||||||
|
<string name="serverIsUnabailable">Сервер недоступен</string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -25,7 +25,12 @@
|
|||||||
<string name="qrScanFragment">QR code scanning</string>
|
<string name="qrScanFragment">QR code scanning</string>
|
||||||
<string name="qrResultFragment">Scan result</string>
|
<string name="qrResultFragment">Scan result</string>
|
||||||
<string name="profile">Profile</string>
|
<string name="profile">Profile</string>
|
||||||
|
<string name="error_password_too_short">The password must contain at least 8 characters</string>
|
||||||
|
<string name="error_password_no_uppercase">The password must contain at least one uppercase letter</string>
|
||||||
|
<string name="error_password_no_digit">The password must contain at least one digit</string>
|
||||||
<string name="AdminFragment">Checking the session employee</string>
|
<string name="AdminFragment">Checking the session employee</string>
|
||||||
|
<string name="error_login_empty">The username cannot be empty</string>
|
||||||
|
<string name="error_login_too_short">Login must contain at least 3 characters</string>
|
||||||
|
<string name="error_login_starts_with_digit">Login cannot start with a digit</string>
|
||||||
|
<string name="error_login_invalid_characters">Login can contain only letters, numbers, and underscores</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user