image: use coil3
This commit is contained in:
parent
85bd1f0062
commit
f783a9c32f
15 changed files with 77 additions and 53 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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>> {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
2
media
|
@ -1 +1 @@
|
||||||
Subproject commit fa5bbe28de0afb2ab704c3c10a0dd1a801aaeb53
|
Subproject commit 34b33175c00183dc95cdcb8c735033b6785041e1
|
Loading…
Reference in a new issue