Commit graph

1277 commits

Author SHA1 Message Date
Alexander Capehart
2690e8343a
music: fix uid issues
Fix some mistakes with the UID hashing process.

Some more work needs to be done regarding formalizing the datatype
and tagtype fields. If anything, I may just collapse them into a
single "tag" field since they are only used for equality.
Alternatively, I could make them integers to increase efficiency.
Depends.
2022-09-07 10:35:26 -06:00
Alexander Capehart
fe5609b447
ui: fix click/menu issues
Fix some issues with how slapshod the menu/click code is.

This fixes a crash on the genre view when a song menu was opened.
2022-09-06 22:41:20 -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
457013d047
playback: add framework for multi-parent playback
Add some functions to eventually enable multi-parent playback.

PlaybackMode is still used in some places, however will steadily be
phased out hopefully.
2022-09-06 13:12:25 -06:00
Alexander Capehart
e5d7cdc340
playback: migrate to reactive model
Migrate the playback system to a reactive model where internalPlayer
is now the complete source of truth for the playback state.

This removes the observer pattern for positions and instead introduces
a new State datatype that allows consumers to reactively calculate
where the position probably is.

This is actually really great for efficiency and state coherency, and
is really what I was trying to aim for with previous (failed) reworks
to the playback system. There's probably some bugs, but way less than
the ground-up rewrites I tried before.

This also lays the groundwork for gapless playback, as the internal
player framework is now completely capable of having more functionality
borged into it.
2022-09-06 11:45:23 -06:00
Alexander Capehart
a9bbdff25d
recycler: fix popup desync in grid layouts [#230]
Fix a popup desynchronization issue in grid-based layouts.

This issue stemmed from the popup index calculation apparently not
needing a division by the span count in order to produce the correct
index. This kind of makes sense, but is still really weird.

Resolves #230.
2022-09-05 19:45:51 -06:00
Alexander Capehart
b24e22182e
music: add basic multi-genre support [#201]
Add basic support for multiple genres.

This is sort of the test run for full multi-artist support, allowing me
to rework my abstractions to handle the presence of multiple parents.

This is nowhere near complete. For example, there is currently a stopgap
measure in the playback system that basically breaks genre playback.
It's a start though.
2022-09-03 16:46:53 -06:00
Alexander Capehart
022f92f27f
music: restructure around raw objects
Restructure music data around a series of "raw" objects that better
hide the internal information needed to properly construct the library.
2022-09-03 14:28:06 -06:00
Alexander Capehart
c9422b7f9d
Version 2.6.3
Ready for version 2.6.3 of Auxio.
2022-09-03 12:48:14 -06:00
Alexander Capehart
cf23a14494
info: update icon
Update the app icon to be fully square, and let clients round it
instead.
2022-09-03 12:43:00 -06:00
Alexander Capehart
47a26df92d
ui: update shots
Update the screenshots and feature graphic to reflect app changes.
2022-09-03 12:36:05 -06:00
Alexander Capehart
3ce75f04df
Merge branch 'dev' of github.com:OxygenCobalt/Auxio into dev 2022-09-02 21:44:39 -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
9b50b3cbf7
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:43:39 -06:00
Alexander Capehart
8a70ece442
recycler: fix fast scroll issues
Fix issues with the fast scroller, such as an improper thumb position
and strange item behavior stemming from dataset changes.
2022-09-02 20:13:47 -06:00
Alexander Capehart
a8e6ccf031
ui: add dialog view holder
Add a special ViewHolder class for dialogs.

This just automates a hack I use to get full-size viewholders in
dialogs.
2022-09-02 19:40:50 -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
Alexander Capehart
227a258eca
search: add playing indicators [#218]
Add playing indicators to the search view too.
2022-09-01 19:51:07 -06:00
Alexander Capehart
87ca4c8ab1
home: indicate playback on items [#218]
Indicate playback in the home view as well.

This is mostly a QoL change. Might also add this to the search view.
2022-09-01 19:27:36 -06:00
Alexander Capehart
5f6cdad507
util: remove logEOrThrow
Remove logEOrThrow from the logging framework.

Better to error than silently not doing anything.
2022-09-01 18:40:00 -06:00
Alexander Capehart
9d58076a0a
recycler: unwind abstractions
Unwind the RecyclerView abstractions.

The framework was far too suffocating and prevented the addition of
new changes. Remove it.
2022-09-01 18:27:37 -06:00
Alexander Capehart
3db68d47a6
playback: revert song menu move
Revert the song menu in the playback panel to being in the toolbar.

It was mostly inconsistent and cause a lot of truncation. I'll figure
out what I want to do when I implement liked songs.
2022-08-29 20:56:17 -06:00
Alexander Capehart
2bec9ce977
queue: add fast scroller
Add a fast scroller to the queue view.

This is actually easy to implement without disruption. Now the detail
view is the only view without such a fast scroller, as it needs more
reworks for it to be feasible.
2022-08-29 20:38:17 -06:00
Alexander Capehart
13793fdfe2
playback: add smooth seeking
Switch position math to rely on deciseconds (1/10th of a second)
instead of full seconds.

This makes seeking and position management much smoother, with minimal
performance cost. In the future I may try to migrate the playback state
so that the position calculations are done on the UI end, but this
works for now.
2022-08-29 09:46:42 -06:00
Alexander Capehart
1ed6d75121
home: make thumb visible if provider is found
Make the thumb visible if a popup provider is found later.

Fixes an issue where the fast scroll thumb would only be visible
sometimes in the home view.
2022-08-29 09:40:55 -06:00
Alexander Capehart
4d02dfb578
playback: rework controller into InternalPlayer
Rework the Controller interface into a standalone interface called
InternalPlayer.

This is mostly preparation for further changes.
2022-08-29 09:13:37 -06:00
Alexander Capehart
8a15868ba1
music: cache ids in map
Make a map of ids to particular music items, which makes searching for
music items much faster at the cost of higher memory usage.
2022-08-28 19:21:30 -06:00
Alexander Capehart
b2085e440e
playback: move delayed actions to service
Make PlaybackService handle delayed actions.

I wanted to do this before, but technical limitations always
stopped me from doing so. Turns out all I needed was a dash
of global mutable state to make it all work. This is actually
really good, as it separates concerns better and paves the way
for future improvements to the service.
2022-08-28 19:08:21 -06:00
Alexander Capehart
9fae621f7e
playback: remove needless seeking
Remove needless seek calls when setMediaItem will do.
2022-08-28 17:38:03 -06:00
Alexander Capehart
1db5e02332
Version 2.6.2
Ready for version 2.6.2 of Auxio.
2022-08-28 12:25:49 -06:00
Alexander Capehart
fd2091b46f
info: update screenshots
Update screenshots in preparation for 2.6.2.
2022-08-28 12:10:15 -06:00
Alexander Capehart
4bc6879728
Merge branch 'dev' of github.com:OxygenCobalt/Auxio into dev 2022-08-28 12:00:04 -06:00
Alexander Capehart
016964e5d0
widget: update preview
Update the widget preview to reflect the new styling.
2022-08-28 11:59:22 -06:00
Alexander Capehart
330f6b0cc9
Fix typo 2022-08-28 16:26:14 +00:00
Alexander Capehart
ab59ca02fd
home: distinguish no popup value from no popup
Do not show the popup if there is no provider or valid position.

Might be useful for later.
2022-08-27 20:03:41 -06:00
Alexander Capehart
4622235b5e
info: round branding further
Turns out I used the wrong scale when creating the new Auxio icon.
Fix that, which turns out to round the icon further.
2022-08-27 19:48:24 -06:00
Alexander Capehart
f6a712032e
ui: fix more lollipop insanity
Again and again and again
2022-08-27 19:06:37 -06:00
Alexander Capehart
01891e98e0
ui: re-add missing icons
Re-add icons that were lost during the branding update.
2022-08-27 18:55:01 -06:00
Alexander Capehart
28ba8147f1
ui: temporarily remove more menus
Temporarily remove more menus for now.

There's just no window to add them for 2.6.2. I'll add multi-select
later.
2022-08-27 17:36:14 -06:00
Alexander Capehart
3c5ade33b5
info: update branding
Update the app icon and banner to be more nuanced and appealing.
2022-08-27 17:15:24 -06:00
Alexander Capehart
a2f27f303b
ui: add predictive back gesture
Rework the back pressed callbacks to support a predictive back gesture.

This completes the trivial Android 13 reworks.
2022-08-27 16:16:18 -06:00
Alexander Capehart
0b43dd011c
ui: animate play/pause button shape
Make the shape of the play/pause buttons throughout the app morph from
a circle if paused to a square if playing.

Android 13 seemingly does this to their play/pause button, so we copy
it too.

Tangentally related to #162.
2022-08-27 15:21:08 -06:00
Alexander Capehart
a34541e95d
Merge branch 'dev' of github.com:OxygenCobalt/Auxio into dev 2022-08-27 14:15:20 -06:00
Alexander Capehart
5b2817b2f2
playback: do not check for version w/notification
Do not check for the version when managing the notification.

Some OEMs will update the android system, causing the version number to
change, but will THEN not update the system UI, completely breaking my
compat hacks. Because you know. Reasons. Fix this by always applying
future and obsolete methods of updating the media notification
regardless of the context.

Resolves #219.
2022-08-27 14:15:14 -06:00
Weblate (bot)
89a52b3f9b
Translations update from Hosted Weblate (#216)
* Translated using Weblate (Czech)

Currently translated at 100.0% (223 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/

* Translated using Weblate (Russian)

Currently translated at 97.7% (218 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ru/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (223 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/zh_Hans/

* Translated using Weblate (Czech)

Currently translated at 100.0% (223 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/

* Translated using Weblate (German)

Currently translated at 100.0% (223 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/de/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 93.2% (208 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pt_BR/

* Translated using Weblate (Russian)

Currently translated at 97.7% (218 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ru/

* Translated using Weblate (German)

Currently translated at 100.0% (22 of 22 strings)

Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/de/

* Translated using Weblate (French)

Currently translated at 48.6% (108 of 222 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/fr/

* Translated using Weblate (French)

Currently translated at 49.5% (110 of 222 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/fr/

* Translated using Weblate (Czech)

Currently translated at 100.0% (223 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (223 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/zh_Hans/

* Translated using Weblate (Lithuanian)

Currently translated at 56.9% (127 of 223 strings)

Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/lt/

Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Luiz-bro <luiznneto1@gmail.com>
Co-authored-by: Malopieds <malobeauchamps@gmail.com>
Co-authored-by: Vaclovas lntas <vaclovas1999@gmail.com>
2022-08-20 20:18:23 -06:00
Alexander Capehart
4d8c2abd09
music: catch cancellation events during indexing
Catch and propagate cancellation events during indexing.

This is just better for debug information.
2022-08-16 16:46:31 -06:00
Alexander Capehart
7cc5c77ad7
playback: make session actions more efficient
Remove redundant updates for the playing state on Android 13 onwards.
2022-08-16 16:35:31 -06:00
Alexander Capehart
40a34f0596
playback: migrate media session to android 13
Migrate MediaSessionComponent to android 13.

This was primarily implementing custom actions with the media session
and adding some extra bug fixes that I was already planning. I was
really hoping that google fixes the nightmarish mess that was the
previous MediaStyle notification, where I had to update the session
and then the notification in a tight dance with clever tricks to not
get rate-limited, but nope. I still have to do exactly the same thing
as beforehand, but with even extra insanity due to the custom actions.
2022-08-16 15:49:54 -06:00
Alexander Capehart
3cef088d12
music: switch to new storage perms
Switch to the new READ_AUDIO_STORAGE permission for Android 13.
2022-08-16 12:31:36 -06:00