Refactor all Backend instances into a new package called extractor and
a new structure called "Layer".
Layers are no longer generalized into an interface. Instead, they build
on eachother in order to produce a correct output of raw songs.
One of these layers is a stub class to eventually implement caching.
This changeset also phases out the "Ignore MediaStore tags" setting, as
it is no longer needed.
Add a basic framework for user-customizeable separators.
This is designed to be extendable if needed, albeit the app will likely
only let the user choose between +, ;, /, &, and ,.
Completely rework the ID system to pave the way to MusicBrainz ID
support and greatly increase ID integrity in general.
This changeset removes the old ID field, an emulation of a polynomial
hash that was used in all items, and replaces it with a new type called
UID that is specific to Music. Other types just use plain equals now,
and most instances of "id" to check for equality in the app have either
been inlined into an equals override or removed outright.
The new UID format is as follows:
datatype/format:uuid
Datatype is a tag that is just the lowercase tag name. For example,
"song". Format is the program that created the UID. auxio will be an
md5 hash, and musicbrainz will the a musicbrainz ID extracted from a
file. UUID is the uuid itself.
This is much more reliable and extendable than the old ID format. This
will also be the last time I break compat with old ID formats. From now
on, a legacy UID field will not be included to enable backwards compat,
when the time comes for a breaking change.
Make the playing indicator animate when playback is ongoing.
Previously state issues stopped me from doing this, but apparently this
time I miraculously got it working. Yay.
Resolves#218.
Revert the song menu in the playback panel to being in the toolbar.
It was mostly inconsistent and cause a lot of truncation. I'll figure
out what I want to do when I implement liked songs.
Add a fast scroller to the queue view.
This is actually easy to implement without disruption. Now the detail
view is the only view without such a fast scroller, as it needs more
reworks for it to be feasible.
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.
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.
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.
* 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>
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.
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.
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.
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.
* 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>
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.
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.
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.
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.
Remove EdgeCoordinatorLayout in favor of using fitsSystemWindows when
needed.
EdgeCoordinatorLayout was derived from a misunderstanding about how
window insets worked. Remove it.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
* 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>
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.
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.
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.