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.
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.
Make UserLibrary return some kind of error indicator if something
fails.
I don't have the framework for how the app will display these errors
just yet.
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.
Make it so that the DeviceLibrary constructor streams all song
information instead of building the library on completion.
This has no measurable effect on loading times, but does appear visibly
faster to the user since the loading process is no longer stuck on the
"Loading your music library" step.
Actually bother to make the way music is grouped consistent, based on:
- The first track for albums
- The earliest album for artists
- The first song for genres
Do not transfer the cache db between devices, drop it instead.
This is at best useless (timestamps and ids will be invalid) and at
worst actively detrimental (timestamps and ids are similar), so
better to reindex than try to read from the cache.
Resolves#467.
Fix an issue where disc headers would be at the top when no subtitle as
available.
I really thought that TextView.text would be null if I set it to null.
Instead it becomes an empty string, breaking the visbility change. Fix
it by just using the disc value.
Resolves#472.
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.
Fix an issue where the playback sheet will suddenly become "stuck" when
playback ends, preventing back navigation or playing new tracks.
This is, once again, caused by bottom sheet insanity. It does not
expose the target state of a sheet at all when it's settling, making
Auxio believe that it has to repeatedly "fix" the state of a hiding
playback sheet and leading to those aforementioned issues.
Fix this by band-aiding it with yet a n o t h e r bottom sheet behavior
extension that exposes the target state. This will be eventually be
used in the whole bottom sheet flow, as it allows me to abort
in-progress sheet transitions, but I'm not going to rock the boat like
this in a patch release. Probably 3.2.0.
Resolves#464.
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 redundant separator parsing obliterating loading performance.
If there are no separators configured, the parsing function would not
short-circuit and instead do a useless O(n) iteraton (including
escaping!), massively reducing performance.
Song build performance still isn't the best (blame intelligent
sorting), but it's definitely better now.
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.
Drop support for Lollipop and Marshmallow.
I legit cannot build for them anymore. There's some insane dependency
tangle between Kapt and Room that makes it impossible to use anything
BUT Java 17 (maybe Java 11). If I use Java 17 or Java 11, suddenly the
whole app crashes since Lollipop and Marshmallow only support some weird
Java 8/11 chimera abomination. This issue has persisted probably since
the move to Java 11, making it basically unusable anyway, so at this point
just cut the charade and officially drop support.
Split up the back gesture listeners into specific components.
These are still all used in MainFragment since I can't reliably set up
their priority correctly if they were used in their respective
fragments, but it should improve efficiency since most of these back
listeners don't need to be updated on every draw.