# mateusrodcosta/vidyamusic architecture

> Architecture diagram of the GitHub repository mateusrodcosta/vidyamusic, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mateusrodcosta/vidyamusic
- Repository: https://github.com/mateusrodcosta/vidyamusic

## Overview

Vidya Music is an Android/Jetpack Compose player for the Vidya Intarweb Playlist. A user opens the playlist experience; the app loads playlist configuration, fetches a selected playlist and its tracks, then presents playback controls backed by a Media3 session. Settings form a separate branch for theme and playback preferences, with an About screen. The graph reflects documented capabilities and sampled repository/player implementations; view-model orchestration and several UI/repository details are inferred only from their named modules, so uncertain internal links are omitted.

Main entry points: [`app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/MainActivity.kt`](https://github.com/mateusrodcosta/vidyamusic/blob/dev/app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/MainActivity.kt) (Main activity), [`features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/PlaylistViewModel.kt`](https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/PlaylistViewModel.kt) (Playlist view model), [`data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PlaylistRepositoryImpl.kt`](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PlaylistRepositoryImpl.kt) (Playlist repository), [`data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/AudioControllerImpl.kt`](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/AudioControllerImpl.kt) (Audio controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and navigation"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_app_root["App setup<br/>[VidyaMusicApp.kt]"]
end

subgraph group_playlist["Playlist discovery"]
  node_playlist_ui["Playlist screen<br/>[PlaylistScreen.kt]"]
  node_playlist_vm["Playlist view model"]
  node_playlist_usecases["Playlist use cases"]
  node_available_usecase["Available playlists"]
  node_config_repo["Config repository"]
  node_asset_reader["Asset reader"]
  node_config_asset["Playlist config"]
  node_playlist_repo["Playlist repository"]
  node_playlist_entity["Playlist and tracks<br/>[PlaylistEntity.kt]"]
end

subgraph group_playback["Playback"]
  node_audio_api["Audio controller API<br/>[AudioController.kt]"]
  node_audio_impl["Audio controller"]
  node_track_mapper["Track mapper<br/>[TrackMapper.kt]"]
  node_playback_service["Playback service<br/>[PlaybackService.kt]"]
end

subgraph group_settings["Settings"]
  node_settings_ui["Settings screens<br/>[SettingsScreen.kt]"]
  node_settings_vm["Settings view model"]
  node_preferences_api["Preferences API"]
  node_preferences_repo[("Preferences store")]
  node_about_ui["About screen<br/>[AboutScreen.kt]"]
end

node_user(("Listener"))
node_playlist_service(("Playlist service"))
node_media_backend["Media3 player"]

node_user -->|"opens"| node_activity
node_activity -->|"shows"| node_playlist_ui
node_activity -->|"shows"| node_settings_ui
node_activity -->|"navigates"| node_about_ui
node_activity -->|"reads launch state"| node_settings_vm
node_playlist_ui -->|"forwards actions"| node_playlist_vm
node_playlist_vm -->|"requests playlists"| node_available_usecase
node_available_usecase -->|"loads configuration"| node_config_repo
node_config_repo -->|"reads file"| node_asset_reader
node_asset_reader -->|"reads"| node_config_asset
node_playlist_vm -->|"loads selection"| node_playlist_usecases
node_playlist_usecases -->|"fetches playlist"| node_playlist_repo
node_playlist_repo -->|"requests playlist"| node_playlist_service
node_playlist_repo -->|"maps response"| node_playlist_entity
node_playlist_vm -->|"controls playback"| node_audio_api
node_audio_api -->|"implemented by"| node_audio_impl
node_audio_impl -->|"maps tracks"| node_track_mapper
node_audio_impl -->|"connects session"| node_playback_service
node_playback_service -->|"owns player"| node_media_backend
node_settings_ui -->|"forwards changes"| node_settings_vm
node_settings_vm -->|"reads and updates"| node_preferences_api
node_preferences_api -->|"implemented by"| node_preferences_repo

click node_activity "https://github.com/mateusrodcosta/vidyamusic/blob/dev/app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/MainActivity.kt"
click node_app_root "https://github.com/mateusrodcosta/vidyamusic/blob/dev/app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/VidyaMusicApp.kt"
click node_playlist_ui "https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/screens/PlaylistScreen.kt"
click node_playlist_vm "https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/PlaylistViewModel.kt"
click node_playlist_usecases "https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/usecases/LoadPlaylistUseCase.kt"
click node_available_usecase "https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/usecases/GetAvailablePlaylistsUseCase.kt"
click node_config_repo "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/ConfigRepositoryImpl.kt"
click node_asset_reader "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/source/AndroidAssetFileReader.kt"
click node_playlist_repo "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PlaylistRepositoryImpl.kt"
click node_playlist_entity "https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/entity/PlaylistEntity.kt"
click node_audio_api "https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/player/AudioController.kt"
click node_audio_impl "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/AudioControllerImpl.kt"
click node_track_mapper "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/TrackMapper.kt"
click node_playback_service "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/PlaybackService.kt"
click node_settings_ui "https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/screens/SettingsScreen.kt"
click node_settings_vm "https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/SettingsViewModel.kt"
click node_preferences_api "https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/repository/PreferencesRepository.kt"
click node_preferences_repo "https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PreferencesRepositoryImpl.kt"
click node_about_ui "https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/screens/AboutScreen.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_activity,node_app_root toneBlue
class node_playlist_ui,node_playlist_vm,node_playlist_usecases,node_available_usecase,node_config_repo,node_asset_reader,node_config_asset,node_playlist_repo,node_playlist_entity toneAmber
class node_audio_api,node_audio_impl,node_track_mapper,node_playback_service toneMint
class node_settings_ui,node_settings_vm,node_preferences_api,node_preferences_repo,node_about_ui toneRose
class node_user,node_playlist_service,node_media_backend toneIndigo
```

## Components

### App and navigation

- [Main activity](https://github.com/mateusrodcosta/vidyamusic/blob/dev/app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/MainActivity.kt): `app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/MainActivity.kt`
- [App setup](https://github.com/mateusrodcosta/vidyamusic/blob/dev/app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/VidyaMusicApp.kt): `app/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/VidyaMusicApp.kt`

### Playlist discovery

- [Playlist screen](https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/screens/PlaylistScreen.kt): `features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/screens/PlaylistScreen.kt`
- [Playlist view model](https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/PlaylistViewModel.kt): `features/playlist/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/playlist/PlaylistViewModel.kt`
- [Playlist use cases](https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/usecases/LoadPlaylistUseCase.kt): `domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/usecases/LoadPlaylistUseCase.kt`
- [Available playlists](https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/usecases/GetAvailablePlaylistsUseCase.kt): `domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/usecases/GetAvailablePlaylistsUseCase.kt`
- [Config repository](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/ConfigRepositoryImpl.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/ConfigRepositoryImpl.kt`
- [Asset reader](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/source/AndroidAssetFileReader.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/source/AndroidAssetFileReader.kt`
- **Playlist config**
- [Playlist repository](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PlaylistRepositoryImpl.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PlaylistRepositoryImpl.kt`
- [Playlist and tracks](https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/entity/PlaylistEntity.kt): `domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/entity/PlaylistEntity.kt`

### Playback

- [Audio controller API](https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/player/AudioController.kt): `domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/player/AudioController.kt`
- [Audio controller](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/AudioControllerImpl.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/AudioControllerImpl.kt`
- [Track mapper](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/TrackMapper.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/TrackMapper.kt`
- [Playback service](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/PlaybackService.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/player/PlaybackService.kt`

### Settings

- [Settings screens](https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/screens/SettingsScreen.kt): `features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/screens/SettingsScreen.kt`
- [Settings view model](https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/SettingsViewModel.kt): `features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/SettingsViewModel.kt`
- [Preferences API](https://github.com/mateusrodcosta/vidyamusic/blob/dev/domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/repository/PreferencesRepository.kt): `domain/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/domain/repository/PreferencesRepository.kt`
- [Preferences store](https://github.com/mateusrodcosta/vidyamusic/blob/dev/data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PreferencesRepositoryImpl.kt): `data/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/data/repository/PreferencesRepositoryImpl.kt`
- [About screen](https://github.com/mateusrodcosta/vidyamusic/blob/dev/features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/screens/AboutScreen.kt): `features/settings/src/main/kotlin/com/mateusrodcosta/apps/vidyamusic/features/settings/screens/AboutScreen.kt`

### Other components

- **Listener**
- **Playlist service**
- **Media3 player**

## Connections

- Listener → Main activity: opens
- Main activity → Playlist screen: shows
- Main activity → Settings screens: shows
- Main activity → About screen: navigates
- Main activity → Settings view model: reads launch state
- Playlist screen → Playlist view model: forwards actions
- Playlist view model → Available playlists: requests playlists
- Available playlists → Config repository: loads configuration
- Config repository → Asset reader: reads file
- Asset reader → Playlist config: reads
- Playlist view model → Playlist use cases: loads selection
- Playlist use cases → Playlist repository: fetches playlist
- Playlist repository → Playlist service: requests playlist
- Playlist repository → Playlist and tracks: maps response
- Playlist view model → Audio controller API: controls playback
- Audio controller API → Audio controller: implemented by
- Audio controller → Track mapper: maps tracks
- Audio controller → Playback service: connects session
- Playback service → Media3 player: owns player
- Settings screens → Settings view model: forwards changes
- Settings view model → Preferences API: reads and updates
- Preferences API → Preferences store: implemented by
