Commit graph

369 commits

Author SHA1 Message Date
OxygenCobalt
7d04aad9b7
util: clean up context utils
Clean up the context utils to be more appropriately designed and
efficient.
2022-08-04 20:11:25 -06:00
OxygenCobalt
96be8cb6b7
ui: remove textSafe
Remove the textSafe method, as it is functionally useless.

textSafe relied on a dumb 1.0.0 thing where I used wrap_content on
text views. Now it just causes relayouts for no good reason.
2022-08-04 17:27:50 -06:00
OxygenCobalt
fa06732e94
strings: remove weird capitalization
Remove strange capitalization choices in an attempt to make the app
more consistent.
2022-08-04 15:28:35 -06:00
OxygenCobalt
f27b798e33
ui: remove coordinatorlayout workarounds
Remove EdgeCoordinatorLayout in favor of using fitsSystemWindows when
needed.

EdgeCoordinatorLayout was derived from a misunderstanding about how
window insets worked. Remove it.
2022-08-04 14:30:33 -06:00
OxygenCobalt
4af45031b0
all: fix lints
Fix lints that have accumulated over time.

Apparently Android Studio just...stopped using lints. For no reason. I
had to upgrade to the beta version to actually get lints.
2022-08-04 13:14:21 -06:00
OxygenCobalt
62ae5e5cb2
build: update build scripts
Update/Modernize build scripts.
2022-07-29 11:03:22 -06:00
OxygenCobalt
f93d5f1a69
music: make string hashing more resillient
Make string hashing a custom-made function that actually outputs to a
long.

