cache artwork bitmap

This commit is contained in:
pca006132
2025-11-02 17:22:41 +08:00
parent eb5c4721d1
commit b335ddec01
3 changed files with 97 additions and 28 deletions

View File

@@ -4,6 +4,8 @@ import android.app.PendingIntent.FLAG_IMMUTABLE
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
import android.app.TaskStackBuilder
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
@@ -11,6 +13,7 @@ import android.os.Binder
import android.os.IBinder
import android.os.Handler
import android.os.Looper
import android.text.TextUtils
import android.util.Log
import androidx.core.content.ContextCompat
import androidx.media3.cast.CastPlayer
@@ -25,7 +28,10 @@ import androidx.media3.exoplayer.DefaultLoadControl
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.session.MediaLibraryService
import androidx.media3.session.MediaSession.ControllerInfo
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.cappielloantonio.tempo.repository.AutomotiveRepository
import com.cappielloantonio.tempo.glide.CustomGlideRequest
import com.cappielloantonio.tempo.repository.QueueRepository
import com.cappielloantonio.tempo.ui.activity.MainActivity
import com.cappielloantonio.tempo.util.AssetLinkUtil
@@ -39,6 +45,7 @@ import com.cappielloantonio.tempo.widget.WidgetUpdateManager
import com.google.android.gms.cast.framework.CastContext
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability
import java.util.Optional
@UnstableApi
class MediaService : MediaLibraryService(), SessionAvailabilityListener {
@@ -49,6 +56,7 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
private lateinit var librarySessionCallback: MediaLibrarySessionCallback
private lateinit var networkCallback: CustomNetworkCallback
lateinit var equalizerManager: EqualizerManager
@Volatile private var artCache : Optional<Optional<Bitmap>> = Optional.empty<Optional<Bitmap>>()
inner class LocalBinder : Binder() {
fun getEqualizerManager(): EqualizerManager {
@@ -278,6 +286,7 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
}
override fun onIsPlayingChanged(isPlaying: Boolean) {
artCache = Optional.empty()
if (!isPlaying) {
MediaManager.setPlayingPausedTimestamp(
player.currentMediaItem,
@@ -339,6 +348,16 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
}
}
private inner class CustomGlideTarget : CustomTarget<Bitmap>() {
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
artCache = Optional.of(Optional.of(resource))
}
override fun onLoadCleared(placeholder: Drawable?) {
artCache = Optional.of(Optional.empty())
}
}
private fun updateWidget() {
val mi = player.currentMediaItem
val title = mi?.mediaMetadata?.title?.toString()
@@ -357,12 +376,21 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
?: AssetLinkUtil.buildLink(AssetLinkUtil.TYPE_ARTIST, extras?.getString("artistId"))
val position = player.currentPosition.takeIf { it != C.TIME_UNSET } ?: 0L
val duration = player.duration.takeIf { it != C.TIME_UNSET } ?: 0L
if (!TextUtils.isEmpty(coverId) && artCache.isEmpty) {
CustomGlideRequest.loadAlbumArtBitmap(
applicationContext,
coverId,
WidgetUpdateManager.WIDGET_SAFE_ART_SIZE,
CustomGlideTarget())
}
WidgetUpdateManager.updateFromState(
this,
title ?: "",
artist ?: "",
album ?: "",
coverId,
artCache,
player.isPlaying,
player.shuffleModeEnabled,
player.repeatMode,