Fix an issue where the options in MenuDialog could not full scroll for
an unknown reason.
Derived from some absurd issue where BottomSheetBehavior dislikes
ConstraintLayout's spacing and decides to improperly allocate enough
space for the RecyclerView to scroll.
Bit of a megapatch that:
- Adds dedicated play, shuffle, and view items to all item menus
(songs haven't been fully implemented yet)
- Adds icons to all item menus
- Re-adds enabled/disabled items to menus
- Makes menu action naming conventions more consistent with the rest
of the app
Use the new menu system in all applicable places.
More consideration is needed right now on whether the toolbars should
also have menu items, so they remain unchanged right now.
Add a dialog that shows menu information as a bottom sheet instead of as
a PopupMenu.
This did not take as much finessing of BottomSheetBehavior as the main
playback UI framework did, just some style redefinitions.
Flatten the navigation graph into a single "main" graph that links
home to both explore and preference fragments.
***This massively breaks the app in it's current state***. Further
changes and refactors are needed to get this back to working.
Use a real mdc drag handle on the queue sheet.
The accessibility functions won't even be enabled, but that
would need to be communicated in a special way anyway.
Make the app UI properly handle album covers that are not 1:1, instead
of just cropping them.
This required switching to Coil's rounded corners transformation
outright so that the non-1:1 image can sit inside the CoverView in a
way that actually looks good
I'm pretty confident this will work, but there might be some edge cases
since coil's transformation is really finicky.
Resolves#355.
Refactor StyledImageView and ImageGroup into a new class called
CoverView.
This new view is more sensibly designed and should be capable of
handling non-square album covers when implemented.
Move the music editing state to the toolbar.
This should be signifigantly clearer than prior, at the cost of it's
"universality" implying that renaming should be available when it
actually won't be.
Fix two issues with the ways items are laid out:
1. Remove the automatic span size lookup. Now that ConcatAdpater is
used, this basically becomes impossible to really leverage.
2. Use a divider item instead of a divider item decoration. The
latter is too buggy in many contexts, like the search view.
Resolves#426Resolves#444
Simplify picker closing navigation by avoiding weird communication via
state change and instead simply navigate twice from NewPlaylistDialog.
This is probably really stupid. But so is the other way.
Add a real playlist naming dialog and UX flow.
This is a bit rough at the moment since theres a good amount of nuance
here. Should improve as the playlist implementation continues to grow
more fleshed out.
Unwind the picker abstraction into smaller dialog packages.
While this increases repetition, it will make the playlist dialog
implementations much less shoddy.
Separate the header information into it's own adapter, and concatenate
it with the prior adapter.
This way, it can be updated separately without a jarring list update.
FINALLY update to MDC 1.7.0. After over half a year.
I have been continually blocked by doing this due to this absurd ripple
bug that was so continually frustrating. Today, I finally figred out
how to hack a fix in by using R E F L E C T I O N and manually
disabling the bugged code path since google apparently can't be bothered
to fix it.
Now, you might wonder why I didn't update to 1.8.0. That is because
there is ANOTHER RIPPLE BUG. THIS TIME WITH THE TAB LAYOUT. AND ONLY IF
IT'S IN A COLLAPSING TOOLBAR LAYOUT. Can't wait to finally use the new
1.8.0 features in December!
Split off the song property extraction code into a music package class.
This is part of an initiative to remove non-parameter uses of contexts
in ViewModels.
Manually use our own navigation graph in the new settings view.
This avoids a crash that occurs with the default preferences navigation
(on some devices) where the differing app IDs between debug and release
makes it so that the fragments cannot be found. Because you know.
Android.
Switch to item decorations to manage header dividers.
This is much more reliable than encoding it in-data. Only cost comes in
that it forces me to backport yet another component since I still can't
update MDC after over half a year.
Redesign the header component to be more aligned with M3 guidelines.
This includes moving the divider to the top when reasonable, using a
smaller font size, and using a tinted coloration to separate itself
from the list contents.
Make list instructions generic in preparation for the detail list
update.
Detail views need their own instructions datatype, so this is meant to
allow that to be implemented without issue.
Split up the settings ui into four categories.
This should reduce the visual load on the user as Auxio continues to
accrue possible configuration options.
Resolves#323.
Reorganize the music folders dialog to be more visually straightforward
than prior, primarily by grouping the folder elements into the same
visual region.
Resolves#318.
Just pre-emptively add support for TXXX variations of the non-standard
vorbis artist fields to the ID3v2 parser.
I'd imagine the naming convention will be similar between them, so why
not.
Make all adapters relying on diffing unified into a DiffAdapter
superclass that can then accurately respond to the new
UpdateInstructions data.
UpdateInstructions is still not fully used everywhere, but will be
soon.
Split off parsing-related components from extractor into a new parsing
module.
A lot of these methods are used in non-extractor code, so it makes more
sense for them to not be part of the extractors.
The code that is really extractor-specific can remain within the
extractor files.
Redocument the detail, home, image, and list modules.
Much of this project's documentation has drifted from actual
functionality, and newer code is pretty sparely documented.
This commit seeks to rectify that by redocumenting every source
file in this project.
More miscellanious tweaks I can't categorize since I have no time.
It's mostly attempts at improving animation visuals an failing. Really
want to switch to material animations once I can finally get the things
working.
Animate the check mark and background change when a item is selected.
This produces a nicer UX overall. If possible, I'm planning to also
port this to the other indicators in ImageGroup, albeit doing that is
signifigantly harder.
Redefine the meaning of activation across the app to align with the SDK
documentation.
According to the documentation:
- Activation -> A permanent kind of selection initiated by the user.
This means playback states, item selection, etc.
- Selection -> A transient kind of selection that can be added or
removed without user input. This includes things such as playing
indicators.
Redefine usages of selection and activation across the app to align
with this.
Unify the "Show Covers" and "Ignore MediaStore Covers" settings under an
new "Album covers" setting.
This will make it easier to extend to new forms of album cover
collection.
Add semi-complete support for multiple artists.
This changeset completely reworks the music linker to add the following
new behaviors:
1. Artists are now derived from both artist and album artist tags,
with them being linked to songs and albums respectively
2. Albums and songs can now have multiple artists that can be distinct
from eachother
3. Previous Genre picking infrastructure has been removed and replaced
with artist picking infrastructure. "Play from genre" has been retired
entirely.
This is a clean break to the previous artist model and may not work
with all libraries. Steps to migrate the music library will be added
to the changelog.
Resolves#195.
Add a dialog for picking a genre from several choices.
This basically completes multi-genre support in Auxio, save more
internal reworks.
Note that it is extremely likely that the "Play from genre" setting
will be removed soon. This feature has made me realize that such does
not many any real sense, as genres are more semantically similar to
playlists than artists or albums. This implementation only exists to
make multi-artist support an easy plug-and-play operation.
Resolves#201
Merge DisplayMode and PlaybackMode into a new class called MusicMode.
Both of these datatypes represented similar things, and thus it's much
easier to make them the same datatype. Moreover, it makes the
forthcoming addition of the music selector much easier if the same
datatype was tied to the representation of music.
This commit also moves around things around the project to be slightly
more coherent.
Revert the song menu in the playback panel to being in the toolbar.
It was mostly inconsistent and cause a lot of truncation. I'll figure
out what I want to do when I implement liked songs.
Add a fast scroller to the queue view.
This is actually easy to implement without disruption. Now the detail
view is the only view without such a fast scroller, as it needs more
reworks for it to be feasible.
Make the shape of the play/pause buttons throughout the app morph from
a circle if paused to a square if playing.
Android 13 seemingly does this to their play/pause button, so we copy
it too.
Tangentally related to #162.
Auxio tried to leverage built-in android string attributes for Ok and
Cancel while still completing them for other translations that were not
supported by the OS.
Turns out this was a terrible idea when I switched to Weblate, which
has no knowledge of this trick and could lead to a misleading
translation value. Remove it.
Resolves#215.