Commit graph

73 commits

Author SHA1 Message Date
Alexander Capehart
cce7b766d7
all: reformat code
Reformat all project code
2022-12-26 19:59:27 -07:00
Alexander Capehart
0737dbace3
playback: redocument
Redocument the playback module.

This finally completes the re-documentation of this project.
2022-12-26 15:15:27 -07:00
Alexander Capehart
9cf8d54353
replaygain: redocument
Redocument the replaygain module.
2022-12-25 20:05:32 -07:00
Alexander Capehart
9d283fc6e4
accent: move back to ui
Move the accent module back into the ui module, where it's more consistent.
2022-12-25 19:32:34 -07:00
Alexander Capehart
b38b8a909f
all: remove superfluous comments
Remove superflous comments that really add nothing.
2022-12-23 11:22:37 -07:00
Alexander Capehart
7415c28e2d
util: redocument
Redocument the util module.

This should make the purpose of the utilities used in this app clearer.
2022-12-22 20:25:54 -07:00
Alexander Capehart
e92b69e399
music: redocument
Redocument the music module.

Much of it's documentation has drifted from reality as changes were
made, this commit completely redoes the documentation in order to
fix that.
2022-12-22 17:17:35 -07:00
Alexander Capehart
4773a84741
all: redocument project, part 1
Redocument the detail, home, image, and list modules.

Much of this project's documentation has drifted from actual
functionality, and newer code is pretty sparely documented.
This commit seeks to rectify that by redocumenting every source
file in this project.
2022-12-19 20:22:36 -07:00
Alexander Capehart
3d03194878
home: reset selection when navigating
Reset the selection in the home view when navigating to other
selectable screens.

Without a unified Toolbar, this makes no sense.
2022-12-17 15:14:30 -07:00
Alexander Capehart
04e25eb90a
ui: add toolbar visual skeleton for selection
Add an overlay toolbar to indicate when selection is occuring.

This has no functionality as of right now.
2022-12-16 11:48:21 -07:00
Alexander Capehart
873f15ff40
all: remove immature comments
Remove childish wording/diatribes from the codebase that were added
when I was younger.

I'm an adult now. I have to make this repository at least somewhat
professional.
2022-12-15 14:21:21 -07:00
Alexander Capehart
78523021fd
all: reformat code
Periodic reformatting.
2022-12-06 19:27:49 -07:00
Alexander Capehart
cf64536118
ui: minor tweaks
More miscellanious tweaks I can't categorize since I have no time.

It's mostly attempts at improving animation visuals an failing. Really
want to switch to material animations once I can finally get the things
working.
2022-12-05 21:14:41 -07:00
Alexander Capehart
f5ec295b2c
ui: animate selection
Animate the check mark and background change when a item is selected.

This produces a nicer UX overall. If possible, I'm planning to also
port this to the other indicators in ImageGroup, albeit doing that is
signifigantly harder.
2022-12-05 04:25:09 +00:00
Alexander Capehart
b891ee1fe6
recycler: add selection adapter framework
Add a framework for selection-based adapters.
2022-11-22 13:33:00 -07:00
Alexander Capehart
df6d80176d
ui: redefine activation meaning
Redefine the meaning of activation across the app to align with the SDK
documentation.

According to the documentation:
- Activation -> A permanent kind of selection initiated by the user.
This means playback states, item selection, etc.
- Selection -> A transient kind of selection that can be added or
removed without user input. This includes things such as playing
indicators.

Redefine usages of selection and activation across the app to align
with this.
2022-11-22 12:43:51 -07:00
Alexander Capehart
a4cc27d85e
ui: add item selection indicator
Update the item backgrounds to respond to a selection.
2022-11-22 12:05:20 -07:00
Alexander Capehart
abd51ad16e
image: add selection indicator
Add a selection indicator to ImageGroup.
2022-11-22 11:30:33 -07:00
Alexander Capehart
a3772b65c0
ui: re-add more button
Re-enable the more button in preparation for multi-select.
2022-11-22 10:58:41 -07:00
Alexander Capehart
086f7836bd
all: cleanup
General cleanup
2022-11-16 09:05:51 -07:00
Alexander Capehart
42aba9e556
music: add artist count to genres
Add an artist count to genres.

