tahamajs's picture
|
download
raw
29.1 kB
# Air Mouse – Complete File Architecture & Project Structure
This document provides the **ultimate, definitive architectural blueprint** of the Air Mouse Android application. It maps every single file, package, and module, explaining their exact roles and how they interconnect to form a cohesive, production-grade system following **Clean Architecture** and **Unidirectional Data Flow (MVI)**.
---
## 1. High-Level Architecture (Clean Architecture)
The project is strictly divided into 4 concentric layers, ensuring that the UI is completely decoupled from the database and network logic.
```
┌─────────────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER (UI) │
│ Activities, Compose Screens, ViewModels, Navigation, Theme │
│ Dependencies: Domain Layer │
└───────────────────────────────┬─────────────────────────────────────┘
│ (Observes State, Sends Events)
┌───────────────────────────────▼─────────────────────────────────────┐
│ DOMAIN LAYER (Core) │
│ Business Models, Repository Interfaces, Use Cases │
│ Dependencies: Pure Kotlin/Java (No Android SDK) │
└───────────────────────────────┬─────────────────────────────────────┘
│ (Implements Interfaces)
┌───────────────────────────────▼─────────────────────────────────────┐
│ DATA LAYER │
│ Repository Implementations, Data Sources (Room/Preferences/Remote)│
│ Mappers, Entities │
└───────────────────────────────┬─────────────────────────────────────┘
│ (Uses Infrastructure)
┌───────────────────────────────▼─────────────────────────────────────┐
│ INFRASTRUCTURE LAYER │
│ Network, Sensors, Notifications, Utilities, Background Services │
└─────────────────────────────────────────────────────────────────────┘
```
### Dependency Rule
> **Dependencies point inward.** The Presentation layer depends on Domain. The Data layer depends on Domain and Infrastructure. Infrastructure depends on external libraries (OkHttp, Android SDK).
---
## 2. Root Project Structure (`app/src/main/java/com/airmouse/`)
Here is the complete directory tree with every file categorized.
```
com.airmouse/
│
├── # =================== APPLICATION ROOT ===================
├── AirMouseApplication.kt # Application class, Hilt setup, logging, crash reporting.
│
├── # =================== PRESENTATION LAYER ===================
├── presentation/
│ ├── ui/ # All Screens (Activity & Compose)
│ │ ├── home/
│ │ │ ├── HomeActivity.kt # Main entry point, permissions, sensor binding.
│ │ │ ├── HomeScreen.kt # Dashboard with connection, sensors, gestures.
│ │ │ ├── HomeViewModel.kt # Manages sensor, gesture, connection, stats.
│ │ │ └── HomeUiState.kt # State models for Home screen.
│ │ ├── settings/
│ │ │ ├── SettingsScreen.kt # Full settings hub (Cursor, Gesture, AI, etc.).
│ │ │ ├── SettingsViewModel.kt # Persists settings, import/export, reset.
│ │ │ └── SettingsState.kt # UiState, Events, Effects.
│ │ ├── calibration/
│ │ │ ├── CalibrationScreen.kt # Step-by-step wizard (Gyro/Mag/Accel).
│ │ │ ├── CalibrationResultScreen.kt # Quality assessment & summary.
│ │ │ ├── CalibrationGuideDialog.kt # Animated instruction dialog.
│ │ │ ├── CalibrationViewModel.kt # Sampling logic, sensor coordination.
│ │ │ ├── CalibrationUiState.kt # State, phases, progress.
│ │ │ └── CalibrationComponents.kt # Reusable Calibration UI widgets.
│ │ ├── touchpad/
│ │ │ ├── TouchpadScreen.kt # Full gesture capture surface.
│ │ │ ├── TouchpadViewModel.kt # Gesture parsing, haptics, network sending.
│ │ │ ├── TouchpadState.kt # State, events, effects, presets.
│ │ │ └── TouchpadSettingsScreen.kt # (DEPRECATED) – Delete.
│ │ ├── voice/
│ │ │ ├── VoiceCommandsScreen.kt # Voice control with wake word and custom commands.
│ │ │ └── VoiceCommandsViewModel.kt # TTS, permission, command matching.
│ │ ├── themes/
│ │ │ ├── ThemesScreen.kt # Theme picker with previews.
│ │ │ ├── ThemesViewModel.kt # Theme/Accent persistence.
│ │ │ └── ThemesState.kt # AccentColor, ThemeOption definitions.
│ │ ├── accessibility/
│ │ │ ├── AccessibilityScreen.kt # Display, feedback, gesture, voice settings.
│ │ │ ├── AccessibilityViewModel.kt # Accessibility preferences.
│ │ │ └── AccessibilityUiState.kt # High contrast, haptics, color blind modes.
│ │ ├── profiles/
│ │ │ ├── ProfilesScreen.kt # User profile CRUD, favorites, defaults.
│ │ │ ├── ProfilesViewModel.kt # Profile data handling.
│ │ │ └── ProfileSettings.kt # Profile data class.
│ │ ├── proximity/
│ │ │ ├── ProximityScreen.kt # Bluetooth proximity lock/unlock.
│ │ │ └── ProximityViewModel.kt # RSSI calculation, auto-lock logic.
│ │ ├── logs/
│ │ │ ├── ServerLogsScreen.kt # Real-time log viewer, filters, export.
│ │ │ ├── ServerLogsViewModel.kt # Log capture, persistence, formatting.
│ │ │ └── ServerLogsState.kt # LogEntry, LogLevel, SortOrder.
│ │ ├── help/
│ │ │ ├── HelpScreen.kt # Searchable help center with categories.
│ │ │ ├── HelpViewModel.kt # Search, favorites, expanded sections.
│ │ │ └── HelpModels.kt # HelpCategory, HelpSection.
│ │ ├── onboarding/
│ │ │ ├── OnboardingActivity.kt # 4-page walkthrough with animations.
│ │ │ ├── OnboardingItem.kt # Data class for onboarding pages.
│ │ │ └── OnboardingPagerAdapter.kt # ViewPager adapter.
│ │ ├── about/
│ │ │ └── AboutScreen.kt # ❌ MISSING (Partially in Settings).
│ │ ├── statistics/
│ │ │ └── StatisticsScreen.kt # ❌ MISSING
│ │ ├── sensor/
│ │ │ └── SensorVisualizerScreen.kt # ❌ MISSING
│ │ ├── gesture/
│ │ │ └── GestureStudioScreen.kt # ❌ MISSING
│ │ ├── edge/
│ │ │ └── EdgeGesturesScreen.kt # ❌ MISSING
│ │ ├── network/
│ │ │ └── NetworkDiscoveryScreen.kt # ❌ MISSING
│ │ ├── battery/
│ │ │ └── BatteryScreen.kt # ❌ MISSING
│ │ ├── files/
│ │ │ └── FileTransferScreen.kt # ❌ MISSING
│ │ └── main/
│ │ └── MainScreen.kt # Root navigation host with drawer & bottom bar.
│ │
│ ├── navigation/
│ │ ├── Destinations.kt # Routes, titles, icons for all screens.
│ │ ├── NavigationActions.kt # Abstraction for NavController.
│ │ ├── AirMouseNavHost.kt # NavHost graph with composable mappings.
│ │ └── AirMouseBottomBar.kt # Bottom navigation bar component.
│ │
│ ├── theme/
│ │ ├── Theme.kt # AirMouseTheme wrapper, Material 3 integration.
│ │ ├── ThemeColors.kt # ThemeColorScheme, AccentColor, color families.
│ │ ├── Color.kt # Static color definitions (DeepOrange, Teal, etc.).
│ │ ├── Dimensions.kt # Central spacing, padding, size, font constants.
│ │ └── Shapes.kt # RoundedCornerShape definitions (cards, buttons).
│ │
│ └── components/ # Reusable UI Atoms & Molecules
│ ├── AllUIComponents.kt # ControlDashboard, GestureTraining, Analytics, etc.
│ ├── AnimatedCheckbox.kt
│ ├── AnimatedSwitch.kt
│ ├── AnimatedToast.kt
│ ├── AnimatedCounter.kt
│ ├── AnimatedConnectionStatus.kt
│ ├── BatteryLevelIndicator.kt
│ ├── CircularProgressWithLabel.kt
│ ├── ConnectionStatusBadge.kt
│ ├── DataChart.kt # Line & Donut charts.
│ ├── FloatingActionMenu.kt
│ ├── FloatingParticles.kt
│ ├── GestureWaveform.kt
│ ├── GlassCard.kt
│ ├── GradientBackground.kt
│ ├── GradientIconButton.kt
│ ├── HolographicText.kt
│ ├── InteractiveTutorialCard.kt
│ ├── NeonButton.kt
│ ├── NeumorphicCard.kt
│ ├── NotificationBadge.kt
│ ├── ParticleBackground.kt
│ ├── PullToRefresh.kt
│ ├── RadarAnimation.kt
│ ├── SensorVisualizer.kt # 3D phone orientation cube.
│ ├── ShimmerEffect.kt
│ ├── SkeletonScreen.kt
│ ├── SlideUpPanel.kt
│ ├── TypewriterText.kt
│ └── VoiceWaveAnimation.kt
│
├── # =================== DOMAIN LAYER ===================
├── domain/
│ ├── model/ # Pure Kotlin data classes.
│ │ ├── CalibrationModels.kt # CalibrationStatus, Quality, Data.
│ │ ├── ConnectionModels.kt # ConnectionConfig, Status, Quality.
│ │ ├── GestureModels.kt # GestureType, Event, Template.
│ │ ├── MouseModels.kt # MouseEvent, MovementProfile, Statistics.
│ │ ├── ProximityModels.kt # ProximityState, Config.
│ │ ├── SensorModels.kt # SensorData, OrientationData.
│ │ ├── StatisticsModels.kt # StatisticsSummary, DailyStats.
│ │ ├── UpdateModels.kt # UpdateResult, VersionInfo.
│ │ ├── VoiceCommandModels.kt # VoiceCommand, Config, History.
│ │ ├── ProfileModels.kt # UserProfile, ProfileSettings.
│ │ ├── PreferencesModels.kt # AppPreferences, UserPreferences.
│ │ ├── BluetoothModels.kt # BluetoothDeviceInfo, BLECharacteristic.
│ │ ├── ErrorModels.kt # AppError, ErrorType.
│ │ └── ControlMode.kt # ControlMode enum.
│ │
│ ├── repository/ # Interfaces defining data operations.
│ │ ├── ICalibrationRepository.kt
│ │ ├── IConnectionRepository.kt
│ │ ├── IGestureRepository.kt
│ │ ├── IMouseRepository.kt
│ │ ├── IProfileRepository.kt
│ │ ├── IProximityRepository.kt
│ │ ├── ISensorRepository.kt
│ │ ├── ISettingsRepository.kt
│ │ ├── IStatisticsRepository.kt
│ │ ├── IUpdateRepository.kt
│ │ └── IVoiceCommandRepository.kt
│ │
│ ├── usecase/ # Single responsibility business rules.
│ │ ├── CalibrationUseCase.kt
│ │ ├── ConnectToServerUseCase.kt
│ │ ├── SendMovementUseCase.kt
│ │ ├── DetectGestureUseCase.kt
│ │ ├── DiscoverServersUseCase.kt
│ │ ├── GetConnectionStatusUseCase.kt
│ │ ├── GetStatisticsUseCase.kt
│ │ ├── RecordStatisticsUseCase.kt
│ │ ├── ManageProfileUseCase.kt
│ │ ├── ManageGestureTemplatesUseCase.kt
│ │ ├── HandleVoiceCommandUseCase.kt
│ │ ├── GetProximityStateUseCase.kt
│ │ ├── UpdateProximityConfigUseCase.kt
│ │ ├── TestConnectionUseCase.kt
│ │ ├── CheckForUpdatesUseCase.kt
│ │ └── GetGestureStatisticsUseCase.kt
│ │
│ └── feature/ # Feature orchestrators (bridging UI & UseCases).
│ ├── ConnectionFeature.kt
│ ├── MouseControlFeature.kt
│ ├── CalibrationFeature.kt
│ ├── GestureRecognitionFeature.kt
│ ├── ProximityFeature.kt
│ ├── StatisticsFeature.kt
│ ├── VoiceFeature.kt
│ ├── ProfileFeature.kt
│ ├── UpdateFeature.kt
│ └── SensorFeature.kt
│
├── # =================== DATA LAYER ===================
├── data/
│ ├── repository/ # Implementations of Domain interfaces.
│ │ ├── CalibrationRepositoryImpl.kt
│ │ ├── ConnectionRepositoryImpl.kt
│ │ ├── GestureRepositoryImpl.kt
│ │ ├── MouseRepositoryImpl.kt
│ │ ├── ProfileRepositoryImpl.kt
│ │ ├── ProximityRepositoryImpl.kt
│ │ ├── SensorRepositoryImpl.kt
│ │ ├── SettingsRepositoryImpl.kt
│ │ ├── StatisticsRepositoryImpl.kt
│ │ ├── UpdateRepositoryImpl.kt
│ │ └── VoiceCommandRepositoryImpl.kt
│ │
│ ├── datasource/ # Concrete data access.
│ │ ├── local/ # Local storage (Room & Preferences).
│ │ │ ├── AppDatabase.kt # Room database definition.
│ │ │ ├── Converters.kt # Type converters for Room.
│ │ │ ├── entity/ # Room Entities.
│ │ │ │ ├── CalibrationEntity.kt
│ │ │ │ ├── SettingsEntity.kt
│ │ │ │ ├── StatisticsEntity.kt
│ │ │ │ ├── GestureTemplateEntity.kt
│ │ │ │ ├── ProfileEntity.kt
│ │ │ │ ├── TrainingSampleEntity.kt
│ │ │ │ ├── DailyStatsEntity.kt
│ │ │ │ └── GestureStatsEntity.kt
│ │ │ ├── dao/ # Room Data Access Objects.
│ │ │ │ ├── CalibrationDao.kt
│ │ │ │ ├── SettingsDao.kt
│ │ │ │ ├── StatisticsDao.kt
│ │ │ │ ├── GestureDao.kt
│ │ │ │ ├── ProfileDao.kt
│ │ │ │ ├── TrainingSampleDao.kt
│ │ │ │ ├── DailyStatsDao.kt
│ │ │ │ └── GestureStatsDao.kt
│ │ │ ├── CalibrationDataSourceImpl.kt
│ │ │ ├── GestureDataSourceImpl.kt
│ │ │ ├── ProfileDataSourceImpl.kt
│ │ │ ├── StatisticsDataSourceImpl.kt
│ │ │ ├── PreferencesDataSourceImpl.kt
│ │ │ ├── LocalDataSourceImpl.kt # Unified wrapper over all DAOs.
│ │ │ └── interfaces/ # Interfaces for Data Sources.
│ │ │ ├── ICalibrationDataSource.kt
│ │ │ ├── IGestureDataSource.kt
│ │ │ ├── IProfileDataSource.kt
│ │ │ ├── IStatisticsDataSource.kt
│ │ │ ├── IPreferencesDataSource.kt
│ │ │ └── ILocalDataSource.kt
│ │ │
│ │ └── remote/ # Remote data sources (Network/BT/USB).
│ │ ├── ConnectionDataSourceImpl.kt
│ │ ├── BluetoothDataSourceImpl.kt
│ │ ├── UsbDataSourceImpl.kt
│ │ ├── WebSocketDataSourceImpl.kt
│ │ └── interfaces/
│ │ ├── IConnectionDataSource.kt
│ │ ├── IBluetoothDataSource.kt
│ │ ├── IUsbDataSource.kt
│ │ └── IWebSocketDataSource.kt
│ │
│ ├── mapper/
│ │ ├── DomainToEntityMapper.kt # Maps Domain → Room Entity.
│ │ └── EntityToDomainMapper.kt # Maps Room Entity → Domain.
│ │
│ └── helpers/
│ ├── SensorRepository.kt # Flow of fused sensor data (callbackFlow).
│ ├── PreferencesDataStore.kt # AndroidX DataStore wrapper.
│ ├── CalibrationPrefsData.kt # Helper data class.
│ └── GestureData.kt # Helper data class.
│
├── # =================== INFRASTRUCTURE LAYER ===================
├── network/ # Communication with PC Server.
│ ├── ConnectionManager.kt # CORE – Unified WebSocket/TCP/UDP client.
│ ├── UdpDiscovery.kt # Server discovery via UDP broadcast.
│ ├── AutoReconnectManager.kt # Exponential backoff reconnection logic.
│ ├── NetworkQualityMonitor.kt # Wi-Fi/Cellular signal strength.
│ ├── MessageTypes.kt # Protocol constants (matching Go server).
│ ├── AirMouseProtocolMessages.kt # JSON message builders.
│ ├── ConnectionHelper.kt # Extension functions for sending commands.
│ ├── TcpClient.kt # DEPRECATED – Delete.
│ └── WebSocketManager.kt # DEPRECATED – Delete.
│
├── sensors/ # Hardware & Motion Processing.
│ ├── SensorService.kt # Registers sensors, runs Madgwick fusion.
│ ├── CalibrationHelper.kt # Gyro bias, 6‑point accel, hard‑iron mag.
│ ├── EnhancedGestureDetector.kt # Click, Double, Right, Scroll detection.
│ ├── MadgwickAHRS.kt # Quaternion-based sensor fusion.
│ ├── MotionAnalyzer.kt # Jerk, acceleration, stability analysis.
│ ├── MotionDetector.kt # Simple legacy detector.
│ ├── OrientationTracker.kt # Tracks yaw/pitch/roll over time.
│ ├── SensorDataLogger.kt # Logs raw sensor data to CSV.
│ ├── SensorDataProcessor.kt # Filters (Low/High pass, Kalman).
│ ├── SensorFusion.kt # Static fusion utilities.
│ ├── SensorManagerHelper.kt # Checks sensor availability.
│ └── GestureDetector.kt # Legacy – Consider removing.
│
├── notifications/ # System Alerts.
│ └── NotificationManager.kt # Notification channels, badges, alerts.
│
├── files/ # File Transfers.
│ └── FileTransferService.kt # Handles sending/receiving files.
│
├── mirroring/ # Screen Mirroring.
│ └── ScreenMirroringService.kt # Captures screen and streams via WebSocket.
│
├── gaming/ # Game Profiles.
│ └── GameProfilesManager.kt # Detects foreground games, applies profiles.
│
├── macros/ # Macro Recorder.
│ └── MacroRecorder.kt # Records/plays back mouse/keyboard macros.
│
├── sync/ # Data Synchronization.
│ └── DataSyncManager.kt # Syncs calibration/gestures/profiles to server.
│
├── utils/ # Utility & Helper Classes.
│ ├── PreferencesManager.kt # Interface for SharedPreferences/DataStore.
│ ├── LogManager.kt # ❌ MISSING
│ ├── PermissionHelper.kt # ❌ MISSING
│ ├── VibrateUtils.kt # ❌ MISSING
│ ├── AudioUtils.kt # ❌ MISSING
│ ├── BluetoothUtils.kt # ❌ MISSING
│ ├── BatterySaver.kt # ❌ MISSING
│ ├── ConnectedDeviceStore.kt # ❌ MISSING
│ └── QRScanner.kt # ❌ MISSING
│
├── # =================== DEPENDENCY INJECTION ===================
├── di/
│ ├── AppContainer.kt # Manual DI container.
│ ├── AppModule.kt # Core dependencies (Context, Prefs, etc.).
│ ├── NetworkModule.kt # OkHttpClient, ConnectionManager.
│ ├── DatabaseModule.kt # Room database, DAOs.
│ ├── SensorModule.kt # SensorManager, CalibrationHelper.
│ ├── ServiceModule.kt # SensorService, PresentationModeService.
│ ├── RepositoryModule.kt # Binds Repository interfaces to impls.
│ ├── UseCaseModule.kt # Provides UseCase instances.
│ ├── FeatureModule.kt # Provides Feature instances.
│ ├── ViewModelModule.kt # Binds ViewModels for Hilt.
│ ├── CalibrationModule.kt # Calibration-specific bindings.
│ ├── CoroutineModule.kt # Dispatchers (IO, Main, Default).
│ └── GestureRepositoryModule.kt # Gesture repository bindings.
│
└── # =================== GO SERVER (Backend) ===================
└── go-server/ (External Package)
├── bspline.go # Cubic B‑spline smoothing.
├── humanizer.go # Human-like cursor movement.
├── tremor.go # Hand tremor simulation.
├── velocity.go # Log-normal velocity profiles.
└── main.go / server.go # ❌ MISSING (PC Server entry point).
```
---
## 3. Dependency Injection (Hilt Modules) – The Glue
Here is how Dagger/Hilt wires everything together:
| Module | Provides |
|--------|----------|
| **AppModule** | `Context`, `PreferencesManager`, `Vibrator`, `BluetoothAdapter`, `UsbManager`. |
| **NetworkModule** | `OkHttpClient`, `ConnectionManager`, `UdpDiscovery`. |
| **DatabaseModule** | `AppDatabase`, all DAOs (`CalibrationDao`, `ProfileDao`, etc.). |
| **SensorModule** | `SensorManager`, `CalibrationHelper`, `EnhancedGestureDetector`. |
| **ServiceModule** | `SensorService`, `PresentationModeService`. |
| **RepositoryModule** | Binds `ICalibrationRepository` → `CalibrationRepositoryImpl`, etc. |
| **UseCaseModule** | Provides `CalibrationUseCase`, `ConnectToServerUseCase`, etc. |
| **FeatureModule** | Provides `ConnectionFeature`, `MouseControlFeature`, etc. |
| **ViewModelModule** | Binds `HomeViewModel`, `SettingsViewModel`, etc., with `@ViewModelKey`. |
| **CoroutineModule** | Provides `@IoDispatcher`, `@MainDispatcher`, `@DefaultDispatcher`. |
| **CalibrationModule** | `ICalibrationDataSource` → `CalibrationDataSourceImpl`. |
### The Injection Flow
1. **Activity/Fragment** uses `@AndroidEntryPoint`.
2. **ViewModel** uses `@HiltViewModel` and `@Inject constructor`.
3. **ViewModel** injects `UseCase` or `Feature` dependencies.
4. **UseCase** injects `Repository` interfaces.
5. **RepositoryImpl** injects `DataSource` interfaces and `PreferencesManager`.
6. **DataSource** injects `Dao` (Room) or `ConnectionManager` (Network).
---
## 4. Data Flow – Complete Round Trip
Let's trace a **"Move Cursor"** action to see how all layers interact:
1. **User Gesture**: The user tilts the phone.
2. **SensorService** (Infrastructure) receives gyroscope data.
3. **SensorService** applies calibration (`CalibrationHelper`) and fusion (`MadgwickAHRS`).
4. **SensorService** invokes `onOrientationChanged` callback.
5. **HomeViewModel** (Presentation) receives the callback, calculates `dx` and `dy`.
6. **HomeViewModel** calls `connectionManager.sendMove(dx, dy)`.
7. **ConnectionManager** (Infrastructure) formats JSON and sends via WebSocket/TCP/UDP.
8. **Server** (Go) receives the message, applies smoothing (`bspline.go`), and moves the OS cursor.
9. **Server** sends back ACK or status updates.
10. **ConnectionManager** receives the response and updates `connectionQuality` StateFlow.
11. **HomeViewModel** collects the `connectionQuality` flow and updates the UI State.
12. **HomeScreen** recomposes, updating the signal strength indicator.
---
## 5. Duplicate Files to Delete
| File | Reason | Action |
|------|--------|--------|
| `TcpClient.kt` | Superseded by `ConnectionManager`. | ❌ **Delete** |
| `WebSocketManager.kt` | Superseded by `ConnectionManager`. | ❌ **Delete** |
| `TouchpadSettingsScreen.kt` | Settings are in `SettingsScreen` & `TouchpadScreen`. | ❌ **Delete** |
| `CalibrationProcessScreen.kt` | Duplicate of `CalibrationScreen`. | ❌ **Delete** |
| `GestureDetector.kt` (in `sensors/`) | Superseded by `EnhancedGestureDetector`. | ⚠️ Consider deleting/archiving. |
---
## 6. Missing Files to Implement
### A. Presentation (UI)
| File | Priority |
|------|----------|
| `StatisticsScreen.kt` | High |
| `AboutScreen.kt` | Medium |
| `SensorVisualizerScreen.kt` | High |
| `GestureStudioScreen.kt` | High |
| `EdgeGesturesScreen.kt` | Medium |
| `NetworkDiscoveryScreen.kt` | High |
| `BatteryScreen.kt` | Low |
| `FileTransferScreen.kt` | Medium |
| `OnboardingScreen.kt` (Compose) | Low (Activity exists) |
### B. Infrastructure (Utilities)
| File | Priority |
|------|----------|
| `LogManager.kt` | High |
| `PermissionHelper.kt` | High |
| `VibrateUtils.kt` | High |
| `AudioUtils.kt` | Medium |
| `BluetoothUtils.kt` | Medium |
| `BatterySaver.kt` | Medium |
| `ConnectedDeviceStore.kt` | Medium |
| `QRScanner.kt` | Medium |
### C. Backend (Go Server)
| File | Priority |
|------|----------|
| `main.go` | **Critical** |
| `server.go` | **Critical** |
| `handler.go` | **Critical** |
---
## 7. Gradle Module Structure (Recommended)
For large teams, consider modularising further:
```
app/ (Main application module)
└── src/main/java/com/airmouse/
├── presentation/ (UI)
├── domain/ (Pure logic)
├── data/ (Implementation)
└── di/ (Dagger)
core/ (Infrastructure shared across features)
├── network/
├── sensors/
├── utils/
└── notifications/
feature/home/
feature/settings/
feature/calibration/
feature/touchpad/
feature/voice/
...
```
---
## ✅ Summary
The Air Mouse Android application is built on a **rock-solid Clean Architecture** with:
- **Strict layer separation** (Presentation ↔ Domain ↔ Data ↔ Infrastructure).
- **Unidirectional Data Flow (MVI)** for predictable UI state.
- **Dependency Injection (Hilt)** for loose coupling.
- **A rich, reusable component library** for consistent UI.
- **Comprehensive sensor and network handling** for real‑time control.
The architecture is **scalable, testable, and maintainable**. With the missing files and PC server implemented, it will be a fully production‑ready system.
---
*This architecture document is part of the Air Mouse Ultimate project – University of Tehran, Embedded Systems Exercise.*

Xet Storage Details

Size:
29.1 kB
·
Xet hash:
45a9b58586666819e197484d2b369c5beba1d1f17b63ea2e8ce6be33e6440762

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