# ravindu644/virtualap architecture

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

## Overview

VirtualAP is a rooted-Android Wi-Fi access-point controller. Users configure a routed or container-managed hotspot, start it from the app or Quick Settings, and monitor status and backend logs. The graph follows the app’s documented control path into its shell backend and includes the README’s major networking capabilities. Backend internals and several integrations are documented but not present in the sampled source, so those links are limited to documented behavior.

Main entry points: [`Android/app/src/main/java/com/virtualap/app/ui/viewmodel/APViewModel.kt`](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/viewmodel/APViewModel.kt) (Hotspot viewmodel), [`Android/app/src/main/java/com/virtualap/app/util/Backend.kt`](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Backend.kt) (AP and routing), [`Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt`](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt) (Session coordinator), [`Android/app/src/main/java/com/virtualap/app/util/APManager.kt`](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/APManager.kt) (Backend command manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and setup"]
  node_activity["App entry<br/>[MainActivity.kt]"]
  node_navigation["Screen navigation<br/>[VAPNavigation.kt]"]
  node_setup["Root and setup<br/>[SetupScreen.kt]"]
  node_installer["Backend installer"]
  node_root["Root checker<br/>[RootChecker.kt]"]
end

subgraph group_control["Hotspot control"]
  node_mainui["Hotspot screen<br/>[MainScreen.kt]"]
  node_settings["Settings screen<br/>[SettingsScreen.kt]"]
  node_tile["Quick Settings tile"]
  node_apvm["Hotspot viewmodel<br/>[APViewModel.kt]"]
  node_config["AP configuration<br/>[APConfig.kt]"]
  node_hotspot["Session coordinator<br/>[Hotspot.kt]"]
  node_console["Live terminal<br/>[TerminalConsole.kt]"]
end

subgraph group_network["AP networking"]
  node_manager["Backend command manager<br/>[APManager.kt]"]
  node_engine["Shell backend<br/>[Backend.kt]"]
  node_networking["AP and routing<br/>[Backend.kt]"]
  node_logger["Backend log stream<br/>[BackendLogger.kt]"]
end

subgraph group_state["State and integrations"]
  node_preferences[("Saved preferences")]
  node_androidlog["App status and logs<br/>[Hotspot.kt]"]
end

node_user(("Phone user"))
node_rooted(("Rooted Android"))
node_upstream(("Selected upstream"))
node_clients(("Wi-Fi clients"))
node_container(("Droidspaces container"))

node_user -->|"opens"| node_activity
node_activity -->|"hosts"| node_navigation
node_navigation -->|"routes"| node_setup
node_navigation -->|"routes"| node_mainui
node_setup -->|"checks root"| node_root
node_setup -->|"deploys backend"| node_installer
node_root -->|"checks access"| node_rooted
node_installer -->|"installs binaries"| node_rooted
node_mainui -->|"edits and starts"| node_apvm
node_settings -->|"saves options"| node_preferences
node_apvm -->|"loads config"| node_config
node_config -->|"reads and writes"| node_preferences
node_tile -->|"reads config"| node_preferences
node_tile -->|"starts or stops"| node_hotspot
node_apvm -->|"starts or stops"| node_hotspot
node_apvm -->|"fetches interfaces and containers"| node_manager
node_hotspot -->|"requests status and actions"| node_manager
node_manager -->|"dispatches commands"| node_engine
node_engine -->|"controls AP backend"| node_networking
node_networking -->|"serves hotspot"| node_clients
node_networking -->|"routes client traffic"| node_upstream
node_networking -.->|"bridges managed LAN"| node_container
node_manager -->|"captures output"| node_logger
node_logger -->|"streams logs"| node_androidlog
node_hotspot -->|"publishes session state"| node_androidlog
node_mainui -->|"shows logs"| node_console
node_console -->|"renders stream"| node_androidlog
node_tile -->|"reads session state"| node_androidlog

click node_activity "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/MainActivity.kt"
click node_navigation "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/navigation/VAPNavigation.kt"
click node_setup "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/screen/SetupScreen.kt"
click node_installer "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/VirtualAPInstaller.kt"
click node_root "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/RootChecker.kt"
click node_mainui "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/screen/MainScreen.kt"
click node_settings "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/screen/SettingsScreen.kt"
click node_tile "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/HotspotTileService.kt"
click node_apvm "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/viewmodel/APViewModel.kt"
click node_config "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/APConfig.kt"
click node_hotspot "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt"
click node_manager "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/APManager.kt"
click node_engine "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Backend.kt"
click node_networking "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Backend.kt"
click node_logger "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/BackendLogger.kt"
click node_console "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/component/TerminalConsole.kt"
click node_preferences "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/PreferencesManager.kt"
click node_androidlog "https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Hotspot.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_navigation,node_setup,node_installer,node_root,node_user,node_clients toneBlue
class node_mainui,node_settings,node_tile,node_apvm,node_config,node_hotspot,node_console toneAmber
class node_manager,node_engine,node_networking,node_logger toneMint
class node_preferences,node_androidlog toneRose
class node_rooted,node_upstream,node_container toneIndigo
```

## Components

### App and setup

- [App entry](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/MainActivity.kt): `Android/app/src/main/java/com/virtualap/app/MainActivity.kt`
- [Screen navigation](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/navigation/VAPNavigation.kt): `Android/app/src/main/java/com/virtualap/app/ui/navigation/VAPNavigation.kt`
- [Root and setup](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/screen/SetupScreen.kt): `Android/app/src/main/java/com/virtualap/app/ui/screen/SetupScreen.kt`
- [Backend installer](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/VirtualAPInstaller.kt): `Android/app/src/main/java/com/virtualap/app/util/VirtualAPInstaller.kt`
- [Root checker](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/RootChecker.kt): `Android/app/src/main/java/com/virtualap/app/util/RootChecker.kt`

### Hotspot control

- [Hotspot screen](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/screen/MainScreen.kt): `Android/app/src/main/java/com/virtualap/app/ui/screen/MainScreen.kt`
- [Settings screen](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/screen/SettingsScreen.kt): `Android/app/src/main/java/com/virtualap/app/ui/screen/SettingsScreen.kt`
- [Quick Settings tile](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/HotspotTileService.kt): `Android/app/src/main/java/com/virtualap/app/HotspotTileService.kt`
- [Hotspot viewmodel](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/viewmodel/APViewModel.kt): `Android/app/src/main/java/com/virtualap/app/ui/viewmodel/APViewModel.kt`
- [AP configuration](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/APConfig.kt): `Android/app/src/main/java/com/virtualap/app/util/APConfig.kt`
- [Session coordinator](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt): `Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt`
- [Live terminal](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/ui/component/TerminalConsole.kt): `Android/app/src/main/java/com/virtualap/app/ui/component/TerminalConsole.kt`

### AP networking

- [Backend command manager](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/APManager.kt): `Android/app/src/main/java/com/virtualap/app/util/APManager.kt`
- [Shell backend](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Backend.kt): `Android/app/src/main/java/com/virtualap/app/util/Backend.kt`
- [AP and routing](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Backend.kt): `Android/app/src/main/java/com/virtualap/app/util/Backend.kt`
- [Backend log stream](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/BackendLogger.kt): `Android/app/src/main/java/com/virtualap/app/util/BackendLogger.kt`

### State and integrations

- [Saved preferences](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/PreferencesManager.kt): `Android/app/src/main/java/com/virtualap/app/util/PreferencesManager.kt`
- [App status and logs](https://github.com/ravindu644/virtualap/blob/main/Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt): `Android/app/src/main/java/com/virtualap/app/util/Hotspot.kt`

### Other components

- **Phone user**
- **Rooted Android**
- **Selected upstream**
- **Wi-Fi clients**
- **Droidspaces container**

## Connections

- Phone user → App entry: opens
- App entry → Screen navigation: hosts
- Screen navigation → Root and setup: routes
- Screen navigation → Hotspot screen: routes
- Root and setup → Root checker: checks root
- Root and setup → Backend installer: deploys backend
- Root checker → Rooted Android: checks access
- Backend installer → Rooted Android: installs binaries
- Hotspot screen → Hotspot viewmodel: edits and starts
- Settings screen → Saved preferences: saves options
- Hotspot viewmodel → AP configuration: loads config
- AP configuration → Saved preferences: reads and writes
- Quick Settings tile → Saved preferences: reads config
- Quick Settings tile → Session coordinator: starts or stops
- Hotspot viewmodel → Session coordinator: starts or stops
- Hotspot viewmodel → Backend command manager: fetches interfaces and containers
- Session coordinator → Backend command manager: requests status and actions
- Backend command manager → Shell backend: dispatches commands
- Shell backend → AP and routing: controls AP backend
- AP and routing → Wi-Fi clients: serves hotspot
- AP and routing → Selected upstream: routes client traffic
- AP and routing → Droidspaces container: bridges managed LAN
- Backend command manager → Backend log stream: captures output
- Backend log stream → App status and logs: streams logs
- Session coordinator → App status and logs: publishes session state
- Hotspot screen → Live terminal: shows logs
- Live terminal → App status and logs: renders stream
- Quick Settings tile → App status and logs: reads session state
