Commit graph

121 commits

Author SHA1 Message Date
OxygenCobalt
170cdf80ef
widgets: fix insanity
Fix two issues where Auxio's widget could not be resized to a single
cell, and another where covers would not load into the widget.

The first is caused by a random, subtle change that completely changed
up the minHeight size calculation regarding widgets. Thus, we need to
lower it for android to recognize it still as 1 cell. I cannot believe
we can't just specify the specific minimum grid size that our widget
takes up, like you know, iOS did, nearly a decade after widgets were
first added in Android.

The second is an absurd race condition stemming from me hitting the
RemoteViews memory limit. Turns out my cover bitmaps were simply too
big. Getting them below the limit requires me to resize them to a puny
~500 pixels. Why can't we just render our own views into our widget?
You know, like iOS did, nearly a decade after widgets were first added
to Android.

Nah, screw modernizing the broken widget API. Let's just vaguely copy
iOS widgets because we have to while not fixing a single issue plaguing
widget development on this OS. That way some google engineer can get
promoted faster.
2022-07-30 20:41:24 -06:00
OxygenCobalt
cc3cb343b0
playback: use bottomsheetbehavior
Use BottomSheetBehavior with the playback sheet.

This is the result of two weeks of painful hacking to get a working
implementation that did not immediately have a brain aneursym. It
also requires me to still vendor BottomSheetBehavior for the time
being. However, this greatly reduces technical issues on my end and
allows the addition of new playback UI concepts, while still
retaining the UI fluidity of prior.
2022-07-29 12:21:06 -06:00
OxygenCobalt
60b637e1ce
all: cleanup
Semi-major code cleanup.
2022-07-11 11:29:34 -06:00
OxygenCobalt
83d6c529e2
all: misc ui reworks
Miscellanious UI reworks that accumulated over the past few days.
2022-07-07 10:40:18 -06:00
OxygenCobalt
b1a8544b73
ui: make toolbar fix dedicated class
Make the toolbar spacing fixes a dedicated class.

