Merged
Conversation
- **Settings & UI Structure**:
- Refactors `SettingsCategoryScreen` to use a new `SettingsSubsection` component, grouping related settings into titled blocks (e.g., "Library Structure", "Sync and Scanning", "Global Theme").
- Reorganizes various settings items (Excluded Directories, Artists, Lyrics Priority, etc.) into these subsections for better visual hierarchy.
- Adds a new "Maintenance" section in Developer settings for forcing daily mix and stats regeneration.
- **Navigation**:
- Implements custom horizontal slide and fade transitions for the main root screens (Home, Search, Library) in `AppNavigation`.
- Introduces `mainRootDirection` logic to determine slide direction based on tab index, ensuring a consistent spatial mental model when switching tabs.
- **Library Screen**:
- Increases the font size of album titles in the library view from `18.sp` to `22.sp`.
- Adjusts spacing between album titles and artist names for improved readability.
- **Components**:
- Adds `SettingsSubsection` and `SettingsSubsectionHeader` helper composables to standardize the appearance of grouped settings items.
### Proposed Commit Message
Refactor Stats screen with enhanced data visualization and UI refinements
- **Stats Screen**:
- Overhauls the "Listening Timeline" with specialized vertical and horizontal bar charts tailored to different time ranges (Day, Week, Month, Year, All).
- Introduces `TimelineChartSpec` to manage layout logic, including dynamic item widths, scrolling thresholds, and label formatting for better density handling.
- Implements a new `CategoryHorizontalBarChart` for top categories, featuring color palettes that dynamically match the selected dimension (Artist, Album, Genre, Song).
- Replaces static "Listening timeline" text with dynamic supporting copy that explains data grouping per time range.
- Enhances card visuals using container-specific color schemes and improved typography via custom variable fonts (`gflex_variable`, `genre_variable`).
- Optimizes list performance by switching from manual horizontal scrolling to `LazyRow` for timeline entries.
- **UI/UX Refinements**:
- Adds a `showTabIndicator` toggle to `LibraryScreen` and `EqualizerScreen` to selectively hide tab row indicators for a cleaner look.
- Refines `StatsTimeRange` selector to support conditional indicators and improved spacing.
- Updates `HighlightRow` and category badges with more consistent sizing and secondary metadata visibility.
- **Styling**:
- Centralizes text styles for stats titles, axis labels, and metric values to ensure visual consistency across different chart types.
- Refines color mappings for top artists and albums to use semantic container colors (secondary and tertiary).
…ng list UI
- **New Track Concentration Card**:
- Introduces a "Track Concentration" section featuring a custom-drawn donut chart to visualize listening distribution across top tracks.
- Adds detailed metrics for "Top 3 share", "Average plays per track", and total "Unique tracks" within the selected range.
- Implements `TrackDistributionOverview` and helper components to display data slices with color-coded labels and percentages.
- **Enhanced Song List Visualization**:
- Overhauls the "Tracks in this range" card with a more compact, structured layout using `Surface` containers for each entry.
- Integrates `CategoryRankBadge` to highlight top-ranked songs with dynamic color schemes (Primary, Secondary, Tertiary).
- Adds an explicit "Most played tracks" supporting description and replaces the simple text button with a full-width "Show all/Collapse" toggle.
- Uses `animateContentSize` for smooth transitions when expanding or collapsing the song list.
- **UI & Styling Refinements**:
- Updates several section titles to use `titleLargeEmphasized` for better visual hierarchy.
- Simplifies background gradients in `StatsOverviewCard` and bar charts to solid colors or subtle transparencies for a cleaner look.
- Adjusts spacing and padding across various stats cards to improve consistency and information density.
- Updates `LinearProgressIndicator` styling with rounded caps and adjusted track heights.
… navigation gestures
- **Folder Management & SD Card Support**:
- Introduces `FolderSource` to toggle between Internal Storage and SD Card.
- Updates `MusicRepositoryImpl` to filter and build folder hierarchies based on the selected storage source.
- Adds a storage source switcher within the library sorting bottom sheet.
- Implements `StorageUtils` integration to detect available storage volumes and paths.
- **Enhanced Sorting**:
- Expands folder sorting options to include song count (ascending/descending) and subfolder count (ascending/descending).
- Persists folder sort preferences via `UserPreferencesRepository`.
- Updates `LibraryStateHolder` and `LibraryScreen` to handle the new sorting logic and UI indicators.
- **Navigation & Gestures**:
- Adds a "Behavior" settings category with a toggle for "Back gesture controls folders."
- Implements `BackHandler` in `LibraryScreen` to allow the system back gesture to navigate up the folder hierarchy before exiting the tab.
- Refactors `Breadcrumbs` to support dynamic root paths and labels based on the active storage source.
- **UI & View Models**:
- Updates `PlayerUiState` and `SettingsViewModel` to track folder source, root paths, and gesture preferences.
- Refines `LibrarySortBottomSheet` to support optional source-toggle content.
- Improves folder path normalization and hierarchy resolution to ensure consistent behavior across different storage types.
- **Library & Navigation**:
- Introduces a "Locate" action that allows users to quickly scroll to the currently playing song within the Songs, Liked, and Folders tabs.
- Implements state management to track the visibility and action callbacks for the locate button independently for different library tabs.
- Adds logic to monitor list scroll position using `snapshotFlow`, dynamically showing or hiding the locate button based on whether the current song is already visible on screen.
- **UI Components**:
- Updates `LibraryActionRow` to include a new `MyLocation` icon button next to the sort button.
- Adds smooth animations (slide and fade) for the locate button's appearance.
- Refines the shape of action buttons using `animateDpAsState` to create a cohesive grouped appearance when the locate button is visible.
- **Tab Implementations**:
- Updates `LibrarySongsTab`, `LibraryLikedSongsTab`, and `LibraryFolderDetail` to support current song location tracking and scroll-to-item functionality.
- Integrates `DisposableEffect` to clean up visibility and action states when tabs are disposed or navigated away from.
- **Sync Management**:
- Refactors `SyncManager.sync()` to be lifecycle-aware using `sharingScope`, implementing a check against the last sync timestamp.
- Increases the minimum sync interval from 5 minutes to 6 hours (`MIN_SYNC_INTERVAL_MS`) to reduce redundant background work.
- Removes the forced `mediaStoreObserver` rescan and the `onResume` sync trigger in `MainActivity` to prevent excessive syncing.
- **MainViewModel**:
- Introduces `hasCompletedInitialSync` StateFlow to track if the library has ever been successfully synchronized.
- Updates `isSyncing` and `isLibraryEmpty` initial states to `false` for more predictable UI behavior on startup.
- **UI & Performance**:
- Refines the loading screen logic in `MainActivity` to only show the splash/loading state if the library is empty and an initial sync has never been completed.
- Cleans up unused `SyncManager` injection in `MainActivity`.
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.
General fixes and added littel features