This should make genres more unique from future playlists. A list of
artists will be added later on.
2022-11-12 19:18:48 -07:00
Alexander Capehart
7c913708f2
image: make artist images sort by count
Make artist images sort by count instead of by name.

I've recently added a few singles in my library that have been
cluttering the previous artist image algorithm with non-ideal
covers. Instead of sorting by name (Which was really an artifact
of the old MediaStore engine anyway), sort by the amount of songs
of each album instead, which hopefully should weight images less
towards singles and more towards albums (And especially albums
the user likes).
2022-10-30 21:36:00 -06:00
Alexander Capehart
5e0f778daf
image: unify cover settings
Unify the "Show Covers" and "Ignore MediaStore Covers" settings under an
new "Album covers" setting.

This will make it easier to extend to new forms of album cover
collection.
2022-09-26 13:47:43 -06:00
Alexander Capehart
62ee46cfe6
music: add multi-artist support
Add semi-complete support for multiple artists.

This changeset completely reworks the music linker to add the following
new behaviors:
1. Artists are now derived from both artist and album artist tags,
with them being linked to songs and albums respectively
2. Albums and songs can now have multiple artists that can be distinct
from eachother
3. Previous Genre picking infrastructure has been removed and replaced
with artist picking infrastructure. "Play from genre" has been retired
entirely.

This is a clean break to the previous artist model and may not work
with all libraries. Steps to migrate the music library will be added
to the changelog.

Resolves #195.
2022-09-23 10:15:28 -06:00
Alexander Capehart
717f49fc20
music: add picker dialog
Add a dialog for picking a genre from several choices.

This basically completes multi-genre support in Auxio, save more
internal reworks.

Note that it is extremely likely that the "Play from genre" setting
will be removed soon. This feature has made me realize that such does
not many any real sense, as genres are more semantically similar to
playlists than artists or albums. This implementation only exists to
make multi-artist support an easy plug-and-play operation.

Resolves #201
2022-09-14 19:59:12 -06:00
Alexander Capehart
cdd4d5ebcd
music: make uids use music mode
Make UID structure dependent on the music mode.

This involves replacing the "tag" value with more structured fields and
appending the int code of the music mode to the UUID rather than making
it part of the UID's "tag". UIDs aren't quite a UUID, so this is
allowed.
2022-09-10 20:31:56 -06:00
Alexander Capehart
c342fb364b
all: merge display and playback modes
Merge DisplayMode and PlaybackMode into a new class called MusicMode.

Both of these datatypes represented similar things, and thus it's much
easier to make them the same datatype. Moreover, it makes the
forthcoming addition of the music selector much easier if the same
datatype was tied to the representation of music.

This commit also moves around things around the project to be slightly
more coherent.
2022-09-10 19:39:29 -06:00
Alexander Capehart
78201e55ee
all: phase out taskguard
Phase out the dumb hack TaskGuard class in favor of yield.

For some reason, I was under the impression that yield was horribly
slow. It's not, I was just using it wrong. So now TaskGuard is no
longer needed.
2022-09-09 20:42:03 -06:00
Alexander Capehart
06d6495dcd
all: lint with ktlint
Just lint with ktlint. It has better import checking functionality.
2022-09-08 21:55:05 -06:00
Alexander Capehart
09823d7829
all: reformat code
Simultaniously reformat code using ktlint and ktfmt.
2022-09-08 21:04:51 -06:00
Alexander Capehart
28d28287fe
music: refactor backends into extractors
Refactor all Backend instances into a new package called extractor and
a new structure called "Layer".

Layers are no longer generalized into an interface. Instead, they build
on eachother in order to produce a correct output of raw songs.

One of these layers is a stub class to eventually implement caching.

This changeset also phases out the "Ignore MediaStore tags" setting, as
it is no longer needed.
2022-09-08 20:41:08 -06:00
Alexander Capehart
48ad45e4c3
music: rework id system
Completely rework the ID system to pave the way to MusicBrainz ID
support and greatly increase ID integrity in general.

