Commit graph

319 commits

Author SHA1 Message Date
Alexander Capehart
7495a59ab1
playback: add scaffold for new playback mode
Add the scaffold for PlaySong, a new version of playback modes that
- Supports playback of a song by itself, requested by #424.
- Will make direct playback from the song menu feasible (given
additional reworks)
- Prevents the invalid state of playing a song by it's playlist,
as the sealed interface implementation of PlaySong requires a Playlist
to be provided to it's respective variant.
2023-07-06 20:07:16 -06:00
Alexander Capehart
0cd59ce4e0
all: redocument navigation system
Add documentation for the new navigation system, which largely
completes this change.
2023-07-04 21:44:34 -06:00
Alexander Capehart
7239256e27
list: unify viewmodels
Unify the disjoint selection and menu viewmodels into a single
ListViewModel.

This is technically not fully done, as MenuViewModel remains as a
backing element of the menu dialogs, but otherwise that's it.
2023-07-04 20:37:55 -06:00
Alexander Capehart
b4394c3a4a
util: fix horrible numeric function naming
"nonZeroOrNull" is actuallly more apt as "positiveOrNull".
2023-07-04 15:16:08 -06:00
Alexander Capehart
14107c9444
all: standardize nav consume usage
Standardize navigation command consumption to only occur when a
navigation route has *definitively* ended. If more commands could
come, observe them. Otherwise, consume immediately.
2023-07-04 13:20:13 -06:00
Alexander Capehart
ab2b853737
list: expand item menus
Bit of a megapatch that:
- Adds dedicated play, shuffle, and view items to all item menus
(songs haven't been fully implemented yet)
- Adds icons to all item menus
- Re-adds enabled/disabled items to menus
- Makes menu action naming conventions more consistent with the rest
of the app
2023-07-04 11:15:19 -06:00
Alexander Capehart
39b1fd1057
menu: move item logic from listfragment
Move menu action logic from ListFragment into corresponding
MenuFragments.
2023-07-03 20:05:49 -06:00
Alexander Capehart
d6a20fedb3
all: use menu everywhere
Use the new menu system in all applicable places.

More consideration is needed right now on whether the toolbars should
also have menu items, so they remain unchanged right now.
2023-07-03 16:52:42 -06:00
Alexander Capehart
c1158b1a07
list: add menu dialog framework
Add a dialog that shows menu information as a bottom sheet instead of as
a PopupMenu.

This did not take as much finessing of BottomSheetBehavior as the main
playback UI framework did, just some style redefinitions.
2023-07-03 14:28:32 -06:00
Alexander Capehart
6dc2892eb9
home: fix settings anim
Fix mismatched navigation animations when going to settings and back.
2023-07-03 10:45:32 -06:00
Alexander Capehart
a1efb0c34a
ui: rename menu resources
Switch from redundant menu_* prefixes to more use-specific prefixes
used elsewhere.
2023-06-30 20:31:15 -06:00
Alexander Capehart
fcbce0fb98
ui: fix issues from new nav
Fix miscellanious issues from the flattened nav graph system.

Nowhere near enough, largely counting on the planned bottom sheet menus
to eventually be able to ignore most of these issues.
2023-06-27 20:05:04 -06:00
Alexander Capehart
9b0e39919b
music: simplify playlist decision events
Simplify the 4 stateflows controlling when playlist decision dialogs
must be opened to just one enum.

This is like the detail view, and makes the amount of observers I have
to spin up much smaller.

Eventually, most of even these observer calls will be collapsed into
the menu itself.
2023-06-27 19:43:15 -06:00
Alexander Capehart
07e9ca8ef6
ui: flatten nav graph
Flatten the navigation graph into a single "main" graph that links
home to both explore and preference fragments.

***This massively breaks the app in it's current state***. Further
changes and refactors are needed to get this back to working.
2023-06-27 17:30:11 -06:00
Alexander Capehart
77d01a0c97
home: use constant page limit
Use a constant page limit of 5 instead of a dynamic page limit.

This was not being properly updated prior, and since the ViewPager
already clamps it, the limit does not really need to be based on the
tab size anyway.
2023-06-07 20:07:06 -06:00
Alexander Capehart
aae688b642
home: fix stuck playlist indicator
Fix an accidental return statement resulting in the playlist playback
indicator not properly updating if a song not in the playlist was
played.
2023-06-03 09:01:26 -06:00
Alexander Capehart
10d05b1f26
all: fix log statements
Fix messy and useless log statements throughout the app.
2023-05-28 10:10:03 -06:00
Alexander Capehart
699227c1a8
all: relog project
Fill in a lot of code paths in the project with log statements in order
to improve the debugging experience.
2023-05-26 16:36:06 -06:00
Alexander Capehart
c2def19aee
ui: handle playing indicator edge cases
Handle two edge cases identified with the playing indicator behavior:
1. When enqueing songs from another parent, the prior parent is still
indicates as "playing" when it kind-of isn't.
2. When playback is stopped, the parent is not reset, and thus will
still be indicated as "playing" after the song has disappeared. This
is rarer and should be resolved in other ways, but the solution to
1 also fixes this.

Resolves #380.
2023-05-25 13:16:58 -06:00
Alexander Capehart
ba94d4fa21
detail: group implicit albums in "appears on"
Group albums implicitly linked to an artist via the "artist" tag into
their own section called "Appears on".

This makes Auxio's artist model a bit more apparent to users.

Resolves #411.
2023-05-25 12:54:23 -06:00
Alexander Capehart
af563c83ac
build: reduce execution times
Reduce build execution times through the use of non-transitive/final R
classes and removing unnecessary wildcard imports.
2023-05-22 21:41:13 -06:00
Alexander Capehart
fb892453bd
home: fix tab setting migration
Fix a few issues with the tab migration:
1. It wasn't even being ran
2. It incorrectly updated the tabs by adding a playlist tab when it was
actually already present.
2023-05-21 11:45:44 -06:00
Alexander Capehart
8953f12a1e
music: try to fix repo race conditions
Forgot to slather the entire class in Synchronized and Volatile. Should
make crashes less likely, I hope.
2023-05-21 09:53:56 -06:00
Alexander Capehart
572b0e52f8
music: clean up playlist experience
Add a variety of mild fixes and qol improvements regarding playlists.
2023-05-20 11:24:45 -06:00
Alexander Capehart
1fd6795b0d
detail: move editing state to toolbar
Move the music editing state to the toolbar.

This should be signifigantly clearer than prior, at the cost of it's
"universality" implying that renaming should be available when it
actually won't be.
2023-05-19 19:57:41 -06:00
Alexander Capehart
996c86b361
detail: add playlist editing
Add the ability to edit a playlist in it's detail view.

This replaces the prior sorting functionality entirely. That will be
re-added later.
2023-05-19 11:15:33 -06:00
Alexander Capehart
7435165929
music: add playlist addition
Implement playlist addition and it's UI flow.
2023-05-13 19:06:51 -06:00
Alexander Capehart
4fe91c25e3
music: streamline new playlist implementation
Make the implementation of the playlist creation dialog signifigantly
simpler by removing some aspects that don't really need implementation
yet.
2023-05-13 11:40:35 -06:00
Alexander Capehart
763061c352
music: automatically number new playlists
Automatically number new playlists, from Playlist 1, Playlist 2, etc.

This comes with the additional requirement that all playlists have
unique names.
2023-05-12 13:43:18 -06:00
Alexander Capehart
e01ea25d0b
music: add playlist naming flow
Add a real playlist naming dialog and UX flow.

This is a bit rough at the moment since theres a good amount of nuance
here. Should improve as the playlist implementation continues to grow
more fleshed out.
2023-05-12 10:39:56 -06:00
Alexander Capehart
e68cc4d620
build: update deps
Update a huge amount of dependencies. Forgot specifically what I
did.
2023-05-11 15:42:47 -06:00
Alexander Capehart
c7b875376c
music: refactor name implementation
Refactor the music name implementation to do the following:
1. Unify normal and sort names under a single datatype
2. Handle arbitrary-length digit strings
3. Ignore puncutation regardless of the intelligent sort
configuration, as it is trivially localizable.

Resolves #423.

Co-authored by: ChatGPT-3.5
2023-05-11 12:19:39 -06:00
Alexander Capehart
f2a90bf0af
picker: refactor into module-specific impls
Refactor the weird picker god module into specific sub-impls in
playback and a new navigation package.

I cannot keep this unified. The needs are too different among each
picker. Better to keep it separate, especially in preparation for
the playlist dialogs.
2023-03-25 21:13:42 -06:00
Alexander Capehart
829e2a42c4
home: add playlist add button
Refactor the home FAB to switch to playlist addition button
when at the playlist tab.
2023-03-25 15:11:48 -06:00
Alexander Capehart
4068c3e009
detail: add playlist view
Add a detail view for playlists.

This is most equivelent to the genre detail view right now, but will be
differentiated eventually.
2023-03-22 19:58:58 -06:00
Alexander Capehart
f846a08b01
music: refactor library usage
Refactor the disjoint Library and Playlist setup into two new
DeviceLibrary and UserLibrary implementations.

This makes the API surface a bit less disjoint than prior.
2023-03-22 17:16:41 -06:00
Alexander Capehart
d8b67a8512
test: fix failure
Once again, forgot to update the mock implementations.
2023-03-20 20:29:43 -06:00
Alexander Capehart
686290a6c1
playlist: add basic ui support
Add extremely basic UI support for playlists.
2023-03-20 19:47:56 -06:00
Alexander Capehart
9a282e2be9
music: unify indexer and repository
Unify Indexer and MusicRepository into a single class.

This is meant to create a single dependency on PlaylistDatabase and
reduce the amount of orchestration.
2023-03-20 15:57:27 -06:00
Alexander Capehart
4033a791a7
playlist: consider playlists music
Consider playlists music rather than an extension of music.

This also sets up the basics of a playlist datbaase.
2023-03-20 15:57:27 -06:00
Alexander Capehart
a485ebf1fe
music: handle numbers when sorting
Now sort by logical numeric order with music names.

This is a nice QoL improvement.

Resolves #394.
2023-03-19 14:08:37 -06:00
Alexander Capehart
5e0059fdba
ui: avoid crashes with simultanious navigation
If navigation occurs with more than one destination at once, just drop
the slower one rather than crashing.

Resolves #374.
2023-03-17 15:47:18 -06:00
Alexander Capehart
1df15a32cd
ui: use event everywhere
Replace all prior uses of the StateFlow + finish method pattern with
the new event class.
2023-03-17 15:29:36 -06:00
Alexander Capehart
f0d62e8176
deps: update deps
Lifecycle -> 2.6.0
Spotless -> 6.17.0 (Allows file name field to be used)
2023-03-17 15:13:11 -06:00
Alexander Capehart
86ca6d577e
list: re-add fine-grained updates
Re-add the fine-grained updates that were removed prior due to state
concerns.

This time they should be safe enough to use, as the differ has been
fully vendored. The change is not complete enough however, as the queue
view has not been properly ported to use these updates just yet.
2023-03-04 23:08:03 -07:00
Alexander Capehart
83c5b85424
deps: update
Spotless -> 6.15.0
Core -> 1.9.0
2023-02-24 21:57:01 -07:00
Alexander Capehart
2d9a5ad5cd
music: add more tests
Add tests for MusicViewModel, MusicMode, and MusicRepository.

Going further requires me to really learn instrumentation tests.
2023-02-20 16:01:58 -07:00
Alexander Capehart
c9ddda2ebd
home: fix visual clipping on shuffle fab shadow
Fix visual clipping on the shuffle FAB's shadow.

Turns out padding, while slower, is actually the better inset handling
method, as it allows me to avoid visual clipping in some cases.
2023-02-12 21:53:34 -07:00
Alexander Capehart
833ddceba4
all: use binds di
Use @Binds more heavily with dependency injection, whee currently
reasonable.

Reduces the amount of boilerplate "fun from" functions that need to be
used.
2023-02-11 16:29:47 -07:00
Alexander Capehart
6e55801513
music: make extractors injectable
Refactor the music module to make each individual extractor able to be
injected directly.
2023-02-11 14:47:32 -07:00