stop prefetching the next track's full artwork

This commit is contained in:
austinried
2026-10-04 00:30:05 +00:00
parent 4d4eb7b758
commit 010aa6d122
2 changed files with 2 additions and 70 deletions
@@ -1,6 +1,5 @@
package com.subtracks.ui.playback
import android.content.Context
import androidx.compose.foundation.background
import androidx.compose.foundation.basicMarquee
import androidx.compose.foundation.clickable
@@ -63,10 +62,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil3.SingletonImageLoader
import coil3.compose.LocalPlatformContext
import coil3.request.CachePolicy
import coil3.request.ImageRequest
import com.subtracks.data.model.CoverArtRef
import com.subtracks.data.model.QueueKind
import com.subtracks.data.model.Song
@@ -141,10 +137,8 @@ fun NowPlayingRoute(
}
LaunchedEffect(state.item?.id, state.hasNext) {
if (!state.hasNext) return@LaunchedEffect
controller.upcomingItem()?.let { next ->
controller.coverArt(next, thumbnail = true)?.let { ArtworkSeedCache.prefetch(context, it) }
controller.coverArt(next)?.let { prefetchImage(context, it) }
}
val next = controller.upcomingItem() ?: return@LaunchedEffect
controller.coverArt(next, thumbnail = true)?.let { ArtworkSeedCache.prefetch(context, it) }
}
NowPlayingScreen(
state = state,
@@ -170,28 +164,6 @@ fun NowPlayingRoute(
)
}
internal fun prefetchImage(
context: Context,
ref: CoverArtRef,
) {
SingletonImageLoader.get(context).enqueue(prefetchImageRequest(context, ref))
}
internal fun prefetchImageRequest(
context: Context,
ref: CoverArtRef,
): ImageRequest {
val metrics = context.resources.displayMetrics
val maxDimension = maxOf(metrics.widthPixels, metrics.heightPixels)
return ImageRequest
.Builder(context)
.data(ref.url)
.diskCacheKey(ref.cacheKey)
.memoryCachePolicy(CachePolicy.DISABLED)
.size(maxDimension)
.build()
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun NowPlayingScreen(
@@ -1,40 +0,0 @@
package com.subtracks.ui.playback
import android.content.Context
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import coil3.SingletonImageLoader
import coil3.annotation.DelicateCoilApi
import coil3.request.CachePolicy
import coil3.size.Dimension
import com.subtracks.data.model.CoverArtRef
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
@OptIn(DelicateCoilApi::class)
@RunWith(AndroidJUnit4::class)
class NowPlayingArtworkTest {
@After
fun resetImageLoader() {
SingletonImageLoader.reset()
}
@Test
fun prefetchingTheNextOriginalIsBoundedToTheScreen() =
runBlocking {
val context = ApplicationProvider.getApplicationContext<Context>()
val ref = CoverArtRef(url = "http://example.test/art", cacheKey = "1:art:false")
val request = prefetchImageRequest(context, ref)
val resolved = request.sizeResolver.size()
val width = (resolved.width as Dimension.Pixels).px
val metrics = context.resources.displayMetrics
assertEquals(maxOf(metrics.widthPixels, metrics.heightPixels), width)
assertEquals(ref.cacheKey, request.diskCacheKey)
assertEquals(CachePolicy.DISABLED, request.memoryCachePolicy)
}
}