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.