# sawadikap-nextgen/pwde_repository architecture

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

- Interactive diagram: https://gitdiagram.com/sawadikap-nextgen/pwde_repository
- Repository: https://github.com/sawadikap-nextgen/pwde_repository

## Overview

PWDe is an Android accessibility app for controlling games with head movement, gestures, and voice, alongside setup, calibration, profiles, and cloud sync. The main play path is user navigation into a game, a foreground play session that combines input and sensor engines, and Android accessibility gestures delivered to the game. The tree also includes a HUD-calibration backend. Source excerpts and index support the principal links; several UI and GabAI relationships are represented as subsystems without speculative call edges.

Main entry points: [`Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt) (Live game session), [`Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt`](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt) (Cloud sync engine), [`Android-App/app/src/main/java/com/pwde/app/ui/navigation/PwdeNavHost.kt`](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/ui/navigation/PwdeNavHost.kt) (App navigation), [`Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt`](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt) (Accessibility gestures)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and setup"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_navigation["App navigation<br/>[PwdeNavHost.kt]"]
  node_onboarding["Account and setup"]
  node_gameplay["Gameplay screens"]
end

subgraph group_play["Live game control"]
  node_playservice["Play service<br/>[PlayService.kt]"]
  node_session["Live game session<br/>[LiveGameSession.kt]"]
  node_input["Game input<br/>[GameInput.kt]"]
  node_accessibility["Accessibility gestures"]
  node_face["Face tracking"]
  node_facestate["Pose and gestures<br/>[FaceState.kt]"]
  node_voice["In-game voice"]
  node_wake["Sherpa wake spotting"]
  node_spotter["Keyword spotter<br/>[KeywordSpotter.kt]"]
end

subgraph group_data["Configuration and sync"]
  node_controls[("Control settings")]
  node_profiles[("Game profiles")]
  node_settings[("User settings")]
  node_sync["Cloud sync engine<br/>[CloudSyncEngine.kt]"]
  node_cloud[("Cloud store<br/>[CloudStore.kt]")]
  node_auth["Account authentication<br/>[AuthRepository.kt]"]
end

subgraph group_gabai["Guided calibration"]
  node_gabai["GabAI calibration<br/>[GabAiRepository.kt]"]
  node_gabaiscreens["GabAI screens"]
end

subgraph group_backend["HUD calibration service"]
  node_hud["HUD detector API<br/>[main.py]"]
  node_detector["YOLO detector<br/>[detection.py]"]
  node_game["Game HUD models<br/>[constants.py]"]
end

node_user(("Player"))

node_user -->|"opens app"| node_activity
node_activity -->|"shows"| node_navigation
node_navigation -->|"routes to"| node_onboarding
node_navigation -->|"routes to"| node_gameplay
node_gameplay -.->|"starts play"| node_playservice
node_playservice -->|"runs session"| node_session
node_session -->|"loads controls"| node_controls
node_session -->|"loads profiles"| node_profiles
node_session -->|"reads settings"| node_settings
node_session -->|"starts tracking"| node_face
node_session -->|"starts voice"| node_voice
node_session -->|"uses input"| node_input
node_face -->|"updates state"| node_facestate
node_voice -->|"reads commands"| node_controls
node_wake -->|"runs spotting"| node_spotter
node_accessibility -->|"reads input"| node_input
node_accessibility -->|"uses tracking"| node_face
node_user -.->|"controls screen"| node_accessibility
node_sync -->|"syncs profiles"| node_profiles
node_sync -->|"syncs controls"| node_controls
node_sync -->|"syncs settings"| node_settings
node_sync -->|"reads and writes"| node_cloud
node_user -.->|"configures calibration"| node_gabaiscreens
node_gabaiscreens -.->|"uses repository"| node_gabai
node_hud -->|"runs detection"| node_detector
node_hud -->|"loads game config"| node_game

click node_activity "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/MainActivity.kt"
click node_navigation "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/ui/navigation/PwdeNavHost.kt"
click node_onboarding "https://github.com/sawadikap-nextgen/pwde_repository/tree/main/Android-App/app/src/main/java/com/pwde/app/ui/onboarding"
click node_gameplay "https://github.com/sawadikap-nextgen/pwde_repository/tree/main/Android-App/app/src/main/java/com/pwde/app/ui/gameplay"
click node_playservice "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/PlayService.kt"
click node_session "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt"
click node_input "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/GameInput.kt"
click node_accessibility "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt"
click node_face "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceTrackingManager.kt"
click node_facestate "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceState.kt"
click node_voice "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/voice/InGameVoiceEngine.kt"
click node_wake "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/voice/SherpaWakeWordEngine.kt"
click node_spotter "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/k2fsa/sherpa/onnx/KeywordSpotter.kt"
click node_controls "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/local/ControlsRepository.kt"
click node_profiles "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/local/ProfileRepository.kt"
click node_settings "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/prefs/SettingsRepository.kt"
click node_sync "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt"
click node_cloud "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/CloudStore.kt"
click node_auth "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/AuthRepository.kt"
click node_gabai "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/gabai/GabAiRepository.kt"
click node_gabaiscreens "https://github.com/sawadikap-nextgen/pwde_repository/tree/main/Android-App/app/src/main/java/com/pwde/app/ui/gabai"
click node_hud "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/calibration-backend/app/main.py"
click node_detector "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/calibration-backend/app/detection.py"
click node_game "https://github.com/sawadikap-nextgen/pwde_repository/blob/main/calibration-backend/app/constants.py"

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_onboarding,node_gameplay toneBlue
class node_playservice,node_session,node_input,node_accessibility,node_face,node_facestate,node_voice,node_wake,node_spotter toneAmber
class node_controls,node_profiles,node_settings,node_sync,node_cloud,node_auth toneMint
class node_gabai,node_gabaiscreens toneRose
class node_hud,node_detector,node_game,node_user toneIndigo
```

## Components

### App and setup

- [Main activity](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/MainActivity.kt): `Android-App/app/src/main/java/com/pwde/app/MainActivity.kt`
- [App navigation](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/ui/navigation/PwdeNavHost.kt): `Android-App/app/src/main/java/com/pwde/app/ui/navigation/PwdeNavHost.kt`
- [Account and setup](https://github.com/sawadikap-nextgen/pwde_repository/tree/main/Android-App/app/src/main/java/com/pwde/app/ui/onboarding): `Android-App/app/src/main/java/com/pwde/app/ui/onboarding`
- [Gameplay screens](https://github.com/sawadikap-nextgen/pwde_repository/tree/main/Android-App/app/src/main/java/com/pwde/app/ui/gameplay): `Android-App/app/src/main/java/com/pwde/app/ui/gameplay`

### Live game control

- [Play service](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/PlayService.kt): `Android-App/app/src/main/java/com/pwde/app/play/PlayService.kt`
- [Live game session](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt): `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`
- [Game input](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/play/GameInput.kt): `Android-App/app/src/main/java/com/pwde/app/play/GameInput.kt`
- [Accessibility gestures](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt): `Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt`
- [Face tracking](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceTrackingManager.kt): `Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceTrackingManager.kt`
- [Pose and gestures](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceState.kt): `Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceState.kt`
- [In-game voice](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/voice/InGameVoiceEngine.kt): `Android-App/app/src/main/java/com/pwde/app/sensors/voice/InGameVoiceEngine.kt`
- [Sherpa wake spotting](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/sensors/voice/SherpaWakeWordEngine.kt): `Android-App/app/src/main/java/com/pwde/app/sensors/voice/SherpaWakeWordEngine.kt`
- [Keyword spotter](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/k2fsa/sherpa/onnx/KeywordSpotter.kt): `Android-App/app/src/main/java/com/k2fsa/sherpa/onnx/KeywordSpotter.kt`

### Configuration and sync

- [Control settings](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/local/ControlsRepository.kt): `Android-App/app/src/main/java/com/pwde/app/data/local/ControlsRepository.kt`
- [Game profiles](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/local/ProfileRepository.kt): `Android-App/app/src/main/java/com/pwde/app/data/local/ProfileRepository.kt`
- [User settings](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/prefs/SettingsRepository.kt): `Android-App/app/src/main/java/com/pwde/app/data/prefs/SettingsRepository.kt`
- [Cloud sync engine](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt): `Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt`
- [Cloud store](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/CloudStore.kt): `Android-App/app/src/main/java/com/pwde/app/data/remote/CloudStore.kt`
- [Account authentication](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/remote/AuthRepository.kt): `Android-App/app/src/main/java/com/pwde/app/data/remote/AuthRepository.kt`

### Guided calibration

- [GabAI calibration](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/Android-App/app/src/main/java/com/pwde/app/data/gabai/GabAiRepository.kt): `Android-App/app/src/main/java/com/pwde/app/data/gabai/GabAiRepository.kt`
- [GabAI screens](https://github.com/sawadikap-nextgen/pwde_repository/tree/main/Android-App/app/src/main/java/com/pwde/app/ui/gabai): `Android-App/app/src/main/java/com/pwde/app/ui/gabai`

### HUD calibration service

- [HUD detector API](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/calibration-backend/app/main.py): `calibration-backend/app/main.py`
- [YOLO detector](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/calibration-backend/app/detection.py): `calibration-backend/app/detection.py`
- [Game HUD models](https://github.com/sawadikap-nextgen/pwde_repository/blob/main/calibration-backend/app/constants.py): `calibration-backend/app/constants.py`

### Other components

- **Player**

## Connections

- Player → Main activity: opens app (evidence: `Android-App/app/src/main/java/com/pwde/app/MainActivity.kt`)
- Main activity → App navigation: shows (evidence: `Android-App/app/src/main/java/com/pwde/app/MainActivity.kt`)
- App navigation → Account and setup: routes to
- App navigation → Gameplay screens: routes to
- Gameplay screens → Play service: starts play
- Play service → Live game session: runs session (evidence: `Android-App/app/src/main/java/com/pwde/app/play/PlayService.kt`)
- Live game session → Control settings: loads controls (evidence: `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`)
- Live game session → Game profiles: loads profiles (evidence: `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`)
- Live game session → User settings: reads settings (evidence: `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`)
- Live game session → Face tracking: starts tracking (evidence: `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`)
- Live game session → In-game voice: starts voice (evidence: `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`)
- Live game session → Game input: uses input (evidence: `Android-App/app/src/main/java/com/pwde/app/play/LiveGameSession.kt`)
- Face tracking → Pose and gestures: updates state (evidence: `Android-App/app/src/main/java/com/pwde/app/sensors/face/FaceTrackingManager.kt`)
- In-game voice → Control settings: reads commands (evidence: `Android-App/app/src/main/java/com/pwde/app/sensors/voice/InGameVoiceEngine.kt`)
- Sherpa wake spotting → Keyword spotter: runs spotting (evidence: `Android-App/app/src/main/java/com/pwde/app/sensors/voice/SherpaWakeWordEngine.kt`)
- Accessibility gestures → Game input: reads input (evidence: `Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt`)
- Accessibility gestures → Face tracking: uses tracking (evidence: `Android-App/app/src/main/java/com/pwde/app/accessibility/PwdeAccessibilityService.kt`)
- Player → Accessibility gestures: controls screen
- Cloud sync engine → Game profiles: syncs profiles (evidence: `Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt`)
- Cloud sync engine → Control settings: syncs controls (evidence: `Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt`)
- Cloud sync engine → User settings: syncs settings (evidence: `Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt`)
- Cloud sync engine → Cloud store: reads and writes (evidence: `Android-App/app/src/main/java/com/pwde/app/data/remote/CloudSyncEngine.kt`)
- Player → GabAI screens: configures calibration
- GabAI screens → GabAI calibration: uses repository
- HUD detector API → YOLO detector: runs detection (evidence: `calibration-backend/app/main.py`)
- HUD detector API → Game HUD models: loads game config (evidence: `calibration-backend/app/main.py`)
