Commit graph

452 commits

Author SHA1 Message Date
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
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
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
OxygenCobalt
a65d37c421
all: switch to stateflow
Switch from LiveData to StateFlow.

While LiveData is a pretty good data storage/observer mechanism, it has
a few flaws:
- Values are always nullable in LiveData, even if you make them
non-null.
- LiveData can only be mutated on Dispatchers.Main, which frustrates
possible additions like a more fine-grained music status system.
- LiveData's perks are exclusive to ViewModels, which made coupling
with shared objects somewhat cumbersome.

StateFlow solves all of these by being a native coroutine solution with
proper android bindings. Use it instead.
2022-06-01 11:46:00 -06:00
OxygenCobalt
caaeaca494
home: rework loading screen
Move the loading screen into the home view.

Previously, we would use a Snackbar to track the music loading state.
This ended up being a pretty stupid and buggy idea, and would get even
worse with the new music loader changes. Instead, we re-implement the
loading screen into the home view to generally be more sane and
extendable compared to previously.
2022-05-29 20:07:07 -06:00
OxygenCobalt
c6d7d8fe39
playback: implement "safe" slider wrapper
Implement a safe slider wrapper that does not crash with invalid values
as often.

Slider is a terrible component that is not designed with Auxio's
use-case in the slightest. Instead of gracefully degrading with invalid
values, it just crashes the entire app, which is horrible for UX.

Since SeekBar is a useless buggy version-specific sh******ed mess too,
we have no choice but to wrap Slider in a safe view layout that
hopefully hacks with the input enough to not crash the app when doing
simple seeking actions.

I hate android so much.

Resolves #140.
2022-05-27 14:34:14 -06:00
OxygenCobalt
ae62572760
strings: update german translations
Update german translations for the strings I can translate at least
okay.
2022-05-25 13:20:50 -06:00
OxygenCobalt
444e4299d6
widgets: revert most widget changes
Revert the introduction of the thin/tiny widgets, but keep the new
cover layout I created while working on them.

There is simply no way I can cram controls and metadata within the
size bucket that the thin widget occupies. I have decided to give up
and revert the widget to it's old form.

I understand why the thin widget is not appealing. However, the sizing
at which a widget can properly accomodate a taller widget is just too
precise and not really large enough to justify it's existance.
2022-05-25 11:03:59 -06:00
OxygenCobalt
b320f4b1bd
widgets: add thin widget
Rework the smallest widgets to have no textual metadata, alongside
adding a new widget size class.

Turns out the last tiny widget redesign made the controls far too
small. Instead, remove the textual metadata and make these widgets
more akin to the small and wide widgets. This also introduces a new
side class alongside that with more controls, again to make it
similar to the other size classes.
2022-05-24 17:12:48 -06:00
OxygenCobalt
e1e032d254
ui: re-add accent customization >api 31
Re-add accent customization on Android 12 and above.

Previously, I disabled accent customization since I thought they were
more or less useless with the new Material You dynamic colors system.
Turns out I severely underestimated how horribly OEMs would botch the
dynamic colors system. Guess I was blinded by my adherence to the pixel
line. Re-add the accent customization for those who do not have a good
dynamic color palette at all.

Resolves #131.
2022-05-24 12:52:09 -06:00
OxygenCobalt
eb293022e8
widgets: rework tiny widget
Rework the tiny widget to cram even more information into it.

The tiny widget is nominally meant for edge cases like exceptionally
small screens or landscape mode, but apparently it's triggered on some
devices in normal use because of platform fragmentation and OEM insanity.

Update the tiny widget layout with some new buttons in order to make it
more usable in mnormal use. This is still nowehre near ideal. For
example, when triggering the layout on my device, it ends up squishing
the buttons. But it should probably work better outside of those edge
cases.
2022-05-24 10:08:12 -06:00
OxygenCobalt
485c35d74c
all: hack around more lollipop issues
Hack around more insane lollipop bugs, such as:

- The angular auxio icon crashing the system UI
- Optimized icons being corrupted
- Setting image alpha not working properly

I really wish I could drop support for this horrible version, but I
either have to wait for a major library to drop support or for the
usage numbers to reach 1%.
2022-05-22 17:12:49 -06:00
OxygenCobalt
2c7dd1241b
style: remove android string references
Remove references to android system strings, in favor of in-house
translations.

Previously Auxio would use the `android.R.string.ok` and
`android.R.string.cancel` strings to represent Ok and Cancel
respectively, but these system strings are actually untranslated on
some devices, so it is better for i18n if we use our own strings
for such.
2022-05-22 09:56:25 -06:00
OxygenCobalt
21fccf1f31
playback: add pre-amp customization
Implement a UI frontend for customizing the ReplayGain pre-amp value.

This finally completes Auxio's ReplayGain implementation. Not only
that, it also shows how Auxio can use positive ReplayGain values,
unlike other apps.

As a side-note, this also fiddles with the dialog style somewhat.
I got carried away.

Resolves #114.
2022-05-22 09:32:23 -06:00
OxygenCobalt
2d7dbd19cd
ui: rework custom ui components
Refactor the package structure and implementation of custom UI
components.
2022-05-21 14:52:08 -06:00
OxygenCobalt
28cedd1240
music: attempt to handle bad DISPLAY_NAME [#120]
Add recovery code to the music indexer in the case that Android doesn't
provide the DISPLAY_NAME field.

Nominally this should never happen, but OEMs will OEM and apparently
this does happen on some devices. Try to recover by grokking DATA for
a file name.
2022-05-19 17:37:19 -06:00
OxygenCobalt
6f2a0d66c6
detail: add framework for disc number items
Add the UI and data components for a disc number value within the album
detail view.

This is the first-step of a multi-step addition to finally implement
disc numbers.
2022-05-18 17:30:50 -06:00
OxygenCobalt
1a9e55e73b
about: add full library statistics
Split off the "songs loaded" about item into it's own card called
"library statistics"

This card includes the song, album, artist, and genre counts,
alongside a total duration of the music library. This is just more
informative and useful to the user.

Resolves #121.
2022-05-04 20:20:47 -06:00
OxygenCobalt
8e849feb7d
playback: rename loopmode to repeatmode
Rename LoopMode to RepeatMode, which is generally much clearer
than the previous name.

This changes all non-breaking instances of "loop" in the app with
"repeat".
2022-04-29 14:52:33 -06:00
OxygenCobalt
ab194c14c2
ui: create viewmodel for navigation
Create a ViewModel for the more complicated navigation pathways.

Normally, navigation was fragmented along a complicated stretch of
fragment hacks and DetailViewModel's navToItem attitbute, both of which
were not really that ideal. Dumpster them for a single, unified
viewmodel for the more complicated navigation situations. This removes
much of the duplicate navigation logic and is likely much more
maintainable for future situations.
2022-04-02 20:21:06 -06:00
OxygenCobalt
74f5962844
ui: rework cover style
Rework the style of all album covers in the app to be more in line with
the new track number style.

This is mostly comprised of adding a new background to all cover views
and rescaling error icons to be smaller than they would normally be.
This also includes a change in the cover/track background color from
colorSurfaceVariant to colorOnSurfaceInverse, which seems to provide
the best visibility in all cases.

These changes also apply to the track number views.
2022-04-02 18:18:10 -06:00
OxygenCobalt
e387e72b2c
detail: update album song layout
Update the album song layout to be more alike to other songs.

Recently I migrated the TextView in the album songs to use 48dp sizing,
like the other song views. However, this resulted in a lot of empty
space that felt off. Fix this by adding a light background to the track
number, which fills the room it takes up a bit more. It also hopefully
primes the track number to take an indicator once multi-select is
added.
2022-03-29 20:08:57 -06:00
OxygenCobalt
b748d73abb
playback: rework audio focus
Rework audio focus to rely on the native ExoPlayer implementation
instead of a custom implementation.

Previously, we avoided ExoPlayer's AudioFocus system as it never
played after a transient lost. A few versions later now through,
now it does, so we may as well switch to it. This does introduce
a bug where ReplayGain functionality will conflict with audio
focus, but I hope to eliminate this with #115 as I switch to
an AudioProcessor instead of a callback.
2022-03-27 11:51:58 -06:00
OxygenCobalt
ee1a234e76
ui: rework base adapter class
Completely rework the base adapter class to require less boilerplate
and properly handle cases such as diffing. The major adapters have
been migrated to this system, but the other adapters have not been
changed so far.

This is only part 1 of a multi-part rework, as this is an incredibly
complex system.
2022-03-26 10:16:36 -06:00
OxygenCobalt
595a982d59
all: cleanup
Clean up the project after the previous changes and update some
dependencies.
2022-03-23 12:27:49 -06:00
OxygenCobalt
d79592e029
all: remove databinding
Remove databinding entirely.

Databinding was a terrible idea for Auxio. I rarely leveraged it, and
when I did, it produced messy code and bloated build times. Dumpster it
for just viewbinding, which is good. This reduces building times by
nearly 2/3, and generally makes the codebase more coherent and usable.
2022-03-23 10:59:01 -06:00
OxygenCobalt
95057ec357
all: move all fragments to ViewBindingFragment
Move all fragment instances to the new ViewBindingFragment paradigm,
which should help immensely with reducing memory leaks from list
bindings and to really alleviate the overloaded onCreate functions.
2022-03-23 09:18:08 -06:00
OxygenCobalt
8f38ed6ee5
playback: rework view implementations
Rework the playback views to follow the new idioms I want to use for
Auxio.

This change mostly consists of flattening away some of the custom
views, removing databinding, and using a general viewbinding
fragment that I hope to extend to the entire app.
2022-03-21 20:15:42 -06:00
OxygenCobalt
e4d4266e35
playback: rework playback slide up implementation
Rework the playback slide up implementation to be more straightfoward.

This is really composed of stylistic improvements, very little in
actual behavior changes. This does re-introduce a regression when
nothing is playing where the scroll position will become off when
rotating, but that desynchronization happens often so unless I were
to completely migrate both the panel and the bar to a view, I don't
really see it as an issue.
2022-03-20 12:33:49 -06:00
OxygenCobalt
0417a77b33
music: make resolvedName standard
Make resolvedName the standard name to use across all music items.

Previously, the way Auxio differentiated between names in UIs was to
use name for normal items and resolvedName for parents. This was odd
and disjointed, as it muddled the meanings of the two fields and lead
to a lot of bugs. Fix this by making resolvedName *the* standard name
to use across all music items, even in ones that don't have to resolve
their name.
2022-03-13 20:22:19 -06:00
OxygenCobalt
2ff7d93263
all: view cleanup
Do even more cleanup regarding views.
2022-03-13 18:56:24 -06:00
OxygenCobalt
1b791074ec
playback: replace headset focus with headset autoplay
Turn the headset focus setting into the headset autoplay setting.

The way auxio handles headsets is...odd. Sometimes the MediaSession
handles it and Auxio could not care less, and sometimes Auxio actually
needs to handle it. As a result, the idea of being able to disable
headset focus is more or less moot because it will only apply to some
devices and not others.

On the other end, the way Auxio automatically begins playback once a
headset is plugged in is also quite weird. It only works on wired
headsets, and when it does, it overrides all other apps that might
also be playing audio. It's not to say that it's a bad feature, but
it's also one that I don't want to make the defualt. Auxio should
still play along within the confines of Android's expectations, after
all.

Replacing the existing "Headset focus" setting with a new "Headset
autoplay" setting solves both of these issues, as it prevents a
mis-guided disabling of the setting that doesn't actually disable
the feature and it relegates the quirky autoplay behavior to an
setting not enabled by default.
2022-03-05 20:34:12 -07:00
OxygenCobalt
dbe0bd1bb3
ui: revert list item changes
Revert the removal of the song/artist values from list items for now.

The current plan of removing extraneous values from songs and albums
only works if I add multi-select and a dedicated menu button, but that
is still in the air, and in general I want feedback before I go ahead.
Aside from reverting the previous changes, this actually standardizes
all item descriptions under a single bullet point formatting system,
instead of the mix of commas and bullet points that existed beforehand.
2022-02-28 19:27:57 -07:00
OxygenCobalt
d7babcba71
ui: remove album name from song items
Remove the album name from the main song item in favor of a duration
value.

Auxio has traditionally used "Artist . Album" for song items. However,
this had some shortcomings:
1. The way the artist and album names are packed probably results in
truncation on small screens, which I doubt is very helpful.
2. All other items in Auxio have only one specific "subject" per line,
which makes the song items a bit of an outlier since it has two (the
artist and the album)
3. The empty space available could be used for another UI element,
such as a duration or maybe a menu button in the future.

For consistency, this also removes the song count from all album items
as well.
2022-02-25 08:12:26 -07:00
OxygenCobalt
61dbfe3185
coil: make rounded images more nuanced
Create a custom view for rounded images, making them more nuanced in
the process.

The previous method for applying rounded images in-app was generally
clunky and fragile. Introduce a new custom view that actually takes a
cornerRadius attribute from the ImageView itself that then applies it
whenever the user enables the setting. This also allows rounded images
to be more nuanced, as typical 8dp elevation can be used for small
views and a more fitting 16dp radius can be used for large views.
2022-02-23 17:42:34 -07:00
OxygenCobalt
280b582efa
home: rework fab adaptiveness
Rework how the fab's adaptive functionality works.

Handle fab adaptiveness by using a style instead of a fully custom
view. This helps eliminate a usage of private resources.
2022-02-23 16:13:59 -07:00
OxygenCobalt
87035805d2
ui: general cleanup
Clean up a bunch of UI issues that have accumulated.
2022-02-23 15:26:40 -07:00
OxygenCobalt
3aaa2ab0e0
all: rework logging
Rework logging to be clearer and more standardized.

Rework all usages of lossing to follow a single unified style,
introducing a new "warn" option alongside this.
2022-02-22 17:24:51 -07:00
OxygenCobalt
9304e58190
playback: rework playback icon visibility
Add a circular indicator to playback icons.

Sometimes it can be too difficult to tell apart the active and inactive
states of the shuffle/loop icons. However, there is really no good way
to improve the contrast on these icons without some kind of muddled UX
fragmentation, or god-awful design. Try to settle on the okay-est
version, which is to use colorPrimary with a dot indicator on views we
control, and use a more muddled semi-transparent icon on views we don't
control, like notifications and widgets.
2022-02-21 16:36:08 -07:00
OxygenCobalt
d4513293a7
all: cleanup
General app cleanup.
2022-02-18 19:03:25 -07:00
OxygenCobalt
ec358a13e3
style: apply body typography
Use body typography in more places, reworking the letter spacing as to
make it more pleasent to use with the inter typeface.

This should hopefully be the last time I fret over typography.
Everything should line up in the way desired by M3.
2022-02-13 15:39:34 -07:00
OxygenCobalt
f377e144dd
style: remove elevation from toolbars
Remove the elevation component from all toolbars and the bottom bar.

Material3 states that top and bottom app bars should not cast a drop
shadow. Auxio ignored this and used one anyway. This largely stemmed
from incorrect use of the AppBarLayout styles, which were mostly just
incorrect M2 styles with a new background plastered over. Fix this
by creating a new style that inherits the proper M3 styles and then
using that on all AppBarLayout instances in the app.
2022-02-10 17:34:03 -07:00
OxygenCobalt
f4217a337a
style: tweak body typography
Apply body typography in new places in the app.

For awhile, Body and Title typography were used interchangeably, as
they occupy the same text size range. This commit defines the Body
text as to be used for one-line widgets or tertiary widgets, while
the Title text is defined to be used for multi-line or heading widgets.
2022-02-08 06:23:43 -07:00
OxygenCobalt
470187422a
docs: add changelog
Add a CHANGELOG document that keeps track of the past and current
release notes.

Making all of our releases rely on GitHub to keep track of them is not
really a good idea, so this document serves as a record of past release
changelogs just as a pre-caution. It also allows a live preview of the
next version whenever something is changed.
2022-02-06 14:01:03 -07:00
OxygenCobalt
8e0d27696d
detail: improve track number handling
Improve the way track numbers are handled in the album detail view.

Previously, Auxio would show track numbers by simplying stringifying
the integer and then showing it in a TextView. This was problematic for
two reasons:
- Numerics from other languages like Arabic would not be respected
- Invalid track numbers [e.g 0] would be shown regardless of the
situation.

This commit fixes that by placing all track numbers through a format
string first, and showing a generic song icon instead of a number
whenever the track number is 0.
2022-02-06 11:19:50 -07:00
OxygenCobalt
0209e526e1
all: general cleanup
Do some general code cleanup.
2022-02-06 09:01:51 -07:00
OxygenCobalt
50a2305f63
music: respect individual artist names [#66]
Modify the music loader to use the normal artist name when using song
titles while still retaining album artist functionality.

Oftentimes music files will be tagged as to use the artist tag to
specify performers, collaborators, and others, and then use the album
artist tag to group them up into a single artist. Previously, Auxio
would only use the album artist tag, which flattened the collaborator
information out for consistency. Resolve this by implementing a sort
of "resolved artist name" for songs that is used in the UI and nowhere
else. This seems to work well, but at the same time further ruins the
API surface for handling music objects. An acceptable price to pay
for a better UX.
2022-01-30 16:46:11 -07:00
OxygenCobalt
50f6f8f348
style: migrate body type to roboto
Migrate to the native roboto typeface on body elements.

Migrating to the native typeface saves on APK size, contributes to a
more native look and feel, and create a more compact UI for smaller
devices. Inter Semibold remains as the "Flair" type that distinguishes
Auxio from other apps.
2022-01-29 10:25:35 -07:00
OxygenCobalt
c9f789e388
revert "style: migrate to roboto"
I want to hold off with this migration actually. I feel like it's too
jarring of a change to be included as of right now.
This reverts commit 50170f202e.
2022-01-23 12:42:49 -07:00
OxygenCobalt
50170f202e
style: migrate to roboto
Dumpster Inter in favor of Roboto. This is mostly for three reasons:
1. Reduces the insane typography setup that Auxio uses
2. Reduces total app size since .ttf files are pretty large and the
dynamic fonts feature was proprietary.
3. Creates a more cohesive look and feel given that nearly every
android app also uses Roboto.
2022-01-23 10:17:47 -07:00
OxygenCobalt
049b279e1f
playback: add playing from indicator to fragment
Add the "Playing From" indicator that used be on the queue to the
main playback view.
2022-01-08 09:26:26 -07:00
OxygenCobalt
b92b08f8ab
home: make fab adaptive
Use a large FAB on tablet layouts, as in general it's okay to make
those elements bigger on large touchscreens.
2021-12-18 11:15:28 -07:00
OxygenCobalt
2d3fc47d7c
main: band-aid split screen mode layouts
Split screen layouts in android are completely borked. You can
resize Auxio down to the point where the UI is completely
unusable, and there is NO WAY TO SET A MINIMUM HEIGHT. This is
also not to mention that smallestScreenWidthDp is completely
busted too and still uses the size of the whole screen! Just
band-aid the first issue so that when the layout becomes so
small as to result in a messed up UI, just show a splash that
says that the app can't work at the specific window size.
2021-12-17 17:00:19 -07:00
OxygenCobalt
284108678b
detail: add layout for small screens
Add a layout for especially small screens so that they do not have to
scroll as much.
2021-12-17 14:32:14 -07:00
OxygenCobalt
8e1da1bfc7
home: make tabs adaptive
Make tabs on the home page adapt to screen configuration changes, using
only icons when the width is small and icons + text when the width
is large.
2021-12-17 14:32:14 -07:00
OxygenCobalt
949d71dbd1
playback: actually fix controls not working
Turns out playback controls wouldn't actually work because the view
would detach but not the actual fragment, resulting in onCreateView
never being called and the entire system falling apart. This fixes
it by just giving PlaybackLayout the viewmodel instance it needs.
I'll need to release a hotfix for this issue since this is really
easy the trigger and really hard to fix unless you know why it
occurs. Android lifecycles suck so much.
2021-11-26 10:17:46 -07:00
OxygenCobalt
ec8f538cf0
docs: update metadata
Update metadata in preperation for 2.0.0.
2021-11-26 08:56:09 -07:00
OxygenCobalt
2be49b0042
playback: remove playback subtitle
Remove the playback subtitle for now. I'm considering re-adding it
eventually, but I want to make it so that the UI is less cluttered.
2021-11-25 14:22:47 -07:00
OxygenCobalt
61624352e4
all: apply finishing touches
Apply the finishing touches for 2.0.0, mostly documentation but also
some odds and ends.
2021-11-25 12:02:10 -07:00
OxygenCobalt
2ae22500d3
main: add proper backwards navigation
Move the backwards navigation hook from DetailFragment to MainFragment
and modify it so that it collapses the playback panel when one navs
back.
2021-11-25 09:48:06 -07:00
OxygenCobalt
805035f0d8
playback: improve compact -> full transition
Improve the way the compact playback view transforms into the full
playback view by splitting their view animations in two. This makes
the transition more akin to the Android 12 notification menu, which
due to the nature of how I'm fading views really does make it more
user friendly. Also re-add the "Now Playing" title and a new subtitle
displaying the currently playing artist.
2021-11-25 09:04:22 -07:00
OxygenCobalt
4ccaa7c4bb
all: cleanup code
Clean up code and fits a bunch of miscellaneous issues.
2021-11-24 20:22:30 -07:00
OxygenCobalt
cfc7352571
playback: add slide up behavior
Completely refactor PlaybackBarLayout into PlaybackLayout, which now
not only handles the bar behavior but also allows for one to slide
up the bar layout into the full playback layout. This was largely
adapted from umano's AndroidSlidingUpPanel, albeit heavily minified
and mixed with the previous window inset tricks of the previous layout.
There are still some tweaks to be made, but this implementation seems
to be really good.
2021-11-24 15:13:34 -07:00
OxygenCobalt
06a7d8258b
sort: refactor sorting
Refactor sorting again to support free-floating ascending/descending
values on every single sort mode. This enables greater freedom in how
users can sort their music and allows me to finally get rid of the
old legacy sematic sorting modes that chose their ascending/decending
order depending on how they wanted it.
2021-11-21 15:45:20 -07:00
OxygenCobalt
e697908a2f
detail: update layouts
Update the detail layouts to work better on tablets and be more
consistent overall.
2021-11-20 17:03:21 -07:00
OxygenCobalt
4475d4a5cc
playback: update tablet layouts
Use proper exact-size layouts for the tablet views. This also adds a
new compact view that shows more controls for landscape/tablet layouts.
2021-11-20 10:44:40 -07:00
OxygenCobalt
58c2681f72
widget: change default size
Make the default widget size 3x2 again. This is because the UX is
generally nicer if the smaller widget is used as the default and
because the small widget is now no longer text-only and ugly.
2021-11-20 09:53:10 -07:00
OxygenCobalt
0e3ffb973b
coil: completely refactor image loading
Upgrade to coil 2.0.0 and completely refactor the usage of coil to work
with the new library structure. This also fixes the issue where error
icons will just re-appear due to blocking calls. I had to add a fix on
my end and also use the new caching system in coil 2.0.0.
2021-11-20 09:00:23 -07:00
OxygenCobalt
e3f4a6fefa
widgets: fix minor issues
Fix problems with weird margins in the small/wide widgets and change
the initial layout from widget_medium to widget_default.

The latter is nice, as it allows for more cohesion between the default
state and the "unhooked" state that's shown when the phone boots.
2021-11-16 16:48:40 -07:00
OxygenCobalt
1ea3ddb2e0
coil: update image behavior
Update the image behavior for the following:
1. Use ic_album as the default image for songs and albums this just
looks beter in general.
2. Use a special default drawable for the widget so that it doesn't
look as strange.
3. Generally update the loading process throughout the app
2021-11-14 16:23:25 -07:00
OxygenCobalt
d4fa52ee13
widget: make small/wide widgets stylistic
Update the small/wide widgets to show just the cover art and controls.
This is for two reasons:
1. The old layouts wasted space, which didn't make them look very good
2. I want to add a more Material3-eque "Stylistic" widget option for
the people who want them. Doing this allows me to pack that option into
the widget without having to add a new option.
2021-11-14 09:00:54 -07:00
OxygenCobalt
f66dea9469
accent: rename all light accents to deep accents
The way Material3 uses an initial light accent seeds is...odd. It more
closely resembles deep purple [darker on light mode, lighter on dark
mode] in behavior. Therefore we simply rename the light accents to
this. This does mess up translations a lot, but I'll fix it when I
update the rest of the translations.
2021-11-13 19:16:42 -07:00
OxygenCobalt
c30c0d7fb3
accent: simplify accents
Simplify the accent scheme:
- Light Blue was re-generated to be a weird darker-on-light-mode
lighter-on-dark-mode blue that looked really similar to how blue-grey
turned out. These have been merged into a new color scheme called
deep blue.
- Deep Orange and Red were too similar after being re-generated, so
they have been merged to become a simple red accent.
2021-11-13 16:00:41 -07:00
OxygenCobalt
43b12598fb
styles: redo accents
Recreate all accents AGAIN. This time it's to properly generate secondary
and tertiary colors for these. The results of them vary [some might be
removed since they're too similar to other accents now], but most are
fine and they allow me to properly use these components without inane
bugs.
2021-11-13 11:51:36 -07:00
OxygenCobalt
d732aea1d3
style: improve typography
Improve typography (again) by isolating my weird non-standard text
styles and moving all font usage to the text styles, which allows
me to eliminate a lot of excessive font usages.
2021-11-11 18:53:34 -07:00
OxygenCobalt
032fd2bd40
style: use material in playback view
Use Slider and FloatingActionbutton in the playback view. This is not
because I wanted to, but because there were insane bugs on Lollipop
devices that stemmed from them being unable to load complex selector
resources.
2021-11-11 16:25:56 -07:00
OxygenCobalt
67797d957e
all: cleanup code
Upgrade dependencies, fix deprecation issues, and just clean up code
in general.
2021-11-11 12:19:07 -07:00
OxygenCobalt
8f61d8479a
style: migrate to Material3 text styling
Migrate to 100% Material3 text styling. I had to basically ignore the
intended styling here just to get a sensible design here, which is
"bad" but I do what I want. The only usage of MaterialComponents left
in the project now is the dialog since the new dialog style the worst
thing ever.
2021-11-11 11:48:22 -07:00
OxygenCobalt
63198f8677
style: unify typography
Use Material typography everywhere instead of using a mix of AppCompat
and Material styles. This is still based around MaterialComponents
though, as I'm not fully sure how to wield the new Material3 text
styles yet. This also completely phases out inter bold.
2021-11-09 06:52:02 -07:00
OxygenCobalt
c5fcc45ee9
detail: show name when scrolling
Show the name of the currently shown detail item when scrolling. This
is just UI candy that I've always wanted to add but couldn't due to
CollapsingToolbarLayout being a mess. This addition circumvents that
by simply doing some reflection magic and hooking the alpha of the
toolbar title to the current scroll state, solving the issue.
2021-11-08 19:54:38 -07:00
OxygenCobalt
8b8d36cf22
playback: improve persistence
Improve playback persistence in the following ways:
1. Shift the boundary of PlaybackStateManager and PlaybackStateDatabase
so that the reading and searching phases both occur at the same time,
which is more efficient.
2. Improve music hashing so that conflicts are minimized [this also
helps the future playlists addition]
3. Generally improve code style
2021-11-04 06:58:43 -06:00
OxygenCobalt
bb5d163f49
home: make fab size fixed
Make the shuffle FAB in the home UI a fixed size so that I don't have
to update padding based off of the screen config.
2021-11-02 19:39:40 -06:00
OxygenCobalt
93cdae2295
playback: fix bad compact view spacing
Fix an issue where the constraints in the playback view were not
actually anchored to the playback bar, resulting in bad spacing.
2021-11-02 06:59:38 -06:00
OxygenCobalt
b50a23a47f
ui: fix misc issues
Fix miscellanious code style/compat/ui issues.
2021-10-31 16:06:00 -06:00
OxygenCobalt
7c1382db49
playback: add pre-R inset modification
Add the ability for PlaybackBarLayout to modify window insets on
android versions before R.
2021-10-31 14:05:16 -06:00
OxygenCobalt
c1e1329c21
playback: make compact playback ui a view
Change CompactPlaybackFragment into a View. This completely fixes the
issue I tried to band-aid in ae39054. The code is a bit uglier, but
that's tolerable.
2021-10-31 11:14:04 -06:00
OxygenCobalt
ae39054b63
playback: band-aid scroll position confusion
Band-aid an issue where the scroll position of any RecyclerView in a
PlaybackBarLayout would get consfused because while the main view was
present, the fragment was not inflated yet so that it would not show.
This is [kindof] fixed by moving the fragment instantiation to the
view initialization. However, sometimes the fragment might still not
be inflated. The fragment will likely be replaced with a view
eventually.
2021-10-31 10:03:52 -06:00
OxygenCobalt
e779698746
home: remove appbar collapse behavior
Remove the appbar collapse behavior. It's just causing too much bugs
and phones are so big now that the lost space really doesn't matter.
2021-10-30 18:31:57 -06:00
OxygenCobalt
68782fadac
ui: create dedicated playback bar layout
Create a dedicated playback bar layout. This replaces the old janky
observer system with something that handles state better and is just
more elegant.
2021-10-30 18:21:30 -06:00
OxygenCobalt
4f4f6654c0
widgets: re-add 2x2 widgets
Re-add 2x2 widgets. They were originally removed due to strange layouts
in landscape mode, but that has now been fixed with a new "tiny" layout
meant for that specific edge case. Also rename the widget forms to more
sensible names and make the small (previously minimal) widget be
text-only again.
2021-10-28 19:46:00 -06:00
OxygenCobalt
df49e2765f
music: refactor model usage
Refactor the way music models are constructed to achieve the following:
- Add a unified interface for resolving display names of artists
- Disambiguate the role of Header in the music objects
- Eliminate the need to load strings in with a context when creating
Header instances
2021-10-28 19:09:54 -06:00
OxygenCobalt
255154c411
home: remove fab scrolling behavior
Remove the ability for the FAB to disappear on scroll, mostly because
the state would not be consistent and it was generally bad UX when
combined with the fast scroller.
2021-10-25 16:38:37 -06:00
OxygenCobalt
fe0c2761c7
music: make musicloader async
Make MusicLoader instantiation fully asynchronous. This implementation
changes a lot about Auxio. For one, the loading screen is now gone.
However, many parts of the app now run under the fact that MusicStore
might not be available. However, I don't think there will be too much bugs
from it. Some more changes will be made to improve this implementation.
2021-10-24 20:01:15 -06:00
OxygenCobalt
926fef4218
widgets: increase minheight
Prevent issues with malformed widget forms on certain devices by
increasing the minimum widget height to 152dp, which is the height
that the minimal widget should take up.
2021-10-24 11:30:10 -06:00
OxygenCobalt
3107464dd2
home: make fab hide when fast scrolling
Hide the FAB when fast scrolling. This is just a UX enhancement.
2021-10-24 11:03:24 -06:00
OxygenCobalt
71480d0299
home: move shuffle control to fab
Instead of having a play/pause header at the top of the song list, use
a FAB instead. This allows people to shuffle all of their songs even if
the songs tab isn't enabled, and it can be tranformed into a create FAB
when playlists are added.
2021-10-24 10:17:55 -06:00
OxygenCobalt
97808ce1c3
home: merge fast scroller
Merge the fast scroller back into Auxio once again, albeit this time
it's AFS instead of IndicatorFastScroll. This not only slims down the
implementation but also allows me to stop the scroller from appearing
every time the home view is recreated. All modifications were noted
and attribution is included to abide by the Apache 2.0 license.
2021-10-23 18:22:50 -06:00
OxygenCobalt
36228d0536
widgets: improve widgets
Enhance widgets in a couple of ways:
1. Make the cover art expand to fit it's aspect ratio with padding
instead of the entire widget. This does the cover art justice and
is more visually appealing in general.
2. Add two new widget forms: Terminal, which applies to only the
smallest widgets, and Minimal, which applies to short and wide
widgets
2021-10-21 19:17:55 -06:00
OxygenCobalt
9030de7774
ui: add edge-to-edge on bar-dependent fragments
Add edge-to-edge on the Home, Detail, and Search fragments. This
solution is not ideal at all, relying on viewModel state to make
sure that the padding is only applied when the playback bar is not
present. However, it works. I'll likely replace it with a better
layout once I can figure out how similar layouts like Material
Files' PersistentBarLyout work.
2021-10-20 20:11:07 -06:00