image: use coil3

This commit is contained in:
Alexander Capehart 2024-11-11 11:50:57 -07:00
parent 85bd1f0062
commit f783a9c32f
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
15 changed files with 77 additions and 53 deletions

View file

@ -138,7 +138,7 @@ dependencies {
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.1.3" coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.1.3"
// Image loading // Image loading
implementation 'io.coil-kt:coil-base:2.4.0' implementation 'io.coil-kt.coil3:coil-core:3.0.2'
// Material // Material
// TODO: Exactly figure out the conditions that the 1.7.0 ripple bug occurred so you can just // TODO: Exactly figure out the conditions that the 1.7.0 ripple bug occurred so you can just

View file

@ -21,10 +21,11 @@ package org.oxycblt.auxio.image
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import coil.ImageLoader import coil3.ImageLoader
import coil.request.Disposable import coil3.request.Disposable
import coil.request.ImageRequest import coil3.request.ImageRequest
import coil.size.Size import coil3.size.Size
import coil3.toBitmap
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject import javax.inject.Inject
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song

View file

@ -39,9 +39,12 @@ import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.children import androidx.core.view.children
import androidx.core.view.updateMarginsRelative import androidx.core.view.updateMarginsRelative
import androidx.core.widget.ImageViewCompat import androidx.core.widget.ImageViewCompat
import coil.ImageLoader import coil3.ImageLoader
import coil.request.ImageRequest import coil3.asImage
import coil.util.CoilUtils import coil3.request.ImageRequest
import coil3.request.target
import coil3.request.transformations
import coil3.util.CoilUtils
import com.google.android.material.R as MR import com.google.android.material.R as MR
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.shape.ShapeAppearanceModel import com.google.android.material.shape.ShapeAppearanceModel
@ -375,7 +378,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
val request = val request =
ImageRequest.Builder(context) ImageRequest.Builder(context)
.data(covers) .data(covers)
.error(StyledDrawable(context, context.getDrawableCompat(errorRes), iconSize)) .error(StyledDrawable(context, context.getDrawableCompat(errorRes), iconSize).asImage())
.target(image) .target(image)
val cornersTransformation = val cornersTransformation =

View file

@ -18,11 +18,11 @@
package org.oxycblt.auxio.image.extractor package org.oxycblt.auxio.image.extractor
import coil.ImageLoader import coil3.ImageLoader
import coil.fetch.Fetcher import coil3.fetch.Fetcher
import coil.key.Keyer import coil3.key.Keyer
import coil.request.Options import coil3.request.Options
import coil.size.Size import coil3.size.Size
import javax.inject.Inject import javax.inject.Inject
class CoverKeyer @Inject constructor() : Keyer<Collection<Cover>> { class CoverKeyer @Inject constructor() : Keyer<Collection<Cover>> {

View file

@ -33,14 +33,16 @@ import androidx.media3.exoplayer.MetadataRetriever
import androidx.media3.exoplayer.source.MediaSource import androidx.media3.exoplayer.source.MediaSource
import androidx.media3.extractor.metadata.flac.PictureFrame import androidx.media3.extractor.metadata.flac.PictureFrame
import androidx.media3.extractor.metadata.id3.ApicFrame import androidx.media3.extractor.metadata.id3.ApicFrame
import coil.decode.DataSource import coil3.DrawableImage
import coil.decode.ImageSource import coil3.asImage
import coil.fetch.DrawableResult import coil3.decode.DataSource
import coil.fetch.FetchResult import coil3.decode.ImageSource
import coil.fetch.SourceResult import coil3.fetch.FetchResult
import coil.size.Dimension import coil3.fetch.ImageFetchResult
import coil.size.Size import coil3.fetch.SourceFetchResult
import coil.size.pxOrElse import coil3.size.Dimension
import coil3.size.Size
import coil3.size.pxOrElse
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.InputStream import java.io.InputStream
@ -48,6 +50,7 @@ import javax.inject.Inject
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.guava.asDeferred import kotlinx.coroutines.guava.asDeferred
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import okio.FileSystem
import okio.buffer import okio.buffer
import okio.source import okio.source
import org.oxycblt.auxio.image.CoverMode import org.oxycblt.auxio.image.CoverMode
@ -101,8 +104,8 @@ constructor(
} }
} }
return SourceResult( return SourceFetchResult(
source = ImageSource(first.source().buffer(), context), source = ImageSource(first.source().buffer(), FileSystem.SYSTEM, null),
mimeType = null, mimeType = null,
dataSource = DataSource.DISK) dataSource = DataSource.DISK)
} }
@ -238,8 +241,8 @@ constructor(
// It's way easier to map this into a drawable then try to serialize it into an // It's way easier to map this into a drawable then try to serialize it into an
// BufferedSource. Just make sure we mark it as "sampled" so Coil doesn't try to // BufferedSource. Just make sure we mark it as "sampled" so Coil doesn't try to
// load low-res mosaics into high-res ImageViews. // load low-res mosaics into high-res ImageViews.
return DrawableResult( return ImageFetchResult(
drawable = mosaicBitmap.toDrawable(context.resources), image = mosaicBitmap.toDrawable(context.resources).asImage(),
isSampled = true, isSampled = true,
dataSource = DataSource.DISK) dataSource = DataSource.DISK)
} }

View file

