Commit graph

1416 commits

Author SHA1 Message Date
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
d4fb27fafb
info: add weblate
Add a link to Weblate in the README, and bring it up in the FAQ.

Using weblate should make translations much easier. It's not fully
ready yet, and this is mostly a preliminary measure so I can apply
for the FOSS weblate.
2022-06-16 16:43:16 -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
48e6868f39
Merge branch 'ktutsch-dev' into dev
Update German translations.
2022-06-11 16:37:25 -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