# hashaleen420/adelociptv architecture

> Architecture diagram of the GitHub repository hashaleen420/adelociptv, 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/hashaleen420/adelociptv
- Repository: https://github.com/hashaleen420/adelociptv
- Video tour (about a minute): https://gitdiagram.com/hashaleen420/adelociptv/video

## Overview

Adeloc IPTV is an Android IPTV/VOD player: users configure a playlist, browse live channels, movies, or series, consult the TV guide, and play or resume streams. The graph highlights playlist synchronization, catalog discovery, playback, and persisted preferences/history, plus documented multi-view, PiP, casting, and parental-control capabilities. Source excerpts confirm the app navigation, Xtream synchronization, database, and player handoff; some UI-to-repository wiring and feature internals are unsampled, so uncertain links are omitted.

Main entry points: [`app/src/main/java/com/adeloc/iptv/ui/player/VideoPlayer.kt`](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/VideoPlayer.kt) (Video player), [`app/src/main/java/com/adeloc/iptv/MainActivity.kt`](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/MainActivity.kt) (App navigation), [`app/src/main/java/com/adeloc/iptv/ui/dashboard/DashboardScreen.kt`](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/dashboard/DashboardScreen.kt) (Dashboard), [`app/src/main/java/com/adeloc/iptv/data/repository/XtreamSyncRepository.kt`](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/XtreamSyncRepository.kt) (Playlist sync)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App navigation"]
  node_activity["App navigation<br/>[MainActivity.kt]"]
  node_login["Playlist login<br/>[LoginScreen.kt]"]
  node_loginvm["Login state<br/>[LoginViewModel.kt]"]
  node_dashboard["Dashboard<br/>[DashboardScreen.kt]"]
  node_settings["Settings<br/>[SettingsScreen.kt]"]
end

subgraph group_ingest["Playlist ingest"]
  node_m3u["M3U parsing<br/>[ParseM3uUseCase.kt]"]
  node_m3uparser["M3U parser<br/>[M3uParser.kt]"]
  node_xtreamrepo["Xtream repository"]
  node_sync["Playlist sync"]
  node_api["Xtream API"]
  node_worker["Background sync<br/>[SyncWorker.kt]"]
end

subgraph group_catalog["Catalog and guide"]
  node_live["Live TV<br/>[LiveTvDashboard.kt]"]
  node_vod["VOD catalog<br/>[VodDashboard.kt]"]
  node_series["Series details"]
  node_search["Global search"]
  node_guide["TV guide"]
  node_epgsync["EPG sync<br/>[SyncEpgUseCase.kt]"]
end

subgraph group_playback["Playback experience"]
  node_player["Video player<br/>[VideoPlayer.kt]"]
  node_playervm["Player state<br/>[PlayerViewModel.kt]"]
  node_multiview["Multi-view<br/>[MultiViewScreen.kt]"]
  node_pip["Picture-in-picture<br/>[PipUtils.kt]"]
  node_tracks["Track selection"]
  node_cast["Cast playback"]
end

subgraph group_state["Local state"]
  node_prefs[("User preferences<br/>[UserPreferences.kt]")]
  node_database[("Room database<br/>[AppDatabase.kt]")]
  node_daos["Data access<br/>[StreamDao.kt]"]
  node_searchrepo["Search repository"]
end

node_viewer(("Viewer"))
node_provider(("Playlist provider"))
node_receiver(("Cast receiver"))

node_viewer -->|"opens"| node_activity
node_activity -->|"reads active playlist"| node_prefs
node_activity -->|"routes to"| node_login
node_activity -->|"routes to"| node_dashboard
node_activity -->|"opens player"| node_player
node_viewer -->|"configures playlist"| node_login
node_login -->|"submits credentials"| node_loginvm
node_loginvm -->|"uses"| node_xtreamrepo
node_provider -->|"serves playlist data"| node_api
node_m3u -->|"parses with"| node_m3uparser
node_sync -->|"fetches catalog"| node_api
node_sync -->|"stores catalog and EPG"| node_daos
node_worker -->|"runs sync"| node_sync
node_dashboard -->|"opens live TV"| node_live
node_dashboard -->|"opens VOD"| node_vod
node_dashboard -->|"opens series"| node_series
node_search -->|"queries"| node_searchrepo
node_searchrepo -->|"searches streams"| node_daos
node_guide -->|"requests guide data"| node_epgsync
node_epgsync -->|"uses synchronization"| node_sync
node_live -->|"opens stream"| node_player
node_vod -->|"opens stream"| node_player
node_series -->|"plays episode"| node_player
node_player -->|"saves progress"| node_playervm
node_playervm -->|"persists playback state"| node_daos
node_player -->|"selects tracks"| node_tracks
node_player -->|"supports PiP"| node_pip
node_multiview -->|"plays streams"| node_player
node_cast -.->|"casts media"| node_receiver
node_settings -->|"updates preferences"| node_prefs
node_database -->|"provides access"| node_daos

