Add the scaffold for PlaySong, a new version of playback modes that
- Supports playback of a song by itself, requested by #424.
- Will make direct playback from the song menu feasible (given
additional reworks)
- Prevents the invalid state of playing a song by it's playlist,
as the sealed interface implementation of PlaySong requires a Playlist
to be provided to it's respective variant.
Unify the disjoint selection and menu viewmodels into a single
ListViewModel.
This is technically not fully done, as MenuViewModel remains as a
backing element of the menu dialogs, but otherwise that's it.
Standardize navigation command consumption to only occur when a
navigation route has *definitively* ended. If more commands could
come, observe them. Otherwise, consume immediately.
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.
Fix miscellanious issues from the flattened nav graph system.
Nowhere near enough, largely counting on the planned bottom sheet menus
to eventually be able to ignore most of these issues.
Simplify the 4 stateflows controlling when playlist decision dialogs
must be opened to just one enum.
This is like the detail view, and makes the amount of observers I have
to spin up much smaller.
Eventually, most of even these observer calls will be collapsed into
the menu itself.
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 constant page limit of 5 instead of a dynamic page limit.
This was not being properly updated prior, and since the ViewPager
already clamps it, the limit does not really need to be based on the
tab size anyway.
Handle two edge cases identified with the playing indicator behavior:
1. When enqueing songs from another parent, the prior parent is still
indicates as "playing" when it kind-of isn't.
2. When playback is stopped, the parent is not reset, and thus will
still be indicated as "playing" after the song has disappeared. This
is rarer and should be resolved in other ways, but the solution to
1 also fixes this.
Resolves#380.
Group albums implicitly linked to an artist via the "artist" tag into
their own section called "Appears on".
This makes Auxio's artist model a bit more apparent to users.
Resolves#411.
Fix a few issues with the tab migration:
1. It wasn't even being ran
2. It incorrectly updated the tabs by adding a playlist tab when it was
actually already present.
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.
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.
Refactor the music name implementation to do the following:
1. Unify normal and sort names under a single datatype
2. Handle arbitrary-length digit strings
3. Ignore puncutation regardless of the intelligent sort
configuration, as it is trivially localizable.
Resolves#423.
Co-authored by: ChatGPT-3.5
Refactor the weird picker god module into specific sub-impls in
playback and a new navigation package.
I cannot keep this unified. The needs are too different among each
picker. Better to keep it separate, especially in preparation for
the playlist dialogs.
Refactor the disjoint Library and Playlist setup into two new
DeviceLibrary and UserLibrary implementations.
This makes the API surface a bit less disjoint than prior.
Unify Indexer and MusicRepository into a single class.
This is meant to create a single dependency on PlaylistDatabase and
reduce the amount of orchestration.
Re-add the fine-grained updates that were removed prior due to state
concerns.
This time they should be safe enough to use, as the differ has been
fully vendored. The change is not complete enough however, as the queue
view has not been properly ported to use these updates just yet.
Fix visual clipping on the shuffle FAB's shadow.
Turns out padding, while slower, is actually the better inset handling
method, as it allows me to avoid visual clipping in some cases.
Use @Binds more heavily with dependency injection, whee currently
reasonable.
Reduces the amount of boilerplate "fun from" functions that need to be
used.