This changeset removes the old ID field, an emulation of a polynomial
hash that was used in all items, and replaces it with a new type called
UID that is specific to Music. Other types just use plain equals now,
and most instances of "id" to check for equality in the app have either
been inlined into an equals override or removed outright.

The new UID format is as follows:
datatype/format:uuid

Datatype is a tag that is just the lowercase tag name. For example,
"song". Format is the program that created the UID. auxio will be an
md5 hash, and musicbrainz will the a musicbrainz ID extracted from a
file. UUID is the uuid itself.

This is much more reliable and extendable than the old ID format. This
will also be the last time I break compat with old ID formats. From now
on, a legacy UID field will not be included to enable backwards compat,
when the time comes for a breaking change.
2022-09-06 22:21:41 -06:00
Alexander Capehart
9f7a012706
queue: remove fast scroller
Temporarily remove the fast scroller for now, as I want to bundle it
with adding a scroller to the detail view in a single release.
2022-09-02 21:44:28 -06:00
Alexander Capehart
be8623ad2d
recycler: add span size abstraction to adapter
Make adapter instances handle span sizes.

This supercedes the hackier solution where the fragments would have to
reference adapter data in order to determine span size. Not anymore.
2022-09-02 13:36:43 -06:00
Alexander Capehart
acaf679000
ui: add animated playing indicator [#218]
Make the playing indicator animate when playback is ongoing.

Previously state issues stopped me from doing this, but apparently this
time I miraculously got it working. Yay.

Resolves #218.
2022-09-02 13:16:29 -06:00
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
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
257516643f
queue: indicate playing item in list
Indicate the currently playing item in the queue list.

The item is still disabled, however it's also simultaniously activated
now, which allows it to indicate that it is playing.
2022-07-31 17:21:10 -06:00
OxygenCobalt
0b1f0c3cda
playback: expose queue in mediasession
Expose the queue in the MediaSession, at least I hope.

The queue is still not mutable. Don't feel comfortable implementing that
until I rework the in-app queue UI.
2022-07-25 10:39:50 -06:00
OxygenCobalt
0212887610
info: update docs
Update information here and there.
2022-07-20 17:38:20 -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
60b637e1ce
all: cleanup
Semi-major code cleanup.
2022-07-11 11:29:34 -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
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
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
d6f166a3ee
all: use synchronized annotation
Use the @Synchronized annotation instead of synchronized.

Makes my ability to manage thread-safety on the shared objects much
easier. Because I don't have to think about what I should guard
and what I shouldn't.
2022-07-02 17:28:51 -06:00
OxygenCobalt
bbf3b1778b
music: improve indexer callback impl
Improve the indexer callback system to be more coherent and efficient.

This delegates the old Callback role to a new singular Callback and
Controller roles. IndexerService also handles the loading process
more gracefully, reducing the amount of time music loads take.
2022-07-02 15:31:01 -06:00
OxygenCobalt
49a964705b
playback: sync mediasession and notif
Make notification updates entirely reliant on the MediaSession.

Android 11 and onwards automatically populate the notification with the
MediaSession state. This apparently conflicts with updating the
notification in some cases, resulting in the incorrect song being
shown. Fix this by not populating the notification from Android 11
onward and only posting it when the MediaSession state was set.

Resolves #179.
2022-07-02 14:04:21 -06:00
OxygenCobalt
217ced8ade
ui: rework rounded covers into round mode
Rework the rounded covers option into a new "Round Mode" option.

This commit extends the rounded corners configuration to now the
widget, thus making the setting apply now to covers, the bar, and
the widget configuration. This makes a naming change useful.
2022-07-01 20:06:54 -06:00
OxygenCobalt
090a1713dd
ui: rework iconography
Completely rework Auxio's iconography based on the new material symbols
icon set.

This does the following:
1. Switches the sharp + filled icon style to an outlined + round icon
style.
2. Removes 32dp icons from everywhere except the playback panel.

This does not:
1. Actually handle optical sizes right. This is going to take some more
work to make it harmonious with the current UI.
2. Update margins in some places to be harmonious with the new icons.
This is also going to take some more work to do properly.
2022-06-30 21:09:21 -06:00