mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 16:30:31 +05:30
refactor: Reuse ImageHelper.getImage()
This commit is contained in:
parent
c6871a0452
commit
1e4e2fa9cd
@ -5,18 +5,19 @@ import android.graphics.Bitmap
|
|||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
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 coil.ImageLoader
|
import coil.ImageLoader
|
||||||
import coil.disk.DiskCache
|
import coil.disk.DiskCache
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.request.CachePolicy
|
import coil.request.CachePolicy
|
||||||
import coil.request.ImageRequest
|
import coil.request.ImageRequest
|
||||||
import coil.request.ImageResult
|
|
||||||
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.extensions.toAndroidUriOrNull
|
||||||
import com.github.libretube.util.DataSaverMode
|
import com.github.libretube.util.DataSaverMode
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
object ImageHelper {
|
object ImageHelper {
|
||||||
@ -60,39 +61,27 @@ object ImageHelper {
|
|||||||
target.load(urlToLoad, imageLoader)
|
target.load(urlToLoad, imageLoader)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun downloadImage(context: Context, url: String, path: Path) {
|
suspend fun downloadImage(context: Context, url: String, path: Path) {
|
||||||
getAsync(context, url) { bitmap ->
|
val bitmap = getImage(context, url) ?: return
|
||||||
saveImage(context, bitmap, path.toAndroidUri())
|
withContext(Dispatchers.IO) {
|
||||||
|
context.contentResolver.openOutputStream(path.toAndroidUri())?.use {
|
||||||
|
bitmap.compress(Bitmap.CompressFormat.PNG, 25, it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAsync(context: Context, url: String?, onSuccess: (Bitmap) -> Unit) {
|
suspend fun getImage(context: Context, url: String?): Bitmap? {
|
||||||
val request = ImageRequest.Builder(context)
|
|
||||||
.data(url)
|
|
||||||
.target { onSuccess(it.toBitmap()) }
|
|
||||||
.build()
|
|
||||||
|
|
||||||
imageLoader.enqueue(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun getImage(context: Context, url: String?): ImageResult {
|
|
||||||
val request = ImageRequest.Builder(context)
|
val request = ImageRequest.Builder(context)
|
||||||
.data(url)
|
.data(url)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
return imageLoader.execute(request)
|
return imageLoader.execute(request).drawable?.toBitmapOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getDownloadedImage(context: Context, path: Path): Bitmap? {
|
fun getDownloadedImage(context: Context, path: Path): Bitmap? {
|
||||||
return path.toAndroidUriOrNull()?.let { getImage(context, it) }
|
return path.toAndroidUriOrNull()?.let { getImage(context, it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveImage(context: Context, bitmapImage: Bitmap, imagePath: Uri) {
|
|
||||||
context.contentResolver.openOutputStream(imagePath)?.use {
|
|
||||||
bitmapImage.compress(Bitmap.CompressFormat.PNG, 25, it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getImage(context: Context, imagePath: Uri): Bitmap? {
|
private fun getImage(context: Context, imagePath: Uri): Bitmap? {
|
||||||
return context.contentResolver.openInputStream(imagePath)?.use {
|
return context.contentResolver.openInputStream(imagePath)?.use {
|
||||||
BitmapFactory.decodeStream(it)
|
BitmapFactory.decodeStream(it)
|
||||||
|
@ -21,6 +21,7 @@ import androidx.core.view.isVisible
|
|||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.api.obj.StreamItem
|
import com.github.libretube.api.obj.StreamItem
|
||||||
import com.github.libretube.constants.IntentData
|
import com.github.libretube.constants.IntentData
|
||||||
@ -49,6 +50,7 @@ import com.github.libretube.ui.sheets.PlayingQueueSheet
|
|||||||
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
|
import com.github.libretube.ui.sheets.VideoOptionsBottomSheet
|
||||||
import com.github.libretube.util.DataSaverMode
|
import com.github.libretube.util.DataSaverMode
|
||||||
import com.github.libretube.util.PlayingQueue
|
import com.github.libretube.util.PlayingQueue
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class AudioPlayerFragment : Fragment(), AudioPlayerOptions {
|
class AudioPlayerFragment : Fragment(), AudioPlayerOptions {
|
||||||
@ -297,10 +299,11 @@ class AudioPlayerFragment : Fragment(), AudioPlayerOptions {
|
|||||||
// reset color filter if data saver mode got toggled or conditions for it changed
|
// reset color filter if data saver mode got toggled or conditions for it changed
|
||||||
binding.thumbnail.setColorFilter(Color.TRANSPARENT)
|
binding.thumbnail.setColorFilter(Color.TRANSPARENT)
|
||||||
|
|
||||||
ImageHelper.getAsync(requireContext(), thumbnailUrl) {
|
lifecycleScope.launch {
|
||||||
val binding = _binding ?: return@getAsync
|
val binding = _binding ?: return@launch
|
||||||
binding.thumbnail.setImageBitmap(it)
|
val bitmap = ImageHelper.getImage(requireContext(), thumbnailUrl)
|
||||||
binding.miniPlayerThumbnail.setImageBitmap(it)
|
binding.thumbnail.setImageBitmap(bitmap)
|
||||||
|
binding.miniPlayerThumbnail.setImageBitmap(bitmap)
|
||||||
binding.thumbnail.isVisible = true
|
binding.thumbnail.isVisible = true
|
||||||
binding.progress.isGone = true
|
binding.progress.isGone = true
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package com.github.libretube.util
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import androidx.core.graphics.drawable.toBitmap
|
|
||||||
import com.github.libretube.api.obj.PreviewFrames
|
import com.github.libretube.api.obj.PreviewFrames
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.obj.PreviewFrame
|
import com.github.libretube.obj.PreviewFrame
|
||||||
@ -14,8 +13,8 @@ class OnlineTimeFrameReceiver(
|
|||||||
) : TimeFrameReceiver() {
|
) : TimeFrameReceiver() {
|
||||||
override suspend fun getFrameAtTime(position: Long): Bitmap? {
|
override suspend fun getFrameAtTime(position: Long): Bitmap? {
|
||||||
val previewFrame = getPreviewFrame(previewFrames, position) ?: return null
|
val previewFrame = getPreviewFrame(previewFrames, position) ?: return null
|
||||||
val drawable = ImageHelper.getImage(context, previewFrame.previewUrl).drawable ?: return null
|
val bitmap = ImageHelper.getImage(context, previewFrame.previewUrl) ?: return null
|
||||||
return cutBitmapFromPreviewFrame(drawable.toBitmap(), previewFrame)
|
return cutBitmapFromPreviewFrame(bitmap, previewFrame)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,7 +10,6 @@ import android.util.Log
|
|||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.PendingIntentCompat
|
import androidx.core.app.PendingIntentCompat
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.core.graphics.drawable.toBitmap
|
|
||||||
import androidx.work.CoroutineWorker
|
import androidx.work.CoroutineWorker
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
@ -199,7 +198,7 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
|
|
||||||
private suspend fun downloadImage(url: String?): Bitmap? {
|
private suspend fun downloadImage(url: String?): Bitmap? {
|
||||||
return if (PreferenceHelper.getBoolean(PreferenceKeys.SHOW_STREAM_THUMBNAILS, false)) {
|
return if (PreferenceHelper.getBoolean(PreferenceKeys.SHOW_STREAM_THUMBNAILS, false)) {
|
||||||
ImageHelper.getImage(applicationContext, url).drawable?.toBitmap()
|
ImageHelper.getImage(applicationContext, url)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user