@@ -6,23 +6,23 @@ import android.view.LayoutInflater
66import android.view.View
77import android.view.ViewGroup
88import android.widget.Toast
9- import androidx.databinding.DataBindingUtil
10- import androidx.fragment.app.Fragment
119import androidx.fragment.app.activityViewModels
1210import androidx.navigation.findNavController
1311import com.google.firebase.analytics.FirebaseAnalytics
1412import com.google.firebase.analytics.ktx.analytics
1513import com.google.firebase.analytics.ktx.logEvent
1614import com.google.firebase.ktx.Firebase
1715import com.teambeme.beme.R
16+ import com.teambeme.beme.base.BindingFragment
1817import com.teambeme.beme.databinding.FragmentPersonalInfoBinding
1918import com.teambeme.beme.signup.viewmodel.SignUpViewModel
19+ import com.teambeme.beme.util.color
2020import com.teambeme.beme.util.recordClickEvent
2121import dagger.hilt.android.AndroidEntryPoint
2222
2323@AndroidEntryPoint
24- class PersonalInfoFragment : Fragment () {
25- private lateinit var binding : FragmentPersonalInfoBinding
24+ class PersonalInfoFragment :
25+ BindingFragment < FragmentPersonalInfoBinding >( R .layout.fragment_personal_info) {
2626 private val signUpViewModel: SignUpViewModel by activityViewModels()
2727 override fun onAttach (context : Context ) {
2828 super .onAttach(context)
@@ -37,8 +37,7 @@ class PersonalInfoFragment : Fragment() {
3737 container : ViewGroup ? ,
3838 savedInstanceState : Bundle ?
3939 ): View {
40- binding =
41- DataBindingUtil .inflate(inflater, R .layout.fragment_personal_info, container, false )
40+ super .onCreateView(inflater, container, savedInstanceState)
4241 binding.lifecycleOwner = viewLifecycleOwner
4342 binding.signUpViewModel = signUpViewModel
4443 binding.btnPersonalBack.setOnClickListener { view ->
@@ -47,7 +46,7 @@ class PersonalInfoFragment : Fragment() {
4746 }
4847 setDoubleCheckListener()
4948 setDoneButtonClickListener()
50- setObserve ()
49+ subscribeData ()
5150 return binding.root
5251 }
5352
@@ -60,12 +59,11 @@ class PersonalInfoFragment : Fragment() {
6059 } else {
6160 binding.txtPersonalNicknameCheck.apply {
6261 text = " 이미 존재하는 닉네임입니다"
63- setTextColor(resources.getColor (R .color.signup_red, null ))
62+ setTextColor(color (R .color.signup_red))
6463 }
6564 binding.imgPersonalNicknameCheck.setImageResource(R .drawable.ic_personal_check_red)
6665 }
6766 }
68- checkButtonEnable()
6967 }
7068 }
7169
@@ -86,7 +84,33 @@ class PersonalInfoFragment : Fragment() {
8684 }
8785 }
8886
89- private fun setObserve () {
87+ private fun subscribeData () {
88+ signUpViewModel.isDoneButtonEnabled.observe(viewLifecycleOwner) {
89+ binding.btnPersonalDone.isEnabled = it
90+ }
91+ signUpViewModel.isEmailValid.observe(viewLifecycleOwner) {
92+ when (it) {
93+ true -> {
94+ binding.txtPersonalEmailCheck.text = " 형식에 맞는 이메일입니다"
95+ binding.txtPersonalEmailCheck.setTextColor(
96+ resources.getColor(
97+ R .color.signup_term_blue,
98+ null
99+ )
100+ )
101+ }
102+ else -> {
103+ binding.txtPersonalEmailCheck.text = " 형식에 맞지 않는 이메일입니다"
104+ binding.txtPersonalEmailCheck.setTextColor(
105+ resources.getColor(
106+ R .color.signup_red,
107+ null
108+ )
109+ )
110+ binding.imgPersonalEmailCheck.setImageResource(R .drawable.ic_personal_check_red)
111+ }
112+ }
113+ }
90114 signUpViewModel.userEmail.observe(viewLifecycleOwner) { email ->
91115 if (email.isNullOrBlank()) {
92116 binding.txtPersonalEmailCheck.text
= " [email protected] 형식으로 입력해 주세요" @@ -121,18 +145,14 @@ class PersonalInfoFragment : Fragment() {
121145 signUpViewModel.emailNotValidated()
122146 }
123147 }
124- checkButtonEnable()
125148 }
126149 signUpViewModel.userNickName.observe(viewLifecycleOwner) { nickName ->
127150 if (nickName.isEmpty()) {
128151 binding.imgPersonalNicknameCheck.setImageResource(R .drawable.ic_personal_check_gray)
129- binding.txtPersonalNicknameCheck.text = " 영문, 숫자로 5자 이상 20자 이내로 입력해 주세요."
130- binding.txtPersonalNicknameCheck.setTextColor(
131- resources.getColor(
132- R .color.signup_personal_check,
133- null
134- )
135- )
152+ binding.txtPersonalNicknameCheck.apply {
153+ text = " 영문, 숫자로 5자 이상 20자 이내로 입력해 주세요."
154+ setTextColor(color(R .color.signup_personal_check))
155+ }
136156 signUpViewModel.nickNameNotValidated()
137157 } else if (! nickName.isLettersOrDigits() || ! nickNameLengthValidation(nickName)) {
138158 binding.imgPersonalNicknameCheck.setImageResource(R .drawable.ic_personal_check_red)
@@ -149,8 +169,6 @@ class PersonalInfoFragment : Fragment() {
149169 }
150170 signUpViewModel.nickNameValidated()
151171 }
152-
153- checkButtonEnable()
154172 }
155173
156174 signUpViewModel.userPassWord.observe(viewLifecycleOwner) { passWord ->
@@ -231,6 +249,7 @@ class PersonalInfoFragment : Fragment() {
231249 }
232250 }
233251
252+ @Deprecated(" MediatorLiveData로 대체되었습니다." )
234253 private fun checkButtonEnable () {
235254 binding.btnPersonalDone.isEnabled = signUpViewModel.validateAllValues()
236255 }
0 commit comments