refactor: use Coil exclusively for image loading

This commit is contained in:
Bnyro 2024-10-06 13:52:05 +02:00
parent 9030a6e871
commit db0dc4c4fc
3 changed files with 36 additions and 40 deletions

View File

@ -2,10 +2,9 @@ package com.github.libretube.helpers
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Color
import android.net.Uri
import android.widget.ImageView
import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.drawable.toBitmapOrNull
import coil.ImageLoader
import coil.disk.DiskCache
@ -15,7 +14,6 @@ import com.github.libretube.BuildConfig
import com.github.libretube.api.CronetHelper
import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.extensions.toAndroidUri
import com.github.libretube.extensions.toAndroidUriOrNull
import com.github.libretube.util.DataSaverMode
import com.google.net.cronet.okhttptransport.CronetInterceptor
import kotlinx.coroutines.Dispatchers
@ -26,7 +24,7 @@ import java.io.File
import java.nio.file.Path
object ImageHelper {
lateinit var imageLoader: ImageLoader
private lateinit var imageLoader: ImageLoader
private val Context.coilFile get() = cacheDir.resolve("coil")
@ -119,14 +117,15 @@ object ImageHelper {
return imageLoader.execute(request).drawable?.toBitmapOrNull()
}
fun getDownloadedImage(context: Context, path: Path): Bitmap? {
return path.toAndroidUriOrNull()?.let { getImage(context, it) }
fun getImageWithCallback(context: Context, url: String?, onBitmap: (Bitmap) -> Unit) {
val request = ImageRequest.Builder(context)
.data(url)
.target { drawable ->
onBitmap(drawable.toBitmap())
}
.build()
private fun getImage(context: Context, imagePath: Uri): Bitmap? {
return context.contentResolver.openInputStream(imagePath)?.use {
BitmapFactory.decodeStream(it)
}
imageLoader.enqueue(request)
}
/**

View File

@ -82,7 +82,7 @@ class DownloadsAdapter(
}
download.thumbnailPath?.let { path ->
thumbnailImage.setImageBitmap(ImageHelper.getDownloadedImage(context, path))
ImageHelper.loadImage(path.toString(), thumbnailImage)
}
progressBar.setOnClickListener {

View File

@ -96,26 +96,13 @@ class NowPlayingNotification(
}
private fun enqueueThumbnailRequest(callback: (Bitmap) -> Unit) {
// If playing a downloaded file, show the downloaded thumbnail instead of loading an
// online image
notificationData?.thumbnailPath?.let { path ->
ImageHelper.getDownloadedImage(context, path)?.let {
ImageHelper.getImageWithCallback(
context,
notificationData?.thumbnailPath?.toString() ?: notificationData?.thumbnailUrl
) {
notificationBitmap = processBitmap(it)
callback.invoke(notificationBitmap!!)
}
return
}
val request = ImageRequest.Builder(context)
.data(notificationData?.thumbnailUrl)
.target {
notificationBitmap = processBitmap(it.toBitmap())
callback.invoke(notificationBitmap!!)
}
.build()
// enqueue the thumbnail loading request
ImageHelper.imageLoader.enqueue(request)
}
private fun processBitmap(bitmap: Bitmap): Bitmap {
@ -267,8 +254,18 @@ class NowPlayingNotification(
return PlaybackStateCompat.Builder()
.setActions(stateActions)
.addCustomAction(createMediaSessionAction(R.drawable.ic_rewind_md, PlayerEvent.Rewind.name))
.addCustomAction(createMediaSessionAction(R.drawable.ic_forward_md, PlayerEvent.Forward.name))
.addCustomAction(
createMediaSessionAction(
R.drawable.ic_rewind_md,
PlayerEvent.Rewind.name
)
)
.addCustomAction(
createMediaSessionAction(
R.drawable.ic_forward_md,
PlayerEvent.Forward.name
)
)
.setState(state, player.currentPosition, player.playbackParameters.speed)
.build()
}