Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Nov 3, 2022. It is now read-only.

Commit 19d94e2

Browse files
committed
[FEAT] : ViewUitl 만들기
- ImageView imageSrc 만들기 - color 함수 만들기
1 parent 4b6cbc4 commit 19d94e2

File tree

4 files changed

+67
-28
lines changed

4 files changed

+67
-28
lines changed

.idea/sonarIssues.xml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/teambeme/beme/signup/view/PersonalInfoFragment.kt

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@ import android.view.LayoutInflater
66
import android.view.View
77
import android.view.ViewGroup
88
import android.widget.Toast
9-
import androidx.databinding.DataBindingUtil
10-
import androidx.fragment.app.Fragment
119
import androidx.fragment.app.activityViewModels
1210
import androidx.navigation.findNavController
1311
import com.google.firebase.analytics.FirebaseAnalytics
1412
import com.google.firebase.analytics.ktx.analytics
1513
import com.google.firebase.analytics.ktx.logEvent
1614
import com.google.firebase.ktx.Firebase
1715
import com.teambeme.beme.R
16+
import com.teambeme.beme.base.BindingFragment
1817
import com.teambeme.beme.databinding.FragmentPersonalInfoBinding
1918
import com.teambeme.beme.signup.viewmodel.SignUpViewModel
19+
import com.teambeme.beme.util.color
2020
import com.teambeme.beme.util.recordClickEvent
2121
import 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
}

app/src/main/java/com/teambeme/beme/signup/viewmodel/SignUpViewModel.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class SignUpViewModel @Inject constructor(
3232
val userNickName = MutableLiveData("")
3333
val userPassWord = MutableLiveData("")
3434
val userPassWordCheck = MutableLiveData("")
35-
private val isEmailValid = Transformations.map(userEmail) { validEmail(it) }
35+
val isEmailValid = Transformations.map(userEmail) { validEmail(it) }
3636
private val _isPasswordDoubleChecked = MediatorLiveData<Boolean>().apply {
3737
addSourceList(userPassWord, userPassWordCheck) { passwordValid() }
3838
}
@@ -45,6 +45,12 @@ class SignUpViewModel @Inject constructor(
4545
Transformations.map(userNickName) { nickNameLengthValidation(it) }
4646
private val isNicknameRegexValid =
4747
Transformations.map(userNickName) { regexValid(it) }
48+
private val _nickNameDoubleCheck = MutableLiveData<ResponseNickDoubleCheck>()
49+
val nickDoubleCheck: LiveData<ResponseNickDoubleCheck>
50+
get() = _nickNameDoubleCheck
51+
private val _isNickNameDoubleChecked = MutableLiveData(false)
52+
val isNickNameDoubleChecked: LiveData<Boolean>
53+
get() = _isNickNameDoubleChecked
4854

4955
val isDoneButtonEnabled = MediatorLiveData<Boolean>().apply {
5056
addSourceList(
@@ -63,18 +69,12 @@ class SignUpViewModel @Inject constructor(
6369
private val _isNickNameValidated = MutableLiveData(false)
6470
val isNickNameValidated: LiveData<Boolean>
6571
get() = _isNickNameValidated
66-
private val _isNickNameDoubleChecked = MutableLiveData(false)
67-
val isNickNameDoubleChecked: LiveData<Boolean>
68-
get() = _isNickNameDoubleChecked
6972
private val _isPassWordValidated = MutableLiveData(false)
7073
val isPassWordValidated: LiveData<Boolean>
7174
get() = _isPassWordValidated
7275
private val _isPassWordCheckValidated = MutableLiveData(false)
7376
val isPassWordCheckValidated: LiveData<Boolean>
7477
get() = _isPassWordCheckValidated
75-
private val _nickNameDoubleCheck = MutableLiveData<ResponseNickDoubleCheck>()
76-
val nickDoubleCheck: LiveData<ResponseNickDoubleCheck>
77-
get() = _nickNameDoubleCheck
7878
private val _profileImageUri = MutableLiveData<Uri>()
7979
val profileImageUri: LiveData<Uri>
8080
get() = _profileImageUri
@@ -205,7 +205,7 @@ class SignUpViewModel @Inject constructor(
205205

206206
private fun validUserInfo() =
207207
isEmailValid.value!! && isPasswordDoubleChecked.value!! && isPasswordRegexValid.value!!
208-
&& isPasswordLengthValid.value!! && isNicknameLengthValid.value!! && isNicknameRegexValid.value!!
208+
&& isPasswordLengthValid.value!! && isNickNameDoubleChecked.value!!
209209

210210
companion object {
211211
private val REGEX_EMAIL = Regex(pattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+")
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.teambeme.beme.util
2+
3+
import android.view.View
4+
import android.widget.ImageView
5+
import androidx.annotation.ColorRes
6+
7+
fun View.color(@ColorRes color: Int): Int = resources.getColor(color, null)
8+
var ImageView.imageSrc: Int
9+
get() = this.tag as Int
10+
set(value) = this.setImageResource(value)

0 commit comments

Comments
 (0)