# andvipgroup/vcamera architecture

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

- Interactive diagram: https://gitdiagram.com/andvipgroup/vcamera
- Repository: https://github.com/andvipgroup/vcamera

## Overview

VCamera is an Android app for configuring camera substitution and managing apps in virtual user spaces. The main workflow is to open settings, choose a camera source and protection mode, then save configuration for the camera-substitution runtime; the README also describes photo, video, network-video, and image-transform capabilities. A separate workflow selects host apps and installs them into a virtual user space. The supplied excerpts show settings and app-management behavior, but not the camera hook or media playback implementation, so those integration details are represented only at a high level.

Main entry points: [`app/src/main/java/virtual/camera/app/view/main/MainActivity.kt`](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/main/MainActivity.kt) (Main screen), [`app/src/main/java/virtual/camera/app/data/AppsRepository.kt`](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/AppsRepository.kt) (Apps repository), [`app/src/main/java/virtual/camera/app/view/list/ListActivity.kt`](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/list/ListActivity.kt) (App picker), [`app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java`](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java) (Camera settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_camera["Camera configuration"]
  node_settings_activity["Settings screen<br/>[SettingActivity.kt]"]
  node_settings["Camera settings"]
  node_media_input["Media selection"]
  node_camera_config["Saved camera configuration"]
  node_camera_runtime["Camera substitution runtime"]
end

subgraph group_apps["Virtual app management"]
  node_main["Main screen<br/>[MainActivity.kt]"]
  node_app_picker["App picker<br/>[ListActivity.kt]"]
  node_app_list_vm["App-list view model<br/>[ListViewModel.kt]"]
  node_apps_view["Virtual-space apps<br/>[AppsFragment.kt]"]
  node_apps_vm["Apps view model<br/>[AppsViewModel.kt]"]
  node_apps_repo["Apps repository<br/>[AppsRepository.kt]"]
  node_gms_screen["GMS manager"]
  node_gms_vm["GMS view model<br/>[GmsViewModel.kt]"]
  node_gms_repo["GMS repository<br/>[GmsRepository.kt]"]
  node_xp_repo["Module repository<br/>[XpRepository.kt]"]
end

subgraph group_platform["App platform services"]
  node_app_records["App records<br/>[AppInfo.kt]"]
  node_remark_store[("User preferences<br/>[AppManager.kt]")]
  node_hack_api["Virtualization API"]
end

subgraph group_environment["Environment check"]
  node_env_demo["Environment demo<br/>[MainActivity.java]"]
  node_native_check["Native path check<br/>[native-lib.cpp]"]
end

node_user(("User"))
node_camera_consumer(("Camera-using app"))

node_user -->|"opens"| node_main
node_main -->|"opens"| node_settings_activity
node_user -->|"configures"| node_settings
node_settings -->|"selects media"| node_media_input
node_settings -->|"saves settings"| node_camera_config
node_camera_runtime -.->|"reads settings"| node_camera_config
node_camera_runtime -.->|"substitutes camera"| node_camera_consumer
node_user -->|"chooses app"| node_app_picker
node_main -->|"opens"| node_app_picker
node_app_picker -->|"requests apps"| node_app_list_vm
node_app_list_vm -->|"loads list"| node_apps_repo
node_apps_repo -->|"queries packages"| node_hack_api
node_apps_repo -->|"creates records"| node_app_records
node_app_picker -->|"returns selection"| node_main
node_main -->|"routes install"| node_apps_view
node_apps_view -->|"requests actions"| node_apps_vm
node_apps_vm -->|"delegates operations"| node_apps_repo
node_apps_repo -->|"installs or launches"| node_hack_api
node_apps_repo -->|"updates ordering"| node_remark_store
node_main -->|"stores remarks"| node_remark_store
node_user -->|"manages GMS"| node_gms_screen
node_gms_screen -->|"requests changes"| node_gms_vm
node_gms_vm -->|"delegates"| node_gms_repo
node_user -->|"runs check"| node_env_demo
node_env_demo -->|"calls native method"| node_native_check

click node_main "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/main/MainActivity.kt"
click node_settings_activity "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingActivity.kt"
click node_settings "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java"
click node_media_input "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java"
click node_camera_config "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java"
click node_app_picker "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/list/ListActivity.kt"
click node_app_list_vm "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/list/ListViewModel.kt"
click node_apps_view "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/apps/AppsFragment.kt"
click node_apps_vm "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/apps/AppsViewModel.kt"
click node_apps_repo "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/AppsRepository.kt"
click node_app_records "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/bean/AppInfo.kt"
click node_remark_store "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/app/AppManager.kt"
click node_gms_screen "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/gms/GmsManagerActivity.kt"
click node_gms_vm "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/gms/GmsViewModel.kt"
click node_gms_repo "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/GmsRepository.kt"
click node_xp_repo "https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/XpRepository.kt"
click node_env_demo "https://github.com/andvipgroup/vcamera/blob/main/check_env_demo/code/MainActivity.java"
click node_native_check "https://github.com/andvipgroup/vcamera/blob/main/check_env_demo/code/native-lib.cpp"

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_settings_activity,node_settings,node_media_input,node_camera_config,node_camera_runtime,node_user toneBlue
class node_main,node_app_picker,node_app_list_vm,node_apps_view,node_apps_vm,node_apps_repo,node_gms_screen,node_gms_vm,node_gms_repo,node_xp_repo toneAmber
class node_app_records,node_remark_store,node_hack_api toneMint
class node_env_demo,node_native_check toneRose
class node_camera_consumer toneIndigo
```

## Components

### Camera configuration

- [Settings screen](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingActivity.kt): `app/src/main/java/virtual/camera/app/view/setting/SettingActivity.kt`
- [Camera settings](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java): `app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java`
- [Media selection](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java): `app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java`
- [Saved camera configuration](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java): `app/src/main/java/virtual/camera/app/view/setting/SettingFragment.java`
- **Camera substitution runtime**

### Virtual app management

- [Main screen](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/main/MainActivity.kt): `app/src/main/java/virtual/camera/app/view/main/MainActivity.kt`
- [App picker](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/list/ListActivity.kt): `app/src/main/java/virtual/camera/app/view/list/ListActivity.kt`
- [App-list view model](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/list/ListViewModel.kt): `app/src/main/java/virtual/camera/app/view/list/ListViewModel.kt`
- [Virtual-space apps](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/apps/AppsFragment.kt): `app/src/main/java/virtual/camera/app/view/apps/AppsFragment.kt`
- [Apps view model](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/apps/AppsViewModel.kt): `app/src/main/java/virtual/camera/app/view/apps/AppsViewModel.kt`
- [Apps repository](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/AppsRepository.kt): `app/src/main/java/virtual/camera/app/data/AppsRepository.kt`
- [GMS manager](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/gms/GmsManagerActivity.kt): `app/src/main/java/virtual/camera/app/view/gms/GmsManagerActivity.kt`
- [GMS view model](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/view/gms/GmsViewModel.kt): `app/src/main/java/virtual/camera/app/view/gms/GmsViewModel.kt`
- [GMS repository](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/GmsRepository.kt): `app/src/main/java/virtual/camera/app/data/GmsRepository.kt`
- [Module repository](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/data/XpRepository.kt): `app/src/main/java/virtual/camera/app/data/XpRepository.kt`

### App platform services

- [App records](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/bean/AppInfo.kt): `app/src/main/java/virtual/camera/app/bean/AppInfo.kt`
- [User preferences](https://github.com/andvipgroup/vcamera/blob/main/app/src/main/java/virtual/camera/app/app/AppManager.kt): `app/src/main/java/virtual/camera/app/app/AppManager.kt`
- **Virtualization API**

### Environment check

- [Environment demo](https://github.com/andvipgroup/vcamera/blob/main/check_env_demo/code/MainActivity.java): `check_env_demo/code/MainActivity.java`
- [Native path check](https://github.com/andvipgroup/vcamera/blob/main/check_env_demo/code/native-lib.cpp): `check_env_demo/code/native-lib.cpp`

### Other components

- **User**
- **Camera-using app**

## Connections

- User → Main screen: opens
- Main screen → Settings screen: opens
- User → Camera settings: configures
- Camera settings → Media selection: selects media
- Camera settings → Saved camera configuration: saves settings
- Camera substitution runtime → Saved camera configuration: reads settings
- Camera substitution runtime → Camera-using app: substitutes camera
- User → App picker: chooses app
- Main screen → App picker: opens
- App picker → App-list view model: requests apps
- App-list view model → Apps repository: loads list
- Apps repository → Virtualization API: queries packages
- Apps repository → App records: creates records
- App picker → Main screen: returns selection
- Main screen → Virtual-space apps: routes install
- Virtual-space apps → Apps view model: requests actions
- Apps view model → Apps repository: delegates operations
- Apps repository → Virtualization API: installs or launches
- Apps repository → User preferences: updates ordering
- Main screen → User preferences: stores remarks
- User → GMS manager: manages GMS
- GMS manager → GMS view model: requests changes
- GMS view model → GMS repository: delegates
- User → Environment demo: runs check
- Environment demo → Native path check: calls native method
