# antoneeh10/downtik-android architecture

> Architecture diagram of the GitHub repository antoneeh10/downtik-android, 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/antoneeh10/downtik-android
- Repository: https://github.com/antoneeh10/downtik-android

## Overview

DownTik is an Android app for downloading TikTok videos, extracting audio, and managing locally saved media. Its main workflow takes a TikTok URL through media lookup and download into organized device storage; playback, history, settings, and release updates are supporting capabilities. The README documents these product flows, but the sampled source contains no application implementation, so links reflect documented behavior and uncertain internal wiring is omitted.

Main entry points: [`app/src/main/java/com/example/ui/MainViewModel.kt`](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/MainViewModel.kt) (UI state), [`app/src/main/java/com/example/update/UpdateChecker.kt`](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateChecker.kt) (Update checker), [`app/src/main/java/com/example/data/repository/VideoRepository.kt`](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/VideoRepository.kt) (Video repository), [`app/src/main/java/com/example/data/network/TikwmApiService.kt`](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/network/TikwmApiService.kt) (TikWM API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and UI"]
  node_activity["App entry<br/>[MainActivity.kt]"]
  node_viewmodel["UI state<br/>[MainViewModel.kt]"]
  node_download_screen["Download screen"]
  node_audio_screen["Audio screen"]
  node_history_screen["History screen<br/>[HistoryScreen.kt]"]
  node_settings_screen["Settings screen<br/>[SettingsScreen.kt]"]
end

subgraph group_media["Media workflows"]
  node_video_repo["Video repository<br/>[VideoRepository.kt]"]
  node_tikwm_api["TikWM API<br/>[TikwmApiService.kt]"]
  node_response_model["Media response<br/>[TikwmResponse.kt]"]
  node_downloader["Video downloader<br/>[VideoDownloader.kt]"]
  node_storage["Media storage<br/>[DownTikStorage.kt]"]
  node_extractor["Audio extractor<br/>[AudioExtractor.kt]"]
  node_player_manager["Player manager"]
  node_video_player["Video player"]
  node_audio_player["Audio player"]
end

subgraph group_persistence["Local data"]
  node_history_repo["History repository"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
  node_history_dao["History DAO"]
  node_history_entity["History record"]
  node_settings_repo["Settings repository"]
end

subgraph group_updates["Release updates"]
  node_update_checker["Update checker<br/>[UpdateChecker.kt]"]
  node_release_resolver["Channel resolver"]
  node_release_channel["Release channels<br/>[ReleaseChannel.kt]"]
  node_update_download["Update downloader"]
  node_update_install["Update installer<br/>[UpdateInstaller.kt]"]
  node_update_dialog["Update dialog<br/>[UpdateDialog.kt]"]
end

node_user(("User"))
node_tikwm_service{{"TikWM service"}}
node_device_files[("Device Downloads")]
node_github_release{{"GitHub releases"}}

node_user -->|"enters URL"| node_download_screen
node_user -->|"selects audio"| node_audio_screen
node_download_screen -->|"submits request"| node_viewmodel
node_audio_screen -->|"requests extraction"| node_viewmodel
node_viewmodel -->|"requests media"| node_video_repo
node_video_repo -->|"looks up URL"| node_tikwm_api
node_tikwm_api -->|"requests metadata"| node_tikwm_service
node_tikwm_api -->|"deserializes response"| node_response_model
node_video_repo -->|"starts download"| node_downloader
node_downloader -->|"saves media"| node_storage
node_storage -->|"writes files"| node_device_files
node_viewmodel -->|"starts extraction"| node_extractor
node_extractor -->|"saves audio"| node_storage
node_user -->|"views history"| node_history_screen
node_history_screen -->|"requests records"| node_history_repo
node_history_repo -->|"reads and writes"| node_history_dao
node_history_dao -->|"queries"| node_database
node_history_dao -->|"uses records"| node_history_entity
node_user -->|"changes settings"| node_settings_screen
node_settings_screen -->|"saves preferences"| node_settings_repo
node_video_player -->|"plays video"| node_player_manager
node_audio_player -->|"plays audio"| node_player_manager
node_user -->|"reviews update"| node_update_dialog
node_update_checker -->|"resolves channel"| node_release_resolver
node_release_resolver -->|"selects channel"| node_release_channel
node_update_checker -->|"checks releases"| node_github_release
node_update_checker -->|"offers update"| node_update_dialog
node_update_dialog -->|"requests download"| node_update_download
node_update_download -->|"fetches APK"| node_github_release
node_update_download -->|"passes APK"| node_update_install

click node_activity "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/MainActivity.kt"
click node_viewmodel "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/MainViewModel.kt"
click node_download_screen "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/MainDownloadScreen.kt"
click node_audio_screen "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/AudioExtractorScreen.kt"
click node_history_screen "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/HistoryScreen.kt"
click node_settings_screen "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/SettingsScreen.kt"
click node_video_repo "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/VideoRepository.kt"
click node_tikwm_api "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/network/TikwmApiService.kt"
click node_response_model "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/model/TikwmResponse.kt"
click node_downloader "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/downloader/VideoDownloader.kt"
click node_storage "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/downloader/DownTikStorage.kt"
click node_extractor "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/downloader/AudioExtractor.kt"
click node_player_manager "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/player/DownTikPlayerManager.kt"
click node_video_player "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/player/DownTikVideoPlayer.kt"
click node_audio_player "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/player/DownTikAudioMiniPlayer.kt"
click node_history_repo "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/HistoryRepository.kt"
click node_database "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/local/AppDatabase.kt"
click node_history_dao "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/local/DownloadHistoryDao.kt"
click node_history_entity "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/local/DownloadHistoryEntity.kt"
click node_settings_repo "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/SettingsRepository.kt"
click node_update_checker "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateChecker.kt"
click node_release_resolver "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/ReleaseChannelResolver.kt"
click node_release_channel "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/ReleaseChannel.kt"
click node_update_download "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateDownloader.kt"
click node_update_install "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateInstaller.kt"
click node_update_dialog "https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/ui/UpdateDialog.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_viewmodel,node_download_screen,node_audio_screen,node_history_screen,node_settings_screen,node_user toneBlue
class node_video_repo,node_tikwm_api,node_response_model,node_downloader,node_storage,node_extractor,node_player_manager,node_video_player,node_audio_player,node_device_files toneAmber
class node_history_repo,node_database,node_history_dao,node_history_entity,node_settings_repo toneMint
class node_update_checker,node_release_resolver,node_release_channel,node_update_download,node_update_install,node_update_dialog toneRose
class node_tikwm_service,node_github_release toneIndigo
```

## Components

### App and UI

- [App entry](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/MainActivity.kt): `app/src/main/java/com/example/MainActivity.kt`
- [UI state](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/MainViewModel.kt): `app/src/main/java/com/example/ui/MainViewModel.kt`
- [Download screen](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/MainDownloadScreen.kt): `app/src/main/java/com/example/ui/screens/MainDownloadScreen.kt`
- [Audio screen](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/AudioExtractorScreen.kt): `app/src/main/java/com/example/ui/screens/AudioExtractorScreen.kt`
- [History screen](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/HistoryScreen.kt): `app/src/main/java/com/example/ui/screens/HistoryScreen.kt`
- [Settings screen](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/screens/SettingsScreen.kt): `app/src/main/java/com/example/ui/screens/SettingsScreen.kt`

### Media workflows

- [Video repository](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/VideoRepository.kt): `app/src/main/java/com/example/data/repository/VideoRepository.kt`
- [TikWM API](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/network/TikwmApiService.kt): `app/src/main/java/com/example/data/network/TikwmApiService.kt`
- [Media response](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/model/TikwmResponse.kt): `app/src/main/java/com/example/data/model/TikwmResponse.kt`
- [Video downloader](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/downloader/VideoDownloader.kt): `app/src/main/java/com/example/downloader/VideoDownloader.kt`
- [Media storage](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/downloader/DownTikStorage.kt): `app/src/main/java/com/example/downloader/DownTikStorage.kt`
- [Audio extractor](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/downloader/AudioExtractor.kt): `app/src/main/java/com/example/downloader/AudioExtractor.kt`
- [Player manager](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/player/DownTikPlayerManager.kt): `app/src/main/java/com/example/player/DownTikPlayerManager.kt`
- [Video player](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/player/DownTikVideoPlayer.kt): `app/src/main/java/com/example/ui/player/DownTikVideoPlayer.kt`
- [Audio player](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/ui/player/DownTikAudioMiniPlayer.kt): `app/src/main/java/com/example/ui/player/DownTikAudioMiniPlayer.kt`

### Local data

- [History repository](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/HistoryRepository.kt): `app/src/main/java/com/example/data/repository/HistoryRepository.kt`
- [Room database](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/local/AppDatabase.kt): `app/src/main/java/com/example/data/local/AppDatabase.kt`
- [History DAO](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/local/DownloadHistoryDao.kt): `app/src/main/java/com/example/data/local/DownloadHistoryDao.kt`
- [History record](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/local/DownloadHistoryEntity.kt): `app/src/main/java/com/example/data/local/DownloadHistoryEntity.kt`
- [Settings repository](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/data/repository/SettingsRepository.kt): `app/src/main/java/com/example/data/repository/SettingsRepository.kt`

### Release updates

- [Update checker](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateChecker.kt): `app/src/main/java/com/example/update/UpdateChecker.kt`
- [Channel resolver](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/ReleaseChannelResolver.kt): `app/src/main/java/com/example/update/ReleaseChannelResolver.kt`
- [Release channels](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/ReleaseChannel.kt): `app/src/main/java/com/example/update/ReleaseChannel.kt`
- [Update downloader](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateDownloader.kt): `app/src/main/java/com/example/update/UpdateDownloader.kt`
- [Update installer](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/UpdateInstaller.kt): `app/src/main/java/com/example/update/UpdateInstaller.kt`
- [Update dialog](https://github.com/antoneeh10/downtik-android/blob/main/app/src/main/java/com/example/update/ui/UpdateDialog.kt): `app/src/main/java/com/example/update/ui/UpdateDialog.kt`

### Other components

- **User**
- **TikWM service**
- **Device Downloads**
- **GitHub releases**

## Connections

- User → Download screen: enters URL
- User → Audio screen: selects audio
- Download screen → UI state: submits request
- Audio screen → UI state: requests extraction
- UI state → Video repository: requests media
- Video repository → TikWM API: looks up URL
- TikWM API → TikWM service: requests metadata
- TikWM API → Media response: deserializes response
- Video repository → Video downloader: starts download
- Video downloader → Media storage: saves media
- Media storage → Device Downloads: writes files
- UI state → Audio extractor: starts extraction
- Audio extractor → Media storage: saves audio
- User → History screen: views history
- History screen → History repository: requests records
- History repository → History DAO: reads and writes
- History DAO → Room database: queries
- History DAO → History record: uses records
- User → Settings screen: changes settings
- Settings screen → Settings repository: saves preferences
- Video player → Player manager: plays video
- Audio player → Player manager: plays audio
- User → Update dialog: reviews update
- Update checker → Channel resolver: resolves channel
- Channel resolver → Release channels: selects channel
- Update checker → GitHub releases: checks releases
- Update checker → Update dialog: offers update
- Update dialog → Update downloader: requests download
- Update downloader → GitHub releases: fetches APK
- Update downloader → Update installer: passes APK