This resolves an issue on lollipop devices where the ripple would be
clipped.
2022-07-03 16:23:53 -06:00
OxygenCobalt
e41645ee28
widgets: rework button appearance
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.
2022-07-01 12:25:59 -06:00
OxygenCobalt
e883336b04
music: rework library update process [#176]
Update the library update process to be on a co-routine, updating
callbacks on the main thread.

For some insane reason, the Main dispatcher used normally when
loading music just disappears sometimes. This leads to unpleasent
crashes as callbacks expect to be called on the app thread, not
any background threads.

Fix this by forcing the Main dispatcher during the update process.
This requires the music update process to also run on a background
thread, albeit that will be useful for automatic rescanning late ron.
2022-07-01 08:54:42 -06:00
OxygenCobalt
090a1713dd
ui: rework iconography
Completely rework Auxio's iconography based on the new material symbols
icon set.

This does the following:
1. Switches the sharp + filled icon style to an outlined + round icon
style.
2. Removes 32dp icons from everywhere except the playback panel.

This does not:
1. Actually handle optical sizes right. This is going to take some more
work to make it harmonious with the current UI.
2. Update margins in some places to be harmonious with the new icons.
This is also going to take some more work to do properly.
2022-06-30 21:09:21 -06:00
OxygenCobalt
3fcd7e1a63
all: general cleanup
A bunch of changes that accumulated that I'm too lazy to split into
good commits.
2022-06-22 18:38:57 -06:00
OxygenCobalt
eaad3d04b8
ui: improve tablet ux
Remove some UI breakages and tweak the UI to be better for tablet
users.
2022-06-17 16:30:14 -06:00
OxygenCobalt
1d66907862
ui: remove edge-to-edge option
Remove the edge-to-edge option, as it turned out to be useless
with #149.
2022-06-09 17:03:38 -06:00
OxygenCobalt
84295dcf25
ui: completely rework icon management
Completely rework the way Auxio handles icons.

This is mostly two changes:
1. Removing ImageButton/StyledImageButton for MaterialButton. This is
done by abusing MaterialButton's theming options to make it only show
an icon.
2. Standardizing icon sizes into small, medium, and large categories.
Small is the default, Medium and Large are for edge-cases like the
playback icons which look horrible at 24dp.
3. Abusing the Toolbar to make it follow Material 3 guidelines. This
mostly involved removing the strange icon sizing and correctly padding
the view.
4. Reworking the playback bar to use more, smaller icons, making it
more like a Toolbar in the process (which I like).
2022-06-09 10:12:48 -06:00
OxygenCobalt
c6d7d8fe39
playback: implement "safe" slider wrapper
Implement a safe slider wrapper that does not crash with invalid values
as often.

Slider is a terrible component that is not designed with Auxio's
use-case in the slightest. Instead of gracefully degrading with invalid
values, it just crashes the entire app, which is horrible for UX.

Since SeekBar is a useless buggy version-specific sh******ed mess too,
we have no choice but to wrap Slider in a safe view layout that
hopefully hacks with the input enough to not crash the app when doing
simple seeking actions.

I hate android so much.

Resolves #140.
2022-05-27 14:34:14 -06:00
OxygenCobalt
e1e032d254
ui: re-add accent customization >api 31
Re-add accent customization on Android 12 and above.

Previously, I disabled accent customization since I thought they were
more or less useless with the new Material You dynamic colors system.
Turns out I severely underestimated how horribly OEMs would botch the
dynamic colors system. Guess I was blinded by my adherence to the pixel
line. Re-add the accent customization for those who do not have a good
dynamic color palette at all.

Resolves #131.
2022-05-24 12:52:09 -06:00
OxygenCobalt
21fccf1f31
playback: add pre-amp customization
Implement a UI frontend for customizing the ReplayGain pre-amp value.

This finally completes Auxio's ReplayGain implementation. Not only
that, it also shows how Auxio can use positive ReplayGain values,
unlike other apps.

As a side-note, this also fiddles with the dialog style somewhat.
I got carried away.

Resolves #114.
2022-05-22 09:32:23 -06:00
OxygenCobalt
2d7dbd19cd
ui: rework custom ui components
Refactor the package structure and implementation of custom UI
components.
2022-05-21 14:52:08 -06:00
OxygenCobalt
28feebcec3
sort: add duration and count sorts
Add sorting modes for duration and song count.

This was requested previously in the now-closed UI/UX changes
megathread, however I have only gotten to it now.
2022-05-20 18:33:56 -06:00
OxygenCobalt
74f5962844
ui: rework cover style
Rework the style of all album covers in the app to be more in line with
the new track number style.

This is mostly comprised of adding a new background to all cover views
and rescaling error icons to be smaller than they would normally be.
This also includes a change in the cover/track background color from
colorSurfaceVariant to colorOnSurfaceInverse, which seems to provide
the best visibility in all cases.

These changes also apply to the track number views.
2022-04-02 18:18:10 -06:00
OxygenCobalt
e387e72b2c
detail: update album song layout
Update the album song layout to be more alike to other songs.

Recently I migrated the TextView in the album songs to use 48dp sizing,
like the other song views. However, this resulted in a lot of empty
space that felt off. Fix this by adding a light background to the track
number, which fills the room it takes up a bit more. It also hopefully
primes the track number to take an indicator once multi-select is
added.
2022-03-29 20:08:57 -06:00
OxygenCobalt
ee1a234e76
ui: rework base adapter class
Completely rework the base adapter class to require less boilerplate
and properly handle cases such as diffing. The major adapters have
been migrated to this system, but the other adapters have not been
changed so far.

This is only part 1 of a multi-part rework, as this is an incredibly
complex system.
2022-03-26 10:16:36 -06:00
OxygenCobalt
d79592e029
all: remove databinding
Remove databinding entirely.

Databinding was a terrible idea for Auxio. I rarely leveraged it, and
when I did, it produced messy code and bloated build times. Dumpster it
for just viewbinding, which is good. This reduces building times by
nearly 2/3, and generally makes the codebase more coherent and usable.
2022-03-23 10:59:01 -06:00
OxygenCobalt
95057ec357
all: move all fragments to ViewBindingFragment
Move all fragment instances to the new ViewBindingFragment paradigm,
which should help immensely with reducing memory leaks from list
bindings and to really alleviate the overloaded onCreate functions.
2022-03-23 09:18:08 -06:00
OxygenCobalt
8f38ed6ee5
playback: rework view implementations
Rework the playback views to follow the new idioms I want to use for
Auxio.

This change mostly consists of flattening away some of the custom
views, removing databinding, and using a general viewbinding
fragment that I hope to extend to the entire app.
2022-03-21 20:15:42 -06:00
OxygenCobalt
9c07ad2d34
sort: completely rework class
Completely refactor the Sort class to be more efficient and
straightforward.

The original Sort class had *major* shortcomings, it was slow,
poorly organized, and relied on abusing compareBy to implement
special things like article sort. This rework eliminates all of
that in favor of a new system relying on custom comparators and
chaining to achieve something much faster and maintainable.
2022-03-19 15:44:11 -06:00
OxygenCobalt
90f10f2a84
home: clean up fast scroller
Clean up the fast scroller implementation to remove dead code and
be more coherent in general.
2022-03-19 10:59:13 -06:00
OxygenCobalt
61dbfe3185
coil: make rounded images more nuanced
Create a custom view for rounded images, making them more nuanced in
the process.

The previous method for applying rounded images in-app was generally
clunky and fragile. Introduce a new custom view that actually takes a
cornerRadius attribute from the ImageView itself that then applies it
whenever the user enables the setting. This also allows rounded images
to be more nuanced, as typical 8dp elevation can be used for small
views and a more fitting 16dp radius can be used for large views.
2022-02-23 17:42:34 -07:00
OxygenCobalt
87035805d2
ui: general cleanup
Clean up a bunch of UI issues that have accumulated.
2022-02-23 15:26:40 -07:00
OxygenCobalt
9304e58190
playback: rework playback icon visibility
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.
2022-02-21 16:36:08 -07:00
OxygenCobalt
0209e526e1
all: general cleanup
Do some general code cleanup.
2022-02-06 09:01:51 -07:00
OxygenCobalt
b92b08f8ab
home: make fab adaptive
Use a large FAB on tablet layouts, as in general it's okay to make
those elements bigger on large touchscreens.
2021-12-18 11:15:28 -07:00
OxygenCobalt
4ccaa7c4bb
all: cleanup code
Clean up code and fits a bunch of miscellaneous issues.
2021-11-24 20:22:30 -07:00
OxygenCobalt
e697908a2f
detail: update layouts
Update the detail layouts to work better on tablets and be more
consistent overall.
2021-11-20 17:03:21 -07:00
OxygenCobalt
58c2681f72
widget: change default size
Make the default widget size 3x2 again. This is because the UX is
generally nicer if the smaller widget is used as the default and
because the small widget is now no longer text-only and ugly.
2021-11-20 09:53:10 -07:00
OxygenCobalt
0e3ffb973b
coil: completely refactor image loading
Upgrade to coil 2.0.0 and completely refactor the usage of coil to work
with the new library structure. This also fixes the issue where error
icons will just re-appear due to blocking calls. I had to add a fix on
my end and also use the new caching system in coil 2.0.0.
2021-11-20 09:00:23 -07:00
OxygenCobalt
e3f4a6fefa
widgets: fix minor issues
Fix problems with weird margins in the small/wide widgets and change
the initial layout from widget_medium to widget_default.

The latter is nice, as it allows for more cohesion between the default
state and the "unhooked" state that's shown when the phone boots.
2021-11-16 16:48:40 -07:00
OxygenCobalt
c30c0d7fb3
accent: simplify accents
Simplify the accent scheme:
- Light Blue was re-generated to be a weird darker-on-light-mode
lighter-on-dark-mode blue that looked really similar to how blue-grey
turned out. These have been merged into a new color scheme called
deep blue.
- Deep Orange and Red were too similar after being re-generated, so
they have been merged to become a simple red accent.
2021-11-13 16:00:41 -07:00
OxygenCobalt
032fd2bd40
style: use material in playback view
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.
2021-11-11 16:25:56 -07:00
OxygenCobalt
67797d957e
all: cleanup code
Upgrade dependencies, fix deprecation issues, and just clean up code
in general.
2021-11-11 12:19:07 -07:00
OxygenCobalt
8f61d8479a
style: migrate to Material3 text styling
Migrate to 100% Material3 text styling. I had to basically ignore the
intended styling here just to get a sensible design here, which is
"bad" but I do what I want. The only usage of MaterialComponents left
in the project now is the dialog since the new dialog style the worst
thing ever.
2021-11-11 11:48:22 -07:00
OxygenCobalt
63198f8677
style: unify typography
Use Material typography everywhere instead of using a mix of AppCompat
and Material styles. This is still based around MaterialComponents
though, as I'm not fully sure how to wield the new Material3 text
styles yet. This also completely phases out inter bold.
2021-11-09 06:52:02 -07:00
OxygenCobalt
4f4f6654c0
widgets: re-add 2x2 widgets
Re-add 2x2 widgets. They were originally removed due to strange layouts
in landscape mode, but that has now been fixed with a new "tiny" layout
meant for that specific edge case. Also rename the widget forms to more
sensible names and make the small (previously minimal) widget be
text-only again.
2021-10-28 19:46:00 -06:00
OxygenCobalt
df49e2765f
music: refactor model usage
Refactor the way music models are constructed to achieve the following:
- Add a unified interface for resolving display names of artists
- Disambiguate the role of Header in the music objects
- Eliminate the need to load strings in with a context when creating
Header instances
2021-10-28 19:09:54 -06:00
OxygenCobalt
97808ce1c3
home: merge fast scroller
Merge the fast scroller back into Auxio once again, albeit this time
it's AFS instead of IndicatorFastScroll. This not only slims down the
implementation but also allows me to stop the scroller from appearing
every time the home view is recreated. All modifications were noted
and attribution is included to abide by the Apache 2.0 license.
2021-10-23 18:22:50 -06:00
OxygenCobalt
23d1be8ebc
home: add tab customization
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.
2021-10-17 20:27:16 -06:00
OxygenCobalt
8c7f0867f9
style: migrate to Material3
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.
2021-10-10 16:44:17 -06:00
OxygenCobalt
bc6bba56fc
widget: update preview
Update the widget preview to reflect the UI tweaks made.
2021-09-12 17:33:48 -06:00
OxygenCobalt
744e4172f3
ui: improve misc ui elements
Make some minor UI tweaks across the app.
2021-09-11 20:54:36 -06:00
OxygenCobalt
0e0be19e1d
detail: refactor module
Completely refactor the detail module. This is for a few reasons:

- Prevent data regeneration every time a fragment re-creates.
- Make DetailModel follow the customs of other ViewModels.
- Simplify layouts into a single detail item to reduce code
complexity.

Currently sorting doesn't work, but that is still being worked out
as the legacy SortMode continues to be phased out of Auxio.
2021-09-11 17:40:19 -06:00
OxygenCobalt
37a8cdccb6
playback: fix more queue issues
Fix more issues with the queue, such as landscape edge-to-edge not
working correctly and drag scroll events not resulting in the appbar
lifting.
2021-08-25 18:15:09 -06:00
OxygenCobalt
19e2fcbb90
search: improve keyboard management
Remove the janky requestFocus/clearFocus called on SearchFragment
and replace them with InputMethodManager calls. This is generally
more user friendly, especially when returning to search from
navigation.
2021-08-22 17:59:07 -06:00