@@ -10,6 +10,7 @@ import androidx.core.view.isVisible
1010import androidx.fragment.app.activityViewModels
1111import androidx.fragment.app.commit
1212import androidx.fragment.app.replace
13+ import coil3.load
1314import com.kakao.sdk.common.util.KakaoCustomTabsClient
1415import com.kakao.sdk.talk.TalkApiClient
1516import com.runnect.runnect.BuildConfig
@@ -21,13 +22,15 @@ import com.runnect.runnect.presentation.mypage.history.MyHistoryActivity
2122import com.runnect.runnect.presentation.mypage.reward.MyRewardActivity
2223import com.runnect.runnect.presentation.mypage.setting.MySettingFragment
2324import com.runnect.runnect.presentation.mypage.upload.MyUploadActivity
24- import com.runnect.runnect.presentation.state.UiState
2525import com.runnect.runnect.util.analytics.Analytics
2626import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_GOAL_REWARD
2727import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_RUNNING_RECORD
2828import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_UPLOADED_COURSE
2929import com.runnect.runnect.util.extension.getStampResId
30+ import com.runnect.runnect.util.extension.repeatOnStarted
31+ import com.runnect.runnect.util.extension.showSnackbar
3032import dagger.hilt.android.AndroidEntryPoint
33+ import kotlinx.coroutines.flow.collectLatest
3134
3235@AndroidEntryPoint
3336class MyPageFragment : BaseVisitorFragment <FragmentMyPageBinding >(R .layout.fragment_my_page) {
@@ -38,9 +41,8 @@ class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragm
3841 override val contentViews by lazy { listOf (binding.constraintInside) }
3942
4043 override fun onContentModeInit () {
41- binding.vm = viewModel
4244 binding.lifecycleOwner = this @MyPageFragment.viewLifecycleOwner
43- viewModel.getUserInfo( )
45+ viewModel.intent( MyPageIntent . LoadUserInfo )
4446 addListener()
4547 addObserver()
4648 setResultEditNameLauncher()
@@ -50,8 +52,9 @@ class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragm
5052 resultEditNameLauncher =
5153 registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
5254 if (result.resultCode == RESULT_OK ) {
53- val name = result.data?.getStringExtra(EXTRA_NICK_NAME ) ? : viewModel.nickName.value
54- viewModel.setNickName(name!! )
55+ val name = result.data?.getStringExtra(EXTRA_NICK_NAME )
56+ ? : viewModel.currentState.nickname
57+ viewModel.intent(MyPageIntent .UpdateNickname (name))
5558 }
5659 }
5760 }
@@ -60,7 +63,7 @@ class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragm
6063 with (binding) {
6164 ivMyPageEditFrame.setOnClickListener {
6265 val intent = Intent (requireContext(), MyPageEditNameActivity ::class .java)
63- intent.putExtra(EXTRA_NICK_NAME , " ${ viewModel.nickName.value} " )
66+ intent.putExtra(EXTRA_NICK_NAME , viewModel.currentState.nickname )
6467 val stampResId = getStampResourceId()
6568 intent.putExtra(EXTRA_PROFILE , stampResId)
6669 resultEditNameLauncher.launch(intent)
@@ -89,29 +92,39 @@ class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragm
8992 }
9093
9194 private fun moveToSettingFragment () {
92- val bundle = Bundle ().apply { putString(ACCOUNT_INFO_TAG , viewModel.email.value ) }
95+ val bundle = Bundle ().apply { putString(ACCOUNT_INFO_TAG , viewModel.currentState.email ) }
9396 requireActivity().supportFragmentManager.commit {
9497 this .setCustomAnimations(R .anim.slide_in_right, R .anim.slide_out_left)
9598 replace<MySettingFragment >(R .id.fl_main, args = bundle)
9699 }
97100 }
98101
99102 private fun addObserver () {
100- viewModel.nickName.observe(viewLifecycleOwner) { nickName ->
101- binding.tvMyPageUserName.text = nickName.toString()
103+ repeatOnStarted {
104+ viewModel.state.collectLatest { state ->
105+ bindState(state)
106+ }
102107 }
108+ }
103109
104- viewModel.userInfoState.observe(viewLifecycleOwner ) {
105- when (it) {
106- UiState . Empty -> setLoadingState( false )
107- UiState . Loading -> setLoadingState( true )
108- UiState . Success -> {
109- setLoadingState( false )
110- val stampResId = getStampResourceId()
111- viewModel.setProfileImg(stampResId)
112- }
113- UiState . Failure -> setLoadingState( false )
110+ private fun bindState ( state : MyPageUiState ) {
111+ setLoadingState(state.isLoading)
112+
113+ if ( ! state.isLoading && state.error == null ) {
114+ with (binding) {
115+ tvMyPageUserName.text = state.nickname
116+ tvMyPageUserLv.text = state.level
117+ pbMyPageProgress.progress = state.levelPercent
118+ tvMyPageProgressCurrent.text = state.levelPercent.toString()
119+ ivMyPageProfile.load(state.profileImgResId )
114120 }
121+
122+ val stampResId = getStampResourceId()
123+ viewModel.intent(MyPageIntent .UpdateProfileImg (stampResId))
124+ }
125+
126+ state.error?.let {
127+ context?.showSnackbar(anchorView = binding.root, message = it)
115128 }
116129 }
117130
@@ -122,7 +135,7 @@ class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragm
122135
123136 private fun getStampResourceId (): Int {
124137 return requireContext().getStampResId(
125- stampId = viewModel.stampId.value ,
138+ stampId = viewModel.currentState.stampId ,
126139 resNameParam = RES_NAME ,
127140 resType = RES_STAMP_TYPE ,
128141 packageName = requireContext().packageName
@@ -151,4 +164,4 @@ class MyPageFragment : BaseVisitorFragment<FragmentMyPageBinding>(R.layout.fragm
151164 const val EXTRA_PROFILE = " profile_img"
152165 const val ACCOUNT_INFO_TAG = " accountInfo"
153166 }
154- }
167+ }
0 commit comments