Skip to content

Commit 8ecc195

Browse files
authored
[Jetcaster] Create model module and add PlayerImage to shared design system. (#1332)
Changes: * Created `:core:model` module * Moved implementation of `Background` in `tv` module to `designsystem` so that it can be shared (1st composable shared across multiple app targets)
2 parents 9cbfdd7 + 3e11672 commit 8ecc195

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+357
-192
lines changed

Jetcaster/app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ android {
8585
}
8686

8787
dependencies {
88+
implementation(project(":core:model"))
8889
val composeBom = platform(libs.androidx.compose.bom)
8990
implementation(composeBom)
9091
androidTestImplementation(composeBom)

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
108108
import androidx.window.core.layout.WindowHeightSizeClass
109109
import coil.compose.AsyncImage
110110
import com.example.jetcaster.R
111-
import com.example.jetcaster.core.data.model.CategoryInfo
112-
import com.example.jetcaster.core.data.model.EpisodeInfo
113-
import com.example.jetcaster.core.data.model.FilterableCategoriesModel
114-
import com.example.jetcaster.core.data.model.LibraryInfo
115-
import com.example.jetcaster.core.data.model.PlayerEpisode
116-
import com.example.jetcaster.core.data.model.PodcastCategoryFilterResult
117-
import com.example.jetcaster.core.data.model.PodcastInfo
111+
import com.example.jetcaster.core.model.CategoryInfo
112+
import com.example.jetcaster.core.model.EpisodeInfo
113+
import com.example.jetcaster.core.model.FilterableCategoriesModel
114+
import com.example.jetcaster.core.model.LibraryInfo
115+
import com.example.jetcaster.core.model.PlayerEpisode
116+
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
117+
import com.example.jetcaster.core.model.PodcastInfo
118118
import com.example.jetcaster.ui.home.discover.discoverItems
119119
import com.example.jetcaster.ui.home.library.libraryItems
120120
import com.example.jetcaster.ui.podcast.PodcastDetailsScreen

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ package com.example.jetcaster.ui.home
1919
import androidx.lifecycle.ViewModel
2020
import androidx.lifecycle.viewModelScope
2121
import com.example.jetcaster.core.data.database.model.EpisodeToPodcast
22+
import com.example.jetcaster.core.data.database.model.asExternalModel
2223
import com.example.jetcaster.core.data.domain.FilterableCategoriesUseCase
2324
import com.example.jetcaster.core.data.domain.PodcastCategoryFilterUseCase
24-
import com.example.jetcaster.core.data.model.CategoryInfo
25-
import com.example.jetcaster.core.data.model.FilterableCategoriesModel
26-
import com.example.jetcaster.core.data.model.LibraryInfo
27-
import com.example.jetcaster.core.data.model.PlayerEpisode
28-
import com.example.jetcaster.core.data.model.PodcastCategoryFilterResult
29-
import com.example.jetcaster.core.data.model.PodcastInfo
30-
import com.example.jetcaster.core.data.model.asExternalModel
3125
import com.example.jetcaster.core.data.repository.EpisodeStore
3226
import com.example.jetcaster.core.data.repository.PodcastStore
3327
import com.example.jetcaster.core.data.repository.PodcastsRepository
28+
import com.example.jetcaster.core.model.CategoryInfo
29+
import com.example.jetcaster.core.model.FilterableCategoriesModel
30+
import com.example.jetcaster.core.model.LibraryInfo
31+
import com.example.jetcaster.core.model.PlayerEpisode
32+
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
33+
import com.example.jetcaster.core.model.PodcastInfo
3434
import com.example.jetcaster.core.player.EpisodePlayer
3535
import com.example.jetcaster.core.util.combine
3636
import dagger.hilt.android.lifecycle.HiltViewModel

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
package com.example.jetcaster.ui.home
1818

19-
import com.example.jetcaster.core.data.model.CategoryInfo
20-
import com.example.jetcaster.core.data.model.EpisodeInfo
21-
import com.example.jetcaster.core.data.model.PodcastCategoryEpisode
22-
import com.example.jetcaster.core.data.model.PodcastInfo
19+
import com.example.jetcaster.core.model.CategoryInfo
20+
import com.example.jetcaster.core.model.EpisodeInfo
21+
import com.example.jetcaster.core.model.PodcastCategoryEpisode
22+
import com.example.jetcaster.core.model.PodcastInfo
2323
import java.time.OffsetDateTime
2424
import java.time.ZoneOffset
2525

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ import androidx.compose.ui.tooling.preview.Preview
4646
import androidx.compose.ui.unit.dp
4747
import coil.compose.AsyncImage
4848
import coil.request.ImageRequest
49-
import com.example.jetcaster.core.data.model.EpisodeInfo
50-
import com.example.jetcaster.core.data.model.PlayerEpisode
51-
import com.example.jetcaster.core.data.model.PodcastCategoryFilterResult
52-
import com.example.jetcaster.core.data.model.PodcastInfo
49+
import com.example.jetcaster.core.model.EpisodeInfo
50+
import com.example.jetcaster.core.model.PlayerEpisode
51+
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
52+
import com.example.jetcaster.core.model.PodcastInfo
5353
import com.example.jetcaster.designsystem.theme.Keyline1
5454
import com.example.jetcaster.ui.home.PreviewEpisodes
5555
import com.example.jetcaster.ui.home.PreviewPodcasts

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ import androidx.compose.ui.Modifier
3838
import androidx.compose.ui.res.stringResource
3939
import androidx.compose.ui.unit.dp
4040
import com.example.jetcaster.R
41-
import com.example.jetcaster.core.data.model.CategoryInfo
42-
import com.example.jetcaster.core.data.model.EpisodeInfo
43-
import com.example.jetcaster.core.data.model.FilterableCategoriesModel
44-
import com.example.jetcaster.core.data.model.PlayerEpisode
45-
import com.example.jetcaster.core.data.model.PodcastCategoryFilterResult
46-
import com.example.jetcaster.core.data.model.PodcastInfo
41+
import com.example.jetcaster.core.model.CategoryInfo
42+
import com.example.jetcaster.core.model.EpisodeInfo
43+
import com.example.jetcaster.core.model.FilterableCategoriesModel
44+
import com.example.jetcaster.core.model.PlayerEpisode
45+
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
46+
import com.example.jetcaster.core.model.PodcastInfo
4747
import com.example.jetcaster.designsystem.theme.Keyline1
4848
import com.example.jetcaster.ui.home.category.podcastCategory
4949
import com.example.jetcaster.util.fullWidthItem
@@ -183,7 +183,9 @@ private fun ChoiceChipContent(
183183
Icon(
184184
imageVector = Icons.Default.Check,
185185
contentDescription = stringResource(id = R.string.cd_selected_category),
186-
modifier = Modifier.height(18.dp).padding(end = 8.dp)
186+
modifier = Modifier
187+
.height(18.dp)
188+
.padding(end = 8.dp)
187189
)
188190
}
189191
Text(

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ import androidx.compose.ui.Modifier
2828
import androidx.compose.ui.res.stringResource
2929
import androidx.compose.ui.unit.dp
3030
import com.example.jetcaster.R
31-
import com.example.jetcaster.core.data.model.EpisodeInfo
32-
import com.example.jetcaster.core.data.model.LibraryInfo
33-
import com.example.jetcaster.core.data.model.PlayerEpisode
31+
import com.example.jetcaster.core.model.EpisodeInfo
32+
import com.example.jetcaster.core.model.LibraryInfo
33+
import com.example.jetcaster.core.model.PlayerEpisode
3434
import com.example.jetcaster.designsystem.theme.Keyline1
3535
import com.example.jetcaster.ui.shared.EpisodeListItem
3636
import com.example.jetcaster.util.fullWidthItem

Jetcaster/app/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import androidx.compose.runtime.DisposableEffect
6767
import androidx.compose.ui.Alignment
6868
import androidx.compose.ui.Modifier
6969
import androidx.compose.ui.draw.clip
70+
import androidx.compose.ui.graphics.Color
7071
import androidx.compose.ui.graphics.ColorFilter
7172
import androidx.compose.ui.layout.ContentScale
7273
import androidx.compose.ui.platform.LocalContext
@@ -87,8 +88,9 @@ import androidx.window.layout.FoldingFeature
8788
import coil.compose.AsyncImage
8889
import coil.request.ImageRequest
8990
import com.example.jetcaster.R
90-
import com.example.jetcaster.core.data.model.PlayerEpisode
91+
import com.example.jetcaster.core.model.PlayerEpisode
9192
import com.example.jetcaster.core.player.EpisodePlayerState
93+
import com.example.jetcaster.designsystem.component.ImageBackgroundColorScrim
9294
import com.example.jetcaster.ui.theme.JetcasterTheme
9395
import com.example.jetcaster.util.isBookPosture
9496
import com.example.jetcaster.util.isSeparatingPosture
@@ -150,7 +152,7 @@ private fun PlayerScreen(
150152
}
151153
Surface(modifier) {
152154
if (uiState.episodePlayerState.currentEpisode != null) {
153-
PlayerContent(
155+
PlayerContentWithBackground(
154156
uiState,
155157
windowSizeClass,
156158
displayFeatures,
@@ -168,6 +170,52 @@ private fun PlayerScreen(
168170
}
169171
}
170172

173+
@Composable
174+
private fun PlayerBackground(
175+
episode: PlayerEpisode?,
176+
modifier: Modifier,
177+
) {
178+
ImageBackgroundColorScrim(
179+
url = episode?.podcastImageUrl,
180+
color = Color.Black.copy(alpha = 0.68f),
181+
modifier = modifier,
182+
)
183+
}
184+
185+
@Composable
186+
fun PlayerContentWithBackground(
187+
uiState: PlayerUiState,
188+
windowSizeClass: WindowSizeClass,
189+
displayFeatures: List<DisplayFeature>,
190+
onBackPress: () -> Unit,
191+
onPlayPress: () -> Unit,
192+
onPausePress: () -> Unit,
193+
onAdvanceBy: (Duration) -> Unit,
194+
onRewindBy: (Duration) -> Unit,
195+
onNext: () -> Unit,
196+
onPrevious: () -> Unit,
197+
modifier: Modifier = Modifier
198+
) {
199+
Box(modifier = modifier, contentAlignment = Alignment.Center) {
200+
PlayerBackground(
201+
episode = uiState.episodePlayerState.currentEpisode,
202+
modifier = Modifier.fillMaxSize()
203+
)
204+
PlayerContent(
205+
uiState,
206+
windowSizeClass,
207+
displayFeatures,
208+
onBackPress,
209+
onPlayPress,
210+
onPausePress,
211+
onAdvanceBy,
212+
onRewindBy,
213+
onNext,
214+
onPrevious,
215+
)
216+
}
217+
}
218+
171219
@Composable
172220
fun PlayerContent(
173221
uiState: PlayerUiState,

Jetcaster/app/src/main/java/com/example/jetcaster/ui/player/PlayerViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import androidx.compose.runtime.setValue
2323
import androidx.lifecycle.SavedStateHandle
2424
import androidx.lifecycle.ViewModel
2525
import androidx.lifecycle.viewModelScope
26-
import com.example.jetcaster.core.data.model.toPlayerEpisode
26+
import com.example.jetcaster.core.data.database.model.toPlayerEpisode
2727
import com.example.jetcaster.core.data.repository.EpisodeStore
2828
import com.example.jetcaster.core.player.EpisodePlayer
2929
import com.example.jetcaster.core.player.EpisodePlayerState

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
6565
import coil.compose.AsyncImage
6666
import coil.request.ImageRequest
6767
import com.example.jetcaster.R
68-
import com.example.jetcaster.core.data.model.EpisodeInfo
69-
import com.example.jetcaster.core.data.model.PlayerEpisode
70-
import com.example.jetcaster.core.data.model.PodcastInfo
68+
import com.example.jetcaster.core.model.EpisodeInfo
69+
import com.example.jetcaster.core.model.PlayerEpisode
70+
import com.example.jetcaster.core.model.PodcastInfo
7171
import com.example.jetcaster.designsystem.theme.Keyline1
7272
import com.example.jetcaster.ui.home.PreviewEpisodes
7373
import com.example.jetcaster.ui.home.PreviewPodcasts

0 commit comments

Comments
 (0)