Overview
Dialog components provide user interfaces for creating/editing playlists, editing track metadata, viewing track details, and managing playlist membership.CreatePlaylistDialog
Dialog for creating a new playlist with a user-provided name. Location:ui/components/CreatePlaylistDialog.kt:14
Parameters
Callback invoked when dialog is dismissed without creating
Callback invoked with playlist name when user confirms creation
Features
- Single text field: Name input with validation
- Auto-focus: TextField ready for immediate typing
- Empty validation: Create button only works with non-blank names
- Dark theme: Matches app BackgroundDark theme
UI Elements
- Title: “New Playlist” (localized via
R.string.new_playlist_title) - Input field: Outlined text field with label “Playlist Name”
- Confirm button: “Create” (primary color, only enabled if name is non-blank)
- Dismiss button: “Cancel” (gray text)
Usage Example
State Management
Internal state:EditPlaylistDialog
Dialog for renaming an existing playlist. Location:ui/components/EditPlaylistDialog.kt:14
Parameters
Current playlist name (pre-populated in text field)
Callback invoked when dialog is dismissed without saving
Callback invoked with new playlist name when user confirms edit
Features
- Pre-filled input: Text field initialized with current name
- Change detection: Save button only works if name changed and non-blank
- Same validation: Prevents saving unchanged or empty names
UI Elements
- Title: “Edit Playlist” (localized via
R.string.edit_playlist_title) - Input field: Outlined text field with current name as initial value
- Confirm button: “Save” (only enabled if name is different and non-blank)
- Dismiss button: “Cancel”
Usage Example
Validation Logic
EditTrackDialog
Dialog for editing audio file metadata (title, artist, album, year). Location:ui/components/EditTrackDialog.kt:19
Parameters
Current metadata values to pre-populate fields
Callback invoked when dialog is dismissed without saving
Callback invoked with updated metadata when user confirms changes
Features
- Four text fields: Title, Artist, Album, Year
- Pre-filled values: All fields initialized with current metadata
- No validation: Allows saving empty values (user discretion)
- Immediate save: Dialog closes and background save begins
TrackMetadata Data Class
UI Elements
- Title: “Edit Track” (localized)
- Four text fields (all outlined, dark theme):
- Title (label: “Title”)
- Artist (label: “Artist”)
- Album (label: “Album”)
- Year (label: “Year”)
- Confirm button: “Save” (primary color)
- Dismiss button: “Cancel”
Usage Example
Text Field Styling
InternalEditTextField composable:
TrackDetailsDialog
Read-only dialog displaying detailed track file information. Location:ui/components/TrackDetailsDialog.kt:22
Parameters
Track object containing file metadata
Callback invoked when dialog is closed
Features
- Read-only: No editing, information display only
- File details: Path, size, format, bitrate
- No actions: Single “Close” button
Displayed Information
| Label | Value |
|---|---|
| Path | track.filePath |
| Size | track.getFormattedSize() (e.g., “3.2 MB”) |
| Format | track.mimeType (e.g., “audio/flac”) |
| Bitrate | ”Unknown” (not currently available) |
UI Elements
- Title: “Details”
- Detail rows: Label (primary color, bold 12sp) + value (white, 14sp)
- Close button: “Close” in primary color
Usage Example
DetailRow Component
Internal composable for rendering label-value pairs:AddToPlaylistBottomSheet
Bottom sheet for selecting a playlist to add a track to, with quick playlist creation. Location:ui/components/AddToPlaylistBottomSheet.kt:36
Parameters
List of available playlists to display
Callback invoked when bottom sheet is dismissed
Callback invoked when user selects a playlist. Shows toast confirmation.
Callback to open create playlist dialog
Features
- Bottom sheet UI: Modal sheet with drag handle
- Favorites highlight: “Favorites” playlist shown first with heart icon
- Create button: Quick access to create new playlist
- Toast feedback: Shows “Added to [playlist name]” confirmation
- Scrollable list: LazyColumn for many playlists
UI Elements
- Header: “Add to Playlist” title (18sp, bold, centered)
- Create button: Full-width button with plus icon and “New Playlist” text
- Favorites item: Blue gradient background with heart icon
- Regular playlist items: Gray gradient with music note icon
- Track count: “X songs” subtitle for each playlist
Layout Structure
Usage Example
PlaylistItem Component
Internal composable rendering individual playlist rows: Parameters:playlist: LocalPlaylist- Playlist dataonClick: () -> Unit- Click handlerisFavorite: Boolean- Whether this is the favorites playlist
- Background:
Color.White.copy(alpha = 0.05f)with 16dp corner radius - Padding: 16dp all sides
- Icon box: 56x56dp with gradient background
- Favorites: Blue gradient (
#2196F3to#64B5F6) - Regular: Gray gradient (
#B0BEC5to#ECEFF1)
Toast Messages
Uses localized string resource:Common Dialog Styling
All dialogs share consistent styling:Colors
- Container:
BackgroundDark(Color(0xFF121212)) - Title:
Color.White - Text:
Color.WhiteorTextGray - Primary button:
Primarytheme color - Cancel button:
TextGray
Text Fields
- Focused border:
Primarycolor - Unfocused border:
TextGrayor transparent - Container:
SurfaceDark - Text color:
Color.White - Cursor:
Primarycolor
Buttons
- Confirm:
ButtonwithPrimarycontainer color - Dismiss:
TextButtonwithTextGraytext
Related Components
- Music Player - Uses AddToPlaylistBottomSheet
- Track List - Uses EditTrackDialog and TrackDetailsDialog