Skip to content

Commit f6ec85a

Browse files
committed
Simplify lambdas into action
Reduces amount of passing and potentially making mistake
1 parent a434093 commit f6ec85a

File tree

2 files changed

+51
-61
lines changed

2 files changed

+51
-61
lines changed

Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt

Lines changed: 24 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,11 @@ import com.example.jetcaster.R
106106
import com.example.jetcaster.core.domain.testing.PreviewCategories
107107
import com.example.jetcaster.core.domain.testing.PreviewPodcastEpisodes
108108
import com.example.jetcaster.core.domain.testing.PreviewPodcasts
109-
import com.example.jetcaster.core.model.CategoryInfo
110109
import com.example.jetcaster.core.model.EpisodeInfo
111110
import com.example.jetcaster.core.model.FilterableCategoriesModel
112111
import com.example.jetcaster.core.model.LibraryInfo
113112
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
114113
import com.example.jetcaster.core.model.PodcastInfo
115-
import com.example.jetcaster.core.player.model.PlayerEpisode
116114
import com.example.jetcaster.designsystem.component.PodcastImage
117115
import com.example.jetcaster.ui.home.discover.discoverItems
118116
import com.example.jetcaster.ui.home.library.libraryItems
@@ -282,16 +280,11 @@ private fun HomeScreenReady(
282280
filterableCategoriesModel = uiState.filterableCategoriesModel,
283281
podcastCategoryFilterResult = uiState.podcastCategoryFilterResult,
284282
library = uiState.library,
285-
onHomeCategorySelected = viewModel::onHomeCategorySelected,
286-
onCategorySelected = viewModel::onCategorySelected,
287-
onPodcastUnfollowed = viewModel::onPodcastUnfollowed,
283+
onHomeAction = viewModel::onHomeAction,
288284
navigateToPodcastDetails = {
289285
navigator.navigateTo(SupportingPaneScaffoldRole.Supporting, it.uri)
290286
},
291287
navigateToPlayer = navigateToPlayer,
292-
onTogglePodcastFollowed = viewModel::onTogglePodcastFollowed,
293-
onLibraryPodcastSelected = viewModel::onLibraryPodcastSelected,
294-
onQueueEpisode = viewModel::onQueueEpisode,
295288
modifier = Modifier.fillMaxSize()
296289
)
297290
}
@@ -409,20 +402,15 @@ private fun HomeScreen(
409402
filterableCategoriesModel: FilterableCategoriesModel,
410403
podcastCategoryFilterResult: PodcastCategoryFilterResult,
411404
library: LibraryInfo,
412-
onPodcastUnfollowed: (PodcastInfo) -> Unit,
413-
onHomeCategorySelected: (HomeCategory) -> Unit,
414-
onCategorySelected: (CategoryInfo) -> Unit,
405+
onHomeAction: (HomeAction) -> Unit,
415406
navigateToPodcastDetails: (PodcastInfo) -> Unit,
416407
navigateToPlayer: (EpisodeInfo) -> Unit,
417-
onTogglePodcastFollowed: (PodcastInfo) -> Unit,
418-
onLibraryPodcastSelected: (PodcastInfo?) -> Unit,
419-
onQueueEpisode: (PlayerEpisode) -> Unit,
420408
modifier: Modifier = Modifier
421409
) {
422410
// Effect that changes the home category selection when there are no subscribed podcasts
423411
LaunchedEffect(key1 = featuredPodcasts) {
424412
if (featuredPodcasts.isEmpty()) {
425-
onHomeCategorySelected(HomeCategory.Discover)
413+
onHomeAction(HomeAction.HomeCategorySelected(HomeCategory.Discover))
426414
}
427415
}
428416

@@ -464,19 +452,16 @@ private fun HomeScreen(
464452
podcastCategoryFilterResult = podcastCategoryFilterResult,
465453
library = library,
466454
modifier = Modifier.padding(contentPadding),
467-
onPodcastUnfollowed = onPodcastUnfollowed,
468-
onHomeCategorySelected = onHomeCategorySelected,
469-
onCategorySelected = onCategorySelected,
455+
onHomeAction = { action ->
456+
if (action is HomeAction.QueueEpisode) {
457+
coroutineScope.launch {
458+
snackbarHostState.showSnackbar(snackBarText)
459+
}
460+
}
461+
onHomeAction(action)
462+
},
470463
navigateToPodcastDetails = navigateToPodcastDetails,
471464
navigateToPlayer = navigateToPlayer,
472-
onTogglePodcastFollowed = onTogglePodcastFollowed,
473-
onLibraryPodcastSelected = onLibraryPodcastSelected,
474-
onQueueEpisode = {
475-
coroutineScope.launch {
476-
snackbarHostState.showSnackbar(snackBarText)
477-
}
478-
onQueueEpisode(it)
479-
}
480465
)
481466
}
482467
}
@@ -492,21 +477,16 @@ private fun HomeContent(
492477
podcastCategoryFilterResult: PodcastCategoryFilterResult,
493478
library: LibraryInfo,
494479
modifier: Modifier = Modifier,
495-
onPodcastUnfollowed: (PodcastInfo) -> Unit,
496-
onHomeCategorySelected: (HomeCategory) -> Unit,
497-
onCategorySelected: (CategoryInfo) -> Unit,
480+
onHomeAction: (HomeAction) -> Unit,
498481
navigateToPodcastDetails: (PodcastInfo) -> Unit,
499482
navigateToPlayer: (EpisodeInfo) -> Unit,
500-
onTogglePodcastFollowed: (PodcastInfo) -> Unit,
501-
onLibraryPodcastSelected: (PodcastInfo?) -> Unit,
502-
onQueueEpisode: (PlayerEpisode) -> Unit,
503483
) {
504484
val pagerState = rememberPagerState { featuredPodcasts.size }
505485
LaunchedEffect(pagerState, featuredPodcasts) {
506486
snapshotFlow { pagerState.currentPage }
507487
.collect {
508488
val podcast = featuredPodcasts.getOrNull(it)
509-
onLibraryPodcastSelected(podcast)
489+
onHomeAction(HomeAction.LibraryPodcastSelected(podcast))
510490
}
511491
}
512492

@@ -520,13 +500,9 @@ private fun HomeContent(
520500
podcastCategoryFilterResult = podcastCategoryFilterResult,
521501
library = library,
522502
modifier = modifier,
523-
onPodcastUnfollowed = onPodcastUnfollowed,
524-
onHomeCategorySelected = onHomeCategorySelected,
525-
onCategorySelected = onCategorySelected,
503+
onHomeAction = onHomeAction,
526504
navigateToPodcastDetails = navigateToPodcastDetails,
527505
navigateToPlayer = navigateToPlayer,
528-
onTogglePodcastFollowed = onTogglePodcastFollowed,
529-
onQueueEpisode = onQueueEpisode,
530506
)
531507
}
532508

