# dora4/doramusic architecture

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

- Interactive diagram: https://gitdiagram.com/dora4/doramusic
- Repository: https://github.com/dora4/doramusic

## Overview

DoraMusic is an Android music player. Its primary workflow is browsing or scanning local audio, selecting tracks, and controlling playback through a persistent media service; the README also highlights playback modes, equalizer, notifications, shake-to-skip, headset handling, and theming. The tree and sampled excerpts support the playback/service boundaries and several network APIs, but do not expose all UI-to-service wiring, so uncertain caller links are omitted.

Main entry points: [`app/src/main/java/site/doramusic/app/media/MediaService.kt`](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MediaService.kt) (Media service), [`app/src/main/java/site/doramusic/app/db/Music.java`](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/db/Music.java) (Music records), [`app/src/main/java/site/doramusic/app/ui/UIManager.kt`](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/UIManager.kt) (Library views), [`app/src/main/java/site/doramusic/app/media/MusicControl.java`](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MusicControl.java) (Playback control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_library["Music library"]
  node_library_ui["Library views<br/>[UIManager.kt]"]
  node_scanner["Music scanner<br/>[MusicScanner.kt]"]
  node_music_store[("Music records<br/>[Music.java]")]
  node_search["Local search"]
end

subgraph group_playback["Playback"]
  node_media_service["Media service<br/>[MediaService.kt]"]
  node_music_control["Playback control<br/>[MusicControl.java]"]
  node_player["Audio engine"]
  node_media_manager["Media manager<br/>[MediaManager.kt]"]
  node_download["Download service<br/>[DownloadService.kt]"]
  node_download_tasks[("Download tasks<br/>[DownloadTask.kt]")]
end

subgraph group_experience["Player experience"]
  node_main["Main screen<br/>[MainActivity.kt]"]
  node_lyrics["Lyrics<br/>[DoraLyric.kt]"]
end

subgraph group_online["Online features"]
  node_guessing_ui["Guessing screens"]
  node_guessing_api["Guessing API<br/>[GuessingService.kt]"]
  node_chat_ui["Chat room"]
  node_chat_api["Chat API<br/>[ChatService.kt]"]
  node_chat_ws["Chat websocket<br/>[ChatWsManager.kt]"]
  node_sysmsg["System messages<br/>[SysMsgWsManager.kt]"]
  node_feedback["Feedback<br/>[FeedbackService.kt]"]
  node_tracking["Event tracking<br/>[TrackService.kt]"]
end

subgraph group_platform["App platform"]
  node_preferences[("Player preferences<br/>[PrefsManager.kt]")]
end

node_listener(("Music listener"))
node_backend{{"Dora services"}}
node_android{{"Android system"}}

node_listener -->|"opens"| node_main
node_main -->|"shows library"| node_library_ui
node_library_ui -->|"reads tracks"| node_music_store
node_scanner -->|"updates tracks"| node_music_store
node_search -->|"searches tracks"| node_music_store
node_media_service -->|"delegates playback"| node_music_control
node_music_control -->|"controls audio"| node_player
node_media_service -->|"reads settings"| node_preferences
node_media_service -->|"connects"| node_sysmsg
node_media_service -->|"posts notifications"| node_android
node_media_service -->|"runs foreground"| node_android
node_download -->|"loads and saves"| node_download_tasks
node_listener -->|"opens"| node_guessing_ui
node_guessing_api -->|"requests"| node_backend
node_listener -->|"opens"| node_chat_ui
node_chat_api -->|"requests"| node_backend
node_chat_ws -->|"connects"| node_backend
node_sysmsg -->|"connects"| node_backend
node_feedback -->|"submits"| node_backend
node_tracking -->|"sends events"| node_backend

click node_main "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/activity/MainActivity.kt"
click node_library_ui "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/UIManager.kt"
click node_scanner "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MusicScanner.kt"
click node_music_store "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/db/Music.java"
click node_search "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/search/ScanMusicActivity.kt"
click node_media_service "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MediaService.kt"
click node_music_control "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MusicControl.java"
click node_player "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/SimpleAudioPlayer.kt"
click node_media_manager "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MediaManager.kt"
click node_download "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/service/DownloadService.kt"
click node_download_tasks "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/model/DownloadTask.kt"
click node_lyrics "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/lrc/DoraLyric.kt"
click node_preferences "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/util/PrefsManager.kt"
click node_guessing_ui "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/activity/GuessingActivity.kt"
click node_guessing_api "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/http/service/GuessingService.kt"
click node_chat_ui "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/chat/ChatRoomActivity.kt"
click node_chat_api "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/chat/ChatService.kt"
click node_chat_ws "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/chat/ChatWsManager.kt"
click node_sysmsg "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/sysmsg/SysMsgWsManager.kt"
click node_feedback "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/feedback/FeedbackService.kt"
click node_tracking "https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/track/TrackService.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_library_ui,node_scanner,node_music_store,node_search toneBlue
class node_media_service,node_music_control,node_player,node_media_manager,node_download,node_download_tasks toneAmber
class node_main,node_lyrics toneMint
class node_guessing_ui,node_guessing_api,node_chat_ui,node_chat_api,node_chat_ws,node_sysmsg,node_feedback,node_tracking toneRose
class node_preferences,node_listener,node_backend,node_android toneIndigo
```

## Components

### Music library

- [Library views](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/UIManager.kt): `app/src/main/java/site/doramusic/app/ui/UIManager.kt`
- [Music scanner](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MusicScanner.kt): `app/src/main/java/site/doramusic/app/media/MusicScanner.kt`
- [Music records](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/db/Music.java): `app/src/main/java/site/doramusic/app/db/Music.java`
- [Local search](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/search/ScanMusicActivity.kt): `app/src/main/java/site/doramusic/app/search/ScanMusicActivity.kt`

### Playback

- [Media service](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MediaService.kt): `app/src/main/java/site/doramusic/app/media/MediaService.kt`
- [Playback control](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MusicControl.java): `app/src/main/java/site/doramusic/app/media/MusicControl.java`
- [Audio engine](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/SimpleAudioPlayer.kt): `app/src/main/java/site/doramusic/app/media/SimpleAudioPlayer.kt`
- [Media manager](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/media/MediaManager.kt): `app/src/main/java/site/doramusic/app/media/MediaManager.kt`
- [Download service](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/service/DownloadService.kt): `app/src/main/java/site/doramusic/app/service/DownloadService.kt`
- [Download tasks](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/model/DownloadTask.kt): `app/src/main/java/site/doramusic/app/model/DownloadTask.kt`

### Player experience

- [Main screen](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/activity/MainActivity.kt): `app/src/main/java/site/doramusic/app/ui/activity/MainActivity.kt`
- [Lyrics](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/lrc/DoraLyric.kt): `app/src/main/java/site/doramusic/app/lrc/DoraLyric.kt`

### Online features

- [Guessing screens](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/ui/activity/GuessingActivity.kt): `app/src/main/java/site/doramusic/app/ui/activity/GuessingActivity.kt`
- [Guessing API](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/http/service/GuessingService.kt): `app/src/main/java/site/doramusic/app/http/service/GuessingService.kt`
- [Chat room](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/chat/ChatRoomActivity.kt): `app/src/main/java/site/doramusic/app/chat/ChatRoomActivity.kt`
- [Chat API](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/chat/ChatService.kt): `app/src/main/java/site/doramusic/app/chat/ChatService.kt`
- [Chat websocket](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/chat/ChatWsManager.kt): `app/src/main/java/site/doramusic/app/chat/ChatWsManager.kt`
- [System messages](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/sysmsg/SysMsgWsManager.kt): `app/src/main/java/site/doramusic/app/sysmsg/SysMsgWsManager.kt`
- [Feedback](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/feedback/FeedbackService.kt): `app/src/main/java/site/doramusic/app/feedback/FeedbackService.kt`
- [Event tracking](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/track/TrackService.kt): `app/src/main/java/site/doramusic/app/track/TrackService.kt`

### App platform

- [Player preferences](https://github.com/dora4/doramusic/blob/main/app/src/main/java/site/doramusic/app/util/PrefsManager.kt): `app/src/main/java/site/doramusic/app/util/PrefsManager.kt`

### Other components

- **Music listener**
- **Dora services**
- **Android system**

## Connections

- Music listener → Main screen: opens
- Main screen → Library views: shows library
- Library views → Music records: reads tracks
- Music scanner → Music records: updates tracks
- Local search → Music records: searches tracks
- Media service → Playback control: delegates playback
- Playback control → Audio engine: controls audio
- Media service → Player preferences: reads settings
- Media service → System messages: connects
- Media service → Android system: posts notifications
- Media service → Android system: runs foreground
- Download service → Download tasks: loads and saves
- Music listener → Guessing screens: opens
- Guessing API → Dora services: requests
- Music listener → Chat room: opens
- Chat API → Dora services: requests
- Chat websocket → Dora services: connects
- System messages → Dora services: connects
- Feedback → Dora services: submits
- Event tracking → Dora services: sends events
