Skip to content

Commit 92f9a03

Browse files
authored
[Jetcaster]: Provide PodcastDetailsViewModel via factory. (#1310)
View model creation should happen through the factory object.
2 parents d1f085c + 82ce7ca commit 92f9a03

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,14 @@ import androidx.compose.ui.Modifier
8282
import androidx.compose.ui.draw.clip
8383
import androidx.compose.ui.graphics.Color
8484
import androidx.compose.ui.layout.ContentScale
85+
import androidx.compose.ui.platform.LocalSavedStateRegistryOwner
8586
import androidx.compose.ui.res.stringResource
8687
import androidx.compose.ui.text.style.TextOverflow
8788
import androidx.compose.ui.tooling.preview.Devices
8889
import androidx.compose.ui.tooling.preview.Preview
8990
import androidx.compose.ui.unit.DpSize
9091
import androidx.compose.ui.unit.dp
92+
import androidx.core.os.bundleOf
9193
import androidx.lifecycle.compose.collectAsStateWithLifecycle
9294
import androidx.lifecycle.viewmodel.compose.viewModel
9395
import coil.compose.AsyncImage
@@ -99,6 +101,7 @@ import com.example.jetcaster.core.data.model.LibraryInfo
99101
import com.example.jetcaster.core.data.model.PlayerEpisode
100102
import com.example.jetcaster.core.data.model.PodcastCategoryFilterResult
101103
import com.example.jetcaster.core.data.model.PodcastInfo
104+
import com.example.jetcaster.ui.Screen
102105
import com.example.jetcaster.ui.home.discover.discoverItems
103106
import com.example.jetcaster.ui.home.library.libraryItems
104107
import com.example.jetcaster.ui.podcast.PodcastDetailsScreen
@@ -123,9 +126,7 @@ fun MainScreen(
123126
viewModel: HomeViewModel = viewModel()
124127
) {
125128
val viewState by viewModel.state.collectAsStateWithLifecycle()
126-
val navigator = rememberSupportingPaneScaffoldNavigator<String>(
127-
isDestinationHistoryAware = false
128-
)
129+
val navigator = rememberSupportingPaneScaffoldNavigator<String>()
129130
BackHandler(enabled = navigator.canNavigateBack()) {
130131
navigator.navigateBack()
131132
}
@@ -137,8 +138,14 @@ fun MainScreen(
137138
val podcastUri = navigator.currentDestination?.content
138139
?: viewState.featuredPodcasts.firstOrNull()?.uri
139140
if (!podcastUri.isNullOrEmpty()) {
140-
val podcastDetailsViewModel = PodcastDetailsViewModel(
141-
podcastUri = podcastUri
141+
val podcastDetailsViewModel: PodcastDetailsViewModel = viewModel(
142+
key = podcastUri,
143+
factory = PodcastDetailsViewModel.provideFactory(
144+
owner = LocalSavedStateRegistryOwner.current,
145+
defaultArgs = bundleOf(
146+
Screen.ARG_PODCAST_URI to podcastUri
147+
)
148+
)
142149
)
143150
PodcastDetailsScreen(
144151
viewModel = podcastDetailsViewModel,

Jetcaster/app/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsViewModel.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,10 @@ class PodcastDetailsViewModel(
5353
private val episodeStore: EpisodeStore = Graph.episodeStore,
5454
private val episodePlayer: EpisodePlayer = Graph.episodePlayer,
5555
private val podcastStore: PodcastStore = Graph.podcastStore,
56-
private val podcastUri: String
56+
savedStateHandle: SavedStateHandle
5757
) : ViewModel() {
5858

59-
constructor(
60-
episodeStore: EpisodeStore = Graph.episodeStore,
61-
episodePlayer: EpisodePlayer = Graph.episodePlayer,
62-
podcastStore: PodcastStore = Graph.podcastStore,
63-
savedStateHandle: SavedStateHandle
64-
) : this(
65-
episodeStore = episodeStore,
66-
episodePlayer = episodePlayer,
67-
podcastStore = podcastStore,
68-
podcastUri = Uri.decode(savedStateHandle.get<String>(Screen.ARG_PODCAST_URI)!!)
69-
)
59+
private val podcastUri = Uri.decode(savedStateHandle.get<String>(Screen.ARG_PODCAST_URI)!!)
7060

7161
val state: StateFlow<PodcastUiState> =
7262
combine(

0 commit comments

Comments
 (0)