Skip to content

Commit

Permalink
Simplify lambdas into action
Browse files Browse the repository at this point in the history
Reduces amount of passing and potentially making mistake
  • Loading branch information
mlykotom committed Nov 8, 2024
1 parent a434093 commit f6ec85a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,11 @@ import com.example.jetcaster.R
import com.example.jetcaster.core.domain.testing.PreviewCategories
import com.example.jetcaster.core.domain.testing.PreviewPodcastEpisodes
import com.example.jetcaster.core.domain.testing.PreviewPodcasts
import com.example.jetcaster.core.model.CategoryInfo
import com.example.jetcaster.core.model.EpisodeInfo
import com.example.jetcaster.core.model.FilterableCategoriesModel
import com.example.jetcaster.core.model.LibraryInfo
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
import com.example.jetcaster.core.model.PodcastInfo
import com.example.jetcaster.core.player.model.PlayerEpisode
import com.example.jetcaster.designsystem.component.PodcastImage
import com.example.jetcaster.ui.home.discover.discoverItems
import com.example.jetcaster.ui.home.library.libraryItems
Expand Down Expand Up @@ -282,16 +280,11 @@ private fun HomeScreenReady(
filterableCategoriesModel = uiState.filterableCategoriesModel,
podcastCategoryFilterResult = uiState.podcastCategoryFilterResult,
library = uiState.library,
onHomeCategorySelected = viewModel::onHomeCategorySelected,
onCategorySelected = viewModel::onCategorySelected,
onPodcastUnfollowed = viewModel::onPodcastUnfollowed,
onHomeAction = viewModel::onHomeAction,
navigateToPodcastDetails = {
navigator.navigateTo(SupportingPaneScaffoldRole.Supporting, it.uri)
},
navigateToPlayer = navigateToPlayer,
onTogglePodcastFollowed = viewModel::onTogglePodcastFollowed,
onLibraryPodcastSelected = viewModel::onLibraryPodcastSelected,
onQueueEpisode = viewModel::onQueueEpisode,
modifier = Modifier.fillMaxSize()
)
}
Expand Down Expand Up @@ -409,20 +402,15 @@ private fun HomeScreen(
filterableCategoriesModel: FilterableCategoriesModel,
podcastCategoryFilterResult: PodcastCategoryFilterResult,
library: LibraryInfo,
onPodcastUnfollowed: (PodcastInfo) -> Unit,
onHomeCategorySelected: (HomeCategory) -> Unit,
onCategorySelected: (CategoryInfo) -> Unit,
onHomeAction: (HomeAction) -> Unit,
navigateToPodcastDetails: (PodcastInfo) -> Unit,
navigateToPlayer: (EpisodeInfo) -> Unit,
onTogglePodcastFollowed: (PodcastInfo) -> Unit,
onLibraryPodcastSelected: (PodcastInfo?) -> Unit,
onQueueEpisode: (PlayerEpisode) -> Unit,
modifier: Modifier = Modifier
) {
// Effect that changes the home category selection when there are no subscribed podcasts
LaunchedEffect(key1 = featuredPodcasts) {
if (featuredPodcasts.isEmpty()) {
onHomeCategorySelected(HomeCategory.Discover)
onHomeAction(HomeAction.HomeCategorySelected(HomeCategory.Discover))
}
}

Expand Down Expand Up @@ -464,19 +452,16 @@ private fun HomeScreen(
podcastCategoryFilterResult = podcastCategoryFilterResult,
library = library,
modifier = Modifier.padding(contentPadding),
onPodcastUnfollowed = onPodcastUnfollowed,
onHomeCategorySelected = onHomeCategorySelected,
onCategorySelected = onCategorySelected,
onHomeAction = { action ->
if (action is HomeAction.QueueEpisode) {
coroutineScope.launch {
snackbarHostState.showSnackbar(snackBarText)
}
}
onHomeAction(action)
},
navigateToPodcastDetails = navigateToPodcastDetails,
navigateToPlayer = navigateToPlayer,
onTogglePodcastFollowed = onTogglePodcastFollowed,
onLibraryPodcastSelected = onLibraryPodcastSelected,
onQueueEpisode = {
coroutineScope.launch {
snackbarHostState.showSnackbar(snackBarText)
}
onQueueEpisode(it)
}
)
}
}
Expand All @@ -492,21 +477,16 @@ private fun HomeContent(
podcastCategoryFilterResult: PodcastCategoryFilterResult,
library: LibraryInfo,
modifier: Modifier = Modifier,
onPodcastUnfollowed: (PodcastInfo) -> Unit,
onHomeCategorySelected: (HomeCategory) -> Unit,
onCategorySelected: (CategoryInfo) -> Unit,
onHomeAction: (HomeAction) -> Unit,
navigateToPodcastDetails: (PodcastInfo) -> Unit,
navigateToPlayer: (EpisodeInfo) -> Unit,
onTogglePodcastFollowed: (PodcastInfo) -> Unit,
onLibraryPodcastSelected: (PodcastInfo?) -> Unit,
onQueueEpisode: (PlayerEpisode) -> Unit,
) {
val pagerState = rememberPagerState { featuredPodcasts.size }
LaunchedEffect(pagerState, featuredPodcasts) {
snapshotFlow { pagerState.currentPage }
.collect {
val podcast = featuredPodcasts.getOrNull(it)
onLibraryPodcastSelected(podcast)
onHomeAction(HomeAction.LibraryPodcastSelected(podcast))
}
}

Expand All @@ -520,13 +500,9 @@ private fun HomeContent(
podcastCategoryFilterResult = podcastCategoryFilterResult,
library = library,
modifier = modifier,
onPodcastUnfollowed = onPodcastUnfollowed,
onHomeCategorySelected = onHomeCategorySelected,
onCategorySelected = onCategorySelected,
onHomeAction = onHomeAction,
navigateToPodcastDetails = navigateToPodcastDetails,
navigateToPlayer = navigateToPlayer,
onTogglePodcastFollowed = onTogglePodcastFollowed,
onQueueEpisode = onQueueEpisode,
)
}