@ -18,13 +18,13 @@
package org.oxycblt.auxio.image.extractor package org.oxycblt.auxio.image.extractor
import coil.decode.DataSource import coil3.decode.DataSource
import coil.drawable.CrossfadeDrawable import coil3.request.ImageResult
import coil.request.ImageResult import coil3.request.SuccessResult
import coil.request.SuccessResult import coil3.transition.CrossfadeDrawable
import coil.transition.CrossfadeTransition import coil3.transition.CrossfadeTransition
import coil.transition.Transition import coil3.transition.Transition
import coil.transition.TransitionTarget import coil3.transition.TransitionTarget
/** /**
* A copy of [CrossfadeTransition.Factory] that also applies a transition to error results. * A copy of [CrossfadeTransition.Factory] that also applies a transition to error results.

View file

@ -19,8 +19,9 @@
package org.oxycblt.auxio.image.extractor package org.oxycblt.auxio.image.extractor
import android.content.Context import android.content.Context
import coil.ImageLoader import coil3.request.CachePolicy
import coil.request.CachePolicy import coil3.ImageLoader
import coil3.request.transitionFactory
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn

View file

@ -30,11 +30,11 @@ import android.graphics.RectF
import android.graphics.Shader import android.graphics.Shader
import androidx.annotation.Px import androidx.annotation.Px
import androidx.core.graphics.applyCanvas import androidx.core.graphics.applyCanvas
import coil.decode.DecodeUtils import coil3.decode.DecodeUtils
import coil.size.Scale import coil3.size.Scale
import coil.size.Size import coil3.size.Size
import coil.size.pxOrElse import coil3.size.pxOrElse
import coil.transform.Transformation import coil3.transform.Transformation
import kotlin.math.roundToInt import kotlin.math.roundToInt
/** /**
@ -48,7 +48,7 @@ class RoundedRectTransformation(
@Px private val topRight: Float = 0f, @Px private val topRight: Float = 0f,
@Px private val bottomLeft: Float = 0f, @Px private val bottomLeft: Float = 0f,
@Px private val bottomRight: Float = 0f @Px private val bottomRight: Float = 0f
) : Transformation { ) : Transformation() {
constructor(@Px radius: Float) : this(radius, radius, radius, radius) constructor(@Px radius: Float) : this(radius, radius, radius, radius)

View file

@ -19,9 +19,9 @@
package org.oxycblt.auxio.image.extractor package org.oxycblt.auxio.image.extractor
import android.graphics.Bitmap import android.graphics.Bitmap
import coil.size.Size import coil3.size.Size
import coil.size.pxOrElse import coil3.size.pxOrElse
import coil.transform.Transformation import coil3.transform.Transformation
import kotlin.math.min import kotlin.math.min
/** /**
@ -30,7 +30,7 @@ import kotlin.math.min
* *
* @author Alexander Capehart (OxygenCobalt) * @author Alexander Capehart (OxygenCobalt)
*/ */
class SquareCropTransformation : Transformation { class SquareCropTransformation : Transformation() {
override val cacheKey: String override val cacheKey: String
get() = "SquareCropTransformation" get() = "SquareCropTransformation"

View file

@ -99,6 +99,21 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
private var dragStartY = 0f private var dragStartY = 0f
private var dragStartThumbOffset = 0 private var dragStartThumbOffset = 0
private var thumbEnabled = false
set(value) {
if (field == value) {
return
}
field = value
if (value) {
removeCallbacks(hideThumbRunnable)
hideScrollbar()
}
listener?.onFastScrollingChanged(field)
}
private var dragging = false private var dragging = false
set(value) { set(value) {
if (field == value) { if (field == value) {

View file

@ -20,7 +20,7 @@ package org.oxycblt.auxio.music.service
import android.content.Context import android.content.Context
import android.os.PowerManager import android.os.PowerManager
import coil.ImageLoader import coil3.ImageLoader
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View file

@ -20,7 +20,7 @@ package org.oxycblt.auxio.settings.categories
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import coil.ImageLoader import coil3.ImageLoader
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject import javax.inject.Inject
import org.oxycblt.auxio.R import org.oxycblt.auxio.R

View file

@ -20,11 +20,11 @@ package org.oxycblt.auxio.widgets
import android.content.res.Resources import android.content.res.Resources
import android.graphics.Bitmap import android.graphics.Bitmap
import coil.size.Size import coil3.size.Size
import coil.transform.Transformation import coil3.transform.Transformation
import kotlin.math.sqrt import kotlin.math.sqrt
class WidgetBitmapTransformation(reduce: Float) : Transformation { class WidgetBitmapTransformation(reduce: Float) : Transformation() {
private val metrics = Resources.getSystem().displayMetrics private val metrics = Resources.getSystem().displayMetrics
private val sw = metrics.widthPixels private val sw = metrics.widthPixels
private val sh = metrics.heightPixels private val sh = metrics.heightPixels

View file

@ -21,8 +21,9 @@ package org.oxycblt.auxio.widgets
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import android.os.Build import android.os.Build
import coil.request.ImageRequest import coil3.request.ImageRequest
import coil.size.Size import coil3.request.transformations
import coil3.size.Size
import javax.inject.Inject import javax.inject.Inject
import org.oxycblt.auxio.R import org.oxycblt.auxio.R
import org.oxycblt.auxio.image.BitmapProvider import org.oxycblt.auxio.image.BitmapProvider

2
media

@ -1 +1 @@
Subproject commit fa5bbe28de0afb2ab704c3c10a0dd1a801aaeb53 Subproject commit 34b33175c00183dc95cdcb8c735033b6785041e1