Completely misunderstood how this would affect the widget/notification
on Android 14. Apparently it just blocks all intents, even if they are
tangentially from the app.
Resolves#598.
Fix some immediate compile issues and some style nitpicks. This breaks
the system a bit, but I don't think I will have enough time to debug
fully for the forseeable future, so I want to get this out now.
Caused yet again by sharing StateFlows leading to a strange
out-of-order collector notification, which then allows detail
fragments to consume item navigation requests before the playback
panel can even get them. SharedFlow doesn't help here, so we are
just forced to move this to MainFragment which does not have this
issue for some reason.
Add play and shuffle options for all song menus.
These will override the shuffle state, unlike other song play
interactions.
This required a good bit of refactoring to menu, some of which
might be ported to other commands in future changes.
Use PlaySong modeling within settings too. This largely completes the
PlaySong refactor and fully adds the ability to play songs by
themselves as an option.
Resolves#424.
Fix an issue where the cover ViewPager would intercept vertical swipes
to collapse the queue sheet. This required manually configuring nested
scrolling states in the the internal RecyclerView.
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 artist and genre picker commands into a single event
(like others), and also make the playback panel correctly respond to
album/artist navigation events.
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
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.
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.
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.
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.
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.
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.
Do not extract ReplayGain adjustments on the fly, instead doing them as
we go along.
This prevents an issue where the ReplayGain information would only be
applied a short period after playback start, which is heavily jarring.
Fix issues stemming from how ExoPlayer apparently doesn't send a
playWhenReady event after being stopped.
This ended up breaking AudioEffect integration and notification
posting. I really don't know why player.stop() doesn't do this.
Shift the queue index backwards if the current song at the end of a
queue is removed.
Without this, the index becomes OOB and makes the queue be interpreted
as entirely empty when it actually isn't, which is compounded by a
remove-1 update intruction leading to a RecyclerView inconsistency
crash.
Fix a few problems with the current comparison algorithm:
1. It wasn't actually comparing the raw music information, only the
UIDs, which was redundant.
2. The comparison in the main music loading process occurred on the
main thread, which causes massive freeze-up issues.
Resolves#457.
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.
Fix a visual error where adding to queue would visually place items
next to the starting index rather than at the end.
This was a result of forgetting to update the Add instructions returned
by Queue.addToNext to return the end of the queue rather than the
current index, which completely broke the queue visual.
Resolves#435.
Log whenever a listener is added/removed.
This might make it easier to track concurrency issues stemming from
listener dispatch and addition occuring at the same time.
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.