@@ -37,11 +37,9 @@ import androidx.compose.foundation.layout.heightIn
3737import androidx.compose.foundation.layout.only
3838import androidx.compose.foundation.layout.padding
3939import androidx.compose.foundation.layout.size
40- import androidx.compose.foundation.layout.statusBars
4140import androidx.compose.foundation.layout.systemBars
4241import androidx.compose.foundation.layout.width
4342import androidx.compose.foundation.layout.windowInsetsPadding
44- import androidx.compose.foundation.layout.windowInsetsTopHeight
4543import androidx.compose.foundation.lazy.LazyColumn
4644import androidx.compose.foundation.pager.HorizontalPager
4745import androidx.compose.foundation.pager.PageSize
@@ -55,6 +53,9 @@ import androidx.compose.material3.ExperimentalMaterial3Api
5553import androidx.compose.material3.Icon
5654import androidx.compose.material3.IconButton
5755import androidx.compose.material3.MaterialTheme
56+ import androidx.compose.material3.Scaffold
57+ import androidx.compose.material3.SnackbarHost
58+ import androidx.compose.material3.SnackbarHostState
5859import androidx.compose.material3.Surface
5960import androidx.compose.material3.Tab
6061import androidx.compose.material3.TabPosition
@@ -65,6 +66,7 @@ import androidx.compose.material3.TopAppBar
6566import androidx.compose.runtime.Composable
6667import androidx.compose.runtime.LaunchedEffect
6768import androidx.compose.runtime.getValue
69+ import androidx.compose.runtime.remember
6870import androidx.compose.runtime.rememberCoroutineScope
6971import androidx.compose.runtime.snapshotFlow
7072import androidx.compose.ui.Alignment
@@ -120,6 +122,7 @@ fun Home(
120122 navigateToPlayer = navigateToPlayer,
121123 onTogglePodcastFollowed = viewModel::onTogglePodcastFollowed,
122124 onLibraryPodcastSelected = viewModel::onLibraryPodcastSelected,
125+ onQueuePodcast = viewModel::onQueuePodcast,
123126 modifier = Modifier .fillMaxSize()
124127 )
125128 }
@@ -184,7 +187,8 @@ fun Home(
184187 onCategorySelected : (Category ) -> Unit ,
185188 navigateToPlayer : (String ) -> Unit ,
186189 onTogglePodcastFollowed : (String ) -> Unit ,
187- onLibraryPodcastSelected : (Podcast ? ) -> Unit
190+ onLibraryPodcastSelected : (Podcast ? ) -> Unit ,
191+ onQueuePodcast : (EpisodeToPodcast ) -> Unit ,
188192) {
189193 // Effect that changes the home category selection when there are no subscribed podcasts
190194 LaunchedEffect (key1 = featuredPodcasts) {
@@ -193,39 +197,25 @@ fun Home(
193197 }
194198 }
195199
196- Column (
200+ val coroutineScope = rememberCoroutineScope()
201+ val snackbarHostState = remember { SnackbarHostState () }
202+ Scaffold (
197203 modifier = modifier.windowInsetsPadding(
198204 WindowInsets .systemBars.only(WindowInsetsSides .Horizontal )
199- )
200- ) {
201- // We dynamically theme this sub-section of the layout to match the selected
202- // 'top podcast'
203-
204- val surfaceColor = MaterialTheme .colorScheme.surface
205- val appBarColor = surfaceColor.copy(alpha = 0.87f )
206-
207- val scrimColor = MaterialTheme .colorScheme.primary.copy(alpha = 0.38f )
208-
209- // Top Bar
210- Column (
211- modifier = Modifier
212- .fillMaxWidth()
213- .background(color = scrimColor)
214- ) {
215- // Draw a scrim over the status bar which matches the app bar
216- Spacer (
217- Modifier
218- .background(appBarColor)
219- .fillMaxWidth()
220- .windowInsetsTopHeight(WindowInsets .statusBars)
221- )
205+ ),
206+ topBar = {
222207 HomeAppBar (
223- backgroundColor = appBarColor ,
208+ backgroundColor = MaterialTheme .colorScheme.surface ,
224209 modifier = Modifier .fillMaxWidth()
225210 )
211+ },
212+ snackbarHost = {
213+ SnackbarHost (hostState = snackbarHostState)
226214 }
227-
215+ ) { contentPadding ->
228216 // Main Content
217+ val scrimColor = MaterialTheme .colorScheme.primary.copy(alpha = 0.38f )
218+ val snackBarText = stringResource(id = R .string.episode_added_to_your_queue)
229219 HomeContent (
230220 featuredPodcasts = featuredPodcasts,
231221 isRefreshing = isRefreshing,
@@ -235,12 +225,19 @@ fun Home(
235225 podcastCategoryFilterResult = podcastCategoryFilterResult,
236226 libraryEpisodes = libraryEpisodes,
237227 scrimColor = scrimColor,
228+ modifier = Modifier .padding(contentPadding),
238229 onPodcastUnfollowed = onPodcastUnfollowed,
239230 onHomeCategorySelected = onHomeCategorySelected,
240231 onCategorySelected = onCategorySelected,
241232 navigateToPlayer = navigateToPlayer,
242233 onTogglePodcastFollowed = onTogglePodcastFollowed,
243- onLibraryPodcastSelected = onLibraryPodcastSelected
234+ onLibraryPodcastSelected = onLibraryPodcastSelected,
235+ onQueuePodcast = {
236+ coroutineScope.launch {
237+ snackbarHostState.showSnackbar(snackBarText)
238+ }
239+ onQueuePodcast(it)
240+ }
244241 )
245242 }
246243}
@@ -262,7 +259,8 @@ private fun HomeContent(
262259 onCategorySelected : (Category ) -> Unit ,
263260 navigateToPlayer : (String ) -> Unit ,
264261 onTogglePodcastFollowed : (String ) -> Unit ,
265- onLibraryPodcastSelected : (Podcast ? ) -> Unit
262+ onLibraryPodcastSelected : (Podcast ? ) -> Unit ,
263+ onQueuePodcast : (EpisodeToPodcast ) -> Unit ,
266264) {
267265 val pagerState = rememberPagerState { featuredPodcasts.size }
268266 LaunchedEffect (pagerState, featuredPodcasts) {
@@ -308,7 +306,8 @@ private fun HomeContent(
308306 HomeCategory .Library -> {
309307 libraryItems(
310308 episodes = libraryEpisodes,
311- navigateToPlayer = navigateToPlayer
309+ navigateToPlayer = navigateToPlayer,
310+ onQueuePodcast = onQueuePodcast
312311 )
313312 }
314313
@@ -318,7 +317,8 @@ private fun HomeContent(
318317 podcastCategoryFilterResult = podcastCategoryFilterResult,
319318 navigateToPlayer = navigateToPlayer,
320319 onCategorySelected = onCategorySelected,
321- onTogglePodcastFollowed = onTogglePodcastFollowed
320+ onTogglePodcastFollowed = onTogglePodcastFollowed,
321+ onQueuePodcast = onQueuePodcast
322322 )
323323 }
324324 }
@@ -529,7 +529,8 @@ fun PreviewHomeContent() {
529529 navigateToPlayer = {},
530530 onHomeCategorySelected = {},
531531 onTogglePodcastFollowed = {},
532- onLibraryPodcastSelected = {}
532+ onLibraryPodcastSelected = {},
533+ onQueuePodcast = {}
533534 )
534535 }
535536}
0 commit comments