@@ -71,6 +71,7 @@ import com.mr3y.podcaster.ui.components.TopBar
7171import com.mr3y.podcaster.ui.components.rememberHtmlToAnnotatedString
7272import com.mr3y.podcaster.ui.presenter.PodcasterAppState
7373import com.mr3y.podcaster.ui.presenter.RefreshResult
74+ import com.mr3y.podcaster.ui.presenter.episodedetails.EpisodeDetailsUIEvent
7475import com.mr3y.podcaster.ui.presenter.episodedetails.EpisodeDetailsUIState
7576import com.mr3y.podcaster.ui.presenter.episodedetails.EpisodeDetailsViewModel
7677import com.mr3y.podcaster.ui.preview.DynamicColorsParameterProvider
@@ -99,21 +100,25 @@ fun EpisodeDetailsScreen(
99100 EpisodeDetailsScreen (
100101 state = state,
101102 onNavigateUp = onNavigateUp,
102- onRetry = viewModel::retry,
103- onRefresh = viewModel::refresh,
104- onPlayEpisode = appState::play,
105- onPause = appState::pause,
106- onAddEpisodeToQueue = appState::addToQueue,
107- onRemoveEpisodeFromQueue = appState::removeFromQueue,
108- onDownloadingEpisode = appState::downloadEpisode,
109- onResumeDownloadingEpisode = appState::resumeDownloading,
110- onPauseDownloadingEpisode = appState::pauseDownloading,
111103 isSelected = state.episode?.id == currentlyPlayingEpisode?.episode?.id,
112104 playingStatus = currentlyPlayingEpisode?.playingStatus,
113- onConsumeErrorPlayingStatus = appState::consumeErrorPlayingStatus,
114105 externalContentPadding = contentPadding,
115106 excludedWindowInsets = excludedWindowInsets,
116- onConsumeResult = viewModel::consumeRefreshResult,
107+ eventSink = { event ->
108+ when (event) {
109+ is EpisodeDetailsUIEvent .Refresh -> viewModel.refresh()
110+ is EpisodeDetailsUIEvent .RefreshResultConsumed -> viewModel.consumeRefreshResult()
111+ is EpisodeDetailsUIEvent .Retry -> viewModel.retry()
112+ is EpisodeDetailsUIEvent .PlayEpisode -> appState.play(event.episode)
113+ is EpisodeDetailsUIEvent .Pause -> appState.pause()
114+ is EpisodeDetailsUIEvent .DownloadEpisode -> appState.downloadEpisode(event.episode)
115+ is EpisodeDetailsUIEvent .ResumeDownloading -> appState.resumeDownloading(event.episodeId)
116+ is EpisodeDetailsUIEvent .PauseDownloading -> appState.pauseDownloading(event.episodeId)
117+ is EpisodeDetailsUIEvent .AddEpisodeToQueue -> appState.addToQueue(event.episode)
118+ is EpisodeDetailsUIEvent .RemoveEpisodeFromQueue -> appState.removeFromQueue(event.episodeId)
119+ is EpisodeDetailsUIEvent .ErrorPlayingStatusConsumed -> appState.consumeErrorPlayingStatus()
120+ }
121+ },
117122 modifier = modifier,
118123 )
119124}
@@ -122,21 +127,11 @@ fun EpisodeDetailsScreen(
122127fun EpisodeDetailsScreen (
123128 state : EpisodeDetailsUIState ,
124129 onNavigateUp : () -> Unit ,
125- onRetry : () -> Unit ,
126- onRefresh : () -> Unit ,
127- onPlayEpisode : (Episode ) -> Unit ,
128- onPause : () -> Unit ,
129- onAddEpisodeToQueue : (Episode ) -> Unit ,
130- onRemoveEpisodeFromQueue : (episodeId: Long ) -> Unit ,
131- onDownloadingEpisode : (Episode ) -> Unit ,
132- onResumeDownloadingEpisode : (episodeId: Long ) -> Unit ,
133- onPauseDownloadingEpisode : (episodeId: Long ) -> Unit ,
134130 isSelected : Boolean ,
135131 playingStatus : PlayingStatus ? ,
136- onConsumeErrorPlayingStatus : () -> Unit ,
137132 externalContentPadding : PaddingValues ,
138133 excludedWindowInsets : WindowInsets ? ,
139- onConsumeResult : () -> Unit ,
134+ eventSink : (EpisodeDetailsUIEvent ) -> Unit ,
140135 modifier : Modifier = Modifier ,
141136) {
142137 val snackBarHostState = remember { SnackbarHostState () }
@@ -149,13 +144,13 @@ fun EpisodeDetailsScreen(
149144 snackBarHostState.showSnackbar(
150145 message = strings.episode_details_refresh_result_error,
151146 )
152- onConsumeResult( )
147+ eventSink( EpisodeDetailsUIEvent . RefreshResultConsumed )
153148 }
154149 is RefreshResult .Mixed -> {
155150 snackBarHostState.showSnackbar(
156151 message = strings.episode_details_refresh_result_mixed,
157152 )
158- onConsumeResult( )
153+ eventSink( EpisodeDetailsUIEvent . RefreshResultConsumed )
159154 }
160155 is RefreshResult .Ok , null -> {}
161156 }
@@ -164,7 +159,7 @@ fun EpisodeDetailsScreen(
164159 snackBarHostState.showSnackbar(
165160 message = strings.generic_error_message,
166161 )
167- onConsumeErrorPlayingStatus( )
162+ eventSink( EpisodeDetailsUIEvent . ErrorPlayingStatusConsumed )
168163 }
169164 else -> {}
170165 }
@@ -200,7 +195,7 @@ fun EpisodeDetailsScreen(
200195 }
201196 PullToRefresh (
202197 isRefreshingDone = ! state.isRefreshing,
203- onRefresh = onRefresh ,
198+ onRefresh = { eventSink( EpisodeDetailsUIEvent . Refresh ) } ,
204199 ) {
205200 Scaffold (
206201 topBar = {
@@ -243,7 +238,7 @@ fun EpisodeDetailsScreen(
243238 }
244239 state.episode == null -> {
245240 Error (
246- onRetry = onRetry ,
241+ onRetry = { eventSink( EpisodeDetailsUIEvent . Retry ) } ,
247242 modifier = Modifier
248243 .fillMaxSize()
249244 .align(Alignment .Center ),
@@ -257,14 +252,14 @@ fun EpisodeDetailsScreen(
257252 Header (
258253 episode = state.episode,
259254 downloadMetadata = state.downloadMetadata,
260- onPlay = onPlayEpisode ,
261- onPause = onPause ,
255+ onPlay = { eventSink( EpisodeDetailsUIEvent . PlayEpisode (it)) } ,
256+ onPause = { eventSink( EpisodeDetailsUIEvent . Pause ) } ,
262257 queueEpisodes = state.queueEpisodesIds,
263- onAddEpisodeToQueue = onAddEpisodeToQueue ,
264- onRemoveEpisodeFromQueue = onRemoveEpisodeFromQueue ,
265- onDownloadingEpisode = onDownloadingEpisode ,
266- onResumeDownloadingEpisode = onResumeDownloadingEpisode ,
267- onPauseDownloadingEpisode = onPauseDownloadingEpisode ,
258+ onAddEpisodeToQueue = { eventSink( EpisodeDetailsUIEvent . AddEpisodeToQueue (it)) } ,
259+ onRemoveEpisodeFromQueue = { eventSink( EpisodeDetailsUIEvent . RemoveEpisodeFromQueue (it)) } ,
260+ onDownloadingEpisode = { eventSink( EpisodeDetailsUIEvent . DownloadEpisode (it)) } ,
261+ onResumeDownloadingEpisode = { eventSink( EpisodeDetailsUIEvent . ResumeDownloading (it)) } ,
262+ onPauseDownloadingEpisode = { eventSink( EpisodeDetailsUIEvent . PauseDownloading (it)) } ,
268263 isSelected = isSelected,
269264 playingStatus = playingStatus,
270265 dominantColor = dominantColorState.color,
@@ -432,21 +427,11 @@ fun EpisodeDetailsScreenPreview(
432427 downloadMetadata = DownloadMetadata ,
433428 ),
434429 onNavigateUp = {},
435- onRetry = {},
436- onRefresh = {},
437- onPlayEpisode = {},
438- onPause = {},
439- onAddEpisodeToQueue = {},
440- onRemoveEpisodeFromQueue = {},
441- onDownloadingEpisode = {},
442- onResumeDownloadingEpisode = {},
443- onPauseDownloadingEpisode = {},
444430 isSelected = false ,
445431 playingStatus = null ,
446- onConsumeErrorPlayingStatus = {},
447432 externalContentPadding = PaddingValues (0 .dp),
448433 excludedWindowInsets = null ,
449- onConsumeResult = {},
434+ eventSink = {},
450435 modifier = Modifier .fillMaxSize(),
451436 )
452437 }
@@ -466,21 +451,11 @@ fun EpisodeDetailsErrorPreview() {
466451 downloadMetadata = null ,
467452 ),
468453 onNavigateUp = {},
469- onRetry = {},
470- onRefresh = {},
471- onPlayEpisode = {},
472- onPause = {},
473- onAddEpisodeToQueue = {},
474- onRemoveEpisodeFromQueue = {},
475- onDownloadingEpisode = {},
476- onResumeDownloadingEpisode = {},
477- onPauseDownloadingEpisode = {},
478454 isSelected = false ,
479455 playingStatus = null ,
480- onConsumeErrorPlayingStatus = {},
481456 externalContentPadding = PaddingValues (0 .dp),
482457 excludedWindowInsets = null ,
483- onConsumeResult = {},
458+ eventSink = {},
484459 modifier = Modifier .fillMaxSize(),
485460 )
486461 }
0 commit comments