mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 00:10:32 +05:30
refactor: use Coil exclusively for image loading
This commit is contained in:
parent
9030a6e871
commit
db0dc4c4fc
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
@ -257,18 +244,28 @@ class NowPlayingNotification(
|
|||||||
|
|
||||||
private fun createPlaybackState(@PlaybackStateCompat.State state: Int): PlaybackStateCompat {
|
private fun createPlaybackState(@PlaybackStateCompat.State state: Int): PlaybackStateCompat {
|
||||||
val stateActions = PlaybackStateCompat.ACTION_SKIP_TO_NEXT or
|
val stateActions = PlaybackStateCompat.ACTION_SKIP_TO_NEXT or
|
||||||
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or
|
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS or
|
||||||
PlaybackStateCompat.ACTION_REWIND or
|
PlaybackStateCompat.ACTION_REWIND or
|
||||||
PlaybackStateCompat.ACTION_FAST_FORWARD or
|
PlaybackStateCompat.ACTION_FAST_FORWARD or
|
||||||
PlaybackStateCompat.ACTION_PLAY_PAUSE or
|
PlaybackStateCompat.ACTION_PLAY_PAUSE or
|
||||||
PlaybackStateCompat.ACTION_PAUSE or
|
PlaybackStateCompat.ACTION_PAUSE or
|
||||||
PlaybackStateCompat.ACTION_PLAY or
|
PlaybackStateCompat.ACTION_PLAY or
|
||||||
PlaybackStateCompat.ACTION_SEEK_TO
|
PlaybackStateCompat.ACTION_SEEK_TO
|
||||||
|
|
||||||
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()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user