# the-jddev/shs-player architecture

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

- Interactive diagram: https://gitdiagram.com/the-jddev/shs-player
- Repository: https://github.com/the-jddev/shs-player
- Video tour (about a minute): https://gitdiagram.com/the-jddev/shs-player/video

## Overview

SHS Player is an Android multimedia app centered on browsing local media and playing video or audio through LibVLC. The main route starts in the app, synchronizes device media, presents the library, then opens the player; playback state and library data are persisted through the data and database layers. Separate product branches cover music, IPTV, the privacy vault, Wi-Fi transfer and QR sharing, downloading, and settings. The README documents these capabilities, while the sampled source is limited, so uncertain links between unsampled feature screens and services are omitted.

Main entry points: [`app/src/main/java/dev/anilbeesetti/nextplayer/navigation/MediaNavGraph.kt`](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/navigation/MediaNavGraph.kt) (Media Navigation), [`feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/MediaPlayerScreen.kt`](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/MediaPlayerScreen.kt) (Player Interface), [`core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalMediaRepository.kt`](https://github.com/the-jddev/shs-player/blob/main/core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalMediaRepository.kt) (Media Repository), [`app/src/main/java/dev/anilbeesetti/nextplayer/MainActivity.kt`](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/MainActivity.kt) (App Entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and Library"]
  node_main["App Entry<br/>[MainActivity.kt]"]
  node_nav["Media Navigation<br/>[MediaNavGraph.kt]"]
  node_music["Music Library<br/>[MusicScreen.kt]"]
  node_picker["Media Selection"]
end

subgraph group_playback["Playback"]
  node_player["Player Interface"]
  node_player_vm["Player State<br/>[PlayerViewModel.kt]"]
  node_adapter["VLC Adapter"]
  node_engine["VLC Engine<br/>[VlcPlayerEngine.kt]"]
  node_background["Background Playback"]
end

subgraph group_storage["Media and Preferences"]
  node_sync["Media Sync"]
  node_media_service["Device Media"]
  node_repository["Media Repository"]
  node_database[("Media Database<br/>[MediaDatabase.kt]")]
  node_preferences["Preferences Store"]
  node_datastore[("DataStore")]
end

subgraph group_extras["Sharing and Extras"]
  node_iptv["Live TV<br/>[WatchTvScreen.kt]"]
  node_vault["Privacy Vault"]
  node_transfer["File Transfer"]
  node_qr["QR Sharing<br/>[QrScannerScreen.kt]"]
  node_downloader["Stream Downloader"]
end

subgraph group_settings["Settings"]
  node_settings_ui["Settings Screens<br/>[SettingsScreen.kt]"]
end

node_user(("User"))

node_user -->|"opens app"| node_main
node_main -->|"starts sync"| node_sync
node_main -->|"shows media"| node_nav
node_nav -->|"loads library"| node_repository
node_nav -->|"selects media"| node_picker
node_sync -->|"scans device"| node_media_service
node_repository -->|"reads and writes"| node_database
node_nav -->|"opens playback"| node_player
node_music -->|"loads media"| node_repository
node_player -->|"sends playback actions"| node_player_vm
node_player_vm -->|"controls player"| node_adapter
node_adapter -->|"delegates playback"| node_engine
node_engine -.->|"supports service playback"| node_background
node_player -->|"stores playback state"| node_repository
node_nav -->|"opens live TV"| node_iptv
node_nav -->|"opens vault"| node_vault
node_nav -->|"opens transfer"| node_transfer
node_transfer -.->|"uses QR sharing"| node_qr
node_player -->|"downloads stream"| node_downloader
node_nav -->|"opens settings"| node_settings_ui
node_settings_ui -->|"updates preferences"| node_preferences
node_preferences -->|"persists settings"| node_datastore

click node_main "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/MainActivity.kt"
click node_nav "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/navigation/MediaNavGraph.kt"
click node_music "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/MusicScreen.kt"
click node_picker "https://github.com/the-jddev/shs-player/blob/main/feature/videopicker/src/main/java/dev/anilbeesetti/nextplayer/feature/videopicker/state/SelectionManager.kt"
click node_sync "https://github.com/the-jddev/shs-player/blob/main/core/media/src/main/java/dev/anilbeesetti/nextplayer/core/media/sync/LocalMediaSynchronizer.kt"
click node_media_service "https://github.com/the-jddev/shs-player/blob/main/core/media/src/main/java/dev/anilbeesetti/nextplayer/core/media/services/LocalMediaService.kt"
click node_repository "https://github.com/the-jddev/shs-player/blob/main/core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalMediaRepository.kt"
click node_database "https://github.com/the-jddev/shs-player/blob/main/core/database/src/main/java/dev/anilbeesetti/nextplayer/core/database/MediaDatabase.kt"
click node_player "https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/MediaPlayerScreen.kt"
click node_player_vm "https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/PlayerViewModel.kt"
click node_adapter "https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlayerAdapter.kt"
click node_engine "https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlayerEngine.kt"
click node_background "https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlaybackService.kt"
click node_iptv "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/tv/WatchTvScreen.kt"
click node_vault "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/PrivacyFolderScreen.kt"
click node_transfer "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/FileTransferScreen.kt"
click node_qr "https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/QrScannerScreen.kt"
click node_downloader "https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/download/UniversalDownloader.kt"
click node_settings_ui "https://github.com/the-jddev/shs-player/blob/main/feature/settings/src/main/java/dev/anilbeesetti/nextplayer/settings/SettingsScreen.kt"
click node_preferences "https://github.com/the-jddev/shs-player/blob/main/core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalPreferencesRepository.kt"
click node_datastore "https://github.com/the-jddev/shs-player/blob/main/core/datastore/src/main/java/dev/anilbeesetti/nextplayer/core/datastore/datasource/PreferencesDataSource.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_main,node_nav,node_music,node_picker,node_user toneBlue
class node_player,node_player_vm,node_adapter,node_engine,node_background toneAmber
class node_sync,node_media_service,node_repository,node_database,node_preferences,node_datastore toneMint
class node_iptv,node_vault,node_transfer,node_qr,node_downloader toneRose
class node_settings_ui toneIndigo
```

## Components

### App and Library

- [App Entry](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/MainActivity.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/MainActivity.kt`
- [Media Navigation](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/navigation/MediaNavGraph.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/navigation/MediaNavGraph.kt`
- [Music Library](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/MusicScreen.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/ui/MusicScreen.kt`
- [Media Selection](https://github.com/the-jddev/shs-player/blob/main/feature/videopicker/src/main/java/dev/anilbeesetti/nextplayer/feature/videopicker/state/SelectionManager.kt): `feature/videopicker/src/main/java/dev/anilbeesetti/nextplayer/feature/videopicker/state/SelectionManager.kt`

### Playback

- [Player Interface](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/MediaPlayerScreen.kt): `feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/MediaPlayerScreen.kt`
- [Player State](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/PlayerViewModel.kt): `feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/PlayerViewModel.kt`
- [VLC Adapter](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlayerAdapter.kt): `feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlayerAdapter.kt`
- [VLC Engine](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlayerEngine.kt): `feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlayerEngine.kt`
- [Background Playback](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlaybackService.kt): `feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/engine/VlcPlaybackService.kt`

### Media and Preferences

- [Media Sync](https://github.com/the-jddev/shs-player/blob/main/core/media/src/main/java/dev/anilbeesetti/nextplayer/core/media/sync/LocalMediaSynchronizer.kt): `core/media/src/main/java/dev/anilbeesetti/nextplayer/core/media/sync/LocalMediaSynchronizer.kt`
- [Device Media](https://github.com/the-jddev/shs-player/blob/main/core/media/src/main/java/dev/anilbeesetti/nextplayer/core/media/services/LocalMediaService.kt): `core/media/src/main/java/dev/anilbeesetti/nextplayer/core/media/services/LocalMediaService.kt`
- [Media Repository](https://github.com/the-jddev/shs-player/blob/main/core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalMediaRepository.kt): `core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalMediaRepository.kt`
- [Media Database](https://github.com/the-jddev/shs-player/blob/main/core/database/src/main/java/dev/anilbeesetti/nextplayer/core/database/MediaDatabase.kt): `core/database/src/main/java/dev/anilbeesetti/nextplayer/core/database/MediaDatabase.kt`
- [Preferences Store](https://github.com/the-jddev/shs-player/blob/main/core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalPreferencesRepository.kt): `core/data/src/main/java/dev/anilbeesetti/nextplayer/core/data/repository/LocalPreferencesRepository.kt`
- [DataStore](https://github.com/the-jddev/shs-player/blob/main/core/datastore/src/main/java/dev/anilbeesetti/nextplayer/core/datastore/datasource/PreferencesDataSource.kt): `core/datastore/src/main/java/dev/anilbeesetti/nextplayer/core/datastore/datasource/PreferencesDataSource.kt`

### Sharing and Extras

- [Live TV](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/tv/WatchTvScreen.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/ui/tv/WatchTvScreen.kt`
- [Privacy Vault](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/PrivacyFolderScreen.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/ui/PrivacyFolderScreen.kt`
- [File Transfer](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/FileTransferScreen.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/ui/FileTransferScreen.kt`
- [QR Sharing](https://github.com/the-jddev/shs-player/blob/main/app/src/main/java/dev/anilbeesetti/nextplayer/ui/QrScannerScreen.kt): `app/src/main/java/dev/anilbeesetti/nextplayer/ui/QrScannerScreen.kt`
- [Stream Downloader](https://github.com/the-jddev/shs-player/blob/main/feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/download/UniversalDownloader.kt): `feature/player/src/main/java/dev/anilbeesetti/nextplayer/feature/player/download/UniversalDownloader.kt`

### Settings

- [Settings Screens](https://github.com/the-jddev/shs-player/blob/main/feature/settings/src/main/java/dev/anilbeesetti/nextplayer/settings/SettingsScreen.kt): `feature/settings/src/main/java/dev/anilbeesetti/nextplayer/settings/SettingsScreen.kt`

### Other components

- **User**

## Connections

- User → App Entry: opens app
- App Entry → Media Sync: starts sync
- App Entry → Media Navigation: shows media
- Media Navigation → Media Repository: loads library
- Media Navigation → Media Selection: selects media
- Media Sync → Device Media: scans device
- Media Repository → Media Database: reads and writes
- Media Navigation → Player Interface: opens playback
- Music Library → Media Repository: loads media
- Player Interface → Player State: sends playback actions
- Player State → VLC Adapter: controls player
- VLC Adapter → VLC Engine: delegates playback
- VLC Engine → Background Playback: supports service playback
- Player Interface → Media Repository: stores playback state
- Media Navigation → Live TV: opens live TV
- Media Navigation → Privacy Vault: opens vault
- Media Navigation → File Transfer: opens transfer
- File Transfer → QR Sharing: uses QR sharing
- Player Interface → Stream Downloader: downloads stream
- Media Navigation → Settings Screens: opens settings
- Settings Screens → Preferences Store: updates preferences
- Preferences Store → DataStore: persists settings
