Commit graph

373 commits

Author SHA1 Message Date
Alexander Capehart
3c211a1d17
list: make sorting direction explicit
Make sorting direction (ascending/descending) explicit in the UI and in
the code.

Instead of a boolean flag, two distinct "ascending" and "descending"
options are used instead. This should be much clearer.
2023-02-02 21:44:15 -07:00
Alexander Capehart
8536c3da31
all: start injecting shared objects
Start injecting shared object instances.

This is not a 100% conversion, as certain portions of the code are not
really ready for 100% DI constructors just yet.
2023-02-02 20:55:36 -07:00
Alexander Capehart
1df1d40408
music: parallelize loading
Parallelize music loading.

- Queries over Media DB and Cache are ran parallel
- MediaStoreExtractor can now continue extracting songs independent
of MetadataExtractor's task pool capacity
- Library and Cache are saved in parallel

Resolves #343.

This should result in some pretty signifigant performance gains
due to the operations now being ran in parallel instead of
sequentially.
2023-02-02 19:54:58 -07:00
Alexander Capehart
78229f4794
music: fix failing tests
Fix failing tests stemming from incorrect module locations.
2023-01-29 20:41:05 -07:00
Alexander Capehart
138a2c3c1c
all: remove dependence on androidviewmodel
Entirely remove dependence on AndroidViewModel, replacing it with
dependency injection.
2023-01-29 20:38:01 -07:00
Alexander Capehart
ccbd77918b
all: add di framework
Add dagger/hilt dependency injection.

Does nothing right now, will actually add modules later.
2023-01-29 19:55:53 -07:00
Alexander Capehart
09d4dfc990
ui: make generic fragment viewmodels abstract
Turns out hilt doesn't like generic fragments. Move out all required
viewmodels to other places.
2023-01-29 19:44:21 -07:00
Alexander Capehart
b34e6fdc8a
music: hide musicstore impl
Hide the MusicStore implementation behind an interface, transforming it
into a new MusicRepository class.

This is in preparation for dependency injection.
2023-01-29 15:57:46 -07:00
Alexander Capehart
d2f74fd138
music: switch cache to room
Make the cache extractors rely on a Room database as well.

I'm not quite sure how, but this also actually resulted in a huge speed
improvement.
2023-01-23 15:10:30 -07:00
Alexander Capehart
a6f2d82107
detail: split off song property extraction
Split off the song property extraction code into a music package class.

This is part of an initiative to remove non-parameter uses of contexts
in ViewModels.
2023-01-23 09:06:20 -07:00
Alexander Capehart
26f0fb7aba
detail: add support for disc subtittles
Add support for disc subtitle information

This allows disc groups to become named, which is useful for certain
multi-part albums.

Resolves #331.
2023-01-21 17:23:09 -07:00
Alexander Capehart
900bcd142e
list: disable complex diffing for now
Disable the new instructions-based system for now.

The way I was doing reflection was likely far too unsafe and prone to
bugs. I'll want to do it some other way.
2023-01-20 15:16:04 -07:00
Alexander Capehart
34653425ee
detail: fix unintended code change 2023-01-19 19:56:14 -07:00
Alexander Capehart
28bb4e61c4
detail: fix crash when playing genre song
Fix an issue where the genre detail view would crash when playing a
song.
2023-01-19 19:53:33 -07:00
Alexander Capehart
0c69a35e80
detail: diff instead of replace when resorting
Completely rework the detail list implementations so that resorting the
song list causes a replace operation instead of a diff operation.

This finally makes the list experience consistent across the app.
2023-01-18 16:47:50 -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
ad9d2f2d9e
list: move instructions into recycler
Move the instructions enum (which is only concerned with recyclerview
semantics) into the list.recycler module instead of list.
2023-01-16 17:47:07 -07:00
Alexander Capehart
d38da9b892
list: make list instructions generic
Make list instructions generic in preparation for the detail list
update.

Detail views need their own instructions datatype, so this is meant to
allow that to be implemented without issue.
2023-01-16 17:45:03 -07:00
Alexander Capehart
a0aaec98d0
music: extend non-standard artists to id3v2
Just pre-emptively add support for TXXX variations of the non-standard
vorbis artist fields to the ID3v2 parser.

I'd imagine the naming convention will be similar between them, so why
not.
2023-01-16 09:33:20 -07:00
Alexander Capehart
df98bb535f
list: rework diffing abstraction
Make all adapters relying on diffing unified into a DiffAdapter
superclass that can then accurately respond to the new
UpdateInstructions data.

UpdateInstructions is still not fully used everywhere, but will be
soon.
2023-01-15 20:31:50 -07:00
Alexander Capehart
5adc87550e
music: make package for auxillary music info
Like the library package, move out tag information (Date/Album.Type)
into a separate package.

Date never really made sense as base-package information.
2023-01-07 09:33:05 -07:00
Alexander Capehart
a2b51825e8
music: add tests for album types
Add tests for Album.Type.

Other tests for the music library will be done separately.
2023-01-07 09:21:15 -07:00
Alexander Capehart
dc73f96ba8
list: clear selection before navigating back
When the back button is pressed, clear the current selection before
navigating back.

This is something I was planning to do but then completely forgot about
when implementing multi-select.

Resolves #316.
2023-01-07 08:19:12 -07:00
Alexander Capehart
6fa53ab873
playback: mostly hide playback mode details
Mostly hide the code that handles starting playback based on a given
mode into their respective ViewModels.

Again, makes testing easier.
2023-01-06 20:00:18 -07:00
Alexander Capehart
1b19b698a1
settings: decouple
Decouple the settings god object into feature-specific settings.

