refactor: simplify image loading in PosterCard and TvHomeSections by removing unnecessary ImageRequest

This commit is contained in:
2026-04-01 17:05:34 +02:00
parent b90632063c
commit 866830b8f4
2 changed files with 4 additions and 30 deletions

View File

@@ -27,13 +27,10 @@ import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import coil3.request.ImageRequest
import hu.bbara.purefin.common.ui.components.PurefinAsyncImage import hu.bbara.purefin.common.ui.components.PurefinAsyncImage
import hu.bbara.purefin.common.ui.components.UnwatchedEpisodeIndicator import hu.bbara.purefin.common.ui.components.UnwatchedEpisodeIndicator
import hu.bbara.purefin.common.ui.components.WatchStateIndicator import hu.bbara.purefin.common.ui.components.WatchStateIndicator
@@ -53,13 +50,10 @@ fun PosterCard(
onEpisodeSelected: (UUID, UUID, UUID) -> Unit, onEpisodeSelected: (UUID, UUID, UUID) -> Unit,
) { ) {
val scheme = MaterialTheme.colorScheme val scheme = MaterialTheme.colorScheme
val context = LocalContext.current
val density = LocalDensity.current
var isFocused by remember { mutableStateOf(false) } var isFocused by remember { mutableStateOf(false) }
val scale by animateFloatAsState(targetValue = if (isFocused) 1.07f else 1.0f, label = "scale") val scale by animateFloatAsState(targetValue = if (isFocused) 1.07f else 1.0f, label = "scale")
val posterWidth = 144.dp val posterWidth = 144.dp
val posterHeight = posterWidth * 3 / 2
fun openItem(posterItem: PosterItem) { fun openItem(posterItem: PosterItem) {
when (posterItem.type) { when (posterItem.type) {
@@ -73,11 +67,6 @@ fun PosterCard(
} }
} }
val imageRequest = ImageRequest.Builder(context)
.data(item.imageUrl)
.size(with(density) { posterWidth.roundToPx() }, with(density) { posterHeight.roundToPx() })
.build()
val imageFocusModifier = Modifier val imageFocusModifier = Modifier
.then(if (focusRequester != null) Modifier.focusRequester(focusRequester) else Modifier) .then(if (focusRequester != null) Modifier.focusRequester(focusRequester) else Modifier)
.then( .then(
@@ -102,7 +91,7 @@ fun PosterCard(
) { ) {
Box() { Box() {
PurefinAsyncImage( PurefinAsyncImage(
model = imageRequest, model = item.imageUrl,
contentDescription = null, contentDescription = null,
modifier = imageFocusModifier modifier = imageFocusModifier
.aspectRatio(2f / 3f) .aspectRatio(2f / 3f)

View File

@@ -31,8 +31,8 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusProperties import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.focus.focusRestorer import androidx.compose.ui.focus.focusRestorer
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.TransformOrigin
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
@@ -42,7 +42,6 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import coil3.request.ImageRequest
import hu.bbara.purefin.common.ui.PosterCard import hu.bbara.purefin.common.ui.PosterCard
import hu.bbara.purefin.common.ui.components.MediaProgressBar import hu.bbara.purefin.common.ui.components.MediaProgressBar
import hu.bbara.purefin.common.ui.components.PurefinAsyncImage import hu.bbara.purefin.common.ui.components.PurefinAsyncImage
@@ -118,7 +117,6 @@ fun TvContinueWatchingCard(
} }
val cardWidth = 280.dp val cardWidth = 280.dp
val cardHeight = cardWidth * 9 / 16
fun openItem(item: ContinueWatchingItem) { fun openItem(item: ContinueWatchingItem) {
when (item.type) { when (item.type) {
@@ -132,11 +130,6 @@ fun TvContinueWatchingCard(
} }
} }
val imageRequest = ImageRequest.Builder(context)
.data(imageUrl)
.size(with(density) { cardWidth.roundToPx() }, with(density) { cardHeight.roundToPx() })
.build()
val imageFocusModifier = Modifier val imageFocusModifier = Modifier
.then(if (focusRequester != null) Modifier.focusRequester(focusRequester) else Modifier) .then(if (focusRequester != null) Modifier.focusRequester(focusRequester) else Modifier)
.then( .then(
@@ -186,7 +179,7 @@ fun TvContinueWatchingCard(
.background(scheme.surfaceVariant) .background(scheme.surfaceVariant)
) { ) {
PurefinAsyncImage( PurefinAsyncImage(
model = imageRequest, model = imageUrl,
contentDescription = null, contentDescription = null,
modifier = imageFocusModifier modifier = imageFocusModifier
.fillMaxSize() .fillMaxSize()
@@ -277,26 +270,18 @@ fun TvNextUpCard(
) { ) {
val scheme = MaterialTheme.colorScheme val scheme = MaterialTheme.colorScheme
val context = LocalContext.current
val density = LocalDensity.current
var isFocused by remember { mutableStateOf(false) } var isFocused by remember { mutableStateOf(false) }
val scale by animateFloatAsState(targetValue = if (isFocused) 1.07f else 1.0f, label = "scale") val scale by animateFloatAsState(targetValue = if (isFocused) 1.07f else 1.0f, label = "scale")
val imageUrl = item.episode.heroImageUrl val imageUrl = item.episode.heroImageUrl
val cardWidth = 280.dp val cardWidth = 280.dp
val cardHeight = cardWidth * 9 / 16
fun openItem(item: NextUpItem) { fun openItem(item: NextUpItem) {
val episode = item.episode val episode = item.episode
onEpisodeSelected(episode.seriesId, episode.seasonId, episode.id) onEpisodeSelected(episode.seriesId, episode.seasonId, episode.id)
} }
val imageRequest = ImageRequest.Builder(context)
.data(imageUrl)
.size(with(density) { cardWidth.roundToPx() }, with(density) { cardHeight.roundToPx() })
.build()
val imageFocusModifier = Modifier val imageFocusModifier = Modifier
.then(if (focusRequester != null) Modifier.focusRequester(focusRequester) else Modifier) .then(if (focusRequester != null) Modifier.focusRequester(focusRequester) else Modifier)
.then( .then(
@@ -346,7 +331,7 @@ fun TvNextUpCard(
.background(scheme.surfaceVariant) .background(scheme.surfaceVariant)
) { ) {
PurefinAsyncImage( PurefinAsyncImage(
model = imageRequest, model = imageUrl,
contentDescription = null, contentDescription = null,
modifier = imageFocusModifier modifier = imageFocusModifier
.fillMaxSize() .fillMaxSize()