Skip to content

Commit 2d5ed36

Browse files
authored
Merge pull request #366 from Runnect/feature/guest-view-center-position
리팩토링
2 parents e51282d + 7363da5 commit 2d5ed36

File tree

6 files changed

+237
-236
lines changed

6 files changed

+237
-236
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.runnect.runnect.binding
2+
3+
import android.content.Intent
4+
import android.os.Bundle
5+
import android.view.View
6+
import android.widget.Button
7+
import androidx.annotation.LayoutRes
8+
import androidx.core.view.isVisible
9+
import androidx.databinding.ViewDataBinding
10+
import com.runnect.runnect.R
11+
import com.runnect.runnect.presentation.MainActivity
12+
import com.runnect.runnect.presentation.login.LoginActivity
13+
14+
abstract class BaseVisitorFragment<T : ViewDataBinding>(
15+
@LayoutRes private val layoutRes: Int
16+
) : BindingFragment<T>(layoutRes) {
17+
18+
abstract val visitorContainer: View
19+
abstract val contentViews: List<View>
20+
21+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
22+
super.onViewCreated(view, savedInstanceState)
23+
24+
if (MainActivity.isVisitorMode) {
25+
showVisitorMode()
26+
} else {
27+
showContent()
28+
onContentModeInit()
29+
}
30+
}
31+
32+
private fun showVisitorMode() {
33+
visitorContainer.isVisible = true
34+
visitorContainer.findViewById<Button>(R.id.btn_visitor_mode)?.setOnClickListener {
35+
navigateToLogin()
36+
}
37+
contentViews.forEach { it.isVisible = false }
38+
}
39+
40+
private fun showContent() {
41+
visitorContainer.isVisible = false
42+
contentViews.forEach { it.isVisible = true }
43+
}
44+
45+
private fun navigateToLogin() {
46+
val intent = Intent(requireContext(), LoginActivity::class.java)
47+
startActivity(intent)
48+
requireActivity().finish()
49+
}
50+
51+
abstract fun onContentModeInit()
52+
}

app/src/main/java/com/runnect/runnect/presentation/mypage/MyPageFragment.kt

Lines changed: 68 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.runnect.runnect.presentation.mypage
22

3+
import android.app.Activity
34
import android.app.Activity.RESULT_OK
4-
import android.content.ContentValues
55
import android.content.Intent
66
import android.os.Bundle
7-
import android.view.View
87
import androidx.activity.result.ActivityResultLauncher
98
import androidx.activity.result.contract.ActivityResultContracts
109
import androidx.core.view.isVisible
@@ -15,10 +14,8 @@ import com.kakao.sdk.common.util.KakaoCustomTabsClient
1514
import com.kakao.sdk.talk.TalkApiClient
1615
import com.runnect.runnect.BuildConfig
1716
import com.runnect.runnect.R
18-
import com.runnect.runnect.binding.BindingFragment
17+
import com.runnect.runnect.binding.BaseVisitorFragment
1918
import com.runnect.runnect.databinding.FragmentMyPageBinding
20-
import com.runnect.runnect.presentation.MainActivity
21-
import com.runnect.runnect.presentation.login.LoginActivity
2219
import com.runnect.runnect.presentation.mypage.editname.MyPageEditNameActivity
2320
import com.runnect.runnect.presentation.mypage.history.MyHistoryActivity
2421
import com.runnect.runnect.presentation.mypage.reward.MyRewardActivity
@@ -31,106 +28,63 @@ import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_RUNNING_RECORD
3128
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_UPLOADED_COURSE
3229
import com.runnect.runnect.util.extension.getStampResId
3330
import 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"

app/src/main/java/com/runnect/runnect/presentation/storage/StorageMainFragment.kt

Lines changed: 12 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,30 @@
11
package com.runnect.runnect.presentation.storage
22

