Skip to content

Commit

Permalink
Adds PodcastDetailsScreen
Browse files Browse the repository at this point in the history
  • Loading branch information
kul3r4 committed Apr 11, 2024
1 parent 9cbfdd7 commit 1b7ee1b
Show file tree
Hide file tree
Showing 7 changed files with 394 additions and 27 deletions.
21 changes: 17 additions & 4 deletions Jetcaster/wear/src/main/java/com/example/jetcaster/WearApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,17 @@ import androidx.wear.compose.navigation.rememberSwipeDismissableNavController
import androidx.wear.compose.navigation.rememberSwipeDismissableNavHostState
import com.example.jetcaster.theme.WearAppTheme
import com.example.jetcaster.ui.JetcasterNavController.navigateToLatestEpisode
import com.example.jetcaster.ui.JetcasterNavController.navigateToPodcastDetails
import com.example.jetcaster.ui.JetcasterNavController.navigateToUpNext
import com.example.jetcaster.ui.JetcasterNavController.navigateToYourPodcast
import com.example.jetcaster.ui.LatestEpisodes
import com.example.jetcaster.ui.PodcastDetails
import com.example.jetcaster.ui.YourPodcasts
import com.example.jetcaster.ui.home.HomeScreen
import com.example.jetcaster.ui.library.LatestEpisodesScreen
import com.example.jetcaster.ui.library.PodcastsScreen
import com.example.jetcaster.ui.player.PlayerScreen
import com.example.jetcaster.ui.podcast.PodcastDetailsScreen
import com.google.android.horologist.audio.ui.VolumeViewModel
import com.google.android.horologist.media.ui.navigation.MediaNavController.navigateToPlayer
import com.google.android.horologist.media.ui.navigation.MediaNavController.navigateToVolume
Expand Down Expand Up @@ -101,17 +104,27 @@ fun WearApp() {
) {
LatestEpisodesScreen(
playlistName = stringResource(id = R.string.latest_episodes),
onShuffleButtonClick = {
// navController.navigateToPlayer(it[0].episode.uri)
},
//TODO implement change speed
onChangeSpeedButtonClick = {},
onPlayButtonClick = {
navController.navigateToPlayer()
}
)
}
composable(route = YourPodcasts.navRoute) {
PodcastsScreen(
onPodcastsItemClick = { navController.navigateToPlayer() },
onPodcastsItemClick = { navController.navigateToPodcastDetails(it.uri) },
onErrorDialogCancelClick = { navController.popBackStack() }
)
}
composable(route = PodcastDetails.navRoute) {
PodcastDetailsScreen(
//TODO implement change speed
onChangeSpeedButtonClick = {},
onPlayButtonClick = {
navController.navigateToPlayer()
},
onEpisodeItemClick = { navController.navigateToPlayer() },
onErrorDialogCancelClick = { navController.popBackStack() }
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@

package com.example.jetcaster.ui

import android.net.Uri
import androidx.navigation.NamedNavArgument
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavController
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.google.android.horologist.media.ui.navigation.NavigationScreens

/**
Expand All @@ -32,6 +37,10 @@ public object JetcasterNavController {
navigate(LatestEpisodes.destination())
}

public fun NavController.navigateToPodcastDetails(podcastUri: String) {
navigate(PodcastDetails.destination(podcastUri))
}

public fun NavController.navigateToUpNext() {
navigate(UpNext.destination())
}
Expand All @@ -45,6 +54,19 @@ public object LatestEpisodes : NavigationScreens("latestEpisodes") {
public fun destination(): String = navRoute
}

public object PodcastDetails : NavigationScreens("podcast?podcastUri={podcastUri}") {
public const val podcastUri: String = "podcastUri"
public fun destination(podcastUri:String): String = "podcast?podcastUri=$podcastUri"

override val arguments: List<NamedNavArgument>
get() = listOf(
navArgument(podcastUri) {
type = NavType.StringType
},
)

}

public object UpNext : NavigationScreens("upNext") {
public fun destination(): String = navRoute
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ import com.google.android.horologist.media.ui.screens.entity.EntityScreen

@Composable fun LatestEpisodesScreen(
playlistName: String,
onShuffleButtonClick: (List<EpisodeToPodcast>) -> Unit,
onPlayButtonClick: (List<EpisodeToPodcast>) -> Unit,
onChangeSpeedButtonClick: () -> Unit,
onPlayButtonClick: () -> Unit,
modifier: Modifier = Modifier,
latestEpisodeViewModel: LatestEpisodeViewModel = hiltViewModel()
) {
Expand All @@ -62,7 +62,7 @@ import com.google.android.horologist.media.ui.screens.entity.EntityScreen
modifier = modifier,
playlistName = playlistName,
viewState = viewState,
onShuffleButtonClick = onShuffleButtonClick,
onChangeSpeedButtonClick = onChangeSpeedButtonClick,
onPlayButtonClick = onPlayButtonClick,
onPlayEpisode = latestEpisodeViewModel::onPlayEpisode
)
Expand All @@ -72,8 +72,8 @@ import com.google.android.horologist.media.ui.screens.entity.EntityScreen
fun LatestEpisodeScreen(
playlistName: String,
viewState: LatestEpisodeViewState,
onShuffleButtonClick: (List<EpisodeToPodcast>) -> Unit,
onPlayButtonClick: (List<EpisodeToPodcast>) -> Unit,
onChangeSpeedButtonClick: () -> Unit,
onPlayButtonClick: () -> Unit,
modifier: Modifier = Modifier,
onPlayEpisode: (PlayerEpisode) -> Unit,
) {
Expand All @@ -93,14 +93,16 @@ fun LatestEpisodeScreen(
downloadItemArtworkPlaceholder = rememberVectorPainter(
image = Icons.Default.MusicNote,
tintColor = Color.Blue,
)
),
onPlayButtonClick = onPlayButtonClick,
onPlayEpisode= onPlayEpisode
)
}
},
buttonsContent = {
ButtonsContent(
viewState = viewState,
onShuffleButtonClick = onShuffleButtonClick,
onChangeSpeedButtonClick = onChangeSpeedButtonClick,
onPlayButtonClick = onPlayButtonClick,
onPlayEpisode = onPlayEpisode
)
Expand All @@ -112,15 +114,20 @@ fun LatestEpisodeScreen(
@Composable
fun MediaContent(
episode: EpisodeToPodcast,
downloadItemArtworkPlaceholder: Painter?
downloadItemArtworkPlaceholder: Painter?,
onPlayButtonClick: () -> Unit,
onPlayEpisode: (PlayerEpisode) -> Unit
) {
val mediaTitle = episode.episode.title

val secondaryLabel = episode.episode.author

Chip(
label = mediaTitle,
onClick = { /*play*/ },
onClick = {
onPlayButtonClick()
onPlayEpisode(episode.toPlayerEpisode())
},
secondaryLabel = secondaryLabel,
icon = CoilPaintable(episode.podcast.imageUrl, downloadItemArtworkPlaceholder),
largeIcon = true,
Expand All @@ -132,8 +139,8 @@ fun MediaContent(
@Composable
fun ButtonsContent(
viewState: LatestEpisodeViewState,
onShuffleButtonClick: (List<EpisodeToPodcast>) -> Unit,
onPlayButtonClick: (List<EpisodeToPodcast>) -> Unit,
onChangeSpeedButtonClick: () -> Unit,
onPlayButtonClick: () -> Unit,
onPlayEpisode: (PlayerEpisode) -> Unit
) {

Expand All @@ -147,7 +154,7 @@ fun ButtonsContent(
Button(
imageVector = ImageVector.vectorResource(R.drawable.speed),
contentDescription = stringResource(id = R.string.speed_button_content_description),
onClick = { onShuffleButtonClick(viewState.libraryEpisodes) },
onClick = { onChangeSpeedButtonClick() },
modifier = Modifier
.weight(weight = 0.3F, fill = false),
)
Expand All @@ -156,7 +163,7 @@ fun ButtonsContent(
imageVector = Icons.Filled.PlayArrow,
contentDescription = stringResource(id = R.string.button_play_content_description),
onClick = {
onPlayButtonClick(viewState.libraryEpisodes)
onPlayButtonClick()
onPlayEpisode(viewState.libraryEpisodes[0].toPlayerEpisode())
},
modifier = Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,16 +128,6 @@ fun PodcastsScreen(
podcastItemArtworkPlaceholder: Painter? = null,
) {

val podcastContent: @Composable (podcast: PodcastInfo) -> Unit = { podcast ->
Chip(
label = podcast.title,
onClick = { onPodcastsItemClick(podcast) },
icon = CoilPaintable(podcast.imageUrl, podcastItemArtworkPlaceholder),
largeIcon = true,
colors = ChipDefaults.secondaryChipColors(),
)
}

PodcastsScreen(
podcastsScreenState = podcastsScreenState,
modifier = modifier,
Expand Down
Loading

0 comments on commit 1b7ee1b

Please sign in to comment.