mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-11 15:29:15 +01:00
stop prefetching the next track's full artwork
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package com.subtracks.ui.playback
|
package com.subtracks.ui.playback
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.basicMarquee
|
import androidx.compose.foundation.basicMarquee
|
||||||
import androidx.compose.foundation.clickable
|
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.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import coil3.SingletonImageLoader
|
|
||||||
import coil3.compose.LocalPlatformContext
|
import coil3.compose.LocalPlatformContext
|
||||||
import coil3.request.CachePolicy
|
|
||||||
import coil3.request.ImageRequest
|
|
||||||
import com.subtracks.data.model.CoverArtRef
|
import com.subtracks.data.model.CoverArtRef
|
||||||
import com.subtracks.data.model.QueueKind
|
import com.subtracks.data.model.QueueKind
|
||||||
import com.subtracks.data.model.Song
|
import com.subtracks.data.model.Song
|
||||||
@@ -141,10 +137,8 @@ fun NowPlayingRoute(
|
|||||||
}
|
}
|
||||||
LaunchedEffect(state.item?.id, state.hasNext) {
|
LaunchedEffect(state.item?.id, state.hasNext) {
|
||||||
if (!state.hasNext) return@LaunchedEffect
|
if (!state.hasNext) return@LaunchedEffect
|
||||||
controller.upcomingItem()?.let { next ->
|
val next = controller.upcomingItem() ?: return@LaunchedEffect
|
||||||
controller.coverArt(next, thumbnail = true)?.let { ArtworkSeedCache.prefetch(context, it) }
|
controller.coverArt(next, thumbnail = true)?.let { ArtworkSeedCache.prefetch(context, it) }
|
||||||
controller.coverArt(next)?.let { prefetchImage(context, it) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
NowPlayingScreen(
|
NowPlayingScreen(
|
||||||
state = state,
|
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)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun NowPlayingScreen(
|
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