Expand All @@ -541,13 +517,9 @@ private fun HomeContentGrid(
podcastCategoryFilterResult: PodcastCategoryFilterResult,
library: LibraryInfo,
modifier: Modifier = Modifier,
onHomeCategorySelected: (HomeCategory) -> Unit,
onPodcastUnfollowed: (PodcastInfo) -> Unit,
onCategorySelected: (CategoryInfo) -> Unit,
onHomeAction: (HomeAction) -> Unit,
navigateToPodcastDetails: (PodcastInfo) -> Unit,
navigateToPlayer: (EpisodeInfo) -> Unit,
onTogglePodcastFollowed: (PodcastInfo) -> Unit,
onQueueEpisode: (PlayerEpisode) -> Unit,
) {
LazyVerticalGrid(
columns = GridCells.Adaptive(362.dp),
Expand All @@ -558,7 +530,7 @@ private fun HomeContentGrid(
FollowedPodcastItem(
pagerState = pagerState,
items = featuredPodcasts,
onPodcastUnfollowed = onPodcastUnfollowed,
onPodcastUnfollowed = { onHomeAction(HomeAction.PodcastUnfollowed(it)) },
navigateToPodcastDetails = navigateToPodcastDetails,
modifier = Modifier
.fillMaxWidth()
Expand All @@ -573,7 +545,7 @@ private fun HomeContentGrid(
categories = homeCategories,
selectedCategory = selectedHomeCategory,
showHorizontalLine = false,
onCategorySelected = onHomeCategorySelected,
onCategorySelected = { onHomeAction(HomeAction.HomeCategorySelected(it)) },
modifier = Modifier.width(240.dp)
)
}
Expand All @@ -585,7 +557,7 @@ private fun HomeContentGrid(
libraryItems(
library = library,
navigateToPlayer = navigateToPlayer,
onQueueEpisode = onQueueEpisode
onQueueEpisode = { onHomeAction(HomeAction.QueueEpisode(it)) }
)
}

Expand All @@ -595,9 +567,11 @@ private fun HomeContentGrid(
podcastCategoryFilterResult = podcastCategoryFilterResult,
navigateToPodcastDetails = navigateToPodcastDetails,
navigateToPlayer = navigateToPlayer,
onCategorySelected = onCategorySelected,
onTogglePodcastFollowed = onTogglePodcastFollowed,
onQueueEpisode = onQueueEpisode
onCategorySelected = { onHomeAction(HomeAction.CategorySelected(it)) },
onTogglePodcastFollowed = {
onHomeAction(HomeAction.TogglePodcastFollowed(it))
},
onQueueEpisode = { onHomeAction(HomeAction.QueueEpisode(it)) },
)
}
}
Expand Down Expand Up @@ -824,14 +798,9 @@ private fun PreviewHome() {
episodes = PreviewPodcastEpisodes
),
library = LibraryInfo(),
onCategorySelected = {},
onPodcastUnfollowed = {},
onHomeAction = {},
navigateToPodcastDetails = {},
navigateToPlayer = {},
onHomeCategorySelected = {},
onTogglePodcastFollowed = {},
onLibraryPodcastSelected = {},
onQueueEpisode = {}
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,31 +154,42 @@ class HomeViewModel @Inject constructor(
}
}

