Skip to content

Commit 6ef2a87

Browse files
committed
[Jetcaster] Create model module and add PlayerImage to shared design system.
1 parent 9cbfdd7 commit 6ef2a87

File tree

47 files changed

+394
-205
lines changed

Some content is hidden

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

47 files changed

+394
-205
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: 10 additions & 10 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
@@ -124,12 +124,12 @@ import com.example.jetcaster.util.ToggleFollowPodcastIconButton
124124
import com.example.jetcaster.util.fullWidthItem
125125
import com.example.jetcaster.util.isCompact
126126
import com.example.jetcaster.util.quantityStringResource
127-
import java.time.Duration
128-
import java.time.LocalDateTime
129-
import java.time.OffsetDateTime
130127
import kotlinx.collections.immutable.PersistentList
131128
import kotlinx.collections.immutable.toPersistentList
132129
import kotlinx.coroutines.launch
130+
import java.time.Duration
131+
import java.time.LocalDateTime
132+
import java.time.OffsetDateTime
133133

134134
data class HomeState(
135135
val windowSizeClass: WindowSizeClass,

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: 5 additions & 5 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

@@ -50,7 +50,7 @@ val PreviewEpisodes = listOf(
5050
uri = "fakeUri://episode/1",
5151
title = "Episode 140: Lorem ipsum dolor",
5252
summary = "In this episode, Romain, Chet and Tor talked with Mady Melor and Artur " +
53-
"Tsurkan from the System UI team about... Bubbles!",
53+
"Tsurkan from the System UI team about... Bubbles!",
5454
published = OffsetDateTime.of(
5555
2020, 6, 2, 9,
5656
27, 0, 0, ZoneOffset.of("-0800")

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,11 +46,11 @@ 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
5349
import com.example.jetcaster.designsystem.theme.Keyline1
50+
import com.example.jetcaster.core.model.EpisodeInfo
51+
import com.example.jetcaster.core.model.PlayerEpisode
52+
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
53+
import com.example.jetcaster.core.model.PodcastInfo
5454
import com.example.jetcaster.ui.home.PreviewEpisodes
5555
import com.example.jetcaster.ui.home.PreviewPodcasts
5656
import com.example.jetcaster.ui.shared.EpisodeListItem

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,13 +38,13 @@ 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
4741
import com.example.jetcaster.designsystem.theme.Keyline1
42+
import com.example.jetcaster.core.model.CategoryInfo
43+
import com.example.jetcaster.core.model.EpisodeInfo
44+
import com.example.jetcaster.core.model.FilterableCategoriesModel
45+
import com.example.jetcaster.core.model.PlayerEpisode
46+
import com.example.jetcaster.core.model.PodcastCategoryFilterResult
47+
import com.example.jetcaster.core.model.PodcastInfo
4848
import com.example.jetcaster.ui.home.category.podcastCategory
4949
import com.example.jetcaster.util.fullWidthItem
5050

@@ -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,10 +28,10 @@ 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
3431
import com.example.jetcaster.designsystem.theme.Keyline1
32+
import com.example.jetcaster.core.model.EpisodeInfo
33+
import com.example.jetcaster.core.model.LibraryInfo
34+
import com.example.jetcaster.core.model.PlayerEpisode
3535
import com.example.jetcaster.ui.shared.EpisodeListItem
3636
import com.example.jetcaster.util.fullWidthItem
3737

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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,18 @@ 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
3030
import com.example.jetcaster.ui.Screen
3131
import dagger.hilt.android.lifecycle.HiltViewModel
32-
import java.time.Duration
33-
import javax.inject.Inject
3432
import kotlinx.coroutines.ExperimentalCoroutinesApi
3533
import kotlinx.coroutines.flow.flatMapConcat
3634
import kotlinx.coroutines.flow.map
3735
import kotlinx.coroutines.launch
36+
import java.time.Duration
37+
import javax.inject.Inject
3838

3939
data class PlayerUiState(
4040
val episodePlayerState: EpisodePlayerState = 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)