Skip to content

Impl/genre features#968

Merged
theovilardo merged 5 commits intomasterfrom
impl/genre-features
Feb 2, 2026
Merged

Impl/genre features#968
theovilardo merged 5 commits intomasterfrom
impl/genre-features

Conversation

@theovilardo
Copy link
Copy Markdown
Owner

No description provided.

…g, UI refinements, and batch editing capabilities.

- **Genre Metadata & UI**:
    - Introduces `GenreIconProvider` (and `GenreiconProvider.kt`) providing a comprehensive mapping system that uses exact matches, split-part analysis, and keyword heuristics to assign icons to a wide variety of music genres.
    - Adds `GenreTypography` to dynamically scale text styles based on genre name length, improving readability in the grid.
    - Refines `GenreCategoriesGrid` layout by reducing icon sizes and adjusting offsets for a cleaner visual appearance.
- **Genre Management**:
    - Implements a "Quick Fill Genre" feature in `GenreDetailScreen` allowing users to batch edit genres, specifically targeting "Unknown" metadata.
    - Introduces `QuickFillDialog` to facilitate applying custom or existing genre labels to multiple songs at once.
    - Updates `GenreDetailViewModel` and `PlayerViewModel` (implied) to handle batch genre updates and custom genre persistence.
- **UI & UX**:
    - Adds support for localized genre normalization (e.g., handling accents, special characters, and common aliases like "rnb" for "R&B").
    - Enhances the `GenreSortBottomSheet` with an optional header to trigger genre metadata fixes.
- **Architecture**:
    - Centralizes genre icon logic into a dedicated provider to improve maintainability and reuse across different screens.
    - Exposes `SortOption` enum to support broader sorting logic within the application.
…ation

- **UI Components & Utilities**:
    - Implements `GenreIconProvider` to map genre IDs and keywords (e.g., "Rock", "Electronic", "Jazz") to specific vector drawables.
    - Provides a `DEFAULT_GENRES` list for common music categories.
    - Adds `GenreTypography` to generate deterministic, stylized `TextStyle` objects for genre labels.
    - Utilizes variable font settings (`R.font.genre_variable` and `R.font.gflex_variable`) to dynamically adjust font weight, width, slant, and geometric transforms based on genre ID hashes.
- **Resources**:
    - Adds support for complex typography strategies including Monospace, Roboto Flex "Wild" variations, and Google Sans Flex expressive styles.
- **Quick Fill Feature**:
    - Introduces `QuickFillScreen.kt` featuring a multi-step dialog to batch-assign genres to songs.
    - Implements a searchable song selection step followed by a genre validation step.
    - Adds a docked toolbar with "Select All" and "Clear" functionality for efficient song management.
- **Custom Genres**:
    - Adds support for user-defined genres with custom icons, persisted via `UserPreferencesRepository`.
    - Updates `GenreIconProvider` with a set of selectable vector icons and logic to handle custom genre-to-resource mappings.
    - Integrates custom genre display into `GenreCategoriesGrid` and `GenreDetailScreen`.
- **Data & Logic**:
    - Implements `batchEditGenre` in `PlayerViewModel` to update metadata for multiple songs simultaneously, including optimistic UI updates and MediaSession synchronization.
    - Extends `UserPreferencesRepository` to store custom genres and their icon mappings using DataStore.
- **UI/UX Improvements**:
    - Updates `GenreSortBottomSheet` to support optional header content.
    - Refines scrollbar padding in `SongPickerBottomSheet` for better alignment.
    - Adds new vector assets and font resources (`genre_variable.ttf`, `gflex_variable.ttf`) to support enhanced typography and iconography.
- **UI & Styling**:
    - Updates the artist name text style in `GenreDetailScreen` from `titleLarge` to `titleMedium` for better visual hierarchy within artist sections.
…id view, improved typography scaling, and persistent user preferences.

- **Genre Browsing & UI**:
    - Introduces a toggle button in `GenreCategoriesGrid` to switch between Grid (2 columns) and List (1 column) layouts.
    - Implements layout-specific styling, where the List view features fixed-height cards and 30% larger typography for better readability.
    - Refines the `GenreCard` layout with smart width distribution (65% for grid, 80% for list) to prevent text overlap with genre icons.
    - Adds smooth shape animations when toggling between the list and grid view modes.
- **Typography & Styling**:
    - Enhances `GenreTypography` with "smart scaling" that dynamically adjusts font size based on text length and word count to prevent overflow.
    - Expands variable font usage for `Roboto Flex`, utilizing additional axes like `grade`, `XTRA`, `YOPQ`, and `YTLC` for more expressive, unique genre labels.
    - Tames geometric transforms (scaleX) for long titles to ensure visual consistency across various genre names.
- **Preferences & Data**:
    - Adds `IS_GENRE_GRID_VIEW` to `UserPreferencesRepository` to persist the user's preferred genre layout across sessions.
    - Updates `PlayerViewModel` with a `toggleGenreViewMode` function and exposes the view state via `StateFlow`.
    - Standardizes `StateFlow` initialization in `PlayerViewModel` using `SharingStarted.WhileSubscribed` for better resource management.
- **Miscellaneous**:
    - Adjusts spacing and padding in `GenreCategoriesGrid` for a more balanced visual rhythm.
    - Updates `addCustomGenre` signature in the ViewModel to make `iconResId` optional.
@theovilardo theovilardo merged commit 348cae2 into master Feb 2, 2026
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