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.
Unify the artist and genre picker commands into a single event
(like others), and also make the playback panel correctly respond to
album/artist navigation events.
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
Fix an issue where the recent BackportBottomSheetBehavior update would
break queue sheet scrolling, as the queue sheet would be set to
invisible and prevent the findScrollingChild helper from being able
to locate it.
Fix this by removing that visibility check in the first place.
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.
Remove functionally duplicate artist/genre values that were read from
a file.
This caused a indexer crash in 3.1.2 due to the switch to music sets,
which no longer made duplicate values group the song twice. This then
cascaded to a failure in song finalization, as it expects there to be
the same amount of artists/genres as raw artists/genres.
Fix a regression where the loading process will never stop on a no-op
refresh operation.
This was an oversight made in the redocumentation of the loading
process.
Further document the music indexing process.
It's so aggressively parallelized as to require some more extensive
comments to actually make it clear what's going on.
Recognize artists sort, albumartists sort, and album artists tags.
These are written by mediafile, so they are probably also written by
other software.
Do not hang when an error halts the discovery process.
This was an oversight with the previous band-aid fix regarding handling
errors in music loading. If something failed, the channels would not
close, resulting in the main loop consuming the channel hanging.
There's probably a deeper issue causing this in 3.1.2, but with this
fix I can actually start digging for it.
Add an option to restore the old 1:1 crop behavior to the app.
Some people think this looks better, some people like to have youtube
thumbnails in their APICs. Can't really be opinionated here.
Fix general API 34 crashes that I could notice immediately.
Can really test any further since the API 34 AVDs are currently potatos
running at 3 FPS for some reason.
Update the app to target API 34, alongside all dependencies that expect
such.
This finally fixes some long-standing issues in newer version of MDC,
thus allowing me to remove the divider backport as well.
More work is required for predictive back (don't even know where I
start with that...), but this is a good start.
Use sets for all child music information.
Unlike parent information, which usually has an ordering derived from
file information, child music information more or less doesn't, and
will be consistently re-interpreted by the app to apply user-configured
sorts.
Use a Set when storing all song, album, artist, and genre information.
These all have no consistent ordering due to parallelization, and
should be communicated as such.
Sort song informtion in all MusicParent instances.
This is a temporary hack to band-aid music consistency between reloads,
as with the aggressive parallelization song order is no longer
consistent.
Fix a regression where partial ReplayGain adjustments missing an album
or track component would not be indexed.
This was an oversight made when moving adjustments to the cache, as the
nullability model of ReplayGain adjustments changed.
Properly group albums by raw artist keys, instead of by raw artist
instances.
This was an accidental regression in 3.1.1 that resulted in duplicate
albums in some circumstances.
Resolves#475.
Use targetState whenever making decisions on whether a certain sheet
state change is valid.
This is mostly for stylistic consistency and has no effect on UX.
Only use fallbackToDestructiveMigration for all databases.
I thought you had to selectively enable downgrading as well, but
apparently that disables other destructive migrations. This was not
obvious at all and caused countless issues. Absolutely flooring.