# googol-apps/oneplayer architecture

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

- Interactive diagram: https://gitdiagram.com/googol-apps/oneplayer
- Repository: https://github.com/googol-apps/oneplayer

## Overview

One Player is an offline-first Android music and video player. Users browse local media, organize playlists, and play audio or video with controls such as gestures, subtitles, background playback, and audio effects. The README documents these capabilities, while sampled code shows the app entry point, media-provider operations, playback service, and widget implementation. Several feature-to-service links below are documented capability relationships rather than verified calls; they are dashed with no source evidence because those feature implementations were not sampled.

Main entry points: [`app/src/main/java/com/zs/audiofy/common/impl/StoreViewModel.kt`](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/common/impl/StoreViewModel.kt) (Store view model), [`app/src/main/java/com/zs/audiofy/library/Library.kt`](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/library/Library.kt) (Library), [`core/src/main/java/com/zs/core/playback/Playback.kt`](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/playback/Playback.kt) (Playback service), [`app/src/main/java/com/zs/audiofy/MainActivity.kt`](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/MainActivity.kt) (Android activity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and discovery"]
  node_activity["Android activity<br/>[MainActivity.kt]"]
  node_home["Home navigation<br/>[Home.kt]"]
end

subgraph group_media["Media library"]
  node_library["Library<br/>[Library.kt]"]
  node_audio["Audio browsing<br/>[Audios.kt]"]
  node_video["Video browsing<br/>[Videos.kt]"]
  node_folders["Folder browsing<br/>[Folders.kt]"]
  node_properties["Media details<br/>[Properties.kt]"]
  node_playlists["Playlist management<br/>[Playlists.kt]"]
  node_members["Playlist members<br/>[Members.kt]"]
  node_editor["Media editor<br/>[Editor.kt]"]
end

subgraph group_playback["Playback experience"]
  node_playback["Playback service<br/>[Playback.kt]"]
  node_remote["Playback controls<br/>[Remote.kt]"]
  node_gestures["Player gestures"]
  node_effects["Audio equalizer<br/>[AudioFx.kt]"]
end

subgraph group_persistence["Media and playlists"]
  node_storevm["Store view model<br/>[StoreViewModel.kt]"]
  node_provider["Media provider<br/>[MediaProvider.kt]"]
  node_providerimpl["MediaStore access"]
  node_playlistdb[("Playlist persistence<br/>[Playlists.kt]")]
end

subgraph group_extras["Platform features"]
  node_widget["Now playing widget<br/>[Universal.kt]"]
  node_market["Store and updates"]
  node_settings["Settings<br/>[Preferences.kt]"]
end

node_user(("Listener"))

node_user -.->|"opens app"| node_activity
node_activity -->|"uses navigation"| node_home
node_home -.->|"shows library"| node_library
node_library -.->|"offers audio"| node_audio
node_library -.->|"offers video"| node_video
node_library -.->|"offers folders"| node_folders
node_audio -.->|"loads media"| node_storevm
node_video -.->|"loads media"| node_storevm
node_folders -.->|"loads media"| node_storevm
node_properties -.->|"reads media"| node_storevm
node_playlists -.->|"manages entries"| node_members
node_storevm -->|"queries media"| node_provider
node_provider -.->|"implemented by"| node_providerimpl
node_providerimpl -.->|"uses playlist data"| node_playlistdb
node_playback -->|"loads queue"| node_playlistdb
node_playback -->|"implements controls"| node_remote
node_user -.->|"adjusts playback"| node_gestures
node_gestures -.->|"controls playback"| node_playback
node_user -.->|"tunes audio"| node_effects
node_user -.->|"edits media"| node_editor
node_playback -.->|"provides now playing"| node_widget
node_activity -->|"uses market services"| node_market
node_user -.->|"configures app"| node_settings

click node_activity "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/MainActivity.kt"
click node_home "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/Home.kt"
click node_library "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/library/Library.kt"
click node_audio "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/audios/Audios.kt"
click node_video "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/videos/Videos.kt"
click node_folders "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/folders/Folders.kt"
click node_properties "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/properties/Properties.kt"
click node_playlists "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/playlists/Playlists.kt"
click node_members "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/playlists/members/Members.kt"
click node_storevm "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/common/impl/StoreViewModel.kt"
click node_provider "https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/store/MediaProvider.kt"
click node_providerimpl "https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/store/MediaProviderImpl.kt"
click node_playlistdb "https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/db/playlists/Playlists.kt"
click node_playback "https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/playback/Playback.kt"
click node_remote "https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/playback/Remote.kt"
click node_gestures "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/console/PlayerGestureHandler.kt"
click node_effects "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/effects/AudioFx.kt"
click node_editor "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/editor/Editor.kt"
click node_widget "https://github.com/googol-apps/oneplayer/blob/master/feature/widget/src/main/java/com/zs/feature/widget/Universal.kt"
click node_market "https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/market/AppMarketManager.kt"
click node_settings "https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/settings/Preferences.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_home toneBlue
class node_library,node_audio,node_video,node_folders,node_properties,node_playlists,node_members,node_editor toneAmber
class node_playback,node_remote,node_gestures,node_effects toneMint
class node_storevm,node_provider,node_providerimpl,node_playlistdb toneRose
class node_widget,node_market,node_settings,node_user toneIndigo
```

## Components

### App and discovery

- [Android activity](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/MainActivity.kt): `app/src/main/java/com/zs/audiofy/MainActivity.kt`
- [Home navigation](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/Home.kt): `app/src/main/java/com/zs/audiofy/Home.kt`

### Media library

- [Library](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/library/Library.kt): `app/src/main/java/com/zs/audiofy/library/Library.kt`
- [Audio browsing](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/audios/Audios.kt): `app/src/main/java/com/zs/audiofy/audios/Audios.kt`
- [Video browsing](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/videos/Videos.kt): `app/src/main/java/com/zs/audiofy/videos/Videos.kt`
- [Folder browsing](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/folders/Folders.kt): `app/src/main/java/com/zs/audiofy/folders/Folders.kt`
- [Media details](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/properties/Properties.kt): `app/src/main/java/com/zs/audiofy/properties/Properties.kt`
- [Playlist management](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/playlists/Playlists.kt): `app/src/main/java/com/zs/audiofy/playlists/Playlists.kt`
- [Playlist members](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/playlists/members/Members.kt): `app/src/main/java/com/zs/audiofy/playlists/members/Members.kt`
- [Media editor](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/editor/Editor.kt): `app/src/main/java/com/zs/audiofy/editor/Editor.kt`

### Playback experience

- [Playback service](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/playback/Playback.kt): `core/src/main/java/com/zs/core/playback/Playback.kt`
- [Playback controls](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/playback/Remote.kt): `core/src/main/java/com/zs/core/playback/Remote.kt`
- [Player gestures](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/console/PlayerGestureHandler.kt): `app/src/main/java/com/zs/audiofy/console/PlayerGestureHandler.kt`
- [Audio equalizer](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/effects/AudioFx.kt): `app/src/main/java/com/zs/audiofy/effects/AudioFx.kt`

### Media and playlists

- [Store view model](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/common/impl/StoreViewModel.kt): `app/src/main/java/com/zs/audiofy/common/impl/StoreViewModel.kt`
- [Media provider](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/store/MediaProvider.kt): `core/src/main/java/com/zs/core/store/MediaProvider.kt`
- [MediaStore access](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/store/MediaProviderImpl.kt): `core/src/main/java/com/zs/core/store/MediaProviderImpl.kt`
- [Playlist persistence](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/db/playlists/Playlists.kt): `core/src/main/java/com/zs/core/db/playlists/Playlists.kt`

### Platform features

- [Now playing widget](https://github.com/googol-apps/oneplayer/blob/master/feature/widget/src/main/java/com/zs/feature/widget/Universal.kt): `feature/widget/src/main/java/com/zs/feature/widget/Universal.kt`
- [Store and updates](https://github.com/googol-apps/oneplayer/blob/master/core/src/main/java/com/zs/core/market/AppMarketManager.kt): `core/src/main/java/com/zs/core/market/AppMarketManager.kt`
- [Settings](https://github.com/googol-apps/oneplayer/blob/master/app/src/main/java/com/zs/audiofy/settings/Preferences.kt): `app/src/main/java/com/zs/audiofy/settings/Preferences.kt`

### Other components

- **Listener**

## Connections

- Listener → Android activity: opens app
- Android activity → Home navigation: uses navigation (evidence: `app/src/main/java/com/zs/audiofy/MainActivity.kt`)
- Home navigation → Library: shows library
- Library → Audio browsing: offers audio
- Library → Video browsing: offers video
- Library → Folder browsing: offers folders
- Audio browsing → Store view model: loads media
- Video browsing → Store view model: loads media
- Folder browsing → Store view model: loads media
- Media details → Store view model: reads media
- Playlist management → Playlist members: manages entries
- Store view model → Media provider: queries media (evidence: `app/src/main/java/com/zs/audiofy/common/impl/StoreViewModel.kt`)
- Media provider → MediaStore access: implemented by (evidence: `core/src/main/java/com/zs/core/store/MediaProviderImpl.kt`)
- MediaStore access → Playlist persistence: uses playlist data
- Playback service → Playlist persistence: loads queue (evidence: `core/src/main/java/com/zs/core/playback/Playback.kt`)
- Playback service → Playback controls: implements controls (evidence: `core/src/main/java/com/zs/core/playback/Playback.kt`)
- Listener → Player gestures: adjusts playback
- Player gestures → Playback service: controls playback
- Listener → Audio equalizer: tunes audio
- Listener → Media editor: edits media
- Playback service → Now playing widget: provides now playing (evidence: `core/src/main/java/com/zs/core/playback/Playback.kt`)
- Android activity → Store and updates: uses market services (evidence: `app/src/main/java/com/zs/audiofy/MainActivity.kt`)
- Listener → Settings: configures app
