mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-10 15:11:58 +01:00
stop prefetching the next track's full artwork
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user