This prevents overflows from causing a collision.
2022-07-27 09:34:23 -06:00
OxygenCobalt
affa8c1c11
queue: add ability to play songs [#92]
Add the ability to jump to arbitrary points in the queue.

This comes at the cost of the long-press option to move items, since
they simply cannot co-exist without visual issues.
2022-07-25 12:20:46 -06:00
OxygenCobalt
f206f08e79
music: handle multiple vorbis tags [#197]
Modify ExoPlayerBackend to handle the presence of multiple vorbis tags
for a particular key.

This is allowed by the spec and heavily leveraged by programs like
Picard. It also opens the door for better artist functionality, but
that is incredibly complicated and something I don't want to implement
right now.
2022-07-23 09:16:50 -06:00
OxygenCobalt
0212887610
info: update docs
Update information here and there.
2022-07-20 17:38:20 -06:00
OxygenCobalt
f75f75308e
music: add wakelock to indexerservice
Add a wake lock to IndexerService.

This ensures that the CPU is active throughout the whole music loading
process.
2022-07-20 11:08:02 -06:00
OxygenCobalt
19a0728e5b
music: rework release types [#158]
Rework album types into release types, with additional support for live
albums, remixes, and mixtapes.

This is not a complete implementation, nor is it meant to be. I don't
want to add technical complexity handling Remix Compilations or
DJ-Mixes unless there is demand.
2022-07-20 10:53:30 -06:00
OxygenCobalt
36bb729e67
music: add additional album types
Add compilation and soundtrack album type support.

I find use in these, so implement them.
2022-07-19 10:50:27 -06:00
OxygenCobalt
24062aa623
music: update album type display
Only display album types within the artist and album detail menus.

Displaying it elsewhere cluttered the UI somewhat.
2022-07-19 10:28:19 -06:00
OxygenCobalt
4781d250bf
music: implement album types in UI
Implement album type displays in the album detail, artist detail, and
album item views.

Resolves #158.
2022-07-18 11:16:39 -06:00
OxygenCobalt
5df8edf912
music: add basic release type support [#158]
Add release type support to the media indexer.

This allows EPs, Singles, and Albums to be distinguished from
eachother. Auxio's implementation will use the MusicBrainz tag for
ID3v2 (Falling back to GRP1, as that is used sometimes), and will use
RELEASETYPE for vorbis comments.
2022-07-18 10:54:08 -06:00
OxygenCobalt
276f067152
ui: update material components
Update MDC to the alpha version in order to use some extra features.

I was planning to switch to the new MaterialSwitch, but alpha03 has
this insane crippling issue with ripples that blocks such. Use alpha02
and prep the app for the addition of the switch.
2022-07-18 10:06:26 -06:00
OxygenCobalt
10362b9efc
music: lowercase names when hashing
Lowercase music names when hashing them to prevent drift stemming from
grouping.

The addition of the song may change the case of an artist if such
mitigations are in effect. To prevent such from invalidating music
hashes, we take the lowercase of every name hashed.
2022-07-17 16:11:16 -06:00
OxygenCobalt
9ca4f70315
music: add id3v2.3 full date support [#159]
Add support for the ID3v2.3 TDAT and TIME frames to the ExoPlayer
parser.
2022-07-17 14:18:18 -06:00
OxygenCobalt
ad45b3edb3
search: dont compare genre sort names
Don't compare genre sort names when searching.

Genre names are identical to genre sort names, remove the useless
comparisons.
2022-07-17 10:44:21 -06:00
OxygenCobalt
863929fb64
ui: do not enforce contrast after api 29
Set the enforce*BarContrast methods to false above API 29, so we can
use fully transparent navigation and status bars.

Previously, we used a mostly transparent color for such, but now, we
can use a completely transparent color without it being changed to
match contrast.
2022-07-15 21:09:16 -06:00
OxygenCobalt
4d283bc91d
ui: fix app theme
Make the app theme (Shows before activity startup) the blue theme
instead of the default material purple.
2022-07-15 12:13:47 -06:00
OxygenCobalt
adc4055b2c
music: update hashing
Update id hashing to correctly handle null artists and take discs
and durations into account.

Note that we try not to hash values only obtained with the ExoPlayer
parser, as those could feasibly change if the setting was toggled,
thus causing the playback state to wipe.
2022-07-15 11:44:23 -06:00
OxygenCobalt
9f8ce49d70
search: add sort and file name to comparison
Make the search algorithm take in account the raw sort name and file
name when searching.

This allows the user to search for a particular song without typing in
a unicode/non-ideal title, instead typing in a latinized sort name or
suitable file name.

This does make Auxio's search a bit more fuzzy, but it still gets the
job done.

Resolves #184.
Related to #172.
2022-07-15 11:32:24 -06:00
OxygenCobalt
d4f74784ba
music: add date class
Add a new Date class to represent both years and more fine-grained
dates extracted using the ExoPlayer metadata system.

In-app, the year is still shown, but sorting will use the new precision
when present. The MediaSession will also post an RFC 3339 formatted
date with this new precision, as the MediaSession documentation states
I should. No clue if the latter will cause any bugs with naive metadata
UIs in other apps.

Resolves #159.
2022-07-15 10:23:01 -06:00
OxygenCobalt
7833ec4460
music: make field utils functions
Make some field utils functions, as they do work.
2022-07-14 11:43:28 -06:00
OxygenCobalt
969c0c69b7
music: add sort tag support [#172]
Implement sort tag support in the ExoPlayer backend.

Sort tags for grouping is still derived from the templates. Album
artist sort tags are only picked if one is present. System might be
a bit buggy at the moment given that it messes with grouping/sorting
a little.

Resolves #172.
2022-07-13 20:18:12 -06:00
OxygenCobalt
e8f94564b7
music: prepare sort tags
Prepare support for sort tags by reworking how sortName is structured.

Instead of rawName and sortName, music must now implement rawName and
rawSortName. rawSortName will be checked first, followed by will
falling back to rawName.withoutArticle. This allows hard-coded tags to
be neatly implemented while avoiding an immediate copy.
2022-07-13 15:50:20 -06:00
OxygenCobalt
f014a2a48d
home: add last added sorting [#181]
Add a "Last Added" sorting option to the home UI's song list.

I don't know if there is any demand for last added in other contexts.
That will be resolved later.
2022-07-13 14:20:35 -06:00
OxygenCobalt
08423d5e93
info: update ARCHITECTURE
Update the ARCHITECTURE document to reflect the architectural changes
made in 2.5.0.
2022-07-13 09:27:11 -06:00
OxygenCobalt
ae00a308fe
all: fix version-specific issues
Fix a few version-specific issues so that I don't make a critical
blunder like I did in 2.4.0.
2022-07-12 12:13:49 -06:00
OxygenCobalt
f3aca45690
settings: remove excluded dir migration code
Remove the excluded directory migration code, as it causes far more
issues than it fixes.

Due to an unfixable logic bug that occurs when trying to read the
setting, Auxio will always try to migrate the database when there is
no music folders, causing a hang in some situations. Fix it by just
removing the migration.
2022-07-12 09:59:08 -06:00
OxygenCobalt
60b637e1ce
all: cleanup
Semi-major code cleanup.
2022-07-11 11:29:34 -06:00
OxygenCobalt
caa755c12f
ui: add service/notification abstractions
Add additional abstractions for service foreground states and their
notifications.
2022-07-09 13:16:41 -06:00
OxygenCobalt
a63b3791d2
util: add guard abstraction
Add an abstraction over the generation system called GenerationGuard.

This allows cheap cooperative threading to be implemented consistently
in many places.
2022-07-09 11:17:15 -06:00
OxygenCobalt
f9a61c8ef7
music: remove dead code
Remove dead code from a vain attempt to leverage DATE_TAKEN.
2022-07-09 10:19:55 -06:00
OxygenCobalt
201f132686
detail: fix song deletion issue
Fix an issue where the song dialog would not properly close when the
song it corresponded to was deleted.
2022-07-09 10:18:45 -06:00
OxygenCobalt
35f05ed902
ui: fix insane background issue
Fix an issue where the background will remain the system default theme
because...reasons.

I don't even know what I did wrong.
2022-07-09 09:00:36 -06:00
OxygenCobalt
3a7768ad22
music: add automatic rescanning
Add automatic rescanning, for real.

This is the culmination of 6 months of work to make Auxio respond to
music updates and to research the most versatile implementation of
such. Is it the best system? No. It's actually a bit messy by necessity
in order to prevent bugs. Does it work well? Yes.

This will not be enabled by default, as it does require a battery
draining foreground service and is generally not useful for most
circumstances.

So glad to be done with this.

Resolves #72.
2022-07-08 16:42:23 -06:00
OxygenCobalt
94f2d28936
music: rework indexer thread safety
Move the switch from IO to Main to within Indexer itself, through
withContext.

This is much easier to work with than the previous system of a separate
"update" coroutine, which isn't really needed anymore given that I no
longer need to do IO work when sanitizing the playback state.
2022-07-07 16:47:21 -06:00
OxygenCobalt
29cc680c34
revert playback: save state when sanitizing
Edge case I thought existed did not. PlaybackService must have saved
before dying, and thus if it did not foreground after a sanitization,
the saved state would still sanitize in a similar manner.
2022-07-07 16:14:47 -06:00
OxygenCobalt
a217bde713
playback: save state during sanitize
Save, but do not read the playback state when sanitizing.

Turns out there is an edge-case where we want to save the state. Still
keep the runtime sanitization, as that greatly reduces the time it
takes to rescan the library.
2022-07-07 15:07:23 -06:00
OxygenCobalt
e0a05ef486
playback: make sanitization runtime
Do not save the playback state when sanitizing.

After some thought, there is no situation where re-saving the playback
state is desirable. A previously saved state will be consistent with
a sanitized state, and there is no need to save when the service is
active. Thus, save on speed and reduce insane race conditions by just
sanitizing the current runtime state and not saving at all.
2022-07-07 11:58:25 -06:00
OxygenCobalt
83d6c529e2
all: misc ui reworks
Miscellanious UI reworks that accumulated over the past few days.
2022-07-07 10:40:18 -06:00
OxygenCobalt
1730a73eac
settings: add option to force-restore state
Add an option to restore the previous playback state.

This allows me to avoid having to use force stop to restore a previous
state.
2022-07-04 14:22:49 -06:00
OxygenCobalt
a15bc79cc9
music: more hypothetical fixes
Fix a bunch of more hypothetical issues that could occur with runtime
rescanning. It's still global mutable concurrent state though. Sigh.
2022-07-04 11:20:02 -06:00
OxygenCobalt
b3cac19ee4
ui: use grade instead of indicator
Finally unify all icon activation states under the new grade modifier
in Material Symbols.

This provides similar clarify to the dot/greyed state, but without
inconsistent meanings. The shuffle icon did have to be bolded a little
more though, as the grade did not seem to do much.
2022-07-03 15:29:42 -06:00
OxygenCobalt
4f8fc8008c
music: rework loading ui flow
Rework the UI flow for music loading to be more coherent with runtime
rescanning.

The loading progress is now shown as a card on the bottom of the
screen. This way, app use is not completely crippled when the app has
to rescan the music library, albeit the shuffle button still has to
be disabled during this period.
2022-07-03 14:53:21 -06:00
OxygenCobalt
cd00950a5c
all: audit synchronized usages
Audit usages of Synchronized throughout the app to prevent deadlocks.

This is primarily composed of not making long-running work
synchronized, instead only making mutations and reads synchronized.
This does cause minor issues, such as during a sanitization event
the playback state could be feasibly saved, changed, and then restored
back to the previous state unintentionally. However, preventing
deadlocks is generally better than trying to fix those.
2022-07-03 09:12:19 -06:00
OxygenCobalt
3bdf7b136e
music: enable quality tags [#128]
Enable the ExoPlayer parser in the UI.

Now that runtime rescanning is implemented, this feature can also be
finally enabled.

Resolves #128.
2022-07-02 20:37:55 -06:00