Skip to content

Commit d7ca06e

Browse files
authored
๐Ÿ”€ #78 from boostcampwm-2022/refactor/functionConvention
shimmer ์„ค์ • ๋ณ€๊ฒฝ, ๋ฉ”์„œ๋“œ ์ปจ๋ฒค์…˜ ๋งž์ถ”๊ธฐ, ์šด๋™ ์ข…๋ฃŒ ์•Œ๋ฆผ ์ •๋ ฌ ๋กœ์ง ๋ณ€๊ฒฝ
2 parents 40ca5f8 + d3e0f42 commit d7ca06e

File tree

4 files changed

+86
-65
lines changed

4 files changed

+86
-65
lines changed

โ€Žpresentation/src/main/java/com/whyranoid/presentation/community/CommunityFragment.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ internal class CommunityFragment :
1616

1717
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1818
super.onViewCreated(view, savedInstanceState)
19+
initViews()
20+
}
1921

22+
private fun initViews() {
2023
val adapter = CommunityCategoryAdapter(this)
2124
setTabLayout(adapter)
2225
}

โ€Žpresentation/src/main/java/com/whyranoid/presentation/community/CommunityItemFragment.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.core.view.isVisible
66
import androidx.fragment.app.activityViewModels
77
import androidx.lifecycle.lifecycleScope
88
import androidx.navigation.fragment.findNavController
9+
import androidx.paging.LoadState
910
import com.google.android.material.snackbar.Snackbar
1011
import com.whyranoid.presentation.R
1112
import com.whyranoid.presentation.base.BaseFragment
@@ -109,6 +110,13 @@ internal class CommunityItemFragment :
109110
viewModel.onGroupJoinButtonClicked(it)
110111
}
111112
)
113+
114+
viewLifecycleOwner.repeatWhenUiStarted {
115+
postAdapter.loadStateFlow.collectLatest { loadStates ->
116+
binding.shimmerCommunity.isVisible = loadStates.refresh is LoadState.Loading
117+
}
118+
}
119+
112120
binding.rvCommunity.adapter = postAdapter
113121

114122
viewLifecycleOwner.repeatWhenUiStarted {
@@ -119,7 +127,6 @@ internal class CommunityItemFragment :
119127

120128
viewLifecycleOwner.repeatWhenUiStarted {
121129
viewModel.pagingPost.collectLatest { postList ->
122-
removeShimmer()
123130
postAdapter.submitData(postList)
124131
}
125132
}
@@ -133,9 +140,9 @@ internal class CommunityItemFragment :
133140
binding.rvCommunity.adapter = myGroupAdapter
134141

135142
viewLifecycleOwner.repeatWhenUiStarted {
136-
viewModel.myGroupList.collect { groupList ->
137-
removeShimmer()
143+
viewModel.myGroupList.collectLatest { groupList ->
138144
myGroupAdapter.submitList(groupList.sortedBy { it.name })
145+
removeShimmer()
139146
}
140147
}
141148
}
@@ -154,6 +161,13 @@ internal class CommunityItemFragment :
154161
}.show()
155162
}
156163
)
164+
165+
viewLifecycleOwner.repeatWhenUiStarted {
166+
postAdapter.loadStateFlow.collectLatest { loadStates ->
167+
binding.shimmerCommunity.isVisible = loadStates.refresh is LoadState.Loading
168+
}
169+
}
170+
157171
binding.rvCommunity.adapter = postAdapter
158172

159173
viewLifecycleOwner.repeatWhenUiStarted {
@@ -164,7 +178,6 @@ internal class CommunityItemFragment :
164178

165179
viewLifecycleOwner.repeatWhenUiStarted {
166180
viewModel.getMyPagingPostsUseCase().collectLatest { myPostList ->
167-
removeShimmer()
168181
postAdapter.submitData(myPostList)
169182
}
170183
}

โ€Žpresentation/src/main/java/com/whyranoid/presentation/community/group/detail/GroupDetailFragment.kt

Lines changed: 65 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.whyranoid.presentation.base.BaseFragment
1313
import com.whyranoid.presentation.databinding.FragmentGroupDetailBinding
1414
import com.whyranoid.presentation.util.repeatWhenUiStarted
1515
import dagger.hilt.android.AndroidEntryPoint
16+
import kotlinx.coroutines.flow.collectLatest
1617
import kotlinx.coroutines.launch
1718

1819
@AndroidEntryPoint
@@ -25,12 +26,24 @@ internal class GroupDetailFragment :
2526
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2627
super.onViewCreated(view, savedInstanceState)
2728

29+
initViews()
30+
observeState()
31+
}
32+
33+
private fun initViews() {
34+
binding.viewModel = viewModel
2835
setupMenu()
29-
handleEvent()
30-
setBindingData()
3136
setNotificationAdapter()
3237
}
3338

