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

View File

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

View File

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