click node_activity "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/MainActivity.kt"
click node_login "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/login/LoginScreen.kt"
click node_loginvm "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/login/LoginViewModel.kt"
click node_dashboard "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/dashboard/DashboardScreen.kt"
click node_settings "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/settings/SettingsScreen.kt"
click node_prefs "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/local/datastore/UserPreferences.kt"
click node_m3u "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/domain/usecase/ParseM3uUseCase.kt"
click node_m3uparser "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/util/M3uParser.kt"
click node_xtreamrepo "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/XtreamRepository.kt"
click node_sync "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/XtreamSyncRepository.kt"
click node_api "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/remote/XtreamApiService.kt"
click node_live "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/tv/LiveTvDashboard.kt"
click node_vod "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/vod/VodDashboard.kt"
click node_series "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/series/SeriesDetailScreen.kt"
click node_search "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/search/GlobalSearchViewModel.kt"
click node_guide "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/tvguide/TvGuideViewModel.kt"
click node_epgsync "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/domain/usecase/SyncEpgUseCase.kt"
click node_player "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/VideoPlayer.kt"
click node_playervm "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/PlayerViewModel.kt"
click node_multiview "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/multiview/MultiViewScreen.kt"
click node_pip "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/PipUtils.kt"
click node_tracks "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/TrackSelectionManager.kt"
click node_cast "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/cast/CastPlayerManager.kt"
click node_database "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/local/AppDatabase.kt"
click node_daos "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/local/dao/StreamDao.kt"
click node_searchrepo "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/SearchRepository.kt"
click node_worker "https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/worker/SyncWorker.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_login,node_loginvm,node_dashboard,node_settings,node_viewer toneBlue
class node_m3u,node_m3uparser,node_xtreamrepo,node_sync,node_api,node_worker toneAmber
class node_live,node_vod,node_series,node_search,node_guide,node_epgsync toneMint
class node_player,node_playervm,node_multiview,node_pip,node_tracks,node_cast toneRose
class node_prefs,node_database,node_daos,node_searchrepo,node_provider,node_receiver toneIndigo
```

## Components

### App navigation

- [App navigation](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/MainActivity.kt): `app/src/main/java/com/adeloc/iptv/MainActivity.kt`
- [Playlist login](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/login/LoginScreen.kt): `app/src/main/java/com/adeloc/iptv/ui/login/LoginScreen.kt`
- [Login state](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/login/LoginViewModel.kt): `app/src/main/java/com/adeloc/iptv/ui/login/LoginViewModel.kt`
- [Dashboard](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/dashboard/DashboardScreen.kt): `app/src/main/java/com/adeloc/iptv/ui/dashboard/DashboardScreen.kt`
- [Settings](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/settings/SettingsScreen.kt): `app/src/main/java/com/adeloc/iptv/ui/settings/SettingsScreen.kt`

### Playlist ingest

- [M3U parsing](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/domain/usecase/ParseM3uUseCase.kt): `app/src/main/java/com/adeloc/iptv/domain/usecase/ParseM3uUseCase.kt`
- [M3U parser](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/util/M3uParser.kt): `app/src/main/java/com/adeloc/iptv/util/M3uParser.kt`
- [Xtream repository](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/XtreamRepository.kt): `app/src/main/java/com/adeloc/iptv/data/repository/XtreamRepository.kt`
- [Playlist sync](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/XtreamSyncRepository.kt): `app/src/main/java/com/adeloc/iptv/data/repository/XtreamSyncRepository.kt`
- [Xtream API](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/remote/XtreamApiService.kt): `app/src/main/java/com/adeloc/iptv/data/remote/XtreamApiService.kt`
- [Background sync](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/worker/SyncWorker.kt): `app/src/main/java/com/adeloc/iptv/worker/SyncWorker.kt`

### Catalog and guide

- [Live TV](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/tv/LiveTvDashboard.kt): `app/src/main/java/com/adeloc/iptv/ui/tv/LiveTvDashboard.kt`
- [VOD catalog](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/vod/VodDashboard.kt): `app/src/main/java/com/adeloc/iptv/ui/vod/VodDashboard.kt`
- [Series details](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/series/SeriesDetailScreen.kt): `app/src/main/java/com/adeloc/iptv/ui/series/SeriesDetailScreen.kt`
- [Global search](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/search/GlobalSearchViewModel.kt): `app/src/main/java/com/adeloc/iptv/ui/search/GlobalSearchViewModel.kt`
- [TV guide](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/tvguide/TvGuideViewModel.kt): `app/src/main/java/com/adeloc/iptv/ui/tvguide/TvGuideViewModel.kt`
- [EPG sync](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/domain/usecase/SyncEpgUseCase.kt): `app/src/main/java/com/adeloc/iptv/domain/usecase/SyncEpgUseCase.kt`

### Playback experience

- [Video player](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/VideoPlayer.kt): `app/src/main/java/com/adeloc/iptv/ui/player/VideoPlayer.kt`
- [Player state](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/PlayerViewModel.kt): `app/src/main/java/com/adeloc/iptv/ui/player/PlayerViewModel.kt`
- [Multi-view](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/multiview/MultiViewScreen.kt): `app/src/main/java/com/adeloc/iptv/ui/multiview/MultiViewScreen.kt`
- [Picture-in-picture](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/PipUtils.kt): `app/src/main/java/com/adeloc/iptv/ui/player/PipUtils.kt`
- [Track selection](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/ui/player/TrackSelectionManager.kt): `app/src/main/java/com/adeloc/iptv/ui/player/TrackSelectionManager.kt`
- [Cast playback](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/cast/CastPlayerManager.kt): `app/src/main/java/com/adeloc/iptv/cast/CastPlayerManager.kt`

### Local state

- [User preferences](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/local/datastore/UserPreferences.kt): `app/src/main/java/com/adeloc/iptv/data/local/datastore/UserPreferences.kt`
- [Room database](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/local/AppDatabase.kt): `app/src/main/java/com/adeloc/iptv/data/local/AppDatabase.kt`
- [Data access](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/local/dao/StreamDao.kt): `app/src/main/java/com/adeloc/iptv/data/local/dao/StreamDao.kt`
- [Search repository](https://github.com/hashaleen420/adelociptv/blob/main/app/src/main/java/com/adeloc/iptv/data/repository/SearchRepository.kt): `app/src/main/java/com/adeloc/iptv/data/repository/SearchRepository.kt`

### Other components

- **Viewer**
- **Playlist provider**
- **Cast receiver**

## Connections

- Viewer → App navigation: opens
- App navigation → User preferences: reads active playlist
- App navigation → Playlist login: routes to
- App navigation → Dashboard: routes to
- App navigation → Video player: opens player
- Viewer → Playlist login: configures playlist
- Playlist login → Login state: submits credentials
- Login state → Xtream repository: uses
- Playlist provider → Xtream API: serves playlist data
- M3U parsing → M3U parser: parses with
- Playlist sync → Xtream API: fetches catalog
- Playlist sync → Data access: stores catalog and EPG
- Background sync → Playlist sync: runs sync
- Dashboard → Live TV: opens live TV
- Dashboard → VOD catalog: opens VOD
- Dashboard → Series details: opens series
- Global search → Search repository: queries
- Search repository → Data access: searches streams
- TV guide → EPG sync: requests guide data
- EPG sync → Playlist sync: uses synchronization
- Live TV → Video player: opens stream
- VOD catalog → Video player: opens stream
- Series details → Video player: plays episode
- Video player → Player state: saves progress
- Player state → Data access: persists playback state
- Video player → Track selection: selects tracks
- Video player → Picture-in-picture: supports PiP
- Multi-view → Video player: plays streams
- Cast playback → Cast receiver: casts media
- Settings → User preferences: updates preferences
- Room database → Data access: provides access