@@ -541,13 +517,9 @@ private fun HomeContentGrid(
541517
podcastCategoryFilterResult: PodcastCategoryFilterResult,
542518
library: LibraryInfo,
543519
modifier: Modifier = Modifier,
544-
onHomeCategorySelected: (HomeCategory) -> Unit,
545-
onPodcastUnfollowed: (PodcastInfo) -> Unit,
546-
onCategorySelected: (CategoryInfo) -> Unit,
520+
onHomeAction: (HomeAction) -> Unit,
547521
navigateToPodcastDetails: (PodcastInfo) -> Unit,
548522
navigateToPlayer: (EpisodeInfo) -> Unit,
549-
onTogglePodcastFollowed: (PodcastInfo) -> Unit,
550-
onQueueEpisode: (PlayerEpisode) -> Unit,
551523
) {
552524
LazyVerticalGrid(
553525
columns = GridCells.Adaptive(362.dp),
@@ -558,7 +530,7 @@ private fun HomeContentGrid(
558530
FollowedPodcastItem(
559531
pagerState = pagerState,
560532
items = featuredPodcasts,
561-
onPodcastUnfollowed = onPodcastUnfollowed,
533+
onPodcastUnfollowed = { onHomeAction(HomeAction.PodcastUnfollowed(it)) },
562534
navigateToPodcastDetails = navigateToPodcastDetails,
563535
modifier = Modifier
564536
.fillMaxWidth()
@@ -573,7 +545,7 @@ private fun HomeContentGrid(
573545
categories = homeCategories,
574546
selectedCategory = selectedHomeCategory,
575547
showHorizontalLine = false,
576-
onCategorySelected = onHomeCategorySelected,
548+
onCategorySelected = { onHomeAction(HomeAction.HomeCategorySelected(it)) },
577549
modifier = Modifier.width(240.dp)
578550
)
579551
}
@@ -585,7 +557,7 @@ private fun HomeContentGrid(
585557
libraryItems(
586558
library = library,
587559
navigateToPlayer = navigateToPlayer,
588-
onQueueEpisode = onQueueEpisode
560+
onQueueEpisode = { onHomeAction(HomeAction.QueueEpisode(it)) }
589561
)
590562
}
591563

@@ -595,9 +567,11 @@ private fun HomeContentGrid(
595567
podcastCategoryFilterResult = podcastCategoryFilterResult,
596568
navigateToPodcastDetails = navigateToPodcastDetails,
597569
navigateToPlayer = navigateToPlayer,
598-
onCategorySelected = onCategorySelected,
599-
onTogglePodcastFollowed = onTogglePodcastFollowed,
600-
onQueueEpisode = onQueueEpisode
570+
onCategorySelected = { onHomeAction(HomeAction.CategorySelected(it)) },
571+
onTogglePodcastFollowed = {
572+
onHomeAction(HomeAction.TogglePodcastFollowed(it))
573+
},
574+
onQueueEpisode = { onHomeAction(HomeAction.QueueEpisode(it)) },
601575
)
602576
}
603577
}
@@ -824,14 +798,9 @@ private fun PreviewHome() {
824798
episodes = PreviewPodcastEpisodes
825799
),
826800
library = LibraryInfo(),
827-
onCategorySelected = {},
828-
onPodcastUnfollowed = {},
801+
onHomeAction = {},
829802
navigateToPodcastDetails = {},
830803
navigateToPlayer = {},
831-
onHomeCategorySelected = {},
832-
onTogglePodcastFollowed = {},
833-
onLibraryPodcastSelected = {},
834-
onQueueEpisode = {}
835804
)
836805
}
837806
}

Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/HomeViewModel.kt

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,31 +154,42 @@ class HomeViewModel @Inject constructor(
154154
}
155155
}
156156

