Merged
Conversation
…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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.