3-
import android.content.Intent
4-
import android.os.Bundle
5-
import android.view.View
6-
import androidx.core.view.isVisible
73
import androidx.fragment.app.add
84
import androidx.fragment.app.commit
95
import androidx.fragment.app.replace
106
import androidx.fragment.app.viewModels
117
import com.google.android.material.tabs.TabLayout
128
import com.runnect.runnect.R
13-
import com.runnect.runnect.binding.BindingFragment
9+
import com.runnect.runnect.binding.BaseVisitorFragment
1410
import com.runnect.runnect.databinding.FragmentStorageMainBinding
15-
import com.runnect.runnect.presentation.MainActivity
16-
import com.runnect.runnect.presentation.login.LoginActivity
1711
import com.runnect.runnect.util.analytics.Analytics
1812
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_MY_DRAW_STORAGE_COURSE_DRAWING_START
1913
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_SCRAP_COURSE
2014
import dagger.hilt.android.AndroidEntryPoint
21-
import timber.log.Timber
2215

2316
@AndroidEntryPoint
2417
class StorageMainFragment :
25-
BindingFragment<FragmentStorageMainBinding>(R.layout.fragment_storage_main) {
18+
BaseVisitorFragment<FragmentStorageMainBinding>(R.layout.fragment_storage_main) {
2619
val viewModel: StorageViewModel by viewModels()
27-
var isVisitorMode: Boolean = MainActivity.isVisitorMode
20+
21+
override val visitorContainer by lazy { binding.clVisitorMode }
22+
override val contentViews by lazy { listOf(binding.storageTab, binding.tabUnderLine) }
2823

29-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
30-
super.onViewCreated(view, savedInstanceState)
31-
if (isVisitorMode) {
32-
activateVisitorMode()
33-
} else {
34-
deactivateVisitorMode()
35-
}
36-
}
37-
38-
private fun activateVisitorMode() {
39-
with(binding) {
40-
ivVisitorMode.isVisible = true
41-
tvVisitorMode.isVisible = true
42-
btnVisitorMode.isVisible = true
43-
storageTab.isVisible = false
44-
tabUnderLine.isVisible = false
45-
46-
btnVisitorMode.setOnClickListener {
47-
val intent = Intent(requireContext(), LoginActivity::class.java)
48-
startActivity(intent)
49-
requireActivity().finish()
50-
}
51-
}
52-
}
53-
54-
private fun deactivateVisitorMode() {
55-
with(binding) {
56-
ivVisitorMode.isVisible = false
57-
tvVisitorMode.isVisible = false
58-
btnVisitorMode.isVisible = false
59-
storageTab.isVisible = true
60-
tabUnderLine.isVisible = true
61-
62-
binding.lifecycleOwner = requireActivity()
63-
initView()
64-
tabLayoutAction()
65-
}
24+
override fun onContentModeInit() {
25+
binding.lifecycleOwner = requireActivity()
26+
initView()
27+
tabLayoutAction()
6628
}
6729

6830
private fun initView() {
@@ -81,16 +43,16 @@ class StorageMainFragment :
8143
EVENT_CLICK_MY_DRAW_STORAGE_COURSE_DRAWING_START
8244
)
8345
replace<StorageMyDrawFragment>(R.id.fl_main)
84-
Timber.tag("hu").d("내가 그린 코스로 이동하였음")
8546
}
8647

8748
1 -> childFragmentManager.commit {
8849
Analytics.logClickedItemEvent(EVENT_CLICK_SCRAP_COURSE)
8950
replace<StorageScrapFragment>(R.id.fl_main)
90-
Timber.tag("hu").d("스크랩으로 이동하였음")
9151
}
9252

93-
else -> IllegalArgumentException("${this::class.java.simpleName} Not found menu item id")
53+
else -> childFragmentManager.commit {
54+
replace<StorageMyDrawFragment>(R.id.fl_main)
55+
}
9456
}
9557
}
9658

0 commit comments

Comments
 (0)