diff --git a/app/src/main/java/com/github/libretube/helpers/ImageHelper.kt b/app/src/main/java/com/github/libretube/helpers/ImageHelper.kt index 7103bd097..55b380f6c 100644 --- a/app/src/main/java/com/github/libretube/helpers/ImageHelper.kt +++ b/app/src/main/java/com/github/libretube/helpers/ImageHelper.kt @@ -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) } /** diff --git a/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt index 6c1a1b0a1..4e617345a 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt @@ -82,7 +82,7 @@ class DownloadsAdapter( } download.thumbnailPath?.let { path -> - thumbnailImage.setImageBitmap(ImageHelper.getDownloadedImage(context, path)) + ImageHelper.loadImage(path.toString(), thumbnailImage) } progressBar.setOnClickListener { diff --git a/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt b/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt index 7312d797e..59ad7b853 100644 --- a/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt +++ b/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt @@ -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 { - notificationBitmap = processBitmap(it) - callback.invoke(notificationBitmap!!) - } - return + ImageHelper.getImageWithCallback( + context, + notificationData?.thumbnailPath?.toString() ?: notificationData?.thumbnailUrl + ) { + notificationBitmap = processBitmap(it) + callback.invoke(notificationBitmap!!) } - - 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 { @@ -257,18 +244,28 @@ class NowPlayingNotification( private fun createPlaybackState(@PlaybackStateCompat.State state: Int): PlaybackStateCompat { val stateActions = PlaybackStateCompat.ACTION_SKIP_TO_NEXT or - PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or - PlaybackStateCompat.ACTION_REWIND or - PlaybackStateCompat.ACTION_FAST_FORWARD or - PlaybackStateCompat.ACTION_PLAY_PAUSE or - PlaybackStateCompat.ACTION_PAUSE or - PlaybackStateCompat.ACTION_PLAY or - PlaybackStateCompat.ACTION_SEEK_TO + PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or + PlaybackStateCompat.ACTION_REWIND or + PlaybackStateCompat.ACTION_FAST_FORWARD or + PlaybackStateCompat.ACTION_PLAY_PAUSE or + PlaybackStateCompat.ACTION_PAUSE or + PlaybackStateCompat.ACTION_PLAY or + PlaybackStateCompat.ACTION_SEEK_TO 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() }