From d82952d88d0a31f5626ad35d730413d06513804f Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Wed, 23 Jun 2021 09:37:33 -0600 Subject: [PATCH] md: update project information Update the README to update the current state of Auxio, uodate the ADDITIONS document to reflect which features have been rejected, and remove the black mode question from the FAQ. --- README.md | 6 +-- .../oxycblt/auxio/library/LibraryFragment.kt | 1 - .../org/oxycblt/auxio/music/MusicLoader.kt | 43 +++++++++++++++---- .../{songs => recycler}/FastScrollView.kt | 2 +- app/src/main/res/layout/fragment_library.xml | 2 +- app/src/main/res/layout/fragment_songs.xml | 2 +- info/ADDITIONS.md | 6 +++ info/FAQ.md | 4 -- 8 files changed, 46 insertions(+), 20 deletions(-) rename app/src/main/java/org/oxycblt/auxio/{songs => recycler}/FastScrollView.kt (99%) diff --git a/README.md b/README.md index 8a19cbe90..9891326b9 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ Auxio is a local music player with a fast, reliable UI/UX without the many usele I primarily built Auxio for myself, but you can use it too, I guess. +#### Note: Auxio is in a point that I am largely satisfied with. The app is still maintained, but feature additions will be slow. + ## Screenshots

@@ -55,10 +57,6 @@ I primarily built Auxio for myself, but you can use it too, I guess. - Playlists - Liked songs - More notification actions -- Swipe-between-tracks function -- Better edge-to-edge support -- More customization options -- Other things, presumably ## Contributing diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt index 5a00a6232..2f0795b8d 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -24,7 +24,6 @@ import org.oxycblt.auxio.ui.newMenu /** * A [Fragment] that shows a custom list of [Genre], [Artist], or [Album] data. Also allows for * search functionality. - * TODO: Add fast scrolling * @author OxygenCobalt */ class LibraryFragment : Fragment() { diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt index 1ded515e1..8d6385c7e 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt @@ -236,17 +236,44 @@ class MusicLoader(private val context: Context) { /* * Okay, I'm going to go on a bit of a tangent here because this bit of code infuriates me. * - * In an ideal world I should just be able to write MediaStore.Media.Audio.GENRE - * in the original song projection and then have it fetch the genre from the database, but - * no, why would ANYONE do that? Instead, I have to manually iterate through each genre, get - * A LIST OF SONGS FROM THEM, and then waste CPU cycles REPEATEDLY ITERATING through the - * songs list to LINK EACH SONG WITH THEIR GENRE. This is the bottleneck in my loader, - * without this code the load times drop from ~130ms to ~60ms, but of course I have to do - * this if I want an sensible genre system. Why is it this way? Nobody knows! Now this - * quirk is immortalized and has to be replicated in all future iterations of this API! Yay! + * In any reasonable platform, you think that you could just query a media database for the + * "genre" field and get the genre for a song, right? But not with android! No. Thats too + * normal for this dysfunctional SDK that was dropped on it's head as a baby. Instead, we + * have to iterate through EACH GENRE, QUERY THE MEDIA DATABASE FOR THE SONGS OF THAT GENRE, + * AND THEN ITERATE THROUGH THAT LIST TO LINK EVERY SONG WITH THE GENRE. This O(mom im scared) + * algorithm single-handedly DOUBLES the amount of time it takes Auxio to load music, but + * apparently this is the only way you can have a remotely sensible genre system on this + * busted OS. Why is it this way? Nobody knows! Now this quirk is immortalized and has to + * be replicated in all future versions of this API, because god forbid you break some + * app that's probably older than some of the people reading this by now. + * + * Another fun fact, did you know that you can only get the date from ID3v2.3 MPEG files? + * I sure didn't, until I decided to update my music collection to ID3v2.4 and Xiph only + * to see that android apparently has a brain aneurysm the moment it sees a dreaded TDRC + * or DATE tag. This bug is similarly baked into the platform and hasnt been fixed, even + * in android TWELVE. ID3v2.4 has existed for TWENTY-ONE YEARS. IT CAN DRINK NOW. At least + * you could replace your ancient dinosaur parser with Taglib or something, but again, + * google cant bear even slighting the gods of backwards compat. + * + * Is there anything we can do about this system? No. Google's issue tracker, in classic + * google fashion, requires a google account to even view. Even if I were to set aside my + * Torvalds-esqe convictions and make an account, MediaStore is such an obscure part of the + * platform that it basically receives no attention compared to the advertising APIs or the + * nineteenth UI rework, and its not like the many music player developers are going to band + * together to beg google to take this API behind the woodshed and shoot it. So instead, + * players like VLC and Vanilla just hack their own pidgin version of MediaStore off of + * their own media parsers, but even this becomes increasingly impossible as google + * continues to kill the filesystem ala iOS. In the future MediaStore could be the only + * system we have, which is also the day greenland melts and birthdays stop happening + * forever. I'm pretty sure that at this point nothing is going to happen, google will + * continue to neglect MediaStore, and all the people who just want to listen to their music + * collections on their phone will continue to get screwed. But hey, at least some dev at + * google got a cushy managerial position where they can tweet about politics all day for + * shipping the brand new androidx.FooBarBlasterView, yay! * * I hate this platform so much. */ + genres.forEach { genre -> val songCursor = resolver.query( Genres.Members.getContentUri("external", genre.id), diff --git a/app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt b/app/src/main/java/org/oxycblt/auxio/recycler/FastScrollView.kt similarity index 99% rename from app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt rename to app/src/main/java/org/oxycblt/auxio/recycler/FastScrollView.kt index 3891d9f44..c52c572b1 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/FastScrollView.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.songs +package org.oxycblt.auxio.recycler import android.content.Context import android.os.Build diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index 3b8bafd5f..a82a64c88 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -29,7 +29,7 @@ app:layout_constraintTop_toBottomOf="@+id/library_toolbar" tools:listitem="@layout/item_artist" /> - -