From 7f15da7e7e6b19526cdb88d4b114d4b02052e976 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Wed, 6 Dec 2023 00:50:53 +0900 Subject: [PATCH 01/11] =?UTF-8?q?#15=20[chore]=20color=EA=B0=92=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/colors.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c8524cd..388e06e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,4 +2,6 @@ #FF000000 #FFFFFFFF + #FFD3D3D3 + #FFA1CAF1 \ No newline at end of file From 2ed9bdf516ba7a0972b6edbb1153df4d1d88e148 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Wed, 6 Dec 2023 00:51:26 +0900 Subject: [PATCH 02/11] =?UTF-8?q?#15=20[add]=20id,=20password=20=ED=8C=A8?= =?UTF-8?q?=ED=84=B4=20=EB=B3=80=EC=88=98=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F?= =?UTF-8?q?=20=EC=A1=B0=EA=B1=B4=20=EB=A7=8C=EC=A1=B1=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/signUp/SignUpViewModel.kt | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt index d547533..4186cb6 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt @@ -20,6 +20,8 @@ class SignUpViewModel @Inject constructor( val password: MutableLiveData = MutableLiveData() val nickname: MutableLiveData = MutableLiveData() val mbti: MutableLiveData = MutableLiveData() + private val _isMeetCriteria: MutableLiveData = MutableLiveData(false) + val isMeetCriteria: LiveData = _isMeetCriteria private val _signUpState = MutableLiveData() val signUpState: LiveData = _signUpState @@ -40,33 +42,32 @@ class SignUpViewModel @Inject constructor( } } - fun isSignUpAvailable(): Boolean { - if (isSignUpFormsBlank()) return false - return isSignUpFormsMatch() + fun updateIsMeetCriteria() { + _isMeetCriteria.value = (isIdRegexMatch() && isPasswordRegexMatch()) } - private fun isSignUpFormsMatch() = - (isIdLengthSuitable() && isPassWordLengthSuitable() && isNickNameRegexMatch() && isMBTIRegexMatch() && isMbtiInEnum()) + fun isSignUpAvailable() = + (isIdRegexMatch() && isPasswordRegexMatch() && isSignUpFormsBlank() && isMbtiInEnum()) private fun isMbtiInEnum(): Boolean { return Mbti.values().any { it.name == mbti.value } } - private fun isSignUpFormsBlank() = - listOf(id.value, password.value, nickname.value, mbti.value).any { it.isNullOrBlank() } + private fun isSignUpFormsBlank() = !(listOf(id.value, password.value, nickname.value, mbti.value).any { it.isNullOrBlank() }) - private fun isIdLengthSuitable() = id.value?.length in 6..10 - private fun isPassWordLengthSuitable() = password.value?.length in 8..12 - private fun isNickNameRegexMatch(): Boolean { - return nickname.value?.let { SIGNUP_REGEX.matcher(it).find() } ?: false + private fun isIdRegexMatch(): Boolean { + return id.value?.let { ID_REGEX.matcher(it).find() } ?: false } - private fun isMBTIRegexMatch(): Boolean { - return mbti.value?.let { SIGNUP_REGEX.matcher(it).find() } ?: false + private fun isPasswordRegexMatch(): Boolean { + return password.value?.let { PASSWORD_REGEX.matcher(it).find() } ?: false } companion object { - private const val SIGNUP_PATTERN = """^\S+$""" - val SIGNUP_REGEX: Pattern = Pattern.compile(SIGNUP_PATTERN) + private const val ID_PATTERN = """^[a-zA-Z0-9]{6,10}${'$'}""" + private const val PASSWORD_PATTERN = + """^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#${'$'}%^&*(),.?":{}|<>]).{6,12}${'$'}""" + val ID_REGEX: Pattern = Pattern.compile(ID_PATTERN) + val PASSWORD_REGEX: Pattern = Pattern.compile(PASSWORD_PATTERN) } } \ No newline at end of file From 13c2c80801a9c18aa62eea00d4140c9cfc3444af Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Wed, 6 Dec 2023 00:52:03 +0900 Subject: [PATCH 03/11] =?UTF-8?q?#15=20[add]=20id,=20password=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=95=8C=EB=A7=88=EB=8B=A4=20=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EC=B6=A9=EC=A1=B1=ED=95=98=EB=8A=94=EC=A7=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20=ED=9B=84=20=EB=B3=80=EC=88=98=20=EA=B0=92=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dosopttemplate/presentation/signUp/SignUpActivity.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt index a10f6c3..53a338b 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt @@ -37,6 +37,12 @@ class SignUpActivity : BindingActivity(R.layout.activity_ if (success) signUp() else toast(SIGN_UP_FAILED) } + viewModel.id.observe(this) { _ -> + viewModel.updateIsMeetCriteria() + } + viewModel.password.observe(this) { _ -> + viewModel.updateIsMeetCriteria() + } } private fun signUp() { From 81a65e1127a4c724f9f1929f91793e86724a159e Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Wed, 6 Dec 2023 00:52:58 +0900 Subject: [PATCH 04/11] =?UTF-8?q?#15=20[add]isMeetCriteria=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EC=82=BC=ED=95=AD=20=EC=97=B0=EC=82=B0?= =?UTF-8?q?=EC=9E=90=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=B4=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20click=EA=B3=BC=20=EC=83=89=EC=83=81=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_sign_up.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml index 520dc5e..5080874 100644 --- a/app/src/main/res/layout/activity_sign_up.xml +++ b/app/src/main/res/layout/activity_sign_up.xml @@ -120,6 +120,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="30dp" + android:textColor="@color/white" + android:clickable="@{vm.isMeetCriteria == true ? true : false}" + android:backgroundTint="@{vm.isMeetCriteria == true ? @color/baby_blue : @color/gray}" android:text="@string/sign_up_btn" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" From de925eaec0ef794c3a42be70da823e2c79599e29 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Wed, 6 Dec 2023 00:54:16 +0900 Subject: [PATCH 05/11] =?UTF-8?q?#15=20[add]=20password=20error=20?= =?UTF-8?q?=EC=8B=9C=20=EB=9D=84=EC=9A=B8=20=EA=B2=BD=EA=B3=A0=20=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4c34e0..110cdd7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,6 +15,7 @@ 닉네임을 입력해주세요 MBTI를 입력해주세요 + 비밀번호는 영문,숫자,특수문자를 모두 포함한 6~12글자 이내입니다. Search 화면입니다 From 4561cb22557549578ded0d7c214d92d302330df8 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Wed, 6 Dec 2023 01:07:01 +0900 Subject: [PATCH 06/11] =?UTF-8?q?#15=20[add]=20password=20error=20?= =?UTF-8?q?=EC=8B=9C=20password=20editText=20=EB=B0=91=EC=A4=84=20?= =?UTF-8?q?=EC=83=89=EC=83=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dosopttemplate/presentation/signUp/SignUpActivity.kt | 1 + .../dosopttemplate/presentation/signUp/SignUpViewModel.kt | 8 ++++++-- app/src/main/res/layout/activity_sign_up.xml | 5 +++-- app/src/main/res/values/colors.xml | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt index 53a338b..20d7dc0 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt @@ -42,6 +42,7 @@ class SignUpActivity : BindingActivity(R.layout.activity_ } viewModel.password.observe(this) { _ -> viewModel.updateIsMeetCriteria() + viewModel.isPasswordRegexMatch() } } diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt index 4186cb6..d6bf8f6 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt @@ -20,6 +20,8 @@ class SignUpViewModel @Inject constructor( val password: MutableLiveData = MutableLiveData() val nickname: MutableLiveData = MutableLiveData() val mbti: MutableLiveData = MutableLiveData() + private val _isPasswordMeetCriteria: MutableLiveData = MutableLiveData(false) + val isPasswordMeetCriteria: LiveData = _isPasswordMeetCriteria private val _isMeetCriteria: MutableLiveData = MutableLiveData(false) val isMeetCriteria: LiveData = _isMeetCriteria private val _signUpState = MutableLiveData() @@ -59,8 +61,10 @@ class SignUpViewModel @Inject constructor( return id.value?.let { ID_REGEX.matcher(it).find() } ?: false } - private fun isPasswordRegexMatch(): Boolean { - return password.value?.let { PASSWORD_REGEX.matcher(it).find() } ?: false + fun isPasswordRegexMatch(): Boolean { + val pwRegexMatch = password.value?.let { PASSWORD_REGEX.matcher(it).find() } ?: false + _isPasswordMeetCriteria.value = pwRegexMatch + return pwRegexMatch } companion object { diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml index 5080874..ddceb73 100644 --- a/app/src/main/res/layout/activity_sign_up.xml +++ b/app/src/main/res/layout/activity_sign_up.xml @@ -64,6 +64,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:backgroundTint="@{vm.isPasswordMeetCriteria == true? @color/black : @color/red}" android:hint="@string/password_hint" android:inputType="textPassword" android:text="@={vm.password}" @@ -120,10 +121,10 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="30dp" - android:textColor="@color/white" - android:clickable="@{vm.isMeetCriteria == true ? true : false}" android:backgroundTint="@{vm.isMeetCriteria == true ? @color/baby_blue : @color/gray}" + android:clickable="@{vm.isMeetCriteria == true ? true : false}" android:text="@string/sign_up_btn" + android:textColor="@color/white" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 388e06e..4f3ec5a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,6 +2,7 @@ #FF000000 #FFFFFFFF + #FFD1180B #FFD3D3D3 #FFA1CAF1 \ No newline at end of file From 280a0d0dd76dc02dec9c50b8ccee8b3b0c18d9bb Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Fri, 8 Dec 2023 00:15:31 +0900 Subject: [PATCH 07/11] =?UTF-8?q?#15=20[fix]=20false=EB=A1=9C=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=EA=B0=92=20=EC=A3=BC=EB=8A=94=20=EA=B2=83=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20->=20init=20=EC=83=81=ED=83=9C=EB=A5=BC=20=EA=B0=90?= =?UTF-8?q?=EC=A7=80=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt index d6bf8f6..a23cae6 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt @@ -20,7 +20,7 @@ class SignUpViewModel @Inject constructor( val password: MutableLiveData = MutableLiveData() val nickname: MutableLiveData = MutableLiveData() val mbti: MutableLiveData = MutableLiveData() - private val _isPasswordMeetCriteria: MutableLiveData = MutableLiveData(false) + private val _isPasswordMeetCriteria: MutableLiveData = MutableLiveData() val isPasswordMeetCriteria: LiveData = _isPasswordMeetCriteria private val _isMeetCriteria: MutableLiveData = MutableLiveData(false) val isMeetCriteria: LiveData = _isMeetCriteria From 5662d55f18ad26407f15d9db38769b016f57d188 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Fri, 8 Dec 2023 00:16:29 +0900 Subject: [PATCH 08/11] =?UTF-8?q?#15=20[add]=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=EC=97=90=20=EB=A7=9E=EC=A7=80=20=EC=95=8A=EC=9D=84=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0,=20=EA=B2=BD=EA=B3=A0=EB=AC=B8=20=EB=9C=A8?= =?UTF-8?q?=EA=B2=8C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_sign_up.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml index ddceb73..f6f2b73 100644 --- a/app/src/main/res/layout/activity_sign_up.xml +++ b/app/src/main/res/layout/activity_sign_up.xml @@ -64,7 +64,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:backgroundTint="@{vm.isPasswordMeetCriteria == true? @color/black : @color/red}" + android:backgroundTint="@{vm.isPasswordMeetCriteria != null && vm.isPasswordMeetCriteria == false ? @color/red : @color/black}" android:hint="@string/password_hint" android:inputType="textPassword" android:text="@={vm.password}" @@ -72,6 +72,18 @@ app:layout_constraintStart_toStartOf="@id/tv_sign_up_id" app:layout_constraintTop_toBottomOf="@id/tv_sign_up_password" /> + + Date: Fri, 8 Dec 2023 00:17:56 +0900 Subject: [PATCH 09/11] =?UTF-8?q?#15=20[fix]=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt index 20d7dc0..bc6f0ce 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt @@ -19,6 +19,7 @@ class SignUpActivity : BindingActivity(R.layout.activity_ initOnClickListener() initSignUpStateObserver() + initSignUpFormsObserver() } private fun initOnClickListener() { @@ -37,6 +38,9 @@ class SignUpActivity : BindingActivity(R.layout.activity_ if (success) signUp() else toast(SIGN_UP_FAILED) } + } + + private fun initSignUpFormsObserver() { viewModel.id.observe(this) { _ -> viewModel.updateIsMeetCriteria() } From 84b786f5bd604200139b788e84d99346767a1de6 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Fri, 8 Dec 2023 00:24:25 +0900 Subject: [PATCH 10/11] =?UTF-8?q?#15=20[fix]=20livedata=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=ED=95=A8=EC=88=98=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/signUp/SignUpViewModel.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt index a23cae6..94dc918 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpViewModel.kt @@ -44,8 +44,12 @@ class SignUpViewModel @Inject constructor( } } + fun updatePasswordMeetCriteria() { + _isPasswordMeetCriteria.value = isPasswordRegexMatch() + } + fun updateIsMeetCriteria() { - _isMeetCriteria.value = (isIdRegexMatch() && isPasswordRegexMatch()) + _isMeetCriteria.value = isSignUpAvailable() } fun isSignUpAvailable() = @@ -61,10 +65,8 @@ class SignUpViewModel @Inject constructor( return id.value?.let { ID_REGEX.matcher(it).find() } ?: false } - fun isPasswordRegexMatch(): Boolean { - val pwRegexMatch = password.value?.let { PASSWORD_REGEX.matcher(it).find() } ?: false - _isPasswordMeetCriteria.value = pwRegexMatch - return pwRegexMatch + private fun isPasswordRegexMatch(): Boolean { + return password.value?.let { PASSWORD_REGEX.matcher(it).find() } ?: false } companion object { From d15345de66cee159249d5d21e97d74d41cdfc4b0 Mon Sep 17 00:00:00 2001 From: Hailey <91793891+stellar-halo@users.noreply.github.com> Date: Fri, 8 Dec 2023 00:24:47 +0900 Subject: [PATCH 11/11] =?UTF-8?q?#15=20[fix]=20viewModel=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EB=B6=84=EB=A6=AC=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt index bc6f0ce..8a16a37 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/presentation/signUp/SignUpActivity.kt @@ -46,7 +46,7 @@ class SignUpActivity : BindingActivity(R.layout.activity_ } viewModel.password.observe(this) { _ -> viewModel.updateIsMeetCriteria() - viewModel.isPasswordRegexMatch() + viewModel.updatePasswordMeetCriteria() } }