in Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt [157:260]
fun HomeContent(
featuredPodcasts: List<PodcastWithExtraInfo>,
isRefreshing: Boolean,
selectedHomeCategory: HomeCategory,
homeCategories: List<HomeCategory>,
modifier: Modifier = Modifier,
onPodcastUnfollowed: (String) -> Unit,
onCategorySelected: (HomeCategory) -> Unit,
navigateToPlayer: (String) -> Unit
) {
Column(modifier = modifier.systemBarsPadding(top = false, bottom = false)) {
// We dynamically theme this sub-section of the layout to match the selected
// 'top podcast'
val surfaceColor = MaterialTheme.colors.surface
val dominantColorState = rememberDominantColorState { color ->
// We want a color which has sufficient contrast against the surface color
color.contrastAgainst(surfaceColor) >= MinContrastOfPrimaryVsSurface
}
DynamicThemePrimaryColorsFromImage(dominantColorState) {
val pagerState = rememberPagerState()
val selectedImageUrl = featuredPodcasts.getOrNull(pagerState.currentPage)
?.podcast?.imageUrl
// When the selected image url changes, call updateColorsFromImageUrl() or reset()
LaunchedEffect(selectedImageUrl) {
if (selectedImageUrl != null) {
dominantColorState.updateColorsFromImageUrl(selectedImageUrl)
} else {
dominantColorState.reset()
}
}
Column(
modifier = Modifier
.fillMaxWidth()
.verticalGradientScrim(
color = MaterialTheme.colors.primary.copy(alpha = 0.38f),
startYPercentage = 1f,
endYPercentage = 0f
)
) {
val appBarColor = MaterialTheme.colors.surface.copy(alpha = 0.87f)
// Draw a scrim over the status bar which matches the app bar
Spacer(
Modifier
.background(appBarColor)
.fillMaxWidth()
.statusBarsHeight()
)
HomeAppBar(
backgroundColor = appBarColor,
modifier = Modifier.fillMaxWidth()
)
if (featuredPodcasts.isNotEmpty()) {
Spacer(Modifier.height(16.dp))
FollowedPodcasts(
items = featuredPodcasts,
pagerState = pagerState,
onPodcastUnfollowed = onPodcastUnfollowed,
modifier = Modifier
.padding(start = Keyline1, top = 16.dp, end = Keyline1)
.fillMaxWidth()
.height(200.dp)
)
Spacer(Modifier.height(16.dp))
}
}
}
if (isRefreshing) {
// TODO show a progress indicator or similar
}
if (homeCategories.isNotEmpty()) {
HomeCategoryTabs(
categories = homeCategories,
selectedCategory = selectedHomeCategory,
onCategorySelected = onCategorySelected
)
}
when (selectedHomeCategory) {
HomeCategory.Library -> {
// TODO
}
HomeCategory.Discover -> {
Discover(
navigateToPlayer = navigateToPlayer,
Modifier
.fillMaxWidth()
.weight(1f)
)
}
}
}
}