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"
// Image loading
implementation 'io.coil-kt:coil-base:2.4.0'
implementation 'io.coil-kt.coil3:coil-core:3.0.2'
// Material
// 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.graphics.Bitmap
import androidx.core.graphics.drawable.toBitmap
import coil.ImageLoader
import coil.request.Disposable
import coil.request.ImageRequest
import coil.size.Size
import coil3.ImageLoader
import coil3.request.Disposable
import coil3.request.ImageRequest
import coil3.size.Size
import coil3.toBitmap
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
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.updateMarginsRelative
import androidx.core.widget.ImageViewCompat
import coil.ImageLoader
import coil.request.ImageRequest
import coil.util.CoilUtils
import coil3.ImageLoader
import coil3.asImage
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.shape.MaterialShapeDrawable
import com.google.android.material.shape.ShapeAppearanceModel
@ -375,7 +378,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
val request =
ImageRequest.Builder(context)
.data(covers)
.error(StyledDrawable(context, context.getDrawableCompat(errorRes), iconSize))
.error(StyledDrawable(context, context.getDrawableCompat(errorRes), iconSize).asImage())
.target(image)
val cornersTransformation =

View file

@ -18,11 +18,11 @@
package org.oxycblt.auxio.image.extractor
import coil.ImageLoader
import coil.fetch.Fetcher
import coil.key.Keyer
import coil.request.Options
import coil.size.Size
import coil3.ImageLoader
import coil3.fetch.Fetcher
import coil3.key.Keyer
import coil3.request.Options
import coil3.size.Size
import javax.inject.Inject
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.extractor.metadata.flac.PictureFrame
import androidx.media3.extractor.metadata.id3.ApicFrame
import coil.decode.DataSource
import coil.decode.ImageSource
import coil.fetch.DrawableResult
import coil.fetch.FetchResult
import coil.fetch.SourceResult
import coil.size.Dimension
import coil.size.Size
import coil.size.pxOrElse
import coil3.DrawableImage
import coil3.asImage
import coil3.decode.DataSource
import coil3.decode.ImageSource
import coil3.fetch.FetchResult
import coil3.fetch.ImageFetchResult
import coil3.fetch.SourceFetchResult
import coil3.size.Dimension
import coil3.size.Size
import coil3.size.pxOrElse
import dagger.hilt.android.qualifiers.ApplicationContext
import java.io.ByteArrayInputStream
import java.io.InputStream
@ -48,6 +50,7 @@ import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.guava.asDeferred
import kotlinx.coroutines.withContext
import okio.FileSystem
import okio.buffer
import okio.source
import org.oxycblt.auxio.image.CoverMode
@ -101,8 +104,8 @@ constructor(
}
}
return SourceResult(
source = ImageSource(first.source().buffer(), context),
return SourceFetchResult(
source = ImageSource(first.source().buffer(), FileSystem.SYSTEM, null),
mimeType = null,
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
// BufferedSource. Just make sure we mark it as "sampled" so Coil doesn't try to
// load low-res mosaics into high-res ImageViews.
return DrawableResult(
drawable = mosaicBitmap.toDrawable(context.resources),
return ImageFetchResult(
image = mosaicBitmap.toDrawable(context.resources).asImage(),
isSampled = true,
dataSource = DataSource.DISK)
}

View file

@ -18,13 +18,13 @@
package org.oxycblt.auxio.image.extractor
import coil.decode.DataSource
import coil.drawable.CrossfadeDrawable
import coil.request.ImageResult
import coil.request.SuccessResult
import coil.transition.CrossfadeTransition
import coil.transition.Transition
import coil.transition.TransitionTarget
import coil3.decode.DataSource
import coil3.request.ImageResult
import coil3.request.SuccessResult
import coil3.transition.CrossfadeDrawable
import coil3.transition.CrossfadeTransition
import coil3.transition.Transition
import coil3.transition.TransitionTarget
/**
* 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
import android.content.Context
import coil.ImageLoader
import coil.request.CachePolicy
import coil3.request.CachePolicy
import coil3.ImageLoader
import coil3.request.transitionFactory
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn

View file

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

View file

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

View file

@ -99,6 +99,21 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
private var dragStartY = 0f
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
set(value) {
if (field == value) {

View file

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

View file

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

View file

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

View file

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

2
media

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