This should make testing settings-dependent code much easier, as it no
longer requires a context.
2023-01-06 16:17:57 -07:00
Alexander Capehart
a29875b5bf
music: decouple library from musicstore/indexer
De-couple the library data structure (and library grouping) from
MusicStore and Indexer.

This should make library creation *much* easier to test.
2023-01-06 12:04:27 -07:00
Alexander Capehart
1b44eeae15
music: rename filesystem back into storage
Rename the filesystem module into storage.

Forgot about the MediaStore utils I had in there. The original name was
more correct.
2023-01-04 09:46:02 -07:00
Alexander Capehart
d55dfbc849
list: make listeners generic
Make all list listeners operate on generic values.

Wanted to do this for awhile, but couldn't figure out how to get the
listener to work with sub-typed listeners until I learned what the in
keyword actually does. This removes a ton of type-checking boilerplate
that it's not even funny.
2023-01-04 09:42:52 -07:00
Alexander Capehart
d5941aa705
music: fix crash when adding music dirs
Fix a crash that would occur when trying to add music dirs without a
file manager to handle it.

Some users apparently disable the built-in file manager under the
assumption that the same intents will work with other file managers.
They do not, and so we need to handle that case and let the user know.
2023-01-04 08:17:34 -07:00
Alexander Capehart
360dab928c
all: misc cleanup
Miscellanious cleanup in preparation for 3.0.1.
2023-01-03 18:56:06 -07:00
Alexander Capehart
d4d3bd5ff4
detail: band-aid crashes when library unavailable
Band-aid a crash that would occur when the library is somehow
unavailable in the detail view. Now, if it's unavailable, the
app simple navigates away.

Not sure how this is happening, but I'd imagine it's some caching
shenanigans I need to fix by using volatile on any shared field.
2023-01-03 13:55:36 -07:00
Alexander Capehart
9ab729a069
detail: decouple detail song and properties
Decouple DetailSong into two fields for the current song and current
properties.

Combining them was a technical decision that no longer makes sense,
and separating them makes life much easier.
2023-01-01 17:00:51 -07:00
Alexander Capehart
1f5594fb33
music: refactor metadata extractor
Refactor the internal tag management portion of MetadataExtractor into a
new "Tags" object that can now be re-used in the ReplayGain system.

This also does a minor rework to the ReplayGain object to make it
totally self-sufficient.
2023-01-01 10:38:50 -07:00
Alexander Capehart
7721e64096
music: split off extractor parsing
Split off parsing-related components from extractor into a new parsing
module.

A lot of these methods are used in non-extractor code, so it makes more
sense for them to not be part of the extractors.

The code that is really extractor-specific can remain within the
extractor files.
2022-12-31 19:50:54 -07:00
Alexander Capehart
dc46c49f07
list: add editable list listener
Add a listener for the editable lists in the queue and tab config
views.

This simply reduces the amount of duplicated code within both of those
views.
2022-12-31 13:47:13 -07:00
Alexander Capehart
493b0a9f32
all: rework context-dependent object use
Rework some of the taped together ways context-dependent objects were
replied on in-app, such as removing redundant constructs and extremely
hacky lifecycle mechanisms.
2022-12-31 11:12:50 -07:00
Alexander Capehart
bf56a50b59
all: refactor associating class naming
Standardize from/new companion method usage, Callback/Listener usage,
and companion object visibility across the app.
2022-12-30 19:26:09 -07:00
Alexander Capehart
cf6e7a5f0d
music: add support for album date ranges
Add support for albums to have a range of dates.

Often compilation albums will have Songs released in different months
or years, so it makes some sense to show a date range rather than just
the ealiest date.

The only point at which the earliest date is still shown is in the home
view's popup, as maxiumum dates in a date range are not sorted by, and
so showing it doesn't make sense.
2022-12-30 16:09:41 -07:00
Alexander Capehart
5764c19801
info: retire info documents
Retire the old information documents in favor of the new wiki.
2022-12-28 14:45:22 -07:00
Alexander Capehart
195ea074ca
playback: re-add play from genre
Re-add the "Play from genre" setting.

It's much easier to implement this now than prior with the picker
framework, so may as well retain consistency.
2022-12-27 16:24:52 -07:00
Alexander Capehart
cce7b766d7
all: reformat code
Reformat all project code
2022-12-26 19:59:27 -07:00
Alexander Capehart
0737dbace3
playback: redocument
Redocument the playback module.

This finally completes the re-documentation of this project.
2022-12-26 15:15:27 -07:00
Alexander Capehart
cc8f429044
music: strengthen auxio uids
Strengthen Auxio-style UIDs.

These UIDs now leverage SHA-256 hashes with null values now writing
themselves as 0 in order to avoid possible message collissions from
other value arrangements.
2022-12-25 20:32:35 -07:00
Alexander Capehart
9d283fc6e4
accent: move back to ui
Move the accent module back into the ui module, where it's more consistent.
2022-12-25 19:32:34 -07:00
Alexander Capehart
7394e87471
queue: redocument
Redocument the queue module.
2022-12-25 19:29:48 -07:00
Alexander Capehart
295d2dfd39
search: redocument
Redocument the search module.
2022-12-24 10:18:05 -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
b38b8a909f
all: remove superfluous comments
Remove superflous comments that really add nothing.
2022-12-23 11:22:37 -07:00
Alexander Capehart
7415c28e2d
util: redocument
Redocument the util module.

This should make the purpose of the utilities used in this app clearer.
2022-12-22 20:25:54 -07:00
Alexander Capehart
e92b69e399
music: redocument
Redocument the music module.

Much of it's documentation has drifted from reality as changes were
made, this commit completely redoes the documentation in order to
fix that.
2022-12-22 17:17:35 -07:00