tahamajs's picture
|
download
raw
42.4 kB
# Air Mouse Android App - Complete Architecture & Folder Structure Documentation
## ๐Ÿ“‹ Table of Contents
1. [Overview](#overview)
2. [Architecture](#architecture)
3. [Package Structure](#package-structure)
4. [Module Breakdown](#module-breakdown)
5. [Data Flow](#data-flow)
6. [Layer Diagrams](#layer-diagrams)
7. [Key Components](#key-components)
8. [Dependency Injection](#dependency-injection)
9. [Testing Strategy](#testing-strategy)
10. [Build Variants](#build-variants)
11. [Third-Party Libraries](#third-party-libraries)
12. [Development Guidelines](#development-guidelines)
---
## Overview
The Air Mouse Android app follows **Clean Architecture** principles with a modern **MVVM (Model-View-ViewModel)** pattern using **Jetpack Compose** for UI. The architecture is designed to be:
- **Testable** - Each layer is independently testable
- **Maintainable** - Clear separation of concerns
- **Scalable** - Easy to add new features
- **Decoupled** - Low coupling between layers
---
## Architecture
### Layer Architecture
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PRESENTATION LAYER โ”‚
โ”‚ (UI / Compose Screens) โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Activities / Composables / ViewModels โ”‚ โ”‚
โ”‚ โ”‚ - HomeScreen, CalibrationScreen, SettingsScreen โ”‚ โ”‚
โ”‚ โ”‚ - HomeViewModel, CalibrationViewModel โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ DOMAIN LAYER โ”‚
โ”‚ (Business Logic) โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Use Cases / Models / Repository Interfaces โ”‚ โ”‚
โ”‚ โ”‚ - ConnectToServerUseCase, SendMovementUseCase โ”‚ โ”‚
โ”‚ โ”‚ - IConnectionRepository, IMouseRepository โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ DATA LAYER โ”‚
โ”‚ (Data Sources & Repositories) โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Repositories / Data Sources / Mappers โ”‚ โ”‚
โ”‚ โ”‚ - ConnectionRepositoryImpl, CalibrationDataSourceImpl โ”‚ โ”‚
โ”‚ โ”‚ - DomainToEntityMapper, EntityToDomainMapper โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ INFRASTRUCTURE LAYER โ”‚
โ”‚ (External Dependencies) โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Network / Database / Sensors / Bluetooth / USB โ”‚ โ”‚
โ”‚ โ”‚ - ConnectionManager, WebSocketManager โ”‚ โ”‚
โ”‚ โ”‚ - Room Database, PreferencesDataStore โ”‚ โ”‚
โ”‚ โ”‚ - SensorService, BluetoothHidService โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
### Dependency Direction
```
Presentation โ†’ Domain โ† Data โ†’ Infrastructure
โ†“ โ†“ โ†“ โ†“
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
(Dependency Injection)
```
---
## Package Structure
### Complete Directory Tree
```
app/src/main/java/com/airmouse/
โ”‚
โ”œโ”€โ”€ AirMouseApplication.kt # Application entry point
โ”‚
โ”œโ”€โ”€ auth/ # Authentication
โ”‚ โ””โ”€โ”€ AuthManager.kt
โ”‚
โ”œโ”€โ”€ data/ # Data Layer
โ”‚ โ”œโ”€โ”€ datasource/ # Data sources
โ”‚ โ”‚ โ”œโ”€โ”€ local/ # Local data sources
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ AppDatabase.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ Converters.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ CalibrationDao.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ GestureDao.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ProfileDao.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ StatisticsDao.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ TrainingSampleDao.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ CalibrationEntity.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ GestureTemplateEntity.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ProfileEntity.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ StatisticsEntity.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ TrainingSampleEntity.kt
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ILocalDataSource.kt
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ LocalDataSourceImpl.kt
โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ””โ”€โ”€ remote/ # Remote data sources
โ”‚ โ”‚ โ”œโ”€โ”€ IConnectionDataSource.kt
โ”‚ โ”‚ โ””โ”€โ”€ ConnectionDataSourceImpl.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ mapper/ # Data mappers
โ”‚ โ”‚ โ”œโ”€โ”€ DomainToEntityMapper.kt
โ”‚ โ”‚ โ””โ”€โ”€ EntityToDomainMapper.kt
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ repository/ # Repository implementations
โ”‚ โ”œโ”€โ”€ CalibrationRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ ConnectionRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ GestureRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ MouseRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ ProfileRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ ProximityRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ SensorRepositoryImpl.kt
โ”‚ โ”œโ”€โ”€ StatisticsRepositoryImpl.kt
โ”‚ โ””โ”€โ”€ VoiceCommandRepositoryImpl.kt
โ”‚
โ”œโ”€โ”€ domain/ # Domain Layer
โ”‚ โ”œโ”€โ”€ model/ # Domain models
โ”‚ โ”‚ โ”œโ”€โ”€ ConnectionModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ MouseModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ GestureModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ CalibrationModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ SensorModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ ProximityModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ UpdateModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ UserProfileModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ StatisticsModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ VoiceCommandModels.kt
โ”‚ โ”‚ โ”œโ”€โ”€ ErrorModels.kt
โ”‚ โ”‚ โ””โ”€โ”€ UIStateModels.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ repository/ # Repository interfaces
โ”‚ โ”‚ โ”œโ”€โ”€ ICalibrationRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IConnectionRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IGestureRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IMouseRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IProfileRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IProximityRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ ISensorRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IStatisticsRepository.kt
โ”‚ โ”‚ โ”œโ”€โ”€ IUpdateRepository.kt
โ”‚ โ”‚ โ””โ”€โ”€ IVoiceCommandRepository.kt
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ usecase/ # Use cases
โ”‚ โ”œโ”€โ”€ ConnectToServerUseCase.kt
โ”‚ โ”œโ”€โ”€ SendMovementUseCase.kt
โ”‚ โ”œโ”€โ”€ CalibrationUseCase.kt
โ”‚ โ”œโ”€โ”€ DetectGestureUseCase.kt
โ”‚ โ”œโ”€โ”€ ManageGestureTemplatesUseCase.kt
โ”‚ โ”œโ”€โ”€ GetProximityStateUseCase.kt
โ”‚ โ”œโ”€โ”€ UpdateProximityConfigUseCase.kt
โ”‚ โ”œโ”€โ”€ GetStatisticsUseCase.kt
โ”‚ โ”œโ”€โ”€ RecordStatisticsUseCase.kt
โ”‚ โ”œโ”€โ”€ ManageProfileUseCase.kt
โ”‚ โ”œโ”€โ”€ HandleVoiceCommandUseCase.kt
โ”‚ โ”œโ”€โ”€ CheckForUpdatesUseCase.kt
โ”‚ โ”œโ”€โ”€ DiscoverServersUseCase.kt
โ”‚ โ”œโ”€โ”€ TestConnectionUseCase.kt
โ”‚ โ””โ”€โ”€ GetConnectionStatusUseCase.kt
โ”‚
โ”œโ”€โ”€ features/ # Feature orchestration
โ”‚ โ”œโ”€โ”€ ConnectionFeature.kt
โ”‚ โ”œโ”€โ”€ MouseControlFeature.kt
โ”‚ โ”œโ”€โ”€ CalibrationFeature.kt
โ”‚ โ”œโ”€โ”€ GestureRecognitionFeature.kt
โ”‚ โ”œโ”€โ”€ ProximityFeature.kt
โ”‚ โ”œโ”€โ”€ StatisticsFeature.kt
โ”‚ โ”œโ”€โ”€ VoiceFeature.kt
โ”‚ โ”œโ”€โ”€ ProfileFeature.kt
โ”‚ โ”œโ”€โ”€ UpdateFeature.kt
โ”‚ โ””โ”€โ”€ SensorFeature.kt
โ”‚
โ”œโ”€โ”€ network/ # Network layer
โ”‚ โ”œโ”€โ”€ ConnectionManager.kt
โ”‚ โ”œโ”€โ”€ WebSocketManager.kt
โ”‚ โ”œโ”€โ”€ TcpClient.kt
โ”‚ โ”œโ”€โ”€ UdpDiscovery.kt
โ”‚ โ”œโ”€โ”€ NetworkQualityMonitor.kt
โ”‚ โ”œโ”€โ”€ NetworkStateHelper.kt
โ”‚ โ”œโ”€โ”€ MessageTypes.kt
โ”‚ โ”œโ”€โ”€ ConnectionHelper.kt
โ”‚ โ””โ”€โ”€ ConnectionQuality.kt
โ”‚
โ”œโ”€โ”€ presentation/ # Presentation Layer
โ”‚ โ”œโ”€โ”€ base/ # Base classes
โ”‚ โ”‚ โ””โ”€โ”€ BaseViewModel.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ extensions/ # Compose extensions
โ”‚ โ”‚ โ””โ”€โ”€ ComposableExtensions.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ navigation/ # Navigation
โ”‚ โ”‚ โ”œโ”€โ”€ Navigation.kt
โ”‚ โ”‚ โ””โ”€โ”€ Destinations.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ theme/ # Theme
โ”‚ โ”‚ โ”œโ”€โ”€ Theme.kt
โ”‚ โ”‚ โ”œโ”€โ”€ Type.kt
โ”‚ โ”‚ โ””โ”€โ”€ Color.kt
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ ui/ # UI Screens
โ”‚ โ”œโ”€โ”€ home/
โ”‚ โ”‚ โ”œโ”€โ”€ HomeScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ HomeViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ calibration/
โ”‚ โ”‚ โ”œโ”€โ”€ CalibrationScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ CalibrationViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ settings/
โ”‚ โ”‚ โ”œโ”€โ”€ SettingsScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ SettingsViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ gesture/
โ”‚ โ”‚ โ”œโ”€โ”€ GestureStudioScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ GestureStudioViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ proximity/
โ”‚ โ”‚ โ”œโ”€โ”€ ProximityScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ ProximityViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ statistics/
โ”‚ โ”‚ โ”œโ”€โ”€ StatisticsScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ StatisticsViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ profiles/
โ”‚ โ”‚ โ”œโ”€โ”€ ProfilesScreen.kt
โ”‚ โ”‚ โ”œโ”€โ”€ ProfilesViewModel.kt
โ”‚ โ”‚ โ””โ”€โ”€ components/
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ voice/
โ”‚ โ”‚ โ”œโ”€โ”€ VoiceCommandsScreen.kt
โ”‚ โ”‚ โ””โ”€โ”€ VoiceCommandsViewModel.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ edge/
โ”‚ โ”‚ โ”œโ”€โ”€ EdgeGesturesScreen.kt
โ”‚ โ”‚ โ””โ”€โ”€ EdgeGesturesViewModel.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ network/
โ”‚ โ”‚ โ”œโ”€โ”€ NetworkDiscoveryScreen.kt
โ”‚ โ”‚ โ””โ”€โ”€ NetworkDiscoveryViewModel.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ logs/
โ”‚ โ”‚ โ”œโ”€โ”€ ServerLogsScreen.kt
โ”‚ โ”‚ โ””โ”€โ”€ ServerLogsViewModel.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ onboarding/
โ”‚ โ”‚ โ”œโ”€โ”€ OnboardingScreen.kt
โ”‚ โ”‚ โ””โ”€โ”€ OnboardingViewModel.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ themes/
โ”‚ โ”‚ โ””โ”€โ”€ ThemesScreen.kt
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ touchpad/
โ”‚ โ”‚ โ””โ”€โ”€ TouchpadScreen.kt
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ components/ # Shared UI components
โ”‚ โ”œโ”€โ”€ AnimatedConnectionStatus.kt
โ”‚ โ”œโ”€โ”€ AnimatedCounter.kt
โ”‚ โ”œโ”€โ”€ AnimatedSwitch.kt
โ”‚ โ”œโ”€โ”€ AnimatedToast.kt
โ”‚ โ”œโ”€โ”€ CircularProgressWithLabel.kt
โ”‚ โ”œโ”€โ”€ ConnectionStatusBadge.kt
โ”‚ โ”œโ”€โ”€ DataChart.kt
โ”‚ โ”œโ”€โ”€ FloatingActionMenu.kt
โ”‚ โ”œโ”€โ”€ GestureWaveform.kt
โ”‚ โ”œโ”€โ”€ HolographicText.kt
โ”‚ โ”œโ”€โ”€ InteractiveTutorialCard.kt
โ”‚ โ”œโ”€โ”€ NeonButton.kt
โ”‚ โ”œโ”€โ”€ NotificationBadge.kt
โ”‚ โ”œโ”€โ”€ PullToRefresh.kt
โ”‚ โ”œโ”€โ”€ RadarAnimation.kt
โ”‚ โ”œโ”€โ”€ SensorVisualizer.kt
โ”‚ โ”œโ”€โ”€ SlideUpPanel.kt
โ”‚ โ””โ”€โ”€ VoiceWaveAnimation.kt
โ”‚
โ”œโ”€โ”€ sensors/ # Sensor processing
โ”‚ โ”œโ”€โ”€ CalibrationHelper.kt
โ”‚ โ”œโ”€โ”€ MadgwickAHRS.kt
โ”‚ โ””โ”€โ”€ EnhancedGestureDetector.kt
โ”‚
โ”œโ”€โ”€ service/ # Background services
โ”‚ โ”œโ”€โ”€ SensorService.kt
โ”‚ โ”œโ”€โ”€ BluetoothHidService.kt
โ”‚ โ”œโ”€โ”€ ProximityService.kt
โ”‚ โ”œโ”€โ”€ ProximityAwareService.kt
โ”‚ โ”œโ”€โ”€ VoiceCommandService.kt
โ”‚ โ”œโ”€โ”€ GestureInferenceService.kt
โ”‚ โ”œโ”€โ”€ GestureRecorderService.kt
โ”‚ โ”œโ”€โ”€ UsbHidService.kt
โ”‚ โ”œโ”€โ”€ UsbSerialService.kt
โ”‚ โ”œโ”€โ”€ OrientationMonitorService.kt
โ”‚ โ”œโ”€โ”€ EdgeGestureService.kt
โ”‚ โ”œโ”€โ”€ DebugOverlayService.kt
โ”‚ โ””โ”€โ”€ ForegroundServiceManager.kt
โ”‚
โ”œโ”€โ”€ utils/ # Utility classes
โ”‚ โ”œโ”€โ”€ PreferencesManager.kt
โ”‚ โ”œโ”€โ”€ PermissionManager.kt
โ”‚ โ”œโ”€โ”€ BatteryOptimizer.kt
โ”‚ โ”œโ”€โ”€ ErrorHandler.kt
โ”‚ โ”œโ”€โ”€ AnalyticsManager.kt
โ”‚ โ”œโ”€โ”€ AppConstants.kt
โ”‚ โ”œโ”€โ”€ ResultExtensions.kt
โ”‚ โ”œโ”€โ”€ DialogHelper.kt
โ”‚ โ”œโ”€โ”€ PermissionUIHelper.kt
โ”‚ โ”œโ”€โ”€ ViewHelpers.kt
โ”‚ โ”œโ”€โ”€ JsonHelper.kt
โ”‚ โ”œโ”€โ”€ FileHelper.kt
โ”‚ โ”œโ”€โ”€ ResourceHelper.kt
โ”‚ โ””โ”€โ”€ ValidationHelper.kt
โ”‚
โ”œโ”€โ”€ notifications/ # Notifications
โ”‚ โ””โ”€โ”€ NotificationManager.kt
โ”‚
โ”œโ”€โ”€ receivers/ # Broadcast receivers
โ”‚ โ”œโ”€โ”€ BootReceiver.kt
โ”‚ โ”œโ”€โ”€ UsbReceiver.kt
โ”‚ โ”œโ”€โ”€ BluetoothReceiver.kt
โ”‚ โ”œโ”€โ”€ NetworkReceiver.kt
โ”‚ โ””โ”€โ”€ NotificationReceiver.kt
โ”‚
โ”œโ”€โ”€ di/ # Dependency Injection
โ”‚ โ”œโ”€โ”€ AppModule.kt
โ”‚ โ”œโ”€โ”€ NetworkModule.kt
โ”‚ โ”œโ”€โ”€ DatabaseModule.kt
โ”‚ โ”œโ”€โ”€ RepositoryModule.kt
โ”‚ โ”œโ”€โ”€ UseCaseModule.kt
โ”‚ โ”œโ”€โ”€ FeatureModule.kt
โ”‚ โ”œโ”€โ”€ ViewModelModule.kt
โ”‚ โ”œโ”€โ”€ ServiceModule.kt
โ”‚ โ”œโ”€โ”€ SensorModule.kt
โ”‚ โ”œโ”€โ”€ ViewModelKey.kt
โ”‚ โ””โ”€โ”€ AppContainer.kt
โ”‚
โ””โ”€โ”€ sync/ # Sync manager
โ””โ”€โ”€ DataSyncManager.kt
```
---
## Module Breakdown
### 1. **Auth Module**
- **Purpose:** Authentication and token management
- **Key Files:**
- `AuthManager.kt` - Manages authentication state
### 2. **Data Module**
- **Purpose:** Data persistence and retrieval
- **Sub-packages:**
- `datasource/local/` - Room database and local storage
- `datasource/remote/` - Network data sources
- `mapper/` - Data mappers between domain and entities
- `repository/` - Repository implementations
### 3. **Domain Module**
- **Purpose:** Business logic and models
- **Sub-packages:**
- `model/` - Domain models
- `repository/` - Repository interfaces
- `usecase/` - Business logic use cases
### 4. **Features Module**
- **Purpose:** Feature orchestration
- **Key Files:**
- `ConnectionFeature.kt` - Network connection management
- `MouseControlFeature.kt` - Mouse control
- `CalibrationFeature.kt` - Sensor calibration
- `GestureRecognitionFeature.kt` - Gesture detection
- `ProximityFeature.kt` - Proximity security
- `StatisticsFeature.kt` - Statistics tracking
- `VoiceFeature.kt` - Voice commands
- `ProfileFeature.kt` - User profiles
- `UpdateFeature.kt` - App updates
- `SensorFeature.kt` - Sensor management
### 5. **Network Module**
- **Purpose:** Network communication
- **Key Files:**
- `ConnectionManager.kt` - Unified connection manager
- `WebSocketManager.kt` - WebSocket communication
- `TcpClient.kt` - TCP communication
- `UdpDiscovery.kt` - UDP discovery
- `NetworkQualityMonitor.kt` - Network quality monitoring
- `MessageTypes.kt` - Message type constants
### 6. **Presentation Module**
- **Purpose:** UI and user interaction
- **Sub-packages:**
- `base/` - Base classes (ViewModel)
- `extensions/` - Compose extensions
- `navigation/` - Navigation
- `theme/` - Theming
- `ui/` - UI Screens and components
### 7. **Sensors Module**
- **Purpose:** Sensor data processing
- **Key Files:**
- `CalibrationHelper.kt` - Sensor calibration
- `MadgwickAHRS.kt` - Sensor fusion
- `EnhancedGestureDetector.kt` - Gesture detection
### 8. **Service Module**
- **Purpose:** Background services
- **Key Files:**
- `SensorService.kt` - Sensor data service
- `BluetoothHidService.kt` - Bluetooth HID
- `ProximityService.kt` - Proximity monitoring
- `VoiceCommandService.kt` - Voice recognition
### 9. **Utils Module**
- **Purpose:** Utility classes and helpers
- **Key Files:**
- `PreferencesManager.kt` - Shared preferences
- `PermissionManager.kt` - Permission handling
- `BatteryOptimizer.kt` - Battery optimization
- `ErrorHandler.kt` - Error handling
- `AnalyticsManager.kt` - Analytics tracking
### 10. **DI Module**
- **Purpose:** Dependency injection
- **Key Files:**
- All `*Module.kt` files for Hilt
---
## Data Flow
### UI โ†’ Data Flow
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ UI FLOW โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ”‚
โ”‚ User Action โ†’ ViewModel โ†’ UseCase โ†’ Repository โ†’ DataSource โ†’ Network โ”‚
โ”‚ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ โ”‚
โ”‚ Compose StateFlow Business Data Local/ Server โ”‚
โ”‚ Screen Update Logic Access Remote โ”‚
โ”‚ โ”‚
โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚
โ”‚ โ”‚
โ”‚ Network โ†’ DataSource โ†’ Repository โ†’ UseCase โ†’ ViewModel โ†’ UI โ”‚
โ”‚ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ โ”‚
โ”‚ Server Data Data Business State Compose โ”‚
โ”‚ Access Storage Logic Update Screen โ”‚
โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
### State Management Flow
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ User โ”‚ โ”‚ ViewModel โ”‚ โ”‚ State โ”‚
โ”‚ Action โ”‚โ”€โ”€โ”€โ–ถโ”‚ Event โ”‚โ”€โ”€โ”€โ–ถโ”‚ Update โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Compose โ”‚โ—€โ”€โ”€โ”€โ”‚ State โ”‚โ—€โ”€โ”€โ”€โ”‚ State โ”‚
โ”‚ Screen โ”‚ โ”‚ Flow โ”‚ โ”‚ Container โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
---
## Layer Diagrams
### Clean Architecture Layers
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PRESENTATION LAYER โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Activities & Composables โ”‚ โ”‚
โ”‚ โ”‚ - HomeScreen, CalibrationScreen, SettingsScreen โ”‚ โ”‚
โ”‚ โ”‚ - GestureStudioScreen, ProximityScreen โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ ViewModels โ”‚ โ”‚
โ”‚ โ”‚ - HomeViewModel, CalibrationViewModel, SettingsViewModel โ”‚ โ”‚
โ”‚ โ”‚ - GestureStudioViewModel, ProximityViewModel โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ DOMAIN LAYER โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Use Cases โ”‚ โ”‚
โ”‚ โ”‚ - ConnectToServerUseCase, SendMovementUseCase โ”‚ โ”‚
โ”‚ โ”‚ - CalibrationUseCase, DetectGestureUseCase โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Domain Models โ”‚ โ”‚
โ”‚ โ”‚ - ConnectionModels, MouseModels, GestureModels โ”‚ โ”‚
โ”‚ โ”‚ - CalibrationModels, SensorModels, ProximityModels โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Repository Interfaces โ”‚ โ”‚
โ”‚ โ”‚ - IConnectionRepository, IMouseRepository โ”‚ โ”‚
โ”‚ โ”‚ - IGestureRepository, ICalibrationRepository โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ DATA LAYER โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Repository Implementations โ”‚ โ”‚
โ”‚ โ”‚ - ConnectionRepositoryImpl, MouseRepositoryImpl โ”‚ โ”‚
โ”‚ โ”‚ - GestureRepositoryImpl, CalibrationRepositoryImpl โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Data Sources โ”‚ โ”‚
โ”‚ โ”‚ - Local: Room Database, Preferences โ”‚ โ”‚
โ”‚ โ”‚ - Remote: WebSocket, TCP, UDP โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Mappers โ”‚ โ”‚
โ”‚ โ”‚ - DomainToEntityMapper, EntityToDomainMapper โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ INFRASTRUCTURE LAYER โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Network โ”‚ โ”‚
โ”‚ โ”‚ - ConnectionManager, WebSocketManager, TcpClient โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Database โ”‚ โ”‚
โ”‚ โ”‚ - AppDatabase, Room DAOs, DataStore โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Sensors โ”‚ โ”‚
โ”‚ โ”‚ - CalibrationHelper, MadgwickAHRS, EnhancedGestureDetector โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Services โ”‚ โ”‚
โ”‚ โ”‚ - SensorService, BluetoothHidService, ProximityService โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
### Dependency Injection Graph
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ DI MODULES โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ AppModule โ”‚ Provides: Preferences, Sensors, Utils โ”‚
โ”‚ NetworkModule โ”‚ Provides: OkHttp, ConnectionManager โ”‚
โ”‚ DatabaseModule โ”‚ Provides: Room Database, DAOs โ”‚
โ”‚ RepositoryModule โ”‚ Provides: Repository Implementations โ”‚
โ”‚ UseCaseModule โ”‚ Provides: Use Cases โ”‚
โ”‚ FeatureModule โ”‚ Provides: Features โ”‚
โ”‚ ViewModelModule โ”‚ Provides: ViewModels โ”‚
โ”‚ ServiceModule โ”‚ Provides: Services โ”‚
โ”‚ SensorModule โ”‚ Provides: Sensor Components โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Hilt Components Tree โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ SingletonComponent โ”‚
โ”‚ โ”œโ”€โ”€ AppModule โ”‚
โ”‚ โ”œโ”€โ”€ NetworkModule โ”‚
โ”‚ โ”œโ”€โ”€ DatabaseModule โ”‚
โ”‚ โ”œโ”€โ”€ RepositoryModule โ”‚
โ”‚ โ”œโ”€โ”€ UseCaseModule โ”‚
โ”‚ โ”œโ”€โ”€ FeatureModule โ”‚
โ”‚ โ”œโ”€โ”€ ServiceModule โ”‚
โ”‚ โ””โ”€โ”€ SensorModule โ”‚
โ”‚ โ”‚
โ”‚ ViewModelComponent โ”‚
โ”‚ โ””โ”€โ”€ ViewModelModule โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
---
## Key Components
### 1. **BaseViewModel**
```kotlin
abstract class BaseViewModel<State, Event>(initialState: State) : ViewModel() {
private val _state = MutableStateFlow(initialState)
val state: StateFlow<State> = _state.asStateFlow()
private val _event = MutableSharedFlow<Event>()
val event: SharedFlow<Event> = _event.asSharedFlow()
protected fun setState(reducer: State.() -> State) {
_state.update { it.reducer() }
}
protected fun sendEvent(event: Event) {
viewModelScope.launch { _event.emit(event) }
}
abstract fun onEvent(event: Event)
}
```
### 2. **ConnectionManager**
```kotlin
@Singleton
class ConnectionManager @Inject constructor(
@ApplicationContext private val context: Context,
private val prefs: PreferencesManager
) {
// Unified connection management for WebSocket and TCP
// StateFlow for connection status and quality
// Auto-reconnection with exponential backoff
}
```
### 3. **Feature Pattern**
```kotlin
@Singleton
class ConnectionFeature @Inject constructor(
private val connectToServerUseCase: ConnectToServerUseCase,
private val discoverServersUseCase: DiscoverServersUseCase,
private val getConnectionStatusUseCase: GetConnectionStatusUseCase,
private val testConnectionUseCase: TestConnectionUseCase
) {
// Orchestrates multiple use cases
// Provides high-level feature API
// Manages feature state
}
```
---
## Testing Strategy
### Test Pyramid
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ UI โ”‚ โ† Espresso, Compose UI Testing
โ”Œโ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”
โ”‚ Integrationโ”‚ โ† Integration Tests
โ”Œโ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”
โ”‚ Unit Tests โ”‚ โ† JUnit, Mockito, MockK
โ”Œโ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”
โ”‚ Domain Logic โ”‚ โ† Use Case Testing
โ”Œโ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”
โ”‚ Repository Tests โ”‚ โ† Data Layer Testing
โ”Œโ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”
โ”‚ Instrumentation Testsโ”‚ โ† Android Testing
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
### Test Locations
```
app/src/
โ”œโ”€โ”€ test/ # Unit tests
โ”‚ โ”œโ”€โ”€ java/com/airmouse/
โ”‚ โ”‚ โ”œโ”€โ”€ domain/
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ model/
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ repository/
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ usecase/
โ”‚ โ”‚ โ”œโ”€โ”€ features/
โ”‚ โ”‚ โ””โ”€โ”€ utils/
โ”‚ โ””โ”€โ”€ resources/
โ”‚
โ””โ”€โ”€ androidTest/ # Instrumentation tests
โ”œโ”€โ”€ java/com/airmouse/
โ”‚ โ”œโ”€โ”€ presentation/
โ”‚ โ”‚ โ”œโ”€โ”€ ui/
โ”‚ โ”‚ โ””โ”€โ”€ navigation/
โ”‚ โ”œโ”€โ”€ data/
โ”‚ โ””โ”€โ”€ service/
โ””โ”€โ”€ resources/
```
---
## Build Variants
### Flavor Dimensions
```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ BUILD VARIANTS โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ”‚
โ”‚ Environment: โ”‚
โ”‚ โ”œโ”€โ”€ dev (Development) โ”‚
โ”‚ โ”œโ”€โ”€ staging (Staging) โ”‚
โ”‚ โ””โ”€โ”€ prod (Production) โ”‚
โ”‚ โ”‚
โ”‚ Mode: โ”‚
โ”‚ โ”œโ”€โ”€ debug (Debug) โ”‚
โ”‚ โ””โ”€โ”€ release (Release) โ”‚
โ”‚ โ”‚
โ”‚ Flavors: โ”‚
โ”‚ โ”œโ”€โ”€ free (Free version) โ”‚
โ”‚ โ””โ”€โ”€ pro (Pro version) โ”‚
โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```
---
## Third-Party Libraries
| Library | Purpose | Version |
|---------|---------|---------|
| **Jetpack Compose** | UI Framework | 2024.10.00 |
| **Material 3** | Material Design | 1.3.0 |
| **Hilt** | Dependency Injection | 2.52 |
| **Room** | Database | 2.6.1 |
| **DataStore** | Preferences | 1.1.1 |
| **OkHttp** | Networking | 4.12.0 |
| **Retrofit** | REST Client | 2.11.0 |
| **Gson** | JSON Parsing | 2.11.0 |
| **Coroutines** | Async Programming | 1.7.3 |
| **TensorFlow Lite** | ML Inference | 2.16.1 |
| **UsbSerial** | USB Communication | 3.8.0 |
| **Timber** | Logging | 5.0.1 |
| **Truth** | Assertions | 1.1.5 |
| **Mockk** | Mocking | 1.13.8 |
---
## Development Guidelines
### 1. **Package Naming Convention**
```
com.airmouse.[layer].[feature].[component]
```
### 2. **Class Naming Convention**
| Layer | Prefix/Suffix | Example |
|-------|---------------|---------|
| **Model** | No suffix | `ConnectionConfig` |
| **Repository Interface** | `I` prefix | `IConnectionRepository` |
| **Repository Implementation** | `Impl` suffix | `ConnectionRepositoryImpl` |
| **Use Case** | `UseCase` suffix | `ConnectToServerUseCase` |
| **ViewModel** | `ViewModel` suffix | `HomeViewModel` |
| **Screen** | `Screen` suffix | `HomeScreen` |
| **Service** | `Service` suffix | `SensorService` |
| **Feature** | `Feature` suffix | `ConnectionFeature` |
### 3. **File Organization**
```
Each feature should have:
โ”œโ”€โ”€ domain/
โ”‚ โ”œโ”€โ”€ model/ # Feature-specific models
โ”‚ โ”œโ”€โ”€ repository/ # Repository interfaces
โ”‚ โ””โ”€โ”€ usecase/ # Feature use cases
โ”œโ”€โ”€ data/
โ”‚ โ”œโ”€โ”€ datasource/ # Data sources
โ”‚ โ””โ”€โ”€ repository/ # Repository implementations
โ””โ”€โ”€ presentation/
โ”œโ”€โ”€ ui/ # UI Screens
โ”œโ”€โ”€ viewmodel/ # ViewModels
โ””โ”€โ”€ components/ # UI Components
```
### 4. **State Management**
- Use `StateFlow` for UI state
- Use `SharedFlow` for events
- Use `MutableStateFlow` for mutable state
- Use `update {}` for atomic updates
### 5. **Error Handling**
- Use `Result<T>` for operations
- Use `sealed class` for error types
- Use `ErrorHandler` for centralized error handling
### 6. **Logging**
- Use `Timber` for logging
- Use `Log.d()` for debug
- Use `Log.e()` for errors
- Use `Log.w()` for warnings
---
## Summary
The Air Mouse Android app follows a **Clean Architecture** with **MVVM** pattern, using **Jetpack Compose** for UI and **Hilt** for dependency injection. The architecture is designed to be:
- โœ… **Testable** - Each layer is independently testable
- โœ… **Maintainable** - Clear separation of concerns
- โœ… **Scalable** - Easy to add new features
- โœ… **Decoupled** - Low coupling between layers
- โœ… **Modern** - Uses latest Android technologies
- โœ… **Production-ready** - Error handling, logging, analytics
The app is structured to handle:
- ๐Ÿ”Œ **Multiple Protocols**: WebSocket, TCP, UDP, Bluetooth, USB
- ๐ŸŽฏ **Gesture Recognition**: TensorFlow Lite model
- ๐Ÿ“ก **Proximity Lock**: Bluetooth RSSI-based
- ๐ŸŽ™๏ธ **Voice Commands**: Speech recognition
- ๐Ÿ–ฑ๏ธ **Mouse Control**: Cross-platform cursor control
- ๐Ÿ“Š **Analytics**: Usage tracking and statistics
- ๐Ÿ” **Profiles**: Multiple user profiles
- ๐Ÿ“ฆ **Updates**: In-app updates

Xet Storage Details

Size:
42.4 kB
ยท
Xet hash:
2ad5786ad76a298a80f6d4a95d0ca81acf83c650142b5c9e28ca43236afcb054

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.