Skip to content

Commit

Permalink
Merge pull request #135 from BCSDLab/feature/#130-sign-up
Browse files Browse the repository at this point in the history
Feature/#130 sign up
  • Loading branch information
wnehdals authored Jan 20, 2024
2 parents 85db0b1 + d64ebc1 commit 81a7f6b
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 54 deletions.
3 changes: 1 addition & 2 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

93 changes: 41 additions & 52 deletions app/src/main/java/com/jjbaksa/jjbaksa/ui/signup/SignUpFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.jjbaksa.jjbaksa.ui.findpassword.FindPasswordResetFragment
import com.jjbaksa.jjbaksa.util.RegexUtil.isPasswordRuleMatch
import com.jjbaksa.jjbaksa.ui.signup.viewmodel.SignUpViewModel
import com.jjbaksa.jjbaksa.util.KeyboardProvider
import com.jjbaksa.jjbaksa.util.RegexUtil
import com.jjbaksa.jjbaksa.util.RegexUtil.checkEmailFormat
import dagger.hilt.android.AndroidEntryPoint

Expand All @@ -30,30 +31,30 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {

private val signUpViewModel: SignUpViewModel by activityViewModels()

private var isIdTyped = false
private var isEmailTyped = false
private var isPasswordTyped = false
private var isPasswordConfirmedTyped = false
private var isPasswordConfirmed = false
private var passwordConfirmed = ""
private var isEmailRuleMatch = false
private var isPasswordRuleMatch = false
private var alertExist = false
private var nextButtonEnable = false

private var id: String = ""
private var email: String = ""
override fun initView() {
}

override fun initEvent() {
binding.jEditTextSignUpId.setTailButtonOnClickListener {
signUpViewModel.id = id
signUpViewModel.checkAccountAvailable(id) { isAvailable ->
if (!RegexUtil.checkIdFormat(signUpViewModel.id)) {
showSnackBar(getString(R.string.id_format_not_match))
KeyboardProvider(requireContext()).hideKeyboard(binding.jEditTextSignUpId)
return@setTailButtonOnClickListener
}
signUpViewModel.checkAccountAvailable(signUpViewModel.id) { isAvailable ->
if (isAvailable) {
binding.buttonSignUpNext.isEnabled = true
showSnackBar(getString(R.string.id_checked))
KeyboardProvider(requireContext()).hideKeyboard(binding.jEditTextSignUpId)
binding.jEditTextSignUpId.setEditTextAlertImg(false)
} else {
binding.buttonSignUpNext.isEnabled = false
showSnackBar(getString(R.string.id_already_exist))
KeyboardProvider(requireContext()).hideKeyboard(binding.jEditTextSignUpId)
binding.jEditTextSignUpId.setEditTextAlertImg(true)
}
}
Expand All @@ -63,13 +64,12 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
@SuppressLint("RestrictedApi")
object : TextWatcherAdapter() {
override fun afterTextChanged(p0: Editable) {
isIdTyped = p0?.isNotEmpty() == true
binding.jEditTextSignUpId.setTailButtonEnable(isIdTyped)
if (isIdTyped) {
id = p0.toString()
nextButtonEnable = p0?.isNotEmpty() == true
binding.jEditTextSignUpId.setTailButtonEnable(p0?.isNotEmpty() == true)
if (p0?.isNotEmpty() == true) {
signUpViewModel.id = p0.toString()
}
signUpViewModel.updateIdCheckedState(false)
updateSignUpNextButton(isIdTyped && isEmailTyped && isPasswordTyped && isPasswordConfirmedTyped)
}
}
)
Expand All @@ -78,22 +78,20 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
@SuppressLint("RestrictedApi")
object : TextWatcherAdapter() {
override fun afterTextChanged(p0: Editable) {
isEmailRuleMatch = checkEmailFormat(p0.toString())
isEmailTyped = p0.toString().isNotEmpty()
isIdTyped = p0?.isNotEmpty() == true
if (isEmailTyped) {
email = p0.toString()
nextButtonEnable = p0?.isNotEmpty() == true
if (p0?.isNotEmpty() == true) {
signUpViewModel.email = p0.toString()
}
if (isEmailRuleMatch) {
updateSignUpNextButton(isEmailTyped && isEmailRuleMatch)
if (checkEmailFormat(p0.toString())) {
updateSignUpNextButton(signUpViewModel.email.isNotEmpty() && checkEmailFormat(p0.toString()))
if (signUpViewModel.uiState.value?.isAlertShown == true) {
signUpViewModel.updateAlertState(false)
}
} else {
signUpViewModel.updateAlertType(EMAIL_NOT_FOUND)
signUpViewModel.updateAlertState(true)
}
updateSignUpNextButton(isIdTyped && isEmailTyped && isPasswordTyped && isPasswordConfirmedTyped)
updateSignUpNextButton(signUpViewModel.id.isNotEmpty() && signUpViewModel.email.isNotEmpty() && signUpViewModel.password.isNotEmpty())
}
}
)
Expand All @@ -114,16 +112,16 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
@SuppressLint("RestrictedApi")
object : TextWatcherAdapter() {
override fun afterTextChanged(p0: Editable) {
nextButtonEnable = p0?.isNotEmpty() == true
isPasswordRuleMatch = p0.toString().isPasswordRuleMatch()
isPasswordTyped = p0.toString().isNotEmpty()

if (isPasswordTyped) {
if (p0.toString().isNotEmpty()) {
signUpViewModel.password = p0.toString()
isPasswordConfirmed =
p0.toString() == passwordConfirmed
p0.toString() == signUpViewModel.passwordCheck
}
if (isPasswordRuleMatch) {
updateSignUpNextButton(isIdTyped && isEmailTyped && isPasswordTyped && isPasswordConfirmedTyped)
updateSignUpNextButton(signUpViewModel.id.isNotEmpty() && signUpViewModel.email.isNotEmpty() && signUpViewModel.password.isNotEmpty())

if (signUpViewModel.uiState.value?.isAlertShown == true) {
signUpViewModel.updateAlertState(false)
Expand All @@ -137,44 +135,40 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
)

binding.jEditTextSignUpPasswordConfirm.setTailImgOnClickListener {
if (isPasswordConfirmedTyped) {
binding.jEditTextSignUpPasswordConfirm.setTailImgSelected(!binding.jEditTextSignUpPasswordConfirm.getTailImgSelected())

if (binding.jEditTextSignUpPasswordConfirm.getTailImgSelected()) {
binding.jEditTextSignUpPasswordConfirm.setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)
} else {
binding.jEditTextSignUpPasswordConfirm.setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD)
}
binding.jEditTextSignUpPasswordConfirm.setTailImgSelected(!binding.jEditTextSignUpPasswordConfirm.getTailImgSelected())

if (binding.jEditTextSignUpPasswordConfirm.getTailImgSelected()) {
binding.jEditTextSignUpPasswordConfirm.setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)
} else {
binding.jEditTextSignUpPasswordConfirm.setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD)
}
}

binding.jEditTextSignUpPasswordConfirm.addTextChangedListener(
@SuppressLint("RestrictedApi")
object : TextWatcherAdapter() {
override fun afterTextChanged(p0: Editable) {
isPasswordConfirmedTyped = p0.toString().isNotEmpty()
nextButtonEnable = p0?.isNotEmpty() == true
isPasswordConfirmed =
p0.toString() == signUpViewModel.password
passwordConfirmed = p0.toString()
signUpViewModel.passwordCheck = p0.toString()
if (!isPasswordConfirmed) {
signUpViewModel.updateAlertType(PASSWORD_NOT_MATCH)
signUpViewModel.updateAlertState(true)
} else {
signUpViewModel.updateAlertState(false)
}
updateSignUpNextButton(isIdTyped && isEmailTyped && isPasswordTyped && isPasswordConfirmedTyped)
updateSignUpNextButton(signUpViewModel.id.isNotEmpty() && signUpViewModel.email.isNotEmpty() && signUpViewModel.password.isNotEmpty())
}
}
)

binding.buttonSignUpNext.setOnClickListener {
checkInputsCorrect()
signUpViewModel.id = id
signUpViewModel.email = email
if (alertExist) {
if (!signUpViewModel.uiState.value?.isAlertShown!!) {
signUpViewModel.postUserEmailCheck(signUpViewModel.email)
if (signUpViewModel.uiState.value?.isIdChecked == true) {

signUpViewModel.postUserEmailCheck(signUpViewModel.email)
ConfirmDialog(
getString(R.string.sign_up_title_text),
getString(R.string.sign_up_content_text),
Expand Down Expand Up @@ -211,11 +205,6 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
binding.buttonSignUpNext.isEnabled = false
}
}

signUpViewModel.toastMsg.observe(viewLifecycleOwner) {
showSnackBar(it)
KeyboardProvider(requireContext()).hideKeyboard(binding.jEditTextSignUpId)
}
}

override fun onResume() {
Expand Down Expand Up @@ -255,9 +244,9 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
binding.jEditTextSignUpPassword.setEditTextAlertImg(false)
binding.jEditTextSignUpPasswordConfirm.setEditTextAlertImg(false)

alertExist = isPasswordConfirmed && isPasswordRuleMatch && isEmailRuleMatch
signUpViewModel.updateAlertState(!isPasswordConfirmed || !isPasswordRuleMatch || !checkEmailFormat(signUpViewModel.email))

if (alertExist) {
if (signUpViewModel.uiState.value?.isAlertShown == true) {
binding.buttonSignUpNext.isEnabled = false
}

Expand All @@ -266,9 +255,9 @@ class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
showSnackBar(setAlert(SignUpAlertEnum.NEED_ID_CHECK).toString())
binding.jEditTextSignUpId.setEditTextAlertImg(signUpViewModel.uiState.value?.isIdChecked != true)
}
!isEmailRuleMatch -> {
!checkEmailFormat(signUpViewModel.email) -> {
showSnackBar(setAlert(SignUpAlertEnum.EMAIL_NOT_FOUND).toString())
binding.jEditTextSignUpEmail.setEditTextAlertImg(!isEmailRuleMatch)
binding.jEditTextSignUpEmail.setEditTextAlertImg(!checkEmailFormat(signUpViewModel.email))
}
!isPasswordRuleMatch -> {
showSnackBar(setAlert(SignUpAlertEnum.PASSWORD_RULE_NOT_MATCH).toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ class TermsFragment : BaseFragment<FragmentTermsBinding>() {
}

override fun subscribe() {}

override fun onResume() {
super.onResume()
checkAllCheckBox(false)
isAllCheckBoxChecked()
}
private fun isAllCheckBoxChecked() {
val isAllCheckBoxChecked =
binding.jjCheckBoxTermsTermsOne.isChecked && binding.jjCheckBoxTermsTermsTwo.isChecked
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.jjbaksa.jjbaksa.ui.signup

import android.annotation.SuppressLint
import android.text.Editable
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.activityViewModels
import com.google.android.material.internal.TextWatcherAdapter
import com.jjbaksa.jjbaksa.R
Expand All @@ -20,6 +21,13 @@ class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {

override fun initEvent() {

requireActivity().onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
activity?.finish()
}
}
)

with(binding) {

binding.jEditTextWelcomeName.addTextChangedListener(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class SignUpViewModel @Inject constructor(
var id: String = ""
var email: String = ""
var password: String = ""
var passwordCheck: String = ""
var nickname: String = ""

init {
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/util/RegexUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import java.util.regex.Pattern

const val PASSWORD_REGEX = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[~!@#$%^&*()_+=|;:'\"><,.?/-])[A-Za-z\\d~!@#\$%^&*()_+=|;:'\"><,.?\\/-]{8,16}$"
const val EMAIL_REGEX = "^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])+@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])+.[a-zA-Z]{2,3}$"
const val ID_REGEX = "^[a-zA-Z0-9]+$"

@Module
@InstallIn(SingletonComponent::class)
Expand Down Expand Up @@ -40,4 +41,6 @@ object RegexUtil {
return RegexUtil.hashString(message, "SHA-256")
}
fun checkEmailFormat(userEmail: String): Boolean = Pattern.matches(EMAIL_REGEX, userEmail)

fun checkIdFormat(userId: String): Boolean = Pattern.matches(ID_REGEX, userId)
}
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -203,4 +203,5 @@
<string name="total_review">총 %s개의 리뷰</string>
<string name="last_review_date">마지막 리뷰 %s</string>
<string name="schedule">%s ~ %s</string>
<string name="id_format_not_match">올바른 형식의 아이디가 아닙니다.</string>
</resources>

0 comments on commit 81a7f6b

Please sign in to comment.