From 1a3fe7c07542e3283fd9506c1d21d1ec47204351 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 29 Nov 2024 09:58:45 -0700 Subject: [PATCH] image: refactor module - All old extractor stuff is now a module called coil - Moved Cover out of the coil module --- .../auxio/image/{extractor => }/Cover.kt | 2 +- .../java/org/oxycblt/auxio/image/CoverView.kt | 5 +- .../ExtractorModule.kt => coil/CoilModule.kt} | 4 +- .../image/{extractor => coil}/Components.kt | 3 +- .../ErrorCrossfadeTransitionFactory.kt | 2 +- .../RoundedRectTransformation.kt | 2 +- .../SquareCropTransformation.kt | 2 +- .../auxio/image/stack/CoverRetriever.kt | 2 +- .../auxio/image/stack/cache/CoverCache.kt | 2 +- .../auxio/image/stack/cache/PerceptualHash.kt | 66 ------------------- .../image/stack/extractor/CoverExtractor.kt | 2 +- .../java/org/oxycblt/auxio/music/Music.kt | 2 +- .../stack/interpret/model/DeviceMusicImpl.kt | 2 +- .../stack/interpret/model/PlaylistImpl.kt | 2 +- .../oxycblt/auxio/widgets/WidgetComponent.kt | 4 +- 15 files changed, 18 insertions(+), 84 deletions(-) rename app/src/main/java/org/oxycblt/auxio/image/{extractor => }/Cover.kt (97%) rename app/src/main/java/org/oxycblt/auxio/image/{extractor/ExtractorModule.kt => coil/CoilModule.kt} (96%) rename app/src/main/java/org/oxycblt/auxio/image/{extractor => coil}/Components.kt (98%) rename app/src/main/java/org/oxycblt/auxio/image/{extractor => coil}/ErrorCrossfadeTransitionFactory.kt (97%) rename app/src/main/java/org/oxycblt/auxio/image/{extractor => coil}/RoundedRectTransformation.kt (99%) rename app/src/main/java/org/oxycblt/auxio/image/{extractor => coil}/SquareCropTransformation.kt (98%) delete mode 100644 app/src/main/java/org/oxycblt/auxio/image/stack/cache/PerceptualHash.kt diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt b/app/src/main/java/org/oxycblt/auxio/image/Cover.kt similarity index 97% rename from app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt rename to app/src/main/java/org/oxycblt/auxio/image/Cover.kt index 839e1b49f..7950e755b 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/Cover.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.image.extractor +package org.oxycblt.auxio.image import org.oxycblt.auxio.list.sort.Sort 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 39df3369c..24477eda0 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt @@ -51,9 +51,8 @@ import com.google.android.material.shape.ShapeAppearanceModel import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject import org.oxycblt.auxio.R -import org.oxycblt.auxio.image.extractor.Cover -import org.oxycblt.auxio.image.extractor.RoundedRectTransformation -import org.oxycblt.auxio.image.extractor.SquareCropTransformation +import org.oxycblt.auxio.image.coil.RoundedRectTransformation +import org.oxycblt.auxio.image.coil.SquareCropTransformation import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt b/app/src/main/java/org/oxycblt/auxio/image/coil/CoilModule.kt similarity index 96% rename from app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt rename to app/src/main/java/org/oxycblt/auxio/image/coil/CoilModule.kt index a346fb4a9..7b1236d20 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/ExtractorModule.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/coil/CoilModule.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.image.extractor +package org.oxycblt.auxio.image.coil import android.content.Context import coil3.ImageLoader @@ -31,7 +31,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -class ExtractorModule { +class CoilModule { @Singleton @Provides fun imageLoader( diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt b/app/src/main/java/org/oxycblt/auxio/image/coil/Components.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt rename to app/src/main/java/org/oxycblt/auxio/image/coil/Components.kt index b5c1bb588..2c3fdd594 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/coil/Components.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.image.extractor +package org.oxycblt.auxio.image.coil import android.content.Context import android.graphics.Bitmap @@ -43,6 +43,7 @@ import kotlinx.coroutines.withContext import okio.FileSystem import okio.buffer import okio.source +import org.oxycblt.auxio.image.Cover import org.oxycblt.auxio.image.stack.CoverRetriever class CoverKeyer @Inject constructor() : Keyer { diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt b/app/src/main/java/org/oxycblt/auxio/image/coil/ErrorCrossfadeTransitionFactory.kt similarity index 97% rename from app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt rename to app/src/main/java/org/oxycblt/auxio/image/coil/ErrorCrossfadeTransitionFactory.kt index f5e94e548..466947f67 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/ErrorCrossfadeTransitionFactory.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/coil/ErrorCrossfadeTransitionFactory.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.image.extractor +package org.oxycblt.auxio.image.coil import coil3.decode.DataSource import coil3.request.ImageResult diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt b/app/src/main/java/org/oxycblt/auxio/image/coil/RoundedRectTransformation.kt similarity index 99% rename from app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt rename to app/src/main/java/org/oxycblt/auxio/image/coil/RoundedRectTransformation.kt index be645f7b5..214797ed3 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/RoundedRectTransformation.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/coil/RoundedRectTransformation.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.image.extractor +package org.oxycblt.auxio.image.coil import android.graphics.Bitmap import android.graphics.Bitmap.createBitmap diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt b/app/src/main/java/org/oxycblt/auxio/image/coil/SquareCropTransformation.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt rename to app/src/main/java/org/oxycblt/auxio/image/coil/SquareCropTransformation.kt index 4e73ec4e6..a7c780c92 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/SquareCropTransformation.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/coil/SquareCropTransformation.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.image.extractor +package org.oxycblt.auxio.image.coil import android.graphics.Bitmap import coil3.size.Size diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt index 89de05d67..86d7560ad 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt @@ -20,7 +20,7 @@ package org.oxycblt.auxio.image.stack import java.io.InputStream import javax.inject.Inject -import org.oxycblt.auxio.image.extractor.Cover +import org.oxycblt.auxio.image.Cover import org.oxycblt.auxio.image.stack.cache.CoverCache import org.oxycblt.auxio.image.stack.extractor.CoverExtractor diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CoverCache.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CoverCache.kt index b84145973..fca543c72 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CoverCache.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CoverCache.kt @@ -25,7 +25,7 @@ import javax.inject.Inject import kotlin.math.min import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import org.oxycblt.auxio.image.extractor.Cover +import org.oxycblt.auxio.image.Cover interface CoverCache { suspend fun read(cover: Cover.Single): InputStream? diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/cache/PerceptualHash.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/cache/PerceptualHash.kt deleted file mode 100644 index 7651d7324..000000000 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/cache/PerceptualHash.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * PerceptualHash.kt is part of Auxio. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.auxio.image.stack.cache - -import android.graphics.Bitmap -import android.graphics.Canvas -import android.graphics.Color -import android.graphics.ColorMatrix -import android.graphics.ColorMatrixColorFilter -import android.graphics.Paint -import java.math.BigInteger - -interface PerceptualHash { - fun hash(bitmap: Bitmap): String -} - -class PerceptualHashImpl : PerceptualHash { - override fun hash(bitmap: Bitmap): String { - val hashSize = 16 - // Step 1: Resize the bitmap to a fixed size - val resizedBitmap = Bitmap.createScaledBitmap(bitmap, hashSize + 1, hashSize, true) - - // Step 2: Convert the bitmap to grayscale - val grayBitmap = - Bitmap.createBitmap(resizedBitmap.width, resizedBitmap.height, Bitmap.Config.ARGB_8888) - val canvas = Canvas(grayBitmap) - val paint = Paint() - val colorMatrix = ColorMatrix() - colorMatrix.setSaturation(0f) - val filter = ColorMatrixColorFilter(colorMatrix) - paint.colorFilter = filter - canvas.drawBitmap(resizedBitmap, 0f, 0f, paint) - - // Step 3: Compute the difference between adjacent pixels - var hash = BigInteger.valueOf(0) - val one = BigInteger.valueOf(1) - for (y in 0 until hashSize) { - for (x in 0 until hashSize) { - val pixel1 = grayBitmap.getPixel(x, y) - val pixel2 = grayBitmap.getPixel(x + 1, y) - val diff = Color.red(pixel1) - Color.red(pixel2) - if (diff > 0) { - hash = hash.or(one.shl(y * hashSize + x)) - } - } - } - - return hash.toString(16) - } -} diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/CoverExtractor.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/CoverExtractor.kt index 795092b86..885f1618e 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/CoverExtractor.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/CoverExtractor.kt @@ -21,7 +21,7 @@ package org.oxycblt.auxio.image.stack.extractor import android.net.Uri import java.io.InputStream import javax.inject.Inject -import org.oxycblt.auxio.image.extractor.Cover +import org.oxycblt.auxio.image.Cover interface CoverExtractor { suspend fun extract(cover: Cover.Single): InputStream? diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt index 3cf52cbfc..3e67706e3 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt @@ -27,7 +27,7 @@ import java.util.UUID import kotlin.math.max import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import org.oxycblt.auxio.image.extractor.Cover +import org.oxycblt.auxio.image.Cover import org.oxycblt.auxio.list.Item import org.oxycblt.auxio.music.info.Date import org.oxycblt.auxio.music.info.Disc diff --git a/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt b/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt index 9d3ec79a3..e0af9e218 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt @@ -19,7 +19,7 @@ package org.oxycblt.auxio.music.stack.interpret.model import kotlin.math.min -import org.oxycblt.auxio.image.extractor.Cover +import org.oxycblt.auxio.image.Cover import org.oxycblt.auxio.list.sort.Sort import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist diff --git a/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/PlaylistImpl.kt b/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/PlaylistImpl.kt index cd5de9c06..d48346eb3 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/PlaylistImpl.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/PlaylistImpl.kt @@ -18,7 +18,7 @@ package org.oxycblt.auxio.music.stack.interpret.model -import org.oxycblt.auxio.image.extractor.Cover +import org.oxycblt.auxio.image.Cover import org.oxycblt.auxio.music.Playlist import org.oxycblt.auxio.music.info.Name import org.oxycblt.auxio.music.stack.interpret.linker.LinkedPlaylist 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 1fb39d156..6d19af745 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt @@ -28,8 +28,8 @@ import javax.inject.Inject import org.oxycblt.auxio.R import org.oxycblt.auxio.image.BitmapProvider import org.oxycblt.auxio.image.ImageSettings -import org.oxycblt.auxio.image.extractor.RoundedRectTransformation -import org.oxycblt.auxio.image.extractor.SquareCropTransformation +import org.oxycblt.auxio.image.coil.RoundedRectTransformation +import org.oxycblt.auxio.image.coil.SquareCropTransformation import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.state.PlaybackStateManager