11package com.runnect.runnect.presentation.mypage
22
3+ import android.app.Activity
34import android.app.Activity.RESULT_OK
4- import android.content.ContentValues
55import android.content.Intent
66import android.os.Bundle
7- import android.view.View
87import androidx.activity.result.ActivityResultLauncher
98import androidx.activity.result.contract.ActivityResultContracts
109import androidx.core.view.isVisible
@@ -15,10 +14,8 @@ import com.kakao.sdk.common.util.KakaoCustomTabsClient
1514import com.kakao.sdk.talk.TalkApiClient
1615import com.runnect.runnect.BuildConfig
1716import com.runnect.runnect.R
18- import com.runnect.runnect.binding.BindingFragment
17+ import com.runnect.runnect.binding.BaseVisitorFragment
1918import com.runnect.runnect.databinding.FragmentMyPageBinding
20- import com.runnect.runnect.presentation.MainActivity
21- import com.runnect.runnect.presentation.login.LoginActivity
2219import com.runnect.runnect.presentation.mypage.editname.MyPageEditNameActivity
2320import com.runnect.runnect.presentation.mypage.history.MyHistoryActivity
2421import com.runnect.runnect.presentation.mypage.reward.MyRewardActivity
@@ -31,106 +28,63 @@ import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_RUNNING_RECORD
3128import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_UPLOADED_COURSE
3229import com.runnect.runnect.util.extension.getStampResId
3330import dagger.hilt.android.AndroidEntryPoint
34- import timber.log.Timber
3531
3632@AndroidEntryPoint
37- class MyPageFragment : BindingFragment <FragmentMyPageBinding >(R .layout.fragment_my_page) {
33+ class MyPageFragment : BaseVisitorFragment <FragmentMyPageBinding >(R .layout.fragment_my_page) {
3834 private val viewModel: MyPageViewModel by activityViewModels()
3935 private lateinit var resultEditNameLauncher: ActivityResultLauncher <Intent >
40- var isVisitorMode: Boolean = MainActivity .isVisitorMode
41- override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
42- super .onViewCreated(view, savedInstanceState)
43- if (isVisitorMode) {
44- activateVisitorMode()
45- } else {
46- deactivateVisitorMode()
47- }
4836
49- }
37+ override val visitorContainer by lazy { binding.clVisitorMode }
38+ override val contentViews by lazy { listOf (binding.constraintInside) }
5039
51- private fun activateVisitorMode () {
52- with (binding) {
53- ivVisitorMode.isVisible = true
54- tvVisitorMode.isVisible = true
55- btnVisitorMode.isVisible = true
56- constraintInside.isVisible = false
57-
58- btnVisitorMode.setOnClickListener {
59- val intent = Intent (requireContext(), LoginActivity ::class .java)
60- startActivity(intent)
61- requireActivity().finish()
62- }
63- }
64- }
65-
66- private fun deactivateVisitorMode () {
67- with (binding) {
68- ivVisitorMode.isVisible = false
69- tvVisitorMode.isVisible = false
70- btnVisitorMode.isVisible = false
71- constraintInside.isVisible = true
72-
73- binding.vm = viewModel
74- binding.lifecycleOwner = this @MyPageFragment.viewLifecycleOwner
75- viewModel.getUserInfo()
76- addListener()
77- addObserver()
78- setResultEditNameLauncher()
79- }
40+ override fun onContentModeInit () {
41+ binding.vm = viewModel
42+ binding.lifecycleOwner = this @MyPageFragment.viewLifecycleOwner
43+ viewModel.getUserInfo()
44+ addListener()
45+ addObserver()
46+ setResultEditNameLauncher()
8047 }
8148
8249 private fun setResultEditNameLauncher () {
8350 resultEditNameLauncher =
8451 registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
8552 if (result.resultCode == RESULT_OK ) {
86- val name =
87- result.data?.getStringExtra(EXTRA_NICK_NAME ) ? : viewModel.nickName.value
53+ val name = result.data?.getStringExtra(EXTRA_NICK_NAME ) ? : viewModel.nickName.value
8854 viewModel.setNickName(name!! )
8955 }
9056 }
9157 }
9258
9359 private fun addListener () {
94- binding.ivMyPageEditFrame.setOnClickListener {
95- val intent = Intent (requireContext(), MyPageEditNameActivity ::class .java)
96- intent.putExtra(EXTRA_NICK_NAME , " ${viewModel.nickName.value} " )
97- val stampResId = requireContext().getStampResId(
98- stampId = viewModel.stampId.value,
99- resNameParam = RES_NAME ,
100- resType = RES_STAMP_TYPE ,
101- packageName = requireContext().packageName
102- )
103- intent.putExtra(EXTRA_PROFILE , stampResId)
104- resultEditNameLauncher.launch(intent)
105- }
60+ with (binding) {
61+ ivMyPageEditFrame.setOnClickListener {
62+ val intent = Intent (requireContext(), MyPageEditNameActivity ::class .java)
63+ intent.putExtra(EXTRA_NICK_NAME , " ${viewModel.nickName.value} " )
64+ val stampResId = getStampResourceId()
65+ intent.putExtra(EXTRA_PROFILE , stampResId)
66+ resultEditNameLauncher.launch(intent)
67+ }
10668
107- binding.viewMyPageMainRewardFrame.setOnClickListener {
108- Analytics .logClickedItemEvent(EVENT_CLICK_GOAL_REWARD )
109- startActivity(Intent (requireContext(), MyRewardActivity ::class .java))
110- requireActivity().overridePendingTransition(
111- R .anim.slide_in_right, R .anim.slide_out_left
112- )
113- }
114- binding.viewMyPageMainHistoryFrame.setOnClickListener {
115- Analytics .logClickedItemEvent(EVENT_CLICK_RUNNING_RECORD )
116- startActivity(Intent (requireContext(), MyHistoryActivity ::class .java))
117- requireActivity().overridePendingTransition(
118- R .anim.slide_in_right, R .anim.slide_out_left
119- )
120- }
69+ viewMyPageMainRewardFrame.setOnClickListener {
70+ Analytics .logClickedItemEvent(EVENT_CLICK_GOAL_REWARD )
71+ navigateTo<MyRewardActivity >()
72+ }
73+ viewMyPageMainHistoryFrame.setOnClickListener {
74+ Analytics .logClickedItemEvent(EVENT_CLICK_RUNNING_RECORD )
75+ navigateTo<MyHistoryActivity >()
76+ }
12177
122- binding.viewMyPageMainUploadFrame.setOnClickListener {
123- Analytics .logClickedItemEvent(EVENT_CLICK_UPLOADED_COURSE )
124- startActivity(Intent (requireContext(), MyUploadActivity ::class .java))
125- requireActivity().overridePendingTransition(
126- R .anim.slide_in_right, R .anim.slide_out_left
127- )
128- }
129- binding.viewMyPageMainSettingFrame.setOnClickListener {
130- moveToSettingFragment()
131- }
132- binding.viewMyPageMainKakaoChannelInquiryFrame.setOnClickListener {
133- inquiryKakao()
78+ viewMyPageMainUploadFrame.setOnClickListener {
79+ Analytics .logClickedItemEvent(EVENT_CLICK_UPLOADED_COURSE )
80+ navigateTo<MyUploadActivity >()
81+ }
82+ viewMyPageMainSettingFrame.setOnClickListener {
83+ moveToSettingFragment()
84+ }
85+ viewMyPageMainKakaoChannelInquiryFrame.setOnClickListener {
86+ inquiryKakao()
87+ }
13488 }
13589 }
13690
@@ -149,30 +103,14 @@ class MyPageFragment : BindingFragment<FragmentMyPageBinding>(R.layout.fragment_
149103
150104 viewModel.userInfoState.observe(viewLifecycleOwner) {
151105 when (it) {
152- UiState .Empty -> binding.indeterminateBar.isVisible = false
153- UiState .Loading -> {
154- binding.indeterminateBar.isVisible = true
155- binding.ivMyPageEditFrame.isClickable = false
156- binding.viewMyPageMainSettingFrame.isClickable = false
157- }
158-
106+ UiState .Empty -> setLoadingState(false )
107+ UiState .Loading -> setLoadingState(true )
159108 UiState .Success -> {
160- binding.indeterminateBar.isVisible = false
161- val stampResId = requireContext().getStampResId(
162- viewModel.stampId.value,
163- RES_NAME ,
164- RES_STAMP_TYPE ,
165- requireContext().packageName
166- )
109+ setLoadingState(false )
110+ val stampResId = getStampResourceId()
167111 viewModel.setProfileImg(stampResId)
168- binding.ivMyPageEditFrame.isClickable = true
169- binding.viewMyPageMainSettingFrame.isClickable = true
170- }
171-
172- UiState .Failure -> {
173- binding.indeterminateBar.isVisible = false
174- Timber .tag(ContentValues .TAG ).d(" Failure : ${viewModel.errorMessage.value} " )
175112 }
113+ UiState .Failure -> setLoadingState(false )
176114 }
177115 }
178116 }
@@ -182,6 +120,30 @@ class MyPageFragment : BindingFragment<FragmentMyPageBinding>(R.layout.fragment_
182120 KakaoCustomTabsClient .openWithDefault(requireActivity(), url)
183121 }
184122
123+ private fun getStampResourceId (): Int {
124+ return requireContext().getStampResId(
125+ stampId = viewModel.stampId.value,
126+ resNameParam = RES_NAME ,
127+ resType = RES_STAMP_TYPE ,
128+ packageName = requireContext().packageName
129+ )
130+ }
131+
132+ private fun setLoadingState (isLoading : Boolean ) {
133+ with (binding) {
134+ indeterminateBar.isVisible = isLoading
135+ ivMyPageEditFrame.isClickable = ! isLoading
136+ viewMyPageMainSettingFrame.isClickable = ! isLoading
137+ }
138+ }
139+
140+ private inline fun <reified T : Activity > navigateTo () {
141+ startActivity(Intent (requireContext(), T ::class .java))
142+ requireActivity().overridePendingTransition(
143+ R .anim.slide_in_right, R .anim.slide_out_left
144+ )
145+ }
146+
185147 companion object {
186148 const val RES_NAME = " mypage_img_stamp_"
187149 const val RES_STAMP_TYPE = " drawable"
0 commit comments