39+
private fun observeState() {
40+
viewLifecycleOwner.repeatWhenUiStarted {
41+
viewModel.eventFlow.collect { event ->
42+
handleEvent(event)
43+
}
44+
}
45+
}
46+
3447
private fun setupMenu() {
3548
viewLifecycleOwner.lifecycleScope.launch {
3649
with(binding.topAppBar) {
@@ -77,76 +90,68 @@ internal class GroupDetailFragment :
7790
}
7891
}
7992

80-
private fun handleEvent() {
81-
viewLifecycleOwner.repeatWhenUiStarted {
82-
viewModel.eventFlow.collect { event ->
83-
when (event) {
84-
Event.RecruitButtonClick -> {
85-
Snackbar.make(
86-
binding.root,
87-
getString(R.string.text_check_recruit),
88-
Snackbar.LENGTH_SHORT
89-
).setAction(R.string.text_recruit) {
90-
viewModel.onRecruitSnackBarButtonClick()
91-
}.show()
92-
}
93-
is Event.RecruitSnackBarButtonClick -> {
94-
if (event.isSuccess) {
95-
Snackbar.make(
96-
binding.root,
97-
getString(R.string.text_recruit_success),
98-
Snackbar.LENGTH_SHORT
99-
).show()
100-
} else {
101-
Snackbar.make(
102-
binding.root,
103-
getString(R.string.text_recruit_fail),
104-
Snackbar.LENGTH_SHORT
105-
).show()
106-
}
107-
}
108-
Event.ExitGroupButtonClick -> {
109-
Snackbar.make(
110-
binding.root,
111-
getString(R.string.text_check_exit_group),
112-
Snackbar.LENGTH_SHORT
113-
).setAction(getString(R.string.text_exit_group)) {
114-
viewModel.onExitGroupSnackBarButtonClick()
115-
}.show()
116-
}
117-
is Event.ExitGroupSnackBarButtonClick -> {
118-
if (event.isSuccess) {
119-
Snackbar.make(
120-
binding.root,
121-
getString(R.string.text_exit_group_success),
122-
Snackbar.LENGTH_SHORT
123-
).show()
124-
findNavController().popBackStack()
125-
} else {
126-
Snackbar.make(
127-
binding.root,
128-
getString(R.string.text_exit_group_fail),
129-
Snackbar.LENGTH_SHORT
130-
).show()
131-
}
132-
}
93+
private fun handleEvent(event: Event) {
94+
when (event) {
95+
Event.RecruitButtonClick -> {
96+
Snackbar.make(
97+
binding.root,
98+
getString(R.string.text_check_recruit),
99+
Snackbar.LENGTH_SHORT
100+
).setAction(R.string.text_recruit) {
101+
viewModel.onRecruitSnackBarButtonClick()
102+
}.show()
103+
}
104+
is Event.RecruitSnackBarButtonClick -> {
105+
if (event.isSuccess) {
106+
Snackbar.make(
107+
binding.root,
108+
getString(R.string.text_recruit_success),
109+
Snackbar.LENGTH_SHORT
110+
).show()
111+
} else {
112+
Snackbar.make(
113+
binding.root,
114+
getString(R.string.text_recruit_fail),
115+
Snackbar.LENGTH_SHORT
116+
).show()
117+
}
118+
}
119+
Event.ExitGroupButtonClick -> {
120+
Snackbar.make(
121+
binding.root,
122+
getString(R.string.text_check_exit_group),
123+
Snackbar.LENGTH_SHORT
124+
).setAction(getString(R.string.text_exit_group)) {
125+
viewModel.onExitGroupSnackBarButtonClick()
126+
}.show()
127+
}
128+
is Event.ExitGroupSnackBarButtonClick -> {
129+
if (event.isSuccess) {
130+
Snackbar.make(
131+
binding.root,
132+
getString(R.string.text_exit_group_success),
133+
Snackbar.LENGTH_SHORT
134+
).show()
135+
findNavController().popBackStack()
136+
} else {
137+
Snackbar.make(
138+
binding.root,
139+
getString(R.string.text_exit_group_fail),
140+
Snackbar.LENGTH_SHORT
141+
).show()
133142
}
134143
}
135144
}
136145
}
137146

138-
private fun setBindingData() {
139-
binding.viewModel = viewModel
140-
}
141-
142147
private fun setNotificationAdapter() {
143148
viewLifecycleOwner.lifecycleScope.launch {
144149
val uid = viewModel.getUidUseCase()
145150
val notificationAdapter = GroupNotificationAdapter(uid)
146151

147152
binding.notificationRecyclerView.adapter = notificationAdapter
148153
viewLifecycleOwner.repeatWhenUiStarted {
149-
viewModel.mergedNotifications.collect { notifications ->
154+
viewModel.mergedNotifications.collectLatest { notifications ->
150155
notificationAdapter.submitList(notifications)
151156
}
152157
}

โ€Žpresentation/src/main/java/com/whyranoid/presentation/community/group/detail/GroupDetailViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class GroupDetailViewModel @Inject constructor(
7474
.sortedBy { notification ->
7575
when (notification) {
7676
is StartNotification -> notification.startedAt
77-
is FinishNotification -> notification.runningHistory.startedAt
77+
is FinishNotification -> notification.runningHistory.finishedAt
7878
}
7979
}
8080
}.launchIn(viewModelScope)

0 commit comments

Comments
ย (0)