| # 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.