diff --git a/app/build.gradle b/app/build.gradle index 965947b06..92fd84951 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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 diff --git a/app/src/main/java/org/oxycblt/auxio/image/BitmapProvider.kt b/app/src/main/java/org/oxycblt/auxio/image/BitmapProvider.kt index 59dcb877d..a91bf6c54 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/BitmapProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/BitmapProvider.kt @@ -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 diff --git a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt index 90fcf17d8..bdd981455 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt @@ -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 = diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt index f38d00695..bd1551f8a 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt @@ -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> { diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/CoverExtractor.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/CoverExtractor.kt index 0b95bb2f6..8a798116d 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/CoverExtractor.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/CoverExtractor.kt @@ -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) } diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt index 7ba7b43e3..f5e94e548 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt @@ -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. diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt index 44c4d3166..5877bb836 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt @@ -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 diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt index f0574caf9..be645f7b5 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt @@ -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) diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt index 57f03dbef..4e73ec4e6 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt @@ -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" diff --git a/app/src/main/java/org/oxycblt/auxio/list/recycler/FastScrollRecyclerView.kt b/app/src/main/java/org/oxycblt/auxio/list/recycler/FastScrollRecyclerView.kt index 89e0b5e74..22e74f36f 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/recycler/FastScrollRecyclerView.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/recycler/FastScrollRecyclerView.kt @@ -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) { diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/service/Indexer.kt index aa1e12184..2fcb5a9ca 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/Indexer.kt @@ -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 diff --git a/app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt index efd62a347..c98d3b55c 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/categories/MusicPreferenceFragment.kt @@ -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 diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetBitmapTransformation.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetBitmapTransformation.kt index e705a3274..d844026af 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetBitmapTransformation.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetBitmapTransformation.kt @@ -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 diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt index 160c8e28f..1fb39d156 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt @@ -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 diff --git a/media b/media index fa5bbe28d..34b33175c 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit fa5bbe28de0afb2ab704c3c10a0dd1a801aaeb53 +Subproject commit 34b33175c00183dc95cdcb8c735033b6785041e1