Skip to content

Commit

Permalink
[Feature/#9] 양방향 dataBinding을 이용한 정규식 검사
Browse files Browse the repository at this point in the history
  • Loading branch information
gaeun5744 committed Jun 29, 2023
1 parent 97800ca commit 4c61e0f
Show file tree
Hide file tree
Showing 3 changed files with 220 additions and 181 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
package org.android.go.sopt.present.loginPage

import android.content.Intent
import android.content.res.ColorStateList
import android.os.Bundle
import android.text.Editable
import android.view.MotionEvent
import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.viewModels
import org.android.go.sopt.MainActivity
import org.android.go.sopt.R
import org.android.go.sopt.RequestSignUpDto
import org.android.go.sopt.databinding.ActivitySignupBinding
import org.android.go.sopt.present.viewModel.LoginPageViewModel
import org.android.go.sopt.util.ViewModelFactory
import org.android.go.sopt.util.hideKeyboard
import org.android.go.sopt.util.makeToastMessage
import android.text.TextWatcher as TextWatcher
import java.util.regex.Pattern

class SignUpActivity : AppCompatActivity() {

Expand All @@ -26,6 +28,13 @@ class SignUpActivity : AppCompatActivity() {
binding = ActivitySignupBinding.inflate(layoutInflater)
setContentView(binding.root)

with(binding) {
vmSignUp = viewModel
lifecycleOwner = this@SignUpActivity
etId.doAfterTextChanged { checkValidSignUpId() }
etPassword.doAfterTextChanged { checkValidSignUpPwd() }
}

signUp()
observeIsSignUpSuccess()
}
Expand All @@ -42,21 +51,16 @@ class SignUpActivity : AppCompatActivity() {
}

private fun signUp() {
canClickButton()
binding.btnSignup.setOnClickListener {
if (binding.etId.text.length in 6..10 && binding.etPassword.text.length in 8..12) {
with(binding) {
viewModel.signUp(
RequestSignUpDto(
etId.text.toString(),
etPassword.text.toString(),
etName.text.toString(),
etSpeciality.text.toString(),
),
)
}
} else {
makeToastMessage("회원가입 조건 미충족")
with(binding) {
viewModel.signUp(
RequestSignUpDto(
etId.text.toString(),
etPassword.text.toString(),
etName.text.toString(),
etSpeciality.text.toString(),
),
)
}
}
}
Expand All @@ -75,28 +79,47 @@ class SignUpActivity : AppCompatActivity() {
}
}

private fun canClickButton() {
with(binding) {
btnSignup.isEnabled = false

val textWatcher: TextWatcher = object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
private fun checkValidSignUpId(): Boolean {
var correctId = false

override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
if (etId.text.length in 6..10 && etPassword.text.length in 8..12) {
btnSignup.isEnabled = true
}
}
val idPattern = "^(?=.*\\d)(?=.*[a-zA-Z]).{6,10}\$"

override fun afterTextChanged(p0: Editable?) {
}
viewModel.signUpId.observe(this) { id ->
correctId = Pattern.matches(idPattern, id)
if (!correctId) {
binding.tvIdWarn.visibility = View.VISIBLE
correctId = false
binding.etId.backgroundTintList = ColorStateList.valueOf(getColor(R.color.red_500))
} else {
binding.tvIdWarn.visibility = View.GONE
correctId = true
binding.etId.backgroundTintList = ColorStateList.valueOf(getColor(R.color.black))
}
}

etId.addTextChangedListener(textWatcher)
etPassword.addTextChangedListener(textWatcher)
etName.addTextChangedListener(textWatcher)
etSpeciality.addTextChangedListener(textWatcher)
return correctId
}

private fun checkValidSignUpPwd(): Boolean {
var correctPw = false

val pwPattern = "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[\$@\$!%*#?&]).{6,12}\$"

viewModel.signUpPwd.observe(this) { pwd ->
correctPw = Pattern.matches(pwPattern, pwd)
if (!correctPw) {
binding.tvPwWarn.visibility = View.VISIBLE
correctPw = false
binding.etPassword.backgroundTintList =
ColorStateList.valueOf(getColor(R.color.red_500))
} else {
binding.tvPwWarn.visibility = View.GONE
correctPw = true
binding.etPassword.backgroundTintList =
ColorStateList.valueOf(getColor(R.color.black))
}
}

return correctPw
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class LoginPageViewModel(private val loginPageRepoImpl: LoginPageRepoImpl) : Vie
private val _getMyProfile = MutableLiveData<MyProfileDto>()
val getMyProfile: LiveData<MyProfileDto> get() = _getMyProfile

val signUpId: MutableLiveData<String> = MutableLiveData("")
val signUpPwd: MutableLiveData<String> = MutableLiveData("")

fun login(request: RequestLogInDto) = viewModelScope.launch {
kotlin.runCatching {
loginPageRepoImpl.login(request)
Expand Down
Loading

0 comments on commit 4c61e0f

Please sign in to comment.