Commit graph

131 commits

Author SHA1 Message Date
Alexander Capehart
c9b1ab9068
all: reformat xml 2023-12-23 20:01:20 -07:00
Alexander Capehart
3908400418
playback: use playsong settings
Use PlaySong modeling within settings too. This largely completes the
PlaySong refactor and fully adds the ability to play songs by
themselves as an option.

Resolves #424.
2023-07-11 11:58:05 -06:00
Alexander Capehart
903a3e561a
image: add option to restore 1:1 crop behavior
Add an option to restore the old 1:1 crop behavior to the app.

Some people think this looks better, some people like to have youtube
thumbnails in their APICs. Can't really be opinionated here.
2023-06-20 17:25:37 -06:00
Alexander Capehart
96874b3324
music: do not transfer cache db
Do not transfer the cache db between devices, drop it instead.

This is at best useless (timestamps and ids will be invalid) and at
worst actively detrimental (timestamps and ids are similar), so
better to reindex than try to read from the cache.

Resolves #467.
2023-06-07 09:43:17 -06:00
Alexander Capehart
6fc8a64677
music: move sort name number handling to setting
Make the numeric sort name handling added prior dependent on a new
"Intelligent Sorting" setting that also controls the article checks.

This kind of behavior might not be desirable in all cases, and it makes
the setting more consistent anyway.
2023-03-24 08:26:33 -06:00
Alexander Capehart
45fe36bd09
music: add option to disable article sort names
Add a setting to remove hard-coded sort names based on articles.

This feature is nice, but does not work with some non-english music.
Those individuals should have the ability to disable it.

The implementation honestly is not the greatest, primarily because it
does a 100% reload when it could just regenerate the library. Auxio's
current music model isn't really designed for that, so it will do this
until a need to that kind of "soft reload" really arises.

Resolves #359.
2023-02-20 18:34:01 -07:00
Alexander Capehart
90843918d6
settings: use manual nav graph
Manually use our own navigation graph in the new settings view.

This avoids a crash that occurs with the default preferences navigation
(on some devices) where the differing app IDs between debug and release
makes it so that the fragments cannot be found. Because you know.
Android.
2023-01-20 18:38:10 -07:00
Alexander Capehart
9e1f6af21e
list: switch to header divider
Switch to item decorations to manage header dividers.

This is much more reliable than encoding it in-data. Only cost comes in
that it forces me to backport yet another component since I still can't
update MDC after over half a year.
2023-01-17 14:37:33 -07:00
Alexander Capehart
fb93b82b2b
ui: redesign headers
Redesign the header component to be more aligned with M3 guidelines.

This includes moving the divider to the top when reasonable, using a
smaller font size, and using a tinted coloration to separate itself
from the list contents.
2023-01-16 19:35:16 -07:00
Alexander Capehart
4a7bc4e511
settings: split up ui
Split up the settings ui into four categories.

This should reduce the visual load on the user as Auxio continues to
accrue possible configuration options.

Resolves #323.
2023-01-16 16:14:51 -07:00
Alexander Capehart
ac9f50c0a0
settings: do not use sharedpreference listener
Switch back to using settings-specific listeners rather than the
SharedPreference listener.

Again, this is due to the need to decouple android code from settings.
It also allows us to fully obscure the details of what settings we are
actually working with.
2023-01-06 19:20:56 -07:00
Alexander Capehart
200a3dfeaf
appwidget: redocument
Redocument the appwidget (formerly widget) module.

This commit also re-architectures the module somewhat to make further
extension easier later on.
2022-12-23 22:07:10 -07:00
Alexander Capehart
78523021fd
all: reformat code
Periodic reformatting.
2022-12-06 19:27:49 -07:00
Alexander Capehart
d9a5920fee
music: add rescan option
Add an option to "rescan" the music library (i.e load without the cache).

If there are issues with the cache, this can be used instead.
2022-11-15 08:44:14 -07:00
Alexander Capehart
9debe06029
widgets: add min resize width
Add a minimum resize width to widgets to maybe stop widget size limits
from being forgotten at random.
2022-10-26 21:03:07 -06:00
Alexander Capehart
1cf1451aef
music: add setting to hide collaborators
Add a setting to hide "collaborators", that is artists that do not show
up on any album artist tags.

This is mostly for my own use since I don't get use from useless
collaborator entries.
2022-10-20 18:36:51 -06:00
Alexander Capehart
5e0f778daf
image: unify cover settings
Unify the "Show Covers" and "Ignore MediaStore Covers" settings under an
new "Album covers" setting.

This will make it easier to extend to new forms of album cover
collection.
2022-09-26 13:47:43 -06:00
Alexander Capehart
35e402b6b4
playback: unify notif and bar actions
Unify notif and bar actions under a new "ActionMode" enum.

This just makes things consistent.
2022-09-26 13:22:34 -06:00
Alexander Capehart
7a055680bd
all: fix misc issues
Fix miscellanious issues that I've encountered.
2022-09-26 12:07:12 -06:00
Alexander Capehart
f3c14b81cb
all: tweak package structure
Try to tweak the package structure to be more coherent.
2022-09-25 20:24:19 -06:00
Alexander Capehart
66b9da0d5e
music: add toggle to load non-music
Add a toggle to control the IS_MUSIC=1 selector.

This is normally used to remove non-music like podcasts and ringtones,
however some people use Auxio was a general-purpose audio player for
these files, so this setting can be used to disable that selector and
load non-music.

Resolves #246.
2022-09-24 16:11:25 -06:00
Alexander Capehart
adf85a8fab
settings: enable theme customization on >31
Enable theme customization on API 31.

Some people prefer some themes over others, so enable it. Not like it
increases complexity.

Resolves #243.
2022-09-24 15:37:37 -06:00
Alexander Capehart
62ee46cfe6
music: add multi-artist support
Add semi-complete support for multiple artists.

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

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

Resolves #195.
2022-09-23 10:15:28 -06:00
Alexander Capehart
2aa540c29a
ui: make setting dialogs
Make the setting dialogs navigation destinations.

This reduces the boilerplate required for dialogs.
2022-09-14 18:54:07 -06:00
Alexander Capehart
780e0dce06
music: add separator setting dialog
Add a dialog for the new separators setting.
2022-09-13 11:07:44 -06:00
Alexander Capehart
28d28287fe
music: refactor backends into extractors
Refactor all Backend instances into a new package called extractor and
a new structure called "Layer".

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

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

This changeset also phases out the "Ignore MediaStore tags" setting, as
it is no longer needed.
2022-09-08 20:41:08 -06:00
Alexander Capehart
47a26df92d
ui: update shots
Update the screenshots and feature graphic to reflect app changes.
2022-09-03 12:36:05 -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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3f85678d99
detail: add framework for song details
Add the basic framework for a song detail view.
2022-06-11 13:29:06 -06:00