157-
fun onCategorySelected(category: CategoryInfo) {
157+
fun onHomeAction(action: HomeAction) {
158+
when (action) {
159+
is HomeAction.CategorySelected -> onCategorySelected(action.category)
160+
is HomeAction.HomeCategorySelected -> onHomeCategorySelected(action.category)
161+
is HomeAction.LibraryPodcastSelected -> onLibraryPodcastSelected(action.podcast)
162+
is HomeAction.PodcastUnfollowed -> onPodcastUnfollowed(action.podcast)
163+
is HomeAction.QueueEpisode -> onQueueEpisode(action.episode)
164+
is HomeAction.TogglePodcastFollowed -> onTogglePodcastFollowed(action.podcast)
165+
}
166+
}
167+
168+
private fun onCategorySelected(category: CategoryInfo) {
158169
_selectedCategory.value = category
159170
}
160171

161-
fun onHomeCategorySelected(category: HomeCategory) {
172+
private fun onHomeCategorySelected(category: HomeCategory) {
162173
selectedHomeCategory.value = category
163174
}
164175

165-
fun onPodcastUnfollowed(podcast: PodcastInfo) {
176+
private fun onPodcastUnfollowed(podcast: PodcastInfo) {
166177
viewModelScope.launch {
167178
podcastStore.unfollowPodcast(podcast.uri)
168179
}
169180
}
170181

171-
fun onTogglePodcastFollowed(podcast: PodcastInfo) {
182+
private fun onTogglePodcastFollowed(podcast: PodcastInfo) {
172183
viewModelScope.launch {
173184
podcastStore.togglePodcastFollowed(podcast.uri)
174185
}
175186
}
176187

177-
fun onLibraryPodcastSelected(podcast: PodcastInfo?) {
188+
private fun onLibraryPodcastSelected(podcast: PodcastInfo?) {
178189
selectedLibraryPodcast.value = podcast
179190
}
180191

181-
fun onQueueEpisode(episode: PlayerEpisode) {
192+
private fun onQueueEpisode(episode: PlayerEpisode) {
182193
episodePlayer.addToQueue(episode)
183194
}
184195
}
@@ -192,6 +203,16 @@ enum class HomeCategory {
192203
Library, Discover
193204
}
194205

206+
@Immutable
207+
sealed interface HomeAction {
208+
data class CategorySelected(val category: CategoryInfo) : HomeAction
209+
data class HomeCategorySelected(val category: HomeCategory) : HomeAction
210+
data class PodcastUnfollowed(val podcast: PodcastInfo) : HomeAction
211+
data class TogglePodcastFollowed(val podcast: PodcastInfo) : HomeAction
212+
data class LibraryPodcastSelected(val podcast: PodcastInfo?) : HomeAction
213+
data class QueueEpisode(val episode: PlayerEpisode) : HomeAction
214+
}
215+
195216
@Immutable
196217
data class HomeScreenUiState(
197218
val isLoading: Boolean = true,

0 commit comments

Comments
 (0)