feat: Add HomeHeroReservedSpace component and update HomeScreen to conditionally display hero content

This commit is contained in:
tapframe 2026-03-29 00:57:23 +05:30
parent 12eded17a7
commit 603d02071f
2 changed files with 35 additions and 14 deletions

View file

@ -17,6 +17,7 @@ import com.nuvio.app.features.details.nextReleasedEpisodeAfter
import com.nuvio.app.features.home.components.HomeCatalogRowSection
import com.nuvio.app.features.home.components.HomeContinueWatchingSection
import com.nuvio.app.features.home.components.HomeEmptyStateCard
import com.nuvio.app.features.home.components.HomeHeroReservedSpace
import com.nuvio.app.features.home.components.HomeHeroSection
import com.nuvio.app.features.home.components.HomeSkeletonHero
import com.nuvio.app.features.home.components.HomeSkeletonRow
@ -128,9 +129,10 @@ fun HomeScreen(
}
val hasActiveAddons = addonsUiState.addons.any { it.manifest != null }
val showHeroSlot = homeSettingsUiState.heroEnabled
val homeDataResolved = !homeUiState.isLoading &&
(homeUiState.sections.isNotEmpty() || homeUiState.errorMessage != null)
val showHeroSkeleton = homeSettingsUiState.heroEnabled &&
val showHeroSkeleton = showHeroSlot &&
hasActiveAddons &&
homeUiState.heroItems.isEmpty() &&
!homeDataResolved
@ -138,21 +140,23 @@ fun HomeScreen(
NuvioScreen(
modifier = modifier,
horizontalPadding = 0.dp,
topPadding = if (homeUiState.heroItems.isNotEmpty() || showHeroSkeleton) 0.dp else null,
topPadding = if (showHeroSlot) 0.dp else null,
) {
if (showHeroSkeleton) {
if (showHeroSlot) {
item {
HomeSkeletonHero(
modifier = Modifier.padding(bottom = 12.dp),
)
}
} else if (homeUiState.heroItems.isNotEmpty()) {
item {
HomeHeroSection(
items = homeUiState.heroItems,
modifier = Modifier.padding(bottom = 0.dp),
onItemClick = onPosterClick,
)
when {
showHeroSkeleton -> HomeSkeletonHero(
modifier = Modifier.padding(bottom = 12.dp),
)
homeUiState.heroItems.isNotEmpty() -> HomeHeroSection(
items = homeUiState.heroItems,
modifier = Modifier.padding(bottom = 0.dp),
onItemClick = onPosterClick,
)
else -> HomeHeroReservedSpace()
}
}
}

View file

@ -190,6 +190,23 @@ fun HomeHeroSection(
}
}
@Composable
fun HomeHeroReservedSpace(modifier: Modifier = Modifier) {
BoxWithConstraints(
modifier = modifier
.fillMaxWidth()
.clip(RoundedCornerShape(bottomStart = 28.dp, bottomEnd = 28.dp)),
) {
val heroHeight = (maxWidth.value * 1.22f).dp.coerceIn(440.dp, 800.dp)
Spacer(
modifier = Modifier
.fillMaxWidth()
.height(heroHeight),
)
}
}
@Composable
private fun HeroContentBlock(
item: MetaPreview,