fun onCategorySelected(category: CategoryInfo) {
fun onHomeAction(action: HomeAction) {
when (action) {
is HomeAction.CategorySelected -> onCategorySelected(action.category)
is HomeAction.HomeCategorySelected -> onHomeCategorySelected(action.category)
is HomeAction.LibraryPodcastSelected -> onLibraryPodcastSelected(action.podcast)
is HomeAction.PodcastUnfollowed -> onPodcastUnfollowed(action.podcast)
is HomeAction.QueueEpisode -> onQueueEpisode(action.episode)
is HomeAction.TogglePodcastFollowed -> onTogglePodcastFollowed(action.podcast)
}
}

private fun onCategorySelected(category: CategoryInfo) {
_selectedCategory.value = category
}

fun onHomeCategorySelected(category: HomeCategory) {
private fun onHomeCategorySelected(category: HomeCategory) {
selectedHomeCategory.value = category
}

fun onPodcastUnfollowed(podcast: PodcastInfo) {
private fun onPodcastUnfollowed(podcast: PodcastInfo) {
viewModelScope.launch {
podcastStore.unfollowPodcast(podcast.uri)
}
}

fun onTogglePodcastFollowed(podcast: PodcastInfo) {
private fun onTogglePodcastFollowed(podcast: PodcastInfo) {
viewModelScope.launch {
podcastStore.togglePodcastFollowed(podcast.uri)
}
}

fun onLibraryPodcastSelected(podcast: PodcastInfo?) {
private fun onLibraryPodcastSelected(podcast: PodcastInfo?) {
selectedLibraryPodcast.value = podcast
}

fun onQueueEpisode(episode: PlayerEpisode) {
private fun onQueueEpisode(episode: PlayerEpisode) {
episodePlayer.addToQueue(episode)
}
}
Expand All @@ -192,6 +203,16 @@ enum class HomeCategory {
Library, Discover
}

@Immutable
sealed interface HomeAction {
data class CategorySelected(val category: CategoryInfo) : HomeAction
data class HomeCategorySelected(val category: HomeCategory) : HomeAction
data class PodcastUnfollowed(val podcast: PodcastInfo) : HomeAction
data class TogglePodcastFollowed(val podcast: PodcastInfo) : HomeAction
data class LibraryPodcastSelected(val podcast: PodcastInfo?) : HomeAction
data class QueueEpisode(val episode: PlayerEpisode) : HomeAction
}

@Immutable
data class HomeScreenUiState(
val isLoading: Boolean = true,
Expand Down

0 comments on commit f6ec85a

Please sign in to comment.