-
Notifications
You must be signed in to change notification settings - Fork 5
5.3. 회원가입
mdb1217 edited this page Jan 15, 2021
·
3 revisions
(1) 다양한 Listener를 사용한 예외처리
(2)LoginPatternCheckUtil
을 이용한 형식 체크
(1) 버튼 두개 체크 시에만 화면 전환
- SignUpActivity.kt
class SignUpActivity : BaseActivity<ActivitySignUpBinding, UserViewModel>() {
override val layoutResourceId: Int
get() = R.layout.activity_sign_up
override val viewModel: UserViewModel by viewModel()
private var isValidName = false
private var isValidEmail = false
private var isValidPassword = false
private var passwordSame = false
private var passwordIsVisible = true
private var passwordConfirmIsVisible = true
override fun initView() {
etColorChange()
etAlertChange()
visibleButtonChange()
navigationClickEvent()
signUpButtonClickEvent()
setupToast(this, viewModel.toastMessage)
}
override fun initBeforeBinding() {
}
override fun initAfterBinding() {
observeSignUpResult()
}
private fun etColorChange() {
binding.etName.setOnFocusChangeListener { view, hasFocus ->
if (hasFocus) {
binding.clName.setBackgroundResource(R.drawable.rectangle_orange_radius_15)
binding.tvName.setTextColor(ContextCompat.getColor(this, R.color.carrot))
} else {
if (binding.etName.text.isEmpty()) {
binding.clName.setBackgroundResource(R.drawable.rectangle_gray_radius_15)
binding.tvName.setTextColor(ContextCompat.getColor(this, R.color.mainBlack))
}
}
}
binding.etEmail.setOnFocusChangeListener { view, hasFocus ->
if (hasFocus) {
binding.clEmail.setBackgroundResource(R.drawable.rectangle_orange_radius_15)
binding.tvEmail.setTextColor(ContextCompat.getColor(this, R.color.carrot))
} else {
if (binding.etEmail.text.isEmpty()) {
binding.clEmail.setBackgroundResource(R.drawable.rectangle_gray_radius_15)
binding.tvEmail.setTextColor(ContextCompat.getColor(this, R.color.mainBlack))
}
}
}
binding.etPassword.setOnFocusChangeListener { view, hasFocus ->
if (hasFocus) {
binding.clPassword.setBackgroundResource(R.drawable.rectangle_orange_radius_15)
binding.ivVisibleButton.visibility = View.VISIBLE
binding.tvPassword.setTextColor(ContextCompat.getColor(this, R.color.carrot))
} else {
if (binding.etPassword.text.isEmpty()) {
binding.clPassword.setBackgroundResource(R.drawable.rectangle_gray_radius_15)
binding.tvPassword.setTextColor(ContextCompat.getColor(this, R.color.mainBlack))
binding.ivVisibleButton.visibility = View.INVISIBLE
}
}
}
binding.etPasswordConfirm.setOnFocusChangeListener { view, hasFocus ->
if (hasFocus) {
binding.clPasswordConfirm.setBackgroundResource(R.drawable.rectangle_orange_radius_15)
binding.ivVisibleButtonConfirm.visibility = View.VISIBLE
binding.tvPasswordConfirm.setTextColor(ContextCompat.getColor(this, R.color.carrot))
} else {
if (binding.etPasswordConfirm.text.isEmpty()) {
binding.clPasswordConfirm.setBackgroundResource(R.drawable.rectangle_gray_radius_15)
binding.tvPasswordConfirm.setTextColor(
ContextCompat.getColor(
this,
R.color.mainBlack
)
)
binding.ivVisibleButtonConfirm.visibility = View.INVISIBLE
}
}
}
}
private fun etAlertChange() {
binding.etName.addTextChangedListener {
if (LoginPatternCheckUtil.isNotValidName(binding.etName.text.toString())) {
binding.ivAlertName.visibility = View.VISIBLE
binding.etName.setTextColor(ContextCompat.getColor(this, R.color.mainPaleOrange))
binding.tvAlertName.visibility = View.VISIBLE
isValidName = false
} else {
binding.ivAlertName.visibility = View.INVISIBLE
binding.tvAlertName.visibility = View.INVISIBLE
binding.etName.setTextColor(ContextCompat.getColor(this, R.color.mainBlack))
isValidName = true
}
buttonEnabled()
}
binding.etEmail.addTextChangedListener {
if (LoginPatternCheckUtil.isNotValidEmail(binding.etEmail.text.toString())) {
binding.tvAlertEmail.visibility = View.VISIBLE
binding.tvAlertEmail.text = getString(R.string.email_alert)
binding.etEmail.setTextColor(ContextCompat.getColor(this, R.color.mainPaleOrange))
binding.tvAlertEmail.setTextColor(ContextCompat.getColor(this, R.color.carrot))
binding.ivAlertEmail.visibility = View.VISIBLE
isValidEmail = false
} else {
binding.tvAlertEmail.text = getString(R.string.email_alarm)
binding.ivAlertEmail.visibility = View.INVISIBLE
binding.tvAlertEmail.setTextColor(ContextCompat.getColor(this, R.color.mainGray))
binding.etEmail.setTextColor(ContextCompat.getColor(this, R.color.mainBlack))
isValidEmail = true
}
buttonEnabled()
}
binding.etPassword.addTextChangedListener {
if (LoginPatternCheckUtil.isNotValidPassword(binding.etPassword.text.toString())) {
isValidPassword = false
binding.ivAlertPassword.visibility = View.VISIBLE
binding.tvPasswordAlert.visibility = View.VISIBLE
binding.tvPasswordAlert.text = getString(R.string.password_alert)
} else {
isValidPassword = true
binding.ivAlertPassword.visibility = View.INVISIBLE
binding.tvPasswordAlert.visibility = View.INVISIBLE
if (!LoginPatternCheckUtil.isPasswordCheckSuccess(
binding.etPassword.text.toString(),
binding.etPasswordConfirm.text.toString()
)
) {
binding.ivAlertPassword.visibility = View.VISIBLE
binding.tvPasswordAlert.visibility = View.VISIBLE
binding.tvPasswordAlert.text = getString(R.string.password_dismatch)
passwordSame = false
} else {
binding.ivAlertPassword.visibility = View.INVISIBLE
binding.tvPasswordAlert.visibility = View.INVISIBLE
passwordSame = true
}
}
buttonEnabled()
}
binding.etPasswordConfirm.addTextChangedListener {
if (isValidPassword) {
if (!LoginPatternCheckUtil.isPasswordCheckSuccess(
binding.etPassword.text.toString(),
binding.etPasswordConfirm.text.toString()
)
) {
binding.ivAlertPassword.visibility = View.VISIBLE
binding.tvPasswordAlert.visibility = View.VISIBLE
binding.tvPasswordAlert.text = getString(R.string.password_dismatch)
passwordSame = false
} else {
binding.ivAlertPassword.visibility = View.INVISIBLE
binding.tvPasswordAlert.visibility = View.INVISIBLE
passwordSame = true
}
buttonEnabled()
}
}
}
private fun visibleButtonChange() {
binding.ivVisibleButton.setOnClickListener {
if (passwordIsVisible) {
binding.ivVisibleButton.setBackgroundResource(R.drawable.ic_visible)
binding.etPassword.transformationMethod = HideReturnsTransformationMethod.getInstance()
passwordIsVisible = false
} else {
binding.ivVisibleButton.setBackgroundResource(R.drawable.ic_invisible)
binding.etPassword.transformationMethod = PasswordTransformationMethod.getInstance()
passwordIsVisible = true
}
}
binding.ivVisibleButtonConfirm.setOnClickListener {
if (passwordConfirmIsVisible) {
binding.ivVisibleButtonConfirm.setBackgroundResource(R.drawable.ic_visible)
binding.etPasswordConfirm.transformationMethod =
HideReturnsTransformationMethod.getInstance()
passwordConfirmIsVisible = false
} else {
binding.ivVisibleButtonConfirm.setBackgroundResource(R.drawable.ic_invisible)
binding.etPasswordConfirm.transformationMethod =
PasswordTransformationMethod.getInstance()
passwordConfirmIsVisible = true
}
}
}
private fun navigationClickEvent() {
binding.tbSignUp.setNavigationOnClickListener {
finish()
}
}
private fun buttonEnabled() {
binding.btnSignUp.isEnabled = isValidPassword && isValidEmail && isValidName && passwordSame
}
private fun signUpButtonClickEvent() {
binding.btnSignUp.setOnClickListener {
viewModel.postSignUp(
binding.etEmail.text.toString(),
binding.etPassword.text.toString(),
binding.etPasswordConfirm.text.toString(),
binding.etName.text.toString()
)
finish()
}
}
private fun observeSignUpResult() {
viewModel.signUpEvent.observe(this, EventObserver{ success ->
if(success){
finish()
}
})
}
}
- LoginPatternCheckUtil.kt
object LoginPatternCheckUtil {
fun isNotValidName(name: String?): Boolean {
val namePattern: Pattern = Pattern.compile("[ㄱ-ㅎ가-힣ㅏ-ㅣa-zA-Z0-9\\!\\@\\#\\$]{0,24}")
return name.isNullOrEmpty() || !namePattern.matcher(name).matches()
}
fun isNotValidEmail(email: String?): Boolean {
return email.isNullOrEmpty() || !Patterns.EMAIL_ADDRESS.matcher(email).matches()
}
fun isNotValidPassword(password: String?): Boolean {
val passwordPattern: Pattern = Pattern.compile("[a-zA-Z0-9\\!\\@\\#\\$]{6,24}")
return password.isNullOrEmpty() || !passwordPattern.matcher(password).matches()
}
/**
* use to check first password and second password are valid
*/
fun isPasswordCheckSuccess(password: String?, password2: String?): Boolean {
return TextUtils.equals(password, password2)
}
}
- SignUpTermsActivity.kt
class SignUpTermsActivity : BaseActivity<ActivitySignUpTermsBinding, UserViewModel>() {
override val layoutResourceId: Int
get() = R.layout.activity_sign_up_terms
override val viewModel: UserViewModel by viewModel()
override fun initView() {
initStartView()
initClickEvent()
}
override fun initBeforeBinding() {
}
override fun initAfterBinding() {
}
private fun initStartView() {
binding.btnSignUp.isEnabled = false
}
private fun initClickEvent() {
binding.tbSignUpTerms.setNavigationOnClickListener {
finish()
}
binding.ibAllowPersonalInformation.setOnClickListener {
it.isSelected = !it.isSelected
checkTermsSelected()
}
binding.ibAllowServiceTerms.setOnClickListener {
it.isSelected = !it.isSelected
checkTermsSelected()
}
binding.btnSignUp.setOnClickListener {
startActivity(Intent(this, SignUpActivity::class.java))
finish()
}
}
private fun checkTermsSelected() {
binding.btnSignUp.isEnabled = binding.ibAllowPersonalInformation.isSelected && binding.ibAllowServiceTerms.isSelected
}
회원가입 Main |
---|