Skip to content

Conversation

@jackbrockley
Copy link

Adds a menu to the genre list to enable toggling sorting genres between song count and name (the previous default), and saves the option to shared preferences.

Sorting by song count is useful for finding music from your favorite genres, especially if your music library has many. For this use case, and for the sake of simplicity, the sort is only in descending order.

I manually added some translations for the new menu options, but I'm not sure of their accuracy or if the translations are already managed in some other way.

I added a few unit tests, which require some added libraries, for the sake of my own practise if nothing else.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On review, I realise these tests mix the responsibilities of GenreListViewModel and GenreComparator

timusus pushed a commit that referenced this pull request Nov 11, 2025
This PR adds functionality to sort genres by either name (alphabetically)
or by song count (descending). The implementation includes:

Features:
- Added GenreSortOrder enum (Default, Name, SongCount)
- New toolbar menu for genre list with sort options
- Sort preference persistence via SortPreferenceManager
- Sorting works during media library scanning

Implementation:
- Updated GenreListViewModel to handle sort order changes
- Modified GenreList composable to notify Fragment of sort order updates
- Added GenreComparator with name and song count comparators
- Created menu_genre_list.xml with sort options
- Updated translations for menu strings across all languages

Testing:
- Added GenreComparatorTest for sort order validation
- Added GenreListTest for ViewModel behavior testing
- Tests use MockK and coroutines-test for comprehensive coverage

Dependencies:
- Added mockk (1.14.2) for unit testing
- Added kotlinx-coroutines-test (1.10.2) for testing coroutines
- Updated dependency versions to match current HEAD

Conflict Resolution:
- Merged GenreList.kt: Combined HEAD's loading UI with PR's sort callbacks
- Merged GenreListFragment.kt: Kept ImmutableList conversion and added sort menu
- Merged gradle/libs.versions.toml: Used HEAD versions, added PR test dependencies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant