Commit graph

1356 commits

Author SHA1 Message Date
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
016964e5d0
widget: update preview
Update the widget preview to reflect the new styling.
2022-08-28 11:59:22 -06: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
Alexander Capehart
f5f28b891a
widget: fix android 13 cover loading issue
Work aroudn an issue in Android 13 where bitmap pooling would not work
correctly and reduce our max memory limit by ~10x.

When I mean work around, I mean that we reduce the size of the rounded
covers further to ensure we aren't hitting the memory limit. This also
sadly blocks us from further RemoteViews instances, as the bugged
memory size will continue to increase if we do that.
2022-08-16 12:26:08 -06:00
Alexander Capehart
e90983e85d
all: android 13 cleanup
Low-hanging fruit android 13 changes.

This includes fixing some lints and adding a basic monochrome icon.
Maybe I'll improve that icon later.
2022-08-15 20:21:58 -06:00
Alexander Capehart
cafead8a88
deps: upgrade to android 13 [#129]
FINALLY upgrade to android 13.

I cannot believe it had to take until the release of the version to
finally update the SDK version, but of course it had to. For some
insane reason that I have no idea why it passed QA, the 33 SDK had
a crippling issue where attributes were not recognized. The only
way to fix this was to:

1. Upgrade to the newer studio version (Chipmunk Patch 2)
2. Upgrade to AGP 7.3.0-beta05.

Funny thing though. AGP 7.3.0 IS NOT COMPATIBLE WITH CHIPMUNK. Okay,
so we can upgrade to Dolphin then and then we can use AGP, right?
HAHAHA NOPE! Dolphin hasn't patched out the XML issue yet despite
every other release channel having a release on August 3rd. Did
some engineer at google just forget to make a release? What?

Okay, so I guess I'm forced to use Electric Eel, the UNSTABLE CANARY
VERSION that IS FILLED WITH BUGS. But oh wait, Electric Eel doesn't
like AGP 7.3.0 EITHER! It wants AGP 7.4.0, which IS ALSO IN ALPHA.
So, I'm forced to use the ALPHA studio and the ALPHA AGP version just
to use the android 13 SDK in a way that is not completely unbearable.

The android SDK, everyone.

(This is not a cry for help, I just want to write down my infinite
frustration with this stupid goose chase somewhere)
2022-08-15 19:54:37 -06:00
OxygenCobalt
982abe8cdb
strings: remove system ok/cancel names [#215]
Auxio tried to leverage built-in android string attributes for Ok and
Cancel while still completing them for other translations that were not
supported by the OS.

Turns out this was a terrible idea when I switched to Weblate, which
has no knowledge of this trick and could lead to a misleading
translation value. Remove it.

Resolves #215.
2022-08-12 16:04:41 -06:00
Weblate (bot)
72cd199020
Translations update from Hosted Weblate (#214)
* Translated using Weblate (Czech)

Currently translated at 100.0% (222 of 222 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 89.6% (199 of 222 strings)

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

* Translated using Weblate (Russian)

Currently translated at 98.6% (219 of 222 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (222 of 222 strings)

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

Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: Luiz-bro <luiznneto1@gmail.com>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
Co-authored-by: Eric <alchemillatruth@purelymail.com>
2022-08-12 21:57:48 +00:00
OxygenCobalt
2c5a1a0567
all: move menus to more button [#93]
Move all menu functionality from long-click to a menu button.

This is in preparation for #93, as I need to free up the long-click
for a selection option. The spacing isn't really consistent at all,
but that's because I wanted to make something that looks right
depending on the context.
2022-08-11 15:15:10 -06:00
OxygenCobalt
fc94bb1369
info: fix country code
Fix the invalid pt-rBR country code, replacing it with pt-BR.
2022-08-11 12:30:34 -06:00
OxygenCobalt
bb9c842154
playback: add song menu option to names
Re-add the song menu option to the title section of the playback view.

This is again, due to the addition of the equalizer button, but also to
make this menu easier to reach.
2022-08-11 12:28:00 -06:00
OxygenCobalt
d4884cc9ca
playback: replace song options with equalizer
Replace the song options button in the playback menu with a button that
opens the equalizer.

I plan to re-introduce the song options in another location.
2022-08-11 12:18:14 -06:00
OxygenCobalt
ee68e7ffe9
playback: make replaygain always-on
Remove the "Off" ReplayGain setting, as it is mostly meaningless.

Users who don't want ReplayGain can remove the tags from their files.
No efficiency benefits either since the audio processor is always
disabled without replaygain tags. It is better not to confuse users
who do have ReplayGain but wonder why it is not working on their
files because the setting is off.
2022-08-11 11:44:19 -06:00
OxygenCobalt
b104dd151d
Version 2.6.1
Ready for version 2.6.1 of Auxio.
2022-08-10 15:30:59 -06:00
OxygenCobalt
9eef57144b
strings: remove broken translations
Remove broken and unused translations.
2022-08-10 15:12:50 -06:00
OxygenCobalt
fc5274ebeb
info: update
Update information in preparation for 2.6.1.
2022-08-10 14:31:16 -06:00
Weblate (bot)
6e60399d45
Translations update from Hosted Weblate (#209)
* Translated using Weblate (Czech)

Currently translated at 100.0% (218 of 218 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (218 of 218 strings)

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

* Translated using Weblate (Russian)

Currently translated at 99.0% (216 of 218 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (218 of 218 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (21 of 21 strings)

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

* Translated using Weblate (Russian)

Currently translated at 99.0% (217 of 219 strings)

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

* Translated using Weblate (Greek)

Currently translated at 43.8% (96 of 219 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (219 of 219 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 99.0% (217 of 219 strings)

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

* Translated using Weblate (Greek)

Currently translated at 55.2% (121 of 219 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (219 of 219 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 100.0% (219 of 219 strings)

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

Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
Co-authored-by: Clyde Johanson <johnson.hu95@gmail.com>
Co-authored-by: lunand <paulefstathiou2009@gmail.com>
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Co-authored-by: Iago <translate@delthia.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Alexander Capehart <oxycblt@abstractr.net>
2022-08-10 19:33:39 +00:00
OxygenCobalt
68ca9973df
ui: add basic bar actions [#108]
Add the ability to customize the bar action to the repeat mode or
shuffle state.

This is a much smaller implementation than what I planned, mostly
because other options did not make much sense (queue) or were
superceded by better options (clear state).

Resolves #108.
2022-08-10 13:14:19 -06:00
OxygenCobalt
ce2e950a9b
playback: add audioeffect integration [#211]
Add support for external AudioEffect implementers, like Wavelet.

Doing this involves doing a weird broadcast dance with AudioEffect
Intents at special points to indicate a valid audio session that
can be manipulated. Still has some issues, such as a null name
showing up in wavelet. As far as I am aware, this is the best
possible system I can do, and allows me to delegate an equalizer
implementation to other apps instead of making my own.

Resolves #211.
2022-08-09 16:26:14 -06:00
OxygenCobalt
deffe065d5
queue: do not scroll to next-up range
Do not scroll to the current index + 1 (i.e the next up range) when the
index signifigantly changees.

RecyclerView quirks result in a mix of next-up and next-up + playing
item scrolling, just unify it under the latter.
2022-08-09 09:11:17 -06:00
OxygenCobalt
83d1e4eae4
ui: refactor shadow management
Make the shadow disabling workaround an XML style.

Doing it this way is more elegant than disabling it in-code.
2022-08-09 09:10:19 -06:00
OxygenCobalt
bcc16fb88c
music: improve field management
Cache some music fields and make other fields more coherent given
recent changes.
2022-08-09 08:57:24 -06:00
OxygenCobalt
75e80a7253
home: add indicator to date added sorting
Add a fast-scroll indicator for date added sorting.

Forgot to add this initially.
2022-08-09 08:47:57 -06:00
OxygenCobalt
3c3b9ac7cc
queue: make sheet corner radius sharp
Make the corner radius of the queue sheet also sharp.

This is to ensure consistency with the playback sheet as it currently
stands. As soon as I can do only-inset content behavior and can thus
round the playback bar, I'll also re-round the queue bar.
2022-08-08 22:21:10 -06:00
OxygenCobalt
fe38c70d34
ui: don't re-inset content only
Revert the changes I made in 0474940ee3
and return to the hybrid layout + inset system.

The big issue is edge effects and touch events. I need to properly
clamp edge effects to the padding, but that also requires me to use
stretch edge effects everywhere to prevent weird visual isuses. This
may happen in the future in RecyclerView 1.3.0, but development on such
has been minimal. Meanwhile, touch events will be intercepted by the
now overlapping view if one clicks the wrong portion of the bar.
Nothing I can do given how touch events are intercepted by the bottom
sheet, at least right now.

More feasible to keep the current system and mitigate whatever issues
are present there.
2022-08-08 16:22:03 -06:00
OxygenCobalt
46473ceff9
ui: update transitions
Update transitions in the home fragment to X-axis.

I noticed a visual issue in the detail transition in the existing
version stemming from how the main fragment's drawing is clipped by
the bottom sheet, resulting in a less-than-ideal Z-axis transition.

While I wanted to fix this by attempting to switch to inset based
bottom sheet management, I still need to wait for more changes in
order to successfully pull that off, and hence I'll be reverting it
soon.

Moving these transitions to X-axis prevents this visual issue while
still being roughly semantically similar.
2022-08-08 16:17:46 -06:00
OxygenCobalt
0cef51fa97
detail: add item type
Add an item type indicator to the top of the detail header.

This is primarily for release type functionality, but also makes it
more clear the item one is looking at.
2022-08-06 14:53:06 -06:00
OxygenCobalt
7b3490d5d3
ui: improve bottom sheet backgrounds
Try to improve the efficiency/management of bottom sheet bakcgrounds
somewhat.
2022-08-06 13:19:58 -06:00
OxygenCobalt
0474940ee3
ui: switch to inset-based bottom sheet content
Do not do a measure + inset method with BottomSheetContentBehavior,
instead, try to re-apply window insets to adapt with the bar instead.

This fixes a lot of view clipping issues that made motion transitions
non-ideal and prevented a rounded playback bar. Only remaining issue is
RecyclerView instances, which need to be further reworked to resolve
scroll issues and edge effect problems.
2022-08-06 09:21:20 -06:00
OxygenCobalt
913db88fde
ui: fix incorrect queue text style
Fix an accidental usage of Material3 text styles instead of Auxio.

Left-over from the testing app I did for the new bottom sheets. Stuck
around through some means.
2022-08-05 20:47:00 -06:00
OxygenCobalt
daaa8d7f7e
Version 2.6.0
Ready for version 2.6.0 of Auxio.
2022-08-05 18:43:54 -06:00
OxygenCobalt
5a829112da
meta: update shots
Upgrade screenshots for 2.6.0.
2022-08-05 17:40:58 -06:00
OxygenCobalt
5978e124d2
ui: fix lollipop bugs
Fix more lollipop bugs, as I usually do. Except for the drawing
issues I may or may not have produced. Don't really care enough to
fix them though.
2022-08-05 11:47:26 -06:00
OxygenCobalt
e12c7cb419
ui: rework resource distribution
Try to remove the weird config file and replace it with more
conventional resource files in other places.
2022-08-05 09:58:20 -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
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
c888035cbd
queue: remove no position check
Remove the check for NO_POSITION when doing scrolling.

An empty list implies that we should probably scroll to the proper
item when we add data.
2022-08-04 16:23:20 -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
4b61d1b6e7
meta: remove spanish changelogs
Remove the useless spanish changelogs (We don't translate them as they
become outdated quickly)
2022-08-04 14:45:11 -06:00
Weblate (bot)
6809274441
Translations update from Hosted Weblate (#198)
* Added translation using Weblate (Filipino)

* Translated using Weblate (Spanish)

Currently translated at 99.0% (215 of 217 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (217 of 217 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (20 of 20 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 63.5% (138 of 217 strings)

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

* Translated using Weblate (Filipino)

Currently translated at 50.2% (109 of 217 strings)

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

* Update translation files

Updated by "Remove blank strings" hook in Weblate.

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

* Translated using Weblate (German)

Currently translated at 100.0% (220 of 220 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 100.0% (220 of 220 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 100.0% (222 of 222 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (222 of 222 strings)

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

* 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/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

Co-authored-by: martx <johnmartyncadampog@gmail.com>
Co-authored-by: Iago <translate@delthia.com>
Co-authored-by: Vaclovas lntas <vaclovas1999@gmail.com>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Fjuro <fjuro@seznam.cz>
2022-08-04 20:44:12 +00: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
f6429a878a
build: upgrade deps
Upgrade dependencies

AGP -> 7.2.2
Activity -> 2.5.1
Fragment -> 2.5.1
Lifecycle -> 2.5.1
Navigation -> 2.5.1
2022-08-04 11:52:57 -06:00
OxygenCobalt
85eb4cad6c
playback: use height for playback layouts
Leverage min heights for the playback layouts instead of the land
modifier.

This prevents an issue where some split-screen displays won't use the
correct "compact" layout.
2022-08-04 10:16:26 -06:00
OxygenCobalt
a9515e19c0
all: cleanup
Clean up the slightly rushed changes I made as I worked on the split
UI.
2022-08-03 19:54:14 -06:00
OxygenCobalt
7543f1defc
playback: add split ui in landscape
Add a split playback UI in landscape mode.

Apparently the mere act of doing this also fixes the infurating
window inset issue I previously did either. Odd.
2022-08-03 16:00:18 -06:00
OxygenCobalt
772fe7df3b
ui: make bottom sheets request insets on layout
Make bottom sheets request window insets when they are laid out.

For some insane reason, bottom sheets are just not given window insets
when the device is rotated in the detail view. Appaently requesting them
fixes it all of a sudden.
2022-08-03 15:42:37 -06:00
OxygenCobalt
79637f7603
playback: check for init before applying state
Check if the playback state still has not been initialized once we
restore.

This prevents one from playing a song while the restore task is
on-going and then having it overwritten by the restored state.
2022-08-03 14:02:45 -06:00
OxygenCobalt
304fccf0f9
home: disable collapse when one tab
Disable the collapsing toolbar when there is only one tab.

The TabLayout is hidden when there is one tab, so collapsing it does
not make much sense.
2022-08-03 10:30:19 -06:00
OxygenCobalt
4f3cb80a77
ui: rework transitions
Use MaterialFadeThrough in the search transition and a Z-axis
transition in the detail views.

This is more semantically correct than the previous transitions.
2022-08-02 15:05:08 -06:00
OxygenCobalt
de3cc7958f
ui: rework bottom sheet state management
Try to make the bottom sheet states more coherent, especially regarding
when playback ends.
2022-08-02 11:13:12 -06:00
OxygenCobalt
35cfea78df
recycler: remove useless header ids
Remove useless id fields from Headers, replacing them with vlaues
related to their string resource.

String resources and disc numbers are more or less garunteed to be
unique in Auxio's context.
2022-08-01 10:38:24 -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
f5542c65ba
queue: rework previous items
Rework previous items to be based off of adapter state.

This improves the transitions between active and previous items and
their overall efficiency.
2022-07-31 16:50:47 -06:00
OxygenCobalt
b42dfd0b53
all: misc changes
Miscellanious changes that accumulated over time.
2022-07-31 15:51:12 -06:00
OxygenCobalt
170cdf80ef
widgets: fix insanity
Fix two issues where Auxio's widget could not be resized to a single
cell, and another where covers would not load into the widget.

The first is caused by a random, subtle change that completely changed
up the minHeight size calculation regarding widgets. Thus, we need to
lower it for android to recognize it still as 1 cell. I cannot believe
we can't just specify the specific minimum grid size that our widget
takes up, like you know, iOS did, nearly a decade after widgets were
first added in Android.

The second is an absurd race condition stemming from me hitting the
RemoteViews memory limit. Turns out my cover bitmaps were simply too
big. Getting them below the limit requires me to resize them to a puny
~500 pixels. Why can't we just render our own views into our widget?
You know, like iOS did, nearly a decade after widgets were first added
to Android.

Nah, screw modernizing the broken widget API. Let's just vaguely copy
iOS widgets because we have to while not fixing a single issue plaguing
widget development on this OS. That way some google engineer can get
promoted faster.
2022-07-30 20:41:24 -06:00
OxygenCobalt
c3d8509069
ui: optimize bottom sheets
Desperately try to minimize the amount of layouts my bottom sheet code
is producing.

It still relayouts twice in one pass. I hate android.
2022-07-30 16:06:17 -06:00
OxygenCobalt
54be8dc2dc
queue: add ability to see previous items
Add the ability to see (but not edit) previous items.

This completes the new playback UI I've been working on for about 2
weeks now. I pray that there is no insane unfixable bug with this,
please please please please please
2022-07-30 10:06:58 -06:00
OxygenCobalt
7467d89a45
ui: misc bottom sheet changes
Tweak parts of the bottom sheet system for UI consistency.
2022-07-30 09:15:38 -06:00
OxygenCobalt
ed2f836280
ui: fix more bottom sheet issues
Fix more bottom sheet issues regarding the queue sheet.

Guess I brought it upon myself for nesting bottom sheets like this in a
way that I doubt the behavior expects.
2022-07-29 15:39:38 -06:00
OxygenCobalt
5536dd48df
ui: fix bottom sheet initialization
Fix an issue on some devices where bottom sheet transitions would not
initialize correctly.

Turns out I can't try to do transitions using the callback and simply
initalizing them on startup. Apparently on some devices,
CoordinatorLayout will simply not lay out until some arbitrary point
past onResume. This breaks our transitions.

Fix it by using a pre-draw listener instead. I cannot believe I have to
do this.
2022-07-29 15:00:06 -06:00
OxygenCobalt
a4fa8a84fa
queue: reimplement with bottom sheet
Re-implement the queue, now leveraging a bottom sheet too.

This makes the queue much easier to open, and actually plays along with
the new transition system. I really hope this doesn't have a stupid
gotcha that ruins the UX. Please. Please. Please.
2022-07-29 14:40:58 -06:00
OxygenCobalt
cc3cb343b0
playback: use bottomsheetbehavior
Use BottomSheetBehavior with the playback sheet.

This is the result of two weeks of painful hacking to get a working
implementation that did not immediately have a brain aneursym. It
also requires me to still vendor BottomSheetBehavior for the time
being. However, this greatly reduces technical issues on my end and
allows the addition of new playback UI concepts, while still
retaining the UI fluidity of prior.
2022-07-29 12:21:06 -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
fe16ffb5bf
queue: temporarily remove navigation
Temporarily remove queue navigation, as it can no longer really fit
with the new transitions.

This will eventually be replaced with a queue bottom sheet, implying
that I can abuse one into working.
2022-07-27 08:48:13 -06:00
OxygenCobalt
6a4803e3d7
ui: add shared axis transition to search
Add a shared axis transition to the search view.

Now theres just the queue view to deal with.
2022-07-27 08:28:14 -06:00
OxygenCobalt
00dec358ab
ui: add fade through transitions to main ui
Add fade through transitions to the main navigation.

This just looks nicer. This currently excludes the search menu,
however.
2022-07-26 21:26:23 -06:00
OxygenCobalt
114d355011
detail: make transitions shared axis
Make detail transitions operate on a shared axis.

This just looks nicer.
2022-07-26 21:18:33 -06:00
OxygenCobalt
ebdbd682b0
ui: rework state layers
Unify the background state layers of the entire app by overriding
colorControlHighlight.

Lots of components still use it, so it's beneficial to make it
consistent with the rest of the app theming.
2022-07-26 17:24:13 -06:00
OxygenCobalt
6c59a03042
queue: rework internal queue system
Rework the queue internally to decouple the queue from playback and
better respond to reshuffling.

This is being implemented under the assumption that I will be
implementing the sliding queue eventually.
2022-07-26 10:57:24 -06:00
OxygenCobalt
496b72ca78
playback: expose goto to mediasession
Expose the ability to skip to an arbitrary item in the queue to the
MediaSession.
2022-07-25 13:45: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
eca385aea5
playback: hack around paused seeking issue
Hack around an issue where the notification position will not update if
one seeked while the player was paused.

This is the best implementation I can do that will not result in the
notification getting excessively rate-limited.
2022-07-25 10:41:21 -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
6381815fd9
settings: add option to clear state
Add an option to clear the currently saved playback state.

This does not clear playback entirely, but rather remove the saved
state so that it's not restored on the next startup. This is generally
the cleanest solution compared to allowing state restore to be toggled,
which opens up a bunch of race conditions.

Resolves #107.
2022-07-25 09:54:39 -06:00
Weblate (bot)
86a1815b1f
Translations update from Hosted Weblate (#186)
* Translated using Weblate (Czech)

Currently translated at 100.0% (199 of 199 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (199 of 199 strings)

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

* Added translation using Weblate (Lithuanian)

* Translated using Weblate (Russian)

Currently translated at 67.3% (134 of 199 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 19.5% (39 of 199 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 95.4% (190 of 199 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 21.1% (42 of 199 strings)

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

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (203 of 203 strings)

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

* Translated using Weblate (Russian)

Currently translated at 80.7% (164 of 203 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 29.0% (59 of 203 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (207 of 207 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (207 of 207 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 35.2% (73 of 207 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 95.0% (19 of 20 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (217 of 217 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (217 of 217 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (217 of 217 strings)

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

* Translated using Weblate (Italian)

Currently translated at 99.5% (216 of 217 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 46.5% (101 of 217 strings)

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

* Added translation using Weblate (Croatian)

* Translated using Weblate (Lithuanian)

Currently translated at 61.2% (133 of 217 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 100.0% (20 of 20 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 100.0% (217 of 217 strings)

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

Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: Enrico D'Ortenzio <enrico2588@gmail.com>
Co-authored-by: Vaclovas lntas <vaclovas1999@gmail.com>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
Co-authored-by: metezd <itoldyouthat@protonmail.com>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Elizabeth Wega <elibeti.eb@gmail.com>
2022-07-23 15:17:42 +00: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
b8ac1e6560
settings: use plain switch <api 23
Use a plain switch before API 23 to prevent tinting issues.

Boy do I love having to accomodate Lollipop's insanity for the
1289289124th time.
2022-07-20 11:11:45 -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
30920b399a
info: update faq
Update FAQ.md to reflect the changes to the media indexer in the next
release.
2022-07-18 11:40:57 -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
f838fc8b0e
widget: update preview
Update the widget preview to reflect the new filled buttons.
2022-07-18 10:16:39 -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
51b9b0e734
widgets: dont use system padding in size compat
Don't take the app widget host padding into account when trying to
calculate the widget sizing.

Doing such produces bad results, at least on my devices. At least, it
does now for some reason.
2022-07-17 16:05:53 -06:00
OxygenCobalt
7f07764b68
playback: fix delayed actions not working
Fix an issue on some devices where the delayed actions system would
not work on startup.

Apparently onStart can be called several times with the same intent.
No, I am not joking. What the actual hell. This would cause any
delayed action other than Restore to be overwritten. The only hard
rule about android is that there are no rules. I hate this platform
so much.
2022-07-17 16:00:17 -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
e881178c4c
ui: fill in transport icons [#187]
Fill in the play/skip icons, as it just looks a bit nicer that way.

This does violate the design guidelines a little, but who cares.
2022-07-17 10:43:11 -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
f0d6e13b53
revert "detail: add date added sort [#181]"
Actually, this is not a good idea. No use as far as I am aware, and it
may semantically conflict with playlists.

This reverts commit 3d1dd2a79f.
2022-07-13 15:53:14 -06:00
OxygenCobalt
3d1dd2a79f
detail: add date added sort [#181]
Add a Last Added sort option to the artist and genre detail views.

This completes the last-added implementation.
2022-07-13 15:50:40 -06:00
OxygenCobalt
a2afd3a4b7
music: add date added to albums [#181]
Added date added sorting to albums as well.

This implementation picks the earliest song in an album that was added
to the library and then uses that for sorting.
2022-07-13 15:50:30 -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
9921a39784
music: enable quality tags
Actually enable quality tags now.

Now that 2.5.0 is out, I can finally focus on the new metadata system.
2022-07-13 14:27:35 -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
634fcb4273
Version 2.5.0
Ready for version 2.5.0 of Auxio.
2022-07-13 11:56:21 -06:00
OxygenCobalt
8a4aee9ab1
all: optimize previews
Optimize widget previous and app screenshots to reduce load times and
APK size.
2022-07-13 11:45:13 -06:00
OxygenCobalt
a24b4cf447
info: update screenshots
Update app screenshots for 2.5.0.
2022-07-13 10:58:20 -06:00
Weblate (bot)
66cdd9d2f5
Translations update from Hosted Weblate (#180)
* Translated using Weblate (German)

Currently translated at 100.0% (189 of 189 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (193 of 193 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (193 of 193 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 97.4% (188 of 193 strings)

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

* Translated using Weblate (Russian)

Currently translated at 67.8% (131 of 193 strings)

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

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

* Added translation using Weblate (Japanese)

* Translated using Weblate (Czech)

Currently translated at 100.0% (197 of 197 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (198 of 198 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 95.9% (190 of 198 strings)

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

Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: 2hot2exist <pyramidex@protonmail.ch>
Co-authored-by: metezd <itoldyouthat@protonmail.com>
Co-authored-by: Егор Ермаков <eg.ermakov2016@yandex.ru>
2022-07-13 15:27:38 +00: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
ce7dd48f02
all: clean up resources
Clean up resource implementations, removing useless attributes and
simplifying layouts.
2022-07-12 13:13:08 -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
6f8dc3c311
music: hide quality tags for now
Hide the new quality tags option for now.

This is not because I wanted to, but rather because of me wanting to
reduce the amount of bugs I will likely be thrown due to the release
of automatic rescanning.
2022-07-08 16:48:28 -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
41ff92a587
deps: upgrade
Update deps:
Kotlin -> 1.7.10
Navigation -> 2.5.0
Lifecycle -> 2.5.0
Activity -> 1.5.0
Fragment -> 1.5.0
2022-07-07 12:08:17 -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
b1a8544b73
ui: make toolbar fix dedicated class
Make the toolbar spacing fixes a dedicated class.

This resolves an issue on lollipop devices where the ripple would be
clipped.
2022-07-03 16:23:53 -06:00
OxygenCobalt
9647b53f78
ui: remove ripple resources
Remove the ripple resources and replace them with their system
counterparts.

This is to remove redundancy in-app and make the widget more consistent
with other android widgets.
2022-07-03 15:44:56 -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
e1c55d5ddc
ui: revert rounded bottom sheet
Revert the optional rounded corners on the bottom sheet.

It was causing too many bugs to be a sensible addition. I will only add
it if Google moves WindowInset application to layout time AND only on
devices with the stretch overscroll implemented.
2022-07-03 11:29:01 -06:00
Weblate (bot)
81c616a2aa
Translations update from Hosted Weblate (#169)
* Translated using Weblate (German)

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (French)

Currently translated at 53.4% (100 of 187 strings)

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

* Translated using Weblate (German)

Currently translated at 94.7% (18 of 19 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 37.4% (70 of 187 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 37.4% (70 of 187 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (19 of 19 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 97.3% (182 of 187 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 97.3% (182 of 187 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (19 of 19 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 100.0% (19 of 19 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 72.7% (136 of 187 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 60.9% (114 of 187 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 94.7% (18 of 19 strings)

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

* Translated using Weblate (Indonesian)

Currently translated at 45.9% (86 of 187 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 78.0% (146 of 187 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (19 of 19 strings)

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

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (187 of 187 strings)

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

* Translated using Weblate (Indonesian)

Currently translated at 94.7% (18 of 19 strings)

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

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 80.4% (152 of 189 strings)

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

Co-authored-by: Konstantin Tutsch <konstantin.tutsch@disroot.org>
Co-authored-by: Enrico D'Ortenzio <enrico2588@gmail.com>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Co-authored-by: Fjuro <fjuro@seznam.cz>
Co-authored-by: metezd <itoldyouthat@protonmail.com>
Co-authored-by: arif <others.superset@simplelogin.co>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Rodrigo Hernández <alex_werehog@hotmail.com>
Co-authored-by: Clyde Johanson <johnson.hu95@gmail.com>
Co-authored-by: Luiz-bro <luiznneto1@gmail.com>
Co-authored-by: Adam Adrian <4.adam.adrian@gmail.com>
2022-07-03 16:16:51 +00: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
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
73e10c9519
music: enable runtime rescanning [#72]
Finally enable runtime rescanning, opening the door for a ton of new
features and automatic rescanning later on.

More work needs to be done on making the shared mutable state in-app
safer to use.
2022-07-02 17:15:21 -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
3663396b97
ui: remove windowinsetscompat
Remove WindowInsetsCompat from the project, as it is a pile of garbage.

WindowInsetsCompat refuses to actually update the correct fields when
you transform it back into a WindowInsets. This makes it impossible to
use in Auxio. The fact that Google decided to make such an
overengineered wrapper to some version-specific methods is an absolute
joke. All you needed were some extension functions, but no, let's make
an entire wrapper class filled with so many gotchas as to be unusable.
2022-07-02 10:19:46 -06:00
OxygenCobalt
631120dafc
search: actually commit filter mode to settings
Turns out the filter mode was also not being committed to settings.

I have no idea how this slipped into production.
2022-07-01 20:39:23 -06:00
OxygenCobalt
8b8eebdd95
search: fix mismatched filter ids
Fix an issue were (at some point) the filter ID for display modes was
swapped out for drawable IDs.
2022-07-01 20:26:20 -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
e41645ee28
widgets: rework button appearance
Further rework the button layout to be alike to other modern widgets.

This changeset transforms the play button into a FAB-ish thing,
makes spacing coherent between the uses of each layout, and adds
spacers to make the buttons layout in a more appealing way.
2022-07-01 12:25:59 -06:00
OxygenCobalt
e883336b04
music: rework library update process [#176]
Update the library update process to be on a co-routine, updating
callbacks on the main thread.

For some insane reason, the Main dispatcher used normally when
loading music just disappears sometimes. This leads to unpleasent
crashes as callbacks expect to be called on the app thread, not
any background threads.

Fix this by forcing the Main dispatcher during the update process.
This requires the music update process to also run on a background
thread, albeit that will be useful for automatic rescanning late ron.
2022-07-01 08:54:42 -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
OxygenCobalt
9a17806da1
ui: rework module structure
Rework the ui module structure to subdivide related groups of elements.
2022-06-29 11:41:49 -06:00
OxygenCobalt
a81b90a81f
widgets: update control layout
Rework the widget control layouts to add additional controls and to
have more consistent padding.
2022-06-29 11:35:49 -06:00
OxygenCobalt
249ddae269
ui: rework bottom sheet layout method
Rework the bottom sheet layout process to accomodate the new rounded
corners and be far more efficient.

This removes the weird content layout code and moves it into the inset
code, which not only allows content to show in the corners, but also
allows us to minimize the amount of layouts that we normally perform.
2022-06-29 11:17:50 -06:00
OxygenCobalt
c7c4473247
ui: make bottom sheet follow rounded corners
Make BottomSheetLayout apply rounded corners when rounded covers is
enabled.

Draggable elements should be rounded, not straight, so this simply
makes this consistent. It does have one visual error as it stands,
stemming from the layout code allocating space for the bar and thus
clipping certain content. I hope to fix this soon.
2022-06-29 09:10:50 -06:00
OxygenCobalt
67ef667080
home: do not collect immediately on recreate
Do not use collectImmediately when recreating tabs in the home menu.

This resulted in an issue where the ViewPager would not update to
reflect the new tab layout.
2022-06-27 14:50:33 -06:00
OxygenCobalt
5b70295330
ui: fix bottom sheet issues
Fix several issues with the bottom sheet implementation, mostly
relating to what occurs when the bar is hidden.

Previously, if the bar was hidden and then re-shown, it would not be
visible, and you could override a hidden event with another tap. These
are now both resolved by removing a stray visibility assignment and
replacing the old drag checks with a new isDraggable attribute.

In the future, I hope to abuse BottomSheetBehavior into not being a
pile of garbage and replace this system once and for all.
2022-06-27 10:28:17 -06:00
OxygenCobalt
c3721266b5
playback: use isactive in replaygain [#174]
Override isActive to control when the ReplayGain engine should
manipulate audio.

This makes the system much more efficient, as we can side-step a
useless copy when ReplayGain shouldn't be applied.
2022-06-26 19:19:28 -06:00
OxygenCobalt
efd24a4fee
detail: fix broken album menu
Fix broken menu items in the album detail view.

No idea why this happened. Probably a mistake while I was redoing the
menus previously.
2022-06-24 09:07:18 -06:00
OxygenCobalt
149da883fe
playback: make state db sync
Add synchronized calls to PlaybackStateDatabase to resolve future race
conditions.
2022-06-23 15:27:41 -06:00
OxygenCobalt
d5c0ccfce0
ui: remove titlemidlarge style
Remove the TitleMidLarge style, replacing it with more Material3
attributes.

This finally removes all of the non-standard text styles. There is
still the two TitleMedium styles, but this is considered okay.

In the playback view, TitleMidLarge has become TitleLarge, which
honestly works quite well, as the same text styles are used in the
detail views.
2022-06-23 11:22:29 -06:00
OxygenCobalt
50ba3358e1
info: expose weblate
Fully expose Auxio's Weblate project to the public.
2022-06-23 07:47:38 -06:00
OxygenCobalt
3fcd7e1a63
all: general cleanup
A bunch of changes that accumulated that I'm too lazy to split into
good commits.
2022-06-22 18:38:57 -06:00
OxygenCobalt
630950ea5d
playback: force LTR on timeline controls
Force LTR on timeline controls, as per the Material Design guidelines.

The guidelines state that while "directional" UIs should be LTR/RTL
depending on locale, "timeline" UIs should always by LTR, as the
direction of time is universal. Auxio did not do this, and so the
timeline controls would be RTL on other elements. Fix this by forcing
LTR on the UI elements that correspond to timelines.

Now, this is not the best system. To ensure that the rest of the layout
remains sane, much of the directional views have to be wrapped in a
redundant layout, which is somewhat in-efficient. However, the impact
seems to be at least negligable.
2022-06-22 12:38:00 -06:00
OxygenCobalt
55f9d4c819
ui: rework sorting again
Rework Sort again into a new class that leverages a better Mode design
and static comparator instances.

This somewhat improves efficiency, but is also far easier to work with
and has far less footguns with adding new sorts.
2022-06-22 11:08:58 -06:00
OxygenCobalt
86010e896e
music: remove redundant null checks
Remove more redundant null checks in MediaStoreBackend.

Again, no need to check if there is no issue where they might be null.
2022-06-22 09:05:22 -06:00
OxygenCobalt
316a0e719c
ui: rework typography
Completely rework app typography.

Today I found out that inter has a tool that allowed you to generate
line spacings for a particular font size. Several hours later, I
regenerated the entirety of Auxio's typography to use this new system.

Moreso, I also tried to eliminate some of the non-standard text styles
that I was using prior. That failed. Mostly there's two edge-cases
regarding title bolding and the playback view that I simply cannot
work through right now, since M3's typography system is horribly
restrictive.
2022-06-21 20:19:52 -06:00
OxygenCobalt
7edd8002f1
deps: update exoplayer to 2.18.0
Update ExoPlayer to 2.18.0 and fix all of the breaking changes.
2022-06-21 11:42:17 -06:00
OxygenCobalt
16eccee8e5
all: add collection utils
Add new shortcut utilities for collecting StateFlows in a safe manner.

The priamry addition here is collectImmediately. collectImmediately
just calls block with the existing value initially, which helps remove
a good amount of bugs regarding state initialization. Sure, it is a bit
inefficient given that it will also initialize on startup, but this is
okay.

The other utilities are the same, but simply remove the launch
boilerplate.
2022-06-21 10:51:56 -06:00
OxygenCobalt
8465cda637
playback: allow customization of detail playback
Add a new "Detail playback mode" option that allows one to configure
what selecting a song will do in an album/artist/genre.

This is mostly a clone of the prior setting, just in a new context.

Resolves #164.
2022-06-21 09:13:57 -06:00
OxygenCobalt
787a0df595
playback: fix remember shuffle regression
Fix a regression that broke the Remember Shuffle option.
2022-06-20 16:10:23 -06:00
OxygenCobalt
b041fe68d0
ui: add util for fragment objects
Add a utility to easily work with lifecycle-dependent fragment objects.

This reduces the code duplication required to maintain objects that
would leak after the destruction of a fragment. We normally would not
do this as a delegate, as that usually entails some lifecycle wizardry
that can easily break and crash the app in esoteric situations.
However, this this just extends the normal lifecycle without watching
any state, it seems to be pretty safe to use.
2022-06-20 12:03:57 -06:00
OxygenCobalt
bd92ba2175
settings: improve preference management
Rework the preference classes to reduce the horrible bloat of the
recursivelyHandlePreference function.

This was mostly implementing new methods into IntListPreference and
adding a new preference to represent the weird, "generic" dialogs that
are used at points. While some preferences still need to be tweaked in
recursivelyHandlePreference, it is nowhere near as bad as it was prior.
2022-06-20 11:12:55 -06:00
OxygenCobalt
532a30325a
settings: revamp settingsmanager into settings
Revamp the shared object SettingsManager into a standalone utility
called Settings.

This makes many things easier in Auxio. It completely unifies the key
format that we use (Android Strings instead of Java consts), eliminates
the pretty dumb initialization method that we use, and eliminates the
dubiousness of holding a Context-related utility in a global field.

The only cost was having to migrate even more ViewModels to Android
ViewModels. Whatever.
2022-06-20 09:12:19 -06:00
OxygenCobalt
ba48cdad29
playback: make state manager lock
Add synchronized calls to all mutations in PlaybackStateManager.

I mean, it is global mutable state modified on several threads. This is
the safest option to remove a bunch of horrible bugs.
2022-06-19 16:43:41 -06:00
OxygenCobalt
b8cc153f07
playback: add controller role
Add a controller role to PlaybackStateManager.

The controller manages the internal player, and acts as an intermediary
between other internal objects that want to modify the player, but
don't actually have access to it.

This makes a bunch of future changes far easier.
2022-06-19 16:23:40 -06:00
OxygenCobalt
29fe849565
playback: add shuffle shortcut
Add a shortcut to shuffle all songs.

This is likely the only static shortcut Auxio will have. Top tracks
and recently added are completely useless for me, so I will never
add them. I may add more dynamic shortcuts for recently played items,
however.

Note that we use a basic black shuffle icon here. I will not add icon
customization to these shortcuts.
2022-06-18 11:20:22 -06:00
OxygenCobalt
20e7b25808
queue: fix visual issue with transition
Fix a visual issue with the queue animation where the playback view
will still slightly show.

This was caused by the lack of a background in the queue fragment UI.
2022-06-18 08:46:10 -06:00
OxygenCobalt
eaad3d04b8
ui: improve tablet ux
Remove some UI breakages and tweak the UI to be better for tablet
users.
2022-06-17 16:30:14 -06:00
OxygenCobalt
09442c475f
image: fix seam appearing on some images
Fix an issue where a seam might appear on some covers when rounded
covers was enabled.

This was caused by a poor usage of clipToOutline. Replace with simply
stacking existing image instances on top of eachother.
2022-06-17 10:37:54 -06:00
OxygenCobalt
3d19794d63
ui: remove medium button style
Remove the temporary 28dp hack that was applied to the playback bar.

This finally puts the playback bar in line with all other icon
components. The playback panel is still weird, but that's okay since
it's a full screen view and the buttons can take up more space.

Since I absolutely hate change, I had to effectively frog-boil myself
in order to do this, first downsizing the icon from 32dp to 28dp, and
then from 28dp down to 24dp. I can't believe I care about this so much.
2022-06-17 09:30:20 -06:00
OxygenCobalt
cf8e887f9a
all: use compat when stopping foreground services
Use ServiceCompat.stopForeground instead of stopForeground.

This is preliminary preparation for Android 13. I can only change SDK
versions however when the Android Gradle Plugin makes a new release
though.
2022-06-16 15:35:16 -06:00
OxygenCobalt
f187900d0c
Version 2.4.0
Ready for version 2.4.0 of Auxio.
2022-06-16 15:07:44 -06:00
OxygenCobalt
30087b847a
music: fix incorrect dir migration
Fix an issue with the excluded -> music dir migration where the
starting separator would not be removed.
2022-06-16 12:16:01 -06:00
OxygenCobalt
46a5cf293a
info: update documentation
Update the general documentation for the app.
2022-06-16 11:57:00 -06:00
OxygenCobalt
49e3c51bb6
ui: fix rtl issues
Fix minor RTL issues across the app. Except for the controls. I have
zero idea how to fix that.
2022-06-16 11:00:17 -06:00
OxygenCobalt
668006724b
ui: make default accent dynamic on api 31
Make the default accent the dynamic accent on API 31.

This is to make Auxio's Material You support obvious to the user.
2022-06-15 20:09:23 -06:00
OxygenCobalt
e6f6d1ccf8
image: remove animated indicator
Remove the animated indicator, replacing it with a static one.

I wish I could have kept this, but once again android is a sh******ed
mess and makes it impossible to dynamically animate something depending
on the playing state. It will restart the animation, ignore calls to
stop, or just flat out now run the code path in the first place due to
race conditions.
2022-06-15 16:11:41 -06:00
OxygenCobalt
fb86b58a53
music: further separate backends
Further separate backend implementations to remove redundant tasks.

Generally, if I have not encountered an issue where a field is not
present/sane, I don't want to put in a "well, maybe" fallback, as
that would tank performance. Only do it when we need to.
2022-06-15 11:47:02 -06:00
OxygenCobalt
90976e318d
util: add reflection utilities
Add lazyReflectedMethod and lazyReflectedField, utility methods that
make handling reflection a bit easier.

This is mostly a readability change.
2022-06-15 11:24:47 -06:00
OxygenCobalt
3d8d2e0975
all: update logging
Improve logging use across the app.
2022-06-15 11:06:10 -06:00
OxygenCobalt
2f85d694d1
ui: remove actionmenu for menufragment
Introduce MenuFragment in order to replace ActionMenu.

ActionMenu was a terrible class filled with hacks. Introduce a new
fragment called MenuFragment that enables the same features, plus:
1. Requiring consumers the specify the menu, which prevents issues
from one-size-fits-all menus (unless absolutely necessary)
2. Fixing an issue where multiple menus appear at once
2022-06-15 10:05:08 -06:00
OxygenCobalt
5d1eaf72dd
detail: add queue actions to artist/genre
Add play next/add to queue actions to artists and genres, as the queue
system now makes their UX reasonable.
2022-06-14 17:40:33 -06:00
OxygenCobalt
8adf5e978d
music: dont make path parsing redundant
Don't do API 21 path parsing on API 29.

There's no need yet, so it's better to skip the step and make the
loading process more efficient.
2022-06-14 13:33:10 -06:00
OxygenCobalt
6fc4d46de5
music: switch excluded system to storagevolume
Switch the excluded directory system to StorageVolume.

This finally removes dependence on the in-house Volume constructs, and
also completely extends fully music folder selection support to all
versions that Auxio supports.

This is possibly one of the most invasive and risky reworks I have done
with Auxio's music loader, but it's also somewhat exciting, as no other
music player I know of handles Volumes like I do.
2022-06-14 10:12:05 -06:00
OxygenCobalt
ab1ff416e1
music: use storage volume
Leverage StorageVolume when working with file paths.

StorageVolume is android's navive API for handling external volumes.
Ideally, we would want to replace our built-in volume class with this
new API, however doing so is somewhat complicated as some methods only
exist on newer API levels. This is only the first step until we are
able to migrate the excluded directory system to this as well.
2022-06-13 14:36:13 -06:00
OxygenCobalt
107f7bee27
all: add viewmodel contexts where useful
Make some ViewModel instances AndroidViewModels in order to make some
code less insane.

I don't like doing this, as I want to keep ViewModel instances clean of
android things, but this just makes a lot of functionality easier to
implement.
2022-06-13 12:07:34 -06:00
OxygenCobalt
543a3ebffb
ui: fix toolbar state not persisting
Fix an issue where the collapsing toolbar would not preserve it's state
when navigating.

Apparently you need to add an ID to a view to get it's state to be
restored. There is no warning for this at all. Android, everyone.
2022-06-13 10:40:28 -06:00
OxygenCobalt
e914da4bd1
music: default to codecs in format
Only show codecs in the "format" field, if we are able to extract them.

This is primarily for consistency, as there is no way for us to
determine the container format outside of an extension (which could not
be sane).
2022-06-13 09:41:52 -06:00
OxygenCobalt
cb8c3306eb
all: minor cleanup
Do some minor housecleaning across the app.
2022-06-12 21:02:15 -06:00
OxygenCobalt
ad87c72cd6
image: fix error on api 21
Fix an API 21-specific bug that could result in covers not loading when
quality covers was enabled.

This stemmed from a use of `use` on MediaMetadataRetriever, which
relied on an interface not present on the class on API 21.
2022-06-12 17:31:22 -06:00
OxygenCobalt
9b13b4c94e
music: revamp excluded into music dirs
Completely rework the excluded directory system into a new
"Music Folders" system.

This is implemented alongside a new "Include" mode. This mode
allows the user to restrict music indexing to a parsicular folder.
I've been reluctant to add this feature, as having two separate
options seemed bad. This resolves it by effectively packing whether
to include/exclude directories into a single option.

Resolves #154.
2022-06-12 15:55:25 -06:00
OxygenCobalt
53f3d0faef
playback: add song menu to panel
Add a non-queue version of the song menu to the playback panel.

While the original UI flow of clicking on each TextView to navigate
to a particular item is still present, this simply makes the action
more clear to a first-time user.
2022-06-12 12:03:29 -06:00
OxygenCobalt
5f0518d983
detail: heavily improve format handling
Heavily improve the way Auxio handles shows formats in the song
properties view.

This is composed of the following:
- Using ExoPlayer to find a format-specific mime type before having to
fall back to other solutions
- Keeping around the format and extension mime types so that each is
picked in the best circumstances
- Using MediaFormat to also retrieve a format-specific mime type in the
case that ExoPlayer parsing is disabled
- Adding special names for the most common formats
2022-06-12 11:47:49 -06:00
OxygenCobalt
8e56459f8b
ui: fix auxio icon on api 21
Remove scientific notation from the auxio icon, allowing me to
reintroduce it to the notification icon.

API 21 does not support scientific notation in vector drawables, so we
need to remove them from the icon for it to not crash the system ui.
2022-06-12 09:35:23 -06:00
OxygenCobalt
5d124ce771
ui: use scroll indicators
Use basic scroll indicators when a dialog shows a list.

Mostly for material guidelines. Excluded dialogs and int pref dialog
have not been modified, as I am still working on revamping those.
2022-06-12 09:31:59 -06:00
OxygenCobalt
eba9945f59
Merge branch 'dev' of github.com:ktutsch/Auxio into ktutsch-dev
Update German Translations.
2022-06-11 16:36:36 -06:00
OxygenCobalt
483d26d155
settings: make rounded covers independent
Make it so that the rounded covers option is not dependent on the show
covers option.

Rounded covers has no relation to whether to show covers (at least not
anymore with the new cover style), so it makes no sense to disable it
when show covers is turned off.

Resolves #152.
2022-06-11 16:31:23 -06:00
OxygenCobalt
47437c355d
music: eliminate odd songs with no size
Remove malformed songs that have a size of 0 bytes, but are still
present in MediaStore.

This issue only seems to occur when files are transferred via MTP, but
are not loaded due to storage issues.
2022-06-11 16:30:01 -06:00
OxygenCobalt
c95edfa28b
detail: complete song detail view
Complete a song detail view, shown when the "View properties" option in
the song menu is selected.

Resolves #144.
2022-06-11 16:25:46 -06:00
OxygenCobalt
7373451912
music: add support for file properties
Add support for file size, format, and parent directory values to the
MediaStore backend.

I hope that this handles API boundaries properly, especially regarding
path parsing. As a side-note, I have learned of a way to extend
external volume support to even earlier versions. Maybe.
2022-06-11 16:21:16 -06:00
OxygenCobalt
3f85678d99
detail: add framework for song details
Add the basic framework for a song detail view.
2022-06-11 13:29:06 -06:00
Konstantin Tutsch
1e8476b55c
Quality improvements for hectic German translations 2022-06-11 19:24:07 +02:00
OxygenCobalt
277e5a151f
playback: use more efficient no-op w/replaygain
When ReplayGain is not needed, use ByteBuffer.put in favor of a for
loop when doing a simple copy.

ByteBuffer.put is highly optimized and far more efficient than a for
loop.
2022-06-11 09:27:55 -06:00
OxygenCobalt
d42f5970f1
image: fix indicator <api 22
Redo the paths and remove scientific notation from the indicator to
make it work below API 22.

The fact that studio does not have a built-in vector editor of any
kind that properly handles the edge-cases is shameful.
2022-06-10 15:45:00 -06:00
OxygenCobalt
d80c49f11f
image: add image group
Add a new view called ImageGroup that will handle all advanced image
hacks from now on.

This includes the indicator (which is now animated), any selection
indicators, and the weirdness of the album song image. All of that
is now handled by ImageGroup. This is the culmination of probably
a day and a half of wrangling with android insanity and having to
remove a lot of what I liked about the indicator in order to make
this work on a basic level.

The only major bug I am currently aware of with this is that the
indicator is bugged out on Lollipop devices due to bad vectors.
Again.

I never want to do this again. I cannot believe that adding a basic
indicator took this long and required so much stupid hacks and
inefficient code. And then google wonders why android apps are so
visually unappealing and janky and laggy. Hm. Must be that devs aren't
using the brand new FooBarBlasterFlow library!
2022-06-10 11:57:50 -06:00
OxygenCobalt
ffe7298665
ui: add image playing indicator
Add a playing indicator to cover art.

This is simply to improve the general aestethics of this view. Of
course, the current way I implement this is incredibly stupid and I
plan to replace it.
2022-06-10 09:48:51 -06:00
OxygenCobalt
1d66907862
ui: remove edge-to-edge option
Remove the edge-to-edge option, as it turned out to be useless
with #149.
2022-06-09 17:03:38 -06:00
OxygenCobalt
84295dcf25
ui: completely rework icon management
Completely rework the way Auxio handles icons.

This is mostly two changes:
1. Removing ImageButton/StyledImageButton for MaterialButton. This is
done by abusing MaterialButton's theming options to make it only show
an icon.
2. Standardizing icon sizes into small, medium, and large categories.
Small is the default, Medium and Large are for edge-cases like the
playback icons which look horrible at 24dp.
3. Abusing the Toolbar to make it follow Material 3 guidelines. This
mostly involved removing the strange icon sizing and correctly padding
the view.
4. Reworking the playback bar to use more, smaller icons, making it
more like a Toolbar in the process (which I like).
2022-06-09 10:12:48 -06:00
OxygenCobalt
a56d5849db
ui: update bar styles
Update the styles of LinearProgressIndicator and Slider to be similar
across the entirety of the app.
2022-06-08 09:59:28 -06:00
OxygenCobalt
6f625da125
ui: supply view to windowinsetdcompat calls
Supply a view to WindowInsetsCompat.toWindowInsetsCompat through all
calls in the app.

This does nothing, but it would resolve future bugs if I were to use
the most exotic window inset types.
2022-06-08 09:48:14 -06:00
OxygenCobalt
7d4b953019
playback: pick larger inset out of bar/gesture
On the playback par, pick the larger inset out of the system bar
insets or system gesture insets.

This is to fix an issue where android just does not provide correct
gesture insets on Android 12L, and [maybe???] fix what is going on
in #149.
2022-06-08 09:33:14 -06:00
OxygenCobalt
a6c321cfa5
home: make toolbar collapse
Make the home toolbar collapse on scroll.

I was planning to implement this back in 2.0.0, but visual bugs stopped
me. Now, knowing how much space the the Toolbar + Tab combination takes
up on smaller devices, I think it would be better to have this in
general.
2022-06-08 09:31:57 -06:00
OxygenCobalt
cc2561f20f
ui: rework primitive backing data into sync
Rework PrimitiveBackingData into SyncBackingData.

Google says that you should not use DiffUtil on the main thread, as it
is far too slow. In practice, the time it takes to diff is negligable,
even more so when costly diffs are filled in with a replace call
instead. Not only that, but switching to a synced list differ fixees
the horrible nightmare that is the queue adapter. Generally a win-win
for most use-cases in Auxio.
2022-06-07 20:03:02 -06:00
OxygenCobalt
f85f366144
ui: change adapter animations
Rework the submitList animation to be less resource intensive and nicer
looking (at the cost of scroll positioning)

notifyDatasetChanged is slow and has no animation, but list diffing is
chaotic and basically useless outside of search. However, clearing the
adapter and then populating it with new items seems to work quite well,
albeit with the scroll position being lost sadly. Switch to that.
2022-06-07 19:14:54 -06:00
OxygenCobalt
d15055cc29
music: improve exoplayer tag management
Extend the range of tags Auxio is capable of recognizing, removing some
edge-cases in the process.

This is mostly three changes:
1. Auxio no longer tolerates tracks/discs/years that are 0. These are
usually never valid.
2. Auxio now has support for original date/year values. This are niche
tags, but I was inspired to implement it by this HN discussion at
https://news.ycombinator.com/item?id=31659799 simply because it
differentiates Auxio.
3. Auxio can handle the more esoteric tag variations in vorbis, such
as "YEAR" or "ALBUM ARTIST".
2022-06-07 17:50:11 -06:00
OxygenCobalt
c929357d76
ui: add edge-to-edge toggle
Add a toggle for edge-to-edge mode.

Normally we would want to enable edge-to-edge by default (in fact, we
still do). However, some phones (once again, samsung) don't provide
Auxio with actual window insets. As a result, we need to add a toggle
so that it can be disabled on busted devices.

Did you know that even when Auxio has it's edge-to-edge functionality
busted, Samsung Music works just fine? Very interesting.

Resolves #149.
2022-06-07 17:14:02 -06:00
OxygenCobalt
bd683ca09a
ui: use compat edge-to-edge
Use androidx compat tools when setting up edge-to-edge and applying
window insets.

This is mostly a readability tweak ahead of making edge-to-edge a
setting.
2022-06-07 13:41:13 -06:00
OxygenCobalt
1482333adc
music: remove version-specific display name hacks
Remove the version-specific display name hacks added previously.

Turns out RELATIVE_PATH only includes the directory structure. Oh.
Since this invalidates the purpose of version-specific display name
hacks, we just remove it.
2022-06-07 10:02:20 -06:00
OxygenCobalt
a6599eec2a
music: do not use future callback with exoplayer
Do not add a callback to a MetadataRetriever call in ExoPlayerBackend.

This fixes an issue where if an error occurs while a future completes,
the app will crash entirely. This is because Futures run on a different
Executor and thus exceptions will not bubble up to Indexer.
2022-06-07 10:01:13 -06:00
OxygenCobalt
8d7aa7936b
detail: respond to automatic rescanning
Make the detail UIs respond to automatic rescanning events.

This currently has no effect, but is instead a preparation step for the
seamless addition of automatic rescanning.
2022-06-06 20:05:12 -06:00
OxygenCobalt
0a18883a6a
music: replace loading with indexing
Replace all in-code instances of music loading with music indexing,
primarily for clarity.
2022-06-05 19:30:45 -06:00