diff --git a/app/build.gradle b/app/build.gradle index 3ddc1cfef..a86e6d3ab 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { // API 33 is still busted, waiting until the XML element issue is fixed // noinspection OldTargetApi minSdk 21 - targetSdk 33 + targetSdk 32 buildFeatures { viewBinding true diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index f4f42d6fc..616d9936f 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -284,7 +284,6 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI logD("Received non-ok response $response") when (response) { - is Indexer.Response.Ok -> error("Unreachable") is Indexer.Response.Err -> { binding.homeIndexingProgress.visibility = View.INVISIBLE binding.homeIndexingStatus.textSafe = getString(R.string.err_index_failed) @@ -315,6 +314,7 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI } } } + else -> {} } } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt index f7b86b381..9ff51cee0 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt @@ -168,7 +168,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleRes: Int = 0) } companion object { - // Cache sqrt(2) for faster calculations - private const val SQRT2 = 1.4142135623730950488f + // Pre-calculate sqrt(2) for faster drawing + private const val SQRT2 = 1.4142135f } } diff --git a/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt b/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt index 3dfde55c1..e4869b70a 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt @@ -160,20 +160,11 @@ abstract class BaseFetcher : Fetcher { else -> continue } - // Ensure the picture type here is a front cover image so that we don't extract - // an incorrect cover image. - // Yes, this does add some latency, but its quality covers so we can prioritize - // correctness over speed. if (type == MediaMetadata.PICTURE_TYPE_FRONT_COVER) { - logD("Front cover successfully found") - - // We have a front cover image. Great. + logD("Front cover found") stream = ByteArrayInputStream(pic) break - } else if (stream != null) { - // In the case a front cover is not found, use the first image in the tag instead. - // This can be corrected later on if a front cover frame is found. - logW("No front cover image, using image of type $type instead") + } else if (stream == null) { stream = ByteArrayInputStream(pic) } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt b/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt index aaad8cfa5..13576aa97 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/StorageFramework.kt @@ -73,7 +73,7 @@ data class Directory(val volume: StorageVolume, val relativePath: String) { val volume = when (split[0]) { - DOCUMENT_URI_PRIMARY_NAME -> storageManager.primaryStorageVolume + DOCUMENT_URI_PRIMARY_NAME -> storageManager.primaryStorageVolumeCompat else -> storageManager.storageVolumesCompat.find { it.uuidCompat == split[0] } } @@ -84,10 +84,17 @@ data class Directory(val volume: StorageVolume, val relativePath: String) { } } +@Suppress("NewApi") private val SM_API21_GET_VOLUME_LIST_METHOD: Method by lazyReflectedMethod(StorageManager::class, "getVolumeList") + +@Suppress("NewApi") private val SV_API21_GET_PATH_METHOD: Method by lazyReflectedMethod(StorageVolume::class, "getPath") +/** The "primary" storage volume containing the OS. May be an SD Card. */ +val StorageManager.primaryStorageVolumeCompat: StorageVolume + @Suppress("NewApi") get() = primaryStorageVolume + /** * A list of recognized volumes, retrieved in a compatible manner. Note that these volumes may be * mounted or unmounted. @@ -158,6 +165,7 @@ val StorageVolume.mediaStoreVolumeNameCompat: String? } else { // Replicate API: primary_external if primary storage, lowercase uuid otherwise if (isPrimaryCompat) { + @Suppress("NewApi") // Inlined constant MediaStore.VOLUME_EXTERNAL_PRIMARY } else { uuidCompat?.lowercase() diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerNotifications.kt b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerNotifications.kt index 3ef97174e..4c60c7115 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerNotifications.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerNotifications.kt @@ -17,9 +17,9 @@ package org.oxycblt.auxio.music.system -import android.app.NotificationManager import android.content.Context import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R @@ -90,4 +90,4 @@ private val INDEXER_CHANNEL = ServiceNotification.ChannelInfo( id = BuildConfig.APPLICATION_ID + ".channel.INDEXER", R.string.info_indexer_channel_name, - NotificationManager.IMPORTANCE_LOW) + NotificationManagerCompat.IMPORTANCE_LOW) diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt index 7fc587821..df1e4c22b 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt @@ -75,7 +75,7 @@ class IndexerService : Service(), Indexer.Controller, Settings.Callback { wakeLock = getSystemServiceSafe(PowerManager::class) .newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, BuildConfig.APPLICATION_ID + ".IndexerService") + PowerManager.PARTIAL_WAKE_LOCK, BuildConfig.APPLICATION_ID + ":IndexerService") settings = Settings(this, this) indexerContentObserver = SystemContentObserver() @@ -200,7 +200,9 @@ class IndexerService : Service(), Indexer.Controller, Settings.Callback { private fun PowerManager.WakeLock.acquireSafe() { if (!wakeLock.isHeld) { logD("Acquiring wake lock") - acquire() + + // We always drop the wakelock eventually. Timeout is not needed. + @Suppress("WakelockTimeout") acquire() } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt index a8a8a2131..39f7a6f2c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt @@ -18,13 +18,13 @@ package org.oxycblt.auxio.playback.system import android.annotation.SuppressLint -import android.app.NotificationManager import android.content.Context import android.os.Build import android.support.v4.media.MediaMetadataCompat import android.support.v4.media.session.MediaSessionCompat import androidx.annotation.DrawableRes import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat import androidx.media.app.NotificationCompat.MediaStyle import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.IntegerTable @@ -154,6 +154,6 @@ class NotificationComponent(private val context: Context, sessionToken: MediaSes ChannelInfo( id = BuildConfig.APPLICATION_ID + ".channel.PLAYBACK", nameRes = R.string.info_playback_channel_name, - importance = NotificationManager.IMPORTANCE_LOW) + importance = NotificationManagerCompat.IMPORTANCE_LOW) } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/Sort.kt b/app/src/main/java/org/oxycblt/auxio/ui/Sort.kt index a5658bba1..01e066ebb 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/Sort.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/Sort.kt @@ -358,8 +358,7 @@ data class Sort(val mode: Mode, val isAscending: Boolean) { aSortName.compareTo(bSortName, ignoreCase = true) aSortName == null && bSortName != null -> -1 // a < b aSortName == null && bSortName == null -> 0 // a = b - aSortName != null && bSortName == null -> 1 // a < b - else -> error("Unreachable") + else -> 1 // a < b } } @@ -377,8 +376,7 @@ data class Sort(val mode: Mode, val isAscending: Boolean) { a != null && b != null -> a.compareTo(b) a == null && b != null -> -1 // a < b a == null && b == null -> 0 // a = b - a != null && b == null -> 1 // a < b - else -> error("Unreachable") + else -> 1 // a < b } companion object { diff --git a/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt b/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt index bd1640443..9f3c01897 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/recycler/ViewHolders.kt @@ -151,7 +151,7 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin override fun areItemsTheSame(oldItem: Artist, newItem: Artist) = oldItem.rawName == newItem.rawName && oldItem.albums.size == newItem.albums.size && - newItem.songs.size == newItem.songs.size + oldItem.songs.size == newItem.songs.size } } } diff --git a/app/src/main/java/org/oxycblt/auxio/util/LogUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/LogUtil.kt index 4561484e8..2f4e1e6ab 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/LogUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/LogUtil.kt @@ -102,6 +102,7 @@ private val Any.autoTag: String * * UNITED ARAB EMIRATES ENSLAVED MIGRANT WORKERS */ +@Suppress("KotlinConstantConditions") private fun basedCopyleftNotice() { if (BuildConfig.APPLICATION_ID != "org.oxycblt.auxio" && BuildConfig.APPLICATION_ID != "org.oxycblt.auxio.debug") { diff --git a/app/src/main/res/color/sel_compat_ripple.xml b/app/src/main/res/color/sel_compat_ripple.xml index c1879cc54..5d992aaed 100644 --- a/app/src/main/res/color/sel_compat_ripple.xml +++ b/app/src/main/res/color/sel_compat_ripple.xml @@ -1,14 +1,7 @@ - - - - + + + + diff --git a/app/src/main/res/color/sel_toggleable_primary.xml b/app/src/main/res/color/sel_toggleable_primary.xml index 6e06c2444..eb504dfb7 100644 --- a/app/src/main/res/color/sel_toggleable_primary.xml +++ b/app/src/main/res/color/sel_toggleable_primary.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/color/sel_toggleable_secondary.xml b/app/src/main/res/color/sel_toggleable_secondary.xml index 94963e77a..022128c2d 100644 --- a/app/src/main/res/color/sel_toggleable_secondary.xml +++ b/app/src/main/res/color/sel_toggleable_secondary.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_panel_bg.xml b/app/src/main/res/drawable/ui_panel_bg.xml deleted file mode 100644 index f8fc1d142..000000000 --- a/app/src/main/res/drawable/ui_panel_bg.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ui_queue_drag_handle.xml b/app/src/main/res/drawable/ui_queue_drag_handle.xml index cf53b046f..2c907c3d6 100644 --- a/app/src/main/res/drawable/ui_queue_drag_handle.xml +++ b/app/src/main/res/drawable/ui_queue_drag_handle.xml @@ -1,7 +1,9 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout-w600dp-land/fragment_main.xml b/app/src/main/res/layout-w600dp-land/fragment_main.xml index 3e2d9d93f..f946e1c88 100644 --- a/app/src/main/res/layout-w600dp-land/fragment_main.xml +++ b/app/src/main/res/layout-w600dp-land/fragment_main.xml @@ -28,7 +28,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> - @@ -37,21 +37,23 @@ android:id="@+id/playback_panel_fragment" android:name="org.oxycblt.auxio.playback.PlaybackPanelFragment" android:layout_width="0dp" - android:layout_weight="1" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + app:layout_constraintEnd_toStartOf="@+id/queue_sheet" + app:layout_constraintStart_toStartOf="parent" /> + android:orientation="vertical" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/playback_panel_fragment"> + android:layout_weight="1" /> - + diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index b8e33bcd9..39be7bcd3 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -4,8 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" android:background="?attr/colorSurface" + android:orientation="vertical" tools:context=".settings.AboutFragment"> + android:paddingBottom="@dimen/spacing_mid_large" + android:scaleType="center" + android:src="@drawable/ui_queue_drag_handle" + app:layout_constraintTop_toTopOf="parent" + app:tint="?attr/colorOnSurfaceVariant" /> + android:layout_weight="1" /> diff --git a/app/src/main/res/layout/fragment_queue.xml b/app/src/main/res/layout/fragment_queue.xml index 7399b626b..dcf527955 100644 --- a/app/src/main/res/layout/fragment_queue.xml +++ b/app/src/main/res/layout/fragment_queue.xml @@ -1,6 +1,5 @@ - + android:background="?attr/colorSurface" + android:orientation="vertical"> اوكسيو يحتاج إلى صلاحيات لقراءة للاطلاع على مكتبتك للموسيقى لا يوجد تطبيق لفتح هذا الرابط هذا المجلد غير مدعوم - اوكسيو لا يدعم حجم النافذة هذه البحث في مكتبتك… diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 04c1e4765..02b796c38 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -109,7 +109,6 @@ Žádná aplikace nedokáže otevřít tento odkaz Žádné složky Tato složka není podporována - Auxio nepodporuje velikost tohoto okna Prohledat vaší knihovnu… diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9eeceea03..192706ded 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -201,7 +201,6 @@ Format Größe Bitrate - Auxio unterstützt diese Fenstergröße nicht MediaStore-Tags ignorieren Erhöht Tag-Qualität, benötigt aber längere Ladezeiten (Experimentell) Überwachen der Musikbibliothek diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3c8726db3..74f218214 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -91,7 +91,6 @@ Auxio necesita permiso para leer su biblioteca de música Sin aplicación para abrir este enlace Directorio no soportado - Auxio no soporta este tamaño de ventana Buscar en la biblioteca… diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index be09fdc7e..53423830f 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -114,7 +114,6 @@ Nijedna aplikacija ne može otvoriti ovaj link Nema mapa Ova mapa nije podržana - Auxio ne podržava ovu veličinu prozora Nijedno stanje nije bilo moguće vratiti Pretražite vašu zbirku… Zvučni zapis %d diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 8fa809ca5..5fdd1adc6 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -138,7 +138,7 @@ -%.1f dB %d kbps %d Hz - Memuat perpustakaan musik Anda... (%1$d/%2$d) + Memuat perpustakaan musik Anda… (%1$d/%2$d) Lagu yang dimuat: %d Album yang dimuat: %d Artis yang dimuat: %d @@ -164,7 +164,6 @@ Nama Artis Musik hanya akan dimuat dari folder yang Anda tambahkan. Pemuatan musik gagal - Auxio tidak mendukung ukuran jendela ini Sampul Album untuk %s Artis Tidak Dikenal Tidak ada Folder diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7137a8d3d..32ce32277 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -94,7 +94,6 @@ Auxio ha bisogno del permesso per leggere la tua libreria musicale Nessuna app può aprire il link Questa cartella non è supportata - Auxio non supporta questa dimensione di finestra Cerca nella tua libreria… diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index aa9c33405..9719fe81a 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -123,7 +123,6 @@ 이 링크를 열 수 있는 앱 없음 폴더 없음 이 폴더는 지원하지 않는 폴더입니다. - 앱이 이 크기의 창을 지원하지 않습니다. 라이브러리에서 검색… diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index f88c82fc3..1057b4b96 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -105,6 +105,7 @@ %d Albumas %d Albumai + %d Albumo %d Albumo Remiksai @@ -116,6 +117,7 @@ %d Daina %d Dainos + %d Albumo %d Dainą Dinaminis @@ -135,7 +137,6 @@ Pageidaujamas takelis Jokių aplankų Šis aplankas nepalaikomas - „Auxio“ nepalaiko šio lango dydžio Groti arba pristabdyti Pereiti į kitą dainą Pereiti į paskutinę dainą diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6b3749ded..6817c1499 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -149,7 +149,7 @@ Schakel shuffle aan of uit Naam van het lied Kan afspeelstatus wissen - Uw muziekbibliotheek wordt geladen... (%1$d/%2$d) + Uw muziekbibliotheek wordt geladen… (%1$d/%2$d) Uitgezonderd Alle liedjes shuffelen Onbekend Formaat @@ -158,7 +158,6 @@ Muziek zal niet worden geladen vanuit de mappen die u toevoegt. Muziek herladen Muziek zal alleen worden geladen uit de mappen die u toevoegt. - Auxio ondersteunt deze venstergrootte niet Aanpassing met tags Aanpassing zonder tags Er speelt geen muziek diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b5cf323aa..b69a0040c 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -90,7 +90,6 @@ Nenhum aplicativo pode abrir este link Sem Pastas Esta pasta não é compatível - O Auxio não suporta este tamanho de janela Mostrar capas de álbuns Pode limpar o estado de reprodução Retroceder antes de pular para trás diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 39c35e99b..3800f3aea 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -93,7 +93,6 @@ Auxio требуется разрешение на чтение музыкальной библиотеки Нет приложений для открытия данной ссылки Эта папка не поддерживается - Auxio не поддерживает данное разрешние экрана Найти в библиотеке… diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 4498dd18e..b9d2a6ac4 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -170,7 +170,6 @@ Uygulamayı yeniden başlatacaktır Klasör yok Bu klasör desteklenmiyor - Auxio bu pencere boyutunu desteklemiyor Sonraki şarkıya geç Son şarkıya geç Tekrarlama modunu değiştir diff --git a/app/src/main/res/values-v23/styles_core.xml b/app/src/main/res/values-v23/styles_core.xml index c94d49641..1ce41ebe2 100644 --- a/app/src/main/res/values-v23/styles_core.xml +++ b/app/src/main/res/values-v23/styles_core.xml @@ -1,5 +1,6 @@ + - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles_core.xml b/app/src/main/res/values/styles_core.xml index b0e64a95f..342b15b40 100644 --- a/app/src/main/res/values/styles_core.xml +++ b/app/src/main/res/values/styles_core.xml @@ -2,14 +2,14 @@ - +