Fix lints that have accumulated over time.
Apparently Android Studio just...stopped using lints. For no reason. I
had to upgrade to the beta version to actually get lints.
Unify the background state layers of the entire app by overriding
colorControlHighlight.
Lots of components still use it, so it's beneficial to make it
consistent with the rest of the app theming.
Further rework the button layout to be alike to other modern widgets.
This changeset transforms the play button into a FAB-ish thing,
makes spacing coherent between the uses of each layout, and adds
spacers to make the buttons layout in a more appealing way.
Add a new view called ImageGroup that will handle all advanced image
hacks from now on.
This includes the indicator (which is now animated), any selection
indicators, and the weirdness of the album song image. All of that
is now handled by ImageGroup. This is the culmination of probably
a day and a half of wrangling with android insanity and having to
remove a lot of what I liked about the indicator in order to make
this work on a basic level.
The only major bug I am currently aware of with this is that the
indicator is bugged out on Lollipop devices due to bad vectors.
Again.
I never want to do this again. I cannot believe that adding a basic
indicator took this long and required so much stupid hacks and
inefficient code. And then google wonders why android apps are so
visually unappealing and janky and laggy. Hm. Must be that devs aren't
using the brand new FooBarBlasterFlow library!
Add support for excluding directories on other volumes, at least from
Android Q onwards.
Previously, Auxio only supported excluding the primary volume. This was
mostly out of laziness, as the excluded directory implementation was
shamelessly copied from Phonograph. This commit completely refactors
the excluded directory system, dumpstering the old database (which was
overkill anyway) for a new system based on SharedPreferences that is
actually capable of handling external volumes.
Now, limitations regarding external volumes still apply below Android
Q, as the VOLUME_NAME field does not exist on those versions. However,
this should resolve at least one major complaint regarding the
excluded directory system. Now theres just all of the other complaints.
Resolves#134.
Rework audio focus to rely on the native ExoPlayer implementation
instead of a custom implementation.
Previously, we avoided ExoPlayer's AudioFocus system as it never
played after a transient lost. A few versions later now through,
now it does, so we may as well switch to it. This does introduce
a bug where ReplayGain functionality will conflict with audio
focus, but I hope to eliminate this with #115 as I switch to
an AudioProcessor instead of a callback.
Allow the material library to handle dynamic colors.
Turns out I was mis-understanding how DynamicColor themes were meant to
be used by the material library. Turns out you can just inherit from it
and it will work perfectly fine. Refactor the V31 styles to remove our
insane shims and finally fix the slapdash dynamic color usage across
the main theme and widgets.
Add a circular indicator to playback icons.
Sometimes it can be too difficult to tell apart the active and inactive
states of the shuffle/loop icons. However, there is really no good way
to improve the contrast on these icons without some kind of muddled UX
fragmentation, or god-awful design. Try to settle on the okay-est
version, which is to use colorPrimary with a dot indicator on views we
control, and use a more muddled semi-transparent icon on views we don't
control, like notifications and widgets.
Disable the ability to customize audio focus on Android 12 and up.
Android 12 automatically regulates audio streams even further than it
did in previous versions, to the point where the audio focus setting
no longer makes sense on that version. I may extend the removal to all
versions in the future.
Actually migrate to API 32 [Android 12L], co-inciding with the upgrade
of my studio install and the android gradle plugin. Alongside this, add
a bunch of fixes for lints that the new studio picked up.
Update the image behavior for the following:
1. Use ic_album as the default image for songs and albums this just
looks beter in general.
2. Use a special default drawable for the widget so that it doesn't
look as strange.
3. Generally update the loading process throughout the app
Use Slider and FloatingActionbutton in the playback view. This is not
because I wanted to, but because there were insane bugs on Lollipop
devices that stemmed from them being unable to load complex selector
resources.
Revamp Auxio's icon entirely. Now it's generally more vibrant [won't
blend into the BG] and will actually has some style to it with an
angular song note instead of the default icon one.
My phone has just updated to Android 12, and Auxio looks very out of
place compared to the other themed APIs. Improve the usage of Material
You on the app icon and the widgets so that they line up a bit more.
Can't fully commit though since sometimes the colors can't be
replicated or because they don't look very good.
Finally add tab customization. This implementation is a
bit ugly, but I had to futureproof it for playlists and I'm
planning to clean up a lot of the duplicate code across the app.
This addition notably allows a default tab to be set, which is
something that was widely requested in #12. This UI rework finally
allows it to be added.
Mostly migrate to Material 3/Material You.
- Auxio should now follow dynamic colors on Android 12
- Accents have been regenerated to align with the new color roles
- Some colors have been tweaked here and there to line up with the
new design system
- Dialogs were not fully migrated, but that's because Material3 dialogs
look god-awful.
- Accent class was reworked to take up less memory
Now that this is out of the way, I can focus on other UI things before
the release of 2.0.0.
Refactor the styling again to make all styles start with the Auxio
prefix. Also try to phase out the usage of layout_width and
layout_height in most places, since those can cause a lot of
frustration if they aren't used in the layout they are expected in.
The pre-Android 12 padding option was removed previously, but I've
decided to re-add it for stylistic cohesion with the material design
of those versions.
Tweak some dimens so that they line up with the 8dp grid. This doesn't
apply to all of them since some of them are fined-tuned [such as the
fast-scroller]. The latter would likely be migrated in the later UI
overhaul.
Refactor styles again, this time trying to seperate the more
layout-specific attributes so that layouts become more re-usable.
This also updates the naming conventions of styles.
Modify the minimal wdiget so that it can work on Android 11 and below.
Was not actually that hard, mostly changing layouts around all things
considered. This also splits up the default view and the main widget
views, which makes managing UI state much easier.
Add the first widget implementation, the minimal widget. This took a
good 2 days of hacking and frustration to get the first prototype
working. And even then, its currently scoped to android 12 until I'm
able to port them. The implementation is still quite rough, but should
become manageable over time. More widgets will come.