Commit graph

117 commits

Author SHA1 Message Date
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
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
765f2f9a18
music: keep changes when unshuffling/reshuffling
Keep changes when unshuffling and reshuffling the queue.

This quirk was a hold-over from the old queue system, and now it's
removed.

Note that sorting is still based on parent, and so sort orders might
remain somewhat wonky. I only see myself really tackling that come
gapless playback, as I have to remove that last vestige to get that
system working.
2022-09-16 20:13:30 -06:00
Alexander Capehart
717f49fc20
music: add picker dialog
Add a dialog for picking a genre from several choices.

This basically completes multi-genre support in Auxio, save more
internal reworks.

Note that it is extremely likely that the "Play from genre" setting
will be removed soon. This feature has made me realize that such does
not many any real sense, as genres are more semantically similar to
playlists than artists or albums. This implementation only exists to
make multi-artist support an easy plug-and-play operation.

Resolves #201
2022-09-14 19:59:12 -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
48ad45e4c3
music: rework id system
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.
2022-09-06 22:21:41 -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
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
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
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
182b08ab65
playback: fix state restore regression
Fix a state restore issue that would cause the parent to restore
incorrectly.

At some point, I accidentally used the index for the PlaybackMode field
when restoring the playbackState. This resulted in the playback mode
effectively reverting to ALL_SONGS and causing a number of subtle
issues.
2022-06-02 09:20:31 -06:00
OxygenCobalt
cde3a99f4d
playback: fade out content as view slides
Re-add the ability for content to fade out as the playback or queue
view slides up. This also migrates the queue slide animation to also
fade out content, which allows for the stylistic cohesion I desire.
2021-11-27 11:49:06 -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
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
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
7e32763662
ui: misc ui updates
Do a couple of UI changes I thought of over this week:
- Make the detail header text neutral, mostly so I can make it so that
the accent only corresponds to active thingsd
- Remove the vanity elevation from the cover images. This is mostly to
abide by Material Design.
- Move the about screen to it's own menu slot on the main fragment.
2021-10-01 20:17:48 -06:00
OxygenCobalt
a3e7cb93aa
home: merge all library views into home
Merge LibraryFragment, SongsFragment, and others into a new fragment
called HomeFragment. This is the beginning of the Auxio UI overhaul.
This has caused some regressions here and there, but these will be
rectified over time.
2021-08-21 19:49:25 -06:00
OxygenCobalt
c54790e24c
about: redesign ui
Completely redesign the about UI to remove its dependency on
bottomsheetdialogfragment. That object is such a hassle to deal with an
is the epitome of everything wrong with this horrible platform. This
design will enable further about extensions in the future.
2021-06-05 14:40:50 -06:00
OxygenCobalt
0a18108419
Unify fast-scroller
Completely unify the fast scroll indicators and the fast scroll thumb into a single view.
2021-03-23 14:35:32 -06:00
OxygenCobalt
60af5f8656
Heavily refactor navigation
Make how navigation to the detail fragments much simpler/easier to maintain compared to previously.
2021-01-13 16:11:59 -07:00
OxygenCobalt
fafaa0bf1f
Improve navigation
Finally make parent navigation possible from artist albums and the like, along with heavily streamlining the main navigation code.
2021-01-12 17:50:06 -07:00
OxygenCobalt
8f5e6621ad
Create dedicated search tab
Move all searching to a tab of its own.
2021-01-11 20:17:22 -07:00
OxygenCobalt
8fe0734ca1
Refactor menus
Heavily refactor how certain menus are used when it comes to songs.
2020-12-29 14:45:55 -07:00
OxygenCobalt
46fa300252
Refactor album detail layout
Change the album detail layout to rely on a RecyclerView entirely instead of a NestedScrollView, at the cost of some functionality I'll need to re-add.
2020-12-29 09:03:14 -07:00
OxygenCobalt
7ef4eb5fde
Update artist detail layout
Update the artist detail layout so that it also relies on a recyclerview entirely instead of a nestedscrollview.
2020-12-28 13:55:20 -07:00
OxygenCobalt
804db8b0d3
Update genre detail layout
Make GenreDetailFragment a full RecyclerView in order to fix issues with how NestedScrollView has to generate all ViewHolders in order on creation.
2020-12-28 10:48:50 -07:00
OxygenCobalt
9b22fcb8e6 Fix landscape issues with MainFragment
Make MainFragment & CompactPlaybackFragment look better in landscape mode.
2020-12-13 17:07:29 -07:00
OxygenCobalt
2dc7ba3420 Implement theme customization
Implement the ability to change the theme to auto/light/dark.
2020-11-28 16:17:54 -07:00
OxygenCobalt
7e0ee3d04f Add parent restoration
Add a failsafe to the persistence system that allows the parent of a playback state to be restored from the queue.
2020-11-26 08:52:21 -07:00
OxygenCobalt
1af17a6df1 Remove usages of animator to fix nav bugs
Remove usages of animator as apparently sometimes that actually causes bugs. Why do I do this to myself.
2020-11-25 21:13:23 -07:00
OxygenCobalt
fd4b7b247f Use animator where possible
Use animator nav animations instead of anim nav animations to possibly prevent some leaks involving "mKeyedTags" or whatever.
2020-11-25 10:29:47 -07:00
OxygenCobalt
d8a40fe219 Cleanup code
Cleanup a bunch of redundant, unused, and bad code.
2020-11-21 16:50:16 -07:00
OxygenCobalt
c19680c1f7 Temporarily remove playback nav
Remove the ability to navigate to the parent album from CompactPlaybackFragment for now, as it was causing issues.
2020-11-16 21:37:45 -07:00
OxygenCobalt
c3a61e6071 Switch from ViewPager to BottomNavigationView
Use BottomNavigationView as the main navigator of Auxio instead of a ViewPager + BottomNavigationView, primarily to fix some memory leaks and give Auxio a better UI design overall.
2020-11-16 21:09:55 -07:00
OxygenCobalt
a192fb52c3 Make queue a fragment instead of a dialog
Make QueueFragment an actual fragment instead of a BottomSheetDialogFragment. Really dont want to deal with the garbage BottomSheetDialogFragment does.
2020-11-08 14:37:13 -07:00
OxygenCobalt
2be7d34601 Add user queue
Add a user-generated queue, currently it isnt played from.
2020-11-07 16:06:47 -07:00
OxygenCobalt
bc7950e7af Make Queue nav destination
Fix a heisenleak by making QueueFragment a navigation destination instead of being directly instantiated.
2020-11-07 09:38:09 -07:00
OxygenCobalt
a2409a5718 Improve PlaybackFragment nav animation
Change PlaybackFragment's open/closing animation to slide over a stationary MainFragment, instead of MainFragment also sliding.
2020-10-12 07:57:14 -06:00
OxygenCobalt
4ad86593a6 Make PlaybackFragment full-screen
Change PlaybackFragment to a full-screen layout w/a slide animation.
2020-10-11 19:01:06 -06:00
OxygenCobalt
0c069dfbac Add specific playback fragment
Add a Playback Fragment that shows more information about what is currently playing.
2020-10-09 18:57:28 -06:00
OxygenCobalt
a72cb48c71 Add playback fragment
Add a fragment to show songs that are currently being played.
2020-10-05 15:54:53 -06:00
OxygenCobalt
21ff93d5f0 Fix bug with app restart
Fix bug where the app would be unaware if MusicViewModel was cleared due to it being suspended in the background.
2020-10-05 09:26:22 -06:00
OxygenCobalt
b814ac613d Fix more navigation bugs
Remove the clicklistener system I added before, as it turns out fragments arent immediately recreated if you navigate back. Fun.
2020-10-03 10:08:04 -06:00
OxygenCobalt
37c52d9e5c Add sorting to LibraryFragment
Add basic sorting to LibraryFragment.
2020-09-28 15:37:41 -06:00
OxygenCobalt
aad42b5201 Fix album bugs
Fix bugs with the album items & detail fragments.
2020-09-27 17:03:35 -06:00
OxygenCobalt
d9cf3772e6 Update naming
Update naming on layout files & other code.
2020-09-27 15:26:15 -06:00
OxygenCobalt
9ffc194c4d Add DetailFragment for genres
Add a DetailFragment for genres.
2020-09-27 09:47:53 -06:00
OxygenCobalt
f754a82ba7 Enable albums on LibraryFragment
Readd album support to LibraryFragment.
2020-09-26 11:34:39 -06:00
OxygenCobalt
b80a3596b8 Store references to items in DetailViewModel
Store references to the artist & album inside DetailViewModel to prevent an artist/album search on every re-creation.
2020-09-23 15:42:06 -06:00
OxygenCobalt
6b56ce4ae8 Change parent artist navigation
Change the parent artist navigation so that its only enabled when an album is selected from LibraryFragment, otherwise dont enable it, as the user can just navigate up to see the parent artist.
2020-09-20 10:31:42 -06:00
OxygenCobalt
19a9ab4098 Add backwards navigation from album to artist
Add a way for AlbumDetailFragment to return to ArtistDetailFragment.
2020-09-20 09:51:12 -06:00
OxygenCobalt
20047313fc Add album detail fragment
Add a fragment for album details.
2020-09-17 14:52:40 -06:00
OxygenCobalt
ebc5aac011 Update resources
Update layouts to not assign a primary color through the tools namespace anymore, also bring back the light theme, which apparently disappeared at some point.
2020-09-16 07:00:55 -06:00
OxygenCobalt
26b53bd502 Add artist image to DetailFragment
Add the artist image to the DetailFragment. Still considering what I want to do design-wise with this.
2020-09-13 19:32:33 -06:00
OxygenCobalt
860033ac14 Remove generic recycler module
Remove the generic RecyclerView module and put its contents into other classes.
2020-09-11 10:44:41 -06:00
OxygenCobalt
02e803746b Revert to normal navigation structure
Revert to a saner navigation structure for the time being. Nested nav is interesting but I dont want to deal with the bugs at this moment.
2020-09-11 10:23:32 -06:00
OxygenCobalt
f7e25d3fa8 Add navigation to LibraryFragment
Add navigiation to LibraryFragment. This navigation is nested so that one can still move through the ViewPager, which will certainly have no problems later on. /s
2020-09-09 19:01:28 -06:00
OxygenCobalt
031815d746 Heavily refactor Library Management
Remove MusicRepository/All Library models and replace it with a single shared ViewModel, Move MainFragment into MainActivity, and remove the LoadingFragment -> MainFragment navigation path.
2020-09-07 16:16:08 -06:00
OxygenCobalt
c109c3f359 Add ViewPager
Add a ViewPager, currently it has no purpose but it will eventually.
2020-08-26 16:17:04 -06:00
OxygenCobalt
c04a90c3fa Add RecyclerView to LibraryFragment
Add a basic RecyclerView to LibraryFragment that shows every album.
2020-08-24 14:53:13 -06:00
OxygenCobalt
24452e8fa4 Add Loading fallback states
Add fallback states for when there is no music & if the load fails, along with a retry button if that happens.
2020-08-19 10:10:36 -06:00
OxygenCobalt
1b21552576 Add Loading Screen
Add a basic loading screen that loads the music in the background before starting the app.
2020-08-19 09:28:15 -06:00
OxygenCobalt
a8b368b577 Add music sorting
Change MusicRepository so that all music is sorted into Artist/Album/Song lists.
2020-08-18 10:37:02 -06:00
OxygenCobalt
22e8049d6b Add Music Loading
Add a Music Repository/Loader, along with a boilerplate ViewModel for LibraryFragment.
2020-08-17 15:21:14 -06:00
OxygenCobalt
9961b87f47 Refactor Now Playing into Library
Turns out a dedicated Now Playing screen wont look that good, so refactor that into the Library screen. Also replace the ActionBar with a Toolbar and update the theming a bit.
2020-08-17 11:28:23 -06:00
OxygenCobalt
7c447e0296 Add basic fragment structure
Add the boilerplate fragment code.
2020-08-17 10:32:28 -06:00