diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt index 54865856f6..71ed2cfdd9 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -82,12 +82,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalSavedStateRegistryOwner import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Devices import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp +import androidx.core.os.bundleOf import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImage @@ -99,6 +101,7 @@ import com.example.jetcaster.core.data.model.LibraryInfo import com.example.jetcaster.core.data.model.PlayerEpisode import com.example.jetcaster.core.data.model.PodcastCategoryFilterResult import com.example.jetcaster.core.data.model.PodcastInfo +import com.example.jetcaster.ui.Screen import com.example.jetcaster.ui.home.discover.discoverItems import com.example.jetcaster.ui.home.library.libraryItems import com.example.jetcaster.ui.podcast.PodcastDetailsScreen @@ -123,9 +126,7 @@ fun MainScreen( viewModel: HomeViewModel = viewModel() ) { val viewState by viewModel.state.collectAsStateWithLifecycle() - val navigator = rememberSupportingPaneScaffoldNavigator( - isDestinationHistoryAware = false - ) + val navigator = rememberSupportingPaneScaffoldNavigator() BackHandler(enabled = navigator.canNavigateBack()) { navigator.navigateBack() } @@ -137,8 +138,14 @@ fun MainScreen( val podcastUri = navigator.currentDestination?.content ?: viewState.featuredPodcasts.firstOrNull()?.uri if (!podcastUri.isNullOrEmpty()) { - val podcastDetailsViewModel = PodcastDetailsViewModel( - podcastUri = podcastUri + val podcastDetailsViewModel: PodcastDetailsViewModel = viewModel( + key = podcastUri, + factory = PodcastDetailsViewModel.provideFactory( + owner = LocalSavedStateRegistryOwner.current, + defaultArgs = bundleOf( + Screen.ARG_PODCAST_URI to podcastUri + ) + ) ) PodcastDetailsScreen( viewModel = podcastDetailsViewModel, diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsViewModel.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsViewModel.kt index d4e10ac7a4..d654d5ee51 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsViewModel.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsViewModel.kt @@ -53,20 +53,10 @@ class PodcastDetailsViewModel( private val episodeStore: EpisodeStore = Graph.episodeStore, private val episodePlayer: EpisodePlayer = Graph.episodePlayer, private val podcastStore: PodcastStore = Graph.podcastStore, - private val podcastUri: String + savedStateHandle: SavedStateHandle ) : ViewModel() { - constructor( - episodeStore: EpisodeStore = Graph.episodeStore, - episodePlayer: EpisodePlayer = Graph.episodePlayer, - podcastStore: PodcastStore = Graph.podcastStore, - savedStateHandle: SavedStateHandle - ) : this( - episodeStore = episodeStore, - episodePlayer = episodePlayer, - podcastStore = podcastStore, - podcastUri = Uri.decode(savedStateHandle.get(Screen.ARG_PODCAST_URI)!!) - ) + private val podcastUri = Uri.decode(savedStateHandle.get(Screen.ARG_PODCAST_URI)!!) val state: StateFlow = combine(