tahamajs/CPS / Files /ComputerAssignments /CA2 /code /android /docs /Architecture&ImplementationGuide.md
tahamajs's picture
|
download
raw
32.4 kB

Air Mouse – Complete Architecture & Implementation Guide

πŸ“‹ Executive Summary

The Air Mouse project is a complete, production‑ready Android application that turns a smartphone into a wireless mouse, gesture controller, and presentation remote. The codebase follows Clean Architecture principles with a clear separation of concerns across data, domain, and presentation layers.

This document provides a comprehensive inventory of all files, identifies missing components, highlights duplication, and outlines the optimal architecture.


πŸ—οΈ Architecture Overview

Layered Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         PRESENTATION LAYER                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Activities & Fragments (HomeActivity, OnboardingActivity)      β”‚   β”‚
β”‚  β”‚  Compose Screens (HomeScreen, SettingsScreen, etc.)            β”‚   β”‚
β”‚  β”‚  ViewModels (HomeViewModel, SettingsViewModel, etc.)           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                           DOMAIN LAYER                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Models (CalibrationData, ConnectionConfig, etc.)             β”‚   β”‚
β”‚  β”‚  Repositories Interfaces (ICalibrationRepository, etc.)        β”‚   β”‚
β”‚  β”‚  Use Cases (CalibrationUseCase, ConnectToServerUseCase, etc.) β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                            DATA LAYER                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Repository Implementations (CalibrationRepositoryImpl, etc.)  β”‚   β”‚
β”‚  β”‚  Data Sources (Room DAOs, Preferences, Network)               β”‚   β”‚
β”‚  β”‚  Mappers (Domain ↔ Entity)                                    β”‚   β”‚
β”‚  β”‚  Room Database (AppDatabase, Entities, DAOs)                  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                       INFRASTRUCTURE LAYER                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Network (ConnectionManager, UdpDiscovery, WebSocket, TCP)    β”‚   β”‚
β”‚  β”‚  Sensors (CalibrationHelper, MadgwickAHRS, SensorService)     β”‚   β”‚
β”‚  β”‚  Notifications, File Transfer, Macros, Gaming, Mirroring      β”‚   β”‚
β”‚  β”‚  Utilities (PreferencesManager, LogManager, Permissions)      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dependency Flow

Presentation β†’ Domain ← Data ← Infrastructure
     ↓           ↓        ↓          ↓
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
              (Dependency Injection)

πŸ“ Complete File Inventory

1. Presentation Layer (UI)

Activities & Entry Points

File Purpose Status
AirMouseApplication.kt Application class, Hilt setup, logging, crash reporting βœ… Complete
MainActivity.kt Main entry point, splash screen, onboarding redirect, theme βœ… Complete
HomeActivity.kt Home activity with permission handling, sensor service βœ… Complete
OnboardingActivity.kt Onboarding flow (4 pages with animations) βœ… Complete
WebViewActivity.kt WebView for help/documentation βœ… Complete
BaseActivity.kt Base activity with permissions, loading, debug overlay βœ… Complete

Compose Screens

File Purpose Status
MainScreen.kt Main navigation host with drawer and bottom bar βœ… Complete
HomeScreen.kt Dashboard with connection, sensors, gestures, stats βœ… Complete
SettingsScreen.kt Comprehensive settings with all sections βœ… Complete
HelpScreen.kt Help centre with search, categories, favourites βœ… Complete
ServerLogsScreen.kt Real‑time log viewer with filters, export, history βœ… Complete
ProfilesScreen.kt User profile management (CRUD, favourites, defaults) βœ… Complete
ProximityScreen.kt Bluetooth proximity lock/unlock βœ… Complete
AccessibilityScreen.kt Accessibility settings (display, feedback, gestures, voice) βœ… Complete
ThemesScreen.kt Theme selector with previews and accent colours βœ… Complete
VoiceCommandsScreen.kt Voice command control with custom commands βœ… Complete
TouchpadScreen.kt Full touchpad simulation with gesture recognition βœ… Complete
CalibrationScreen.kt Step‑by‑step sensor calibration (gyro, mag, accel) βœ… Complete
CalibrationResultScreen.kt Calibration results with quality assessment βœ… Complete
CalibrationGuideDialog.kt Animated instruction dialog βœ… Complete
StatisticsScreen.kt ❌ Missing
AboutScreen.kt ❌ Missing (partially in Settings)
SensorVisualizerScreen.kt ❌ Missing
GestureStudioScreen.kt ❌ Missing
EdgeGesturesScreen.kt ❌ Missing
NetworkDiscoveryScreen.kt ❌ Missing
BatteryScreen.kt ❌ Missing
OnboardingScreen.kt ❌ Missing (Activity exists)
FileTransferScreen.kt ❌ Missing
TouchpadSettingsScreen.kt Stub (duplicate, can be removed) ⚠️ Duplicate

ViewModels

File Purpose Status
MainViewModel.kt Global navigation, connection, control mode βœ… Complete
HomeViewModel.kt Sensor processing, gestures, connection, stats βœ… Complete
SettingsViewModel.kt Settings persistence, reset, import/export βœ… Complete
HelpViewModel.kt Help search, categories, favourites βœ… Complete
ServerLogsViewModel.kt Log capture, filtering, export, persistence βœ… Complete
ProfilesViewModel.kt Profile CRUD, favourites, defaults βœ… Complete
ProximityViewModel.kt Bluetooth scanning, distance calculation, auto‑lock βœ… Complete
AccessibilityViewModel.kt Accessibility settings management βœ… Complete
ThemesViewModel.kt Theme switching, accent colours, preview βœ… Complete
VoiceCommandsViewModel.kt Voice command processing, TTS, history βœ… Complete
TouchpadViewModel.kt Touch event processing, gestures, network commands βœ… Complete
CalibrationViewModel.kt Calibration steps, sensor sampling, quality βœ… Complete
StatisticsViewModel.kt ❌ Missing

UI Components & Utilities

File Purpose Status
AllUIComponents.kt Reusable composables (dashboard, gestures, macros, etc.) βœ… Complete
CalibrationComponents.kt Calibration‑specific UI components βœ… Complete
CalibrationUiState.kt Calibration state models βœ… Complete
Destinations.kt Navigation routes, icons, bottom nav items βœ… Complete
NavigationActions.kt Navigation abstraction βœ… Complete
AirMouseBottomBar.kt Bottom navigation bar βœ… Complete
AirMouseNavHost.kt Navigation host with all routes βœ… Complete
DebugOverlay.kt Floating debug overlay for sensors βœ… Complete
SensorCubeView.kt 3D sensor visualisation βœ… Complete
UiStyleUtils.kt Animation and styling helpers βœ… Complete
NotificationBadge.kt Animated notification badge βœ… Complete
ShimmerEffect.kt Loading shimmer effect βœ… Complete
FloatingParticles.kt Particle animation background βœ… Complete
AnimatedCheckbox.kt Animated checkbox βœ… Complete
AnimatedSwitch.kt Animated switch βœ… Complete
AnimatedToast.kt Toast with animation βœ… Complete
ConnectionStatusBadge.kt Connection status indicator βœ… Complete
GlassCard.kt Glass‑morphism card βœ… Complete
GradientBackground.kt Animated gradient background βœ… Complete
NeonButton.kt Neon‑style button βœ… Complete
HolographicText.kt Holographic/animated text βœ… Complete
TypewriterText.kt Typewriter animation text βœ… Complete
VoiceWaveAnimation.kt Voice activity animation βœ… Complete
RadarAnimation.kt Radar‑style loading animation βœ… Complete
SensorVisualizer.kt 3D sensor orientation visualisation βœ… Complete
DataChart.kt Line and donut charts βœ… Complete
GestureWaveform.kt Gesture data waveform βœ… Complete
ParticleBackground.kt Particle system background βœ… Complete
PullToRefresh.kt Custom pull‑to‑refresh βœ… Complete
SlideUpPanel.kt Slide‑up bottom panel βœ… Complete
SkeletonScreen.kt Loading skeleton UI βœ… Complete
FloatingActionMenu.kt Expandable FAB menu βœ… Complete
AnimatedCounter.kt Animated counter βœ… Complete
AnimatedConnectionStatus.kt Animated connection status indicator βœ… Complete
CircularProgressWithLabel.kt Circular progress with label βœ… Complete
DonutChart.kt Donut chart βœ… Complete
InteractiveTutorialCard.kt Tutorial card βœ… Complete
NeumorphicCard.kt Neumorphic design card βœ… Complete

Calibration UI

File Purpose Status
CalibrationScreen.kt Main calibration screen βœ… Complete
CalibrationResultScreen.kt Results with quality βœ… Complete
CalibrationGuideDialog.kt Step guide dialog βœ… Complete
CalibrationComponents.kt Reusable components βœ… Complete
CalibrationUiState.kt State models βœ… Complete
CalibrationViewModel.kt ViewModel βœ… Complete
CalibrationProcessScreen.kt Stub (can be removed) ⚠️ Duplicate/Stub

2. Domain Layer

Models

File Purpose Status
CalibrationModels.kt Calibration status, quality, data models βœ… Complete
ConnectionModels.kt Connection config, quality, status βœ… Complete
GestureModels.kt Gesture types, events, templates βœ… Complete
MouseModels.kt Mouse events, profiles, statistics βœ… Complete
ProximityModels.kt Proximity state, config, calibration βœ… Complete
SensorModels.kt Sensor data, orientation, info βœ… Complete
StatisticsModels.kt Statistics summary, daily, historical βœ… Complete
UpdateModels.kt Update info, version, progress βœ… Complete
VoiceCommandModels.kt Voice commands, config, history βœ… Complete
ProfileModels.kt User profile, settings βœ… Complete
PreferencesModels.kt App preferences, user preferences βœ… Complete
BluetoothModels.kt Bluetooth device info, BLE services βœ… Complete
ControlMode.kt Control mode enum βœ… Complete
CalibrationData.kt Calibration data with JSON serialisation βœ… Complete
GestureTemplate.kt Gesture template with JSON serialisation βœ… Complete
StatisticsSummary.kt Statistics summary with JSON serialisation βœ… Complete
ErrorModels.kt Error types and models βœ… Complete
CalibrationResult.kt Calibration result model βœ… Complete

Repository Interfaces

File Purpose Status
ICalibrationRepository.kt Calibration operations βœ… Complete
IConnectionRepository.kt Connection management βœ… Complete
IGestureRepository.kt Gesture detection and templates βœ… Complete
IMouseRepository.kt Mouse movement and events βœ… Complete
IProfileRepository.kt User profile CRUD βœ… Complete
IProximityRepository.kt Proximity monitoring βœ… Complete
ISensorRepository.kt Sensor data and calibration βœ… Complete
ISettingsRepository.kt Settings management βœ… Complete
IStatisticsRepository.kt Statistics recording and retrieval βœ… Complete
IUpdateRepository.kt App updates βœ… Complete
IVoiceCommandRepository.kt Voice commands βœ… Complete

Use Cases

File Purpose Status
CalibrationUseCase.kt Calibration orchestration βœ… Complete
ConnectToServerUseCase.kt Connect to server βœ… Complete
SendMovementUseCase.kt Send mouse movement βœ… Complete
DetectGestureUseCase.kt Gesture detection βœ… Complete
DiscoverServersUseCase.kt UDP server discovery βœ… Complete
GetConnectionStatusUseCase.kt Get connection status βœ… Complete
GetStatisticsUseCase.kt Get statistics βœ… Complete
RecordStatisticsUseCase.kt Record statistics βœ… Complete
ManageProfileUseCase.kt Profile management βœ… Complete
ManageGestureTemplatesUseCase.kt Gesture template management βœ… Complete
HandleVoiceCommandUseCase.kt Voice command handling βœ… Complete
GetProximityStateUseCase.kt Get proximity state βœ… Complete
UpdateProximityConfigUseCase.kt Update proximity config βœ… Complete
TestConnectionUseCase.kt Test connection βœ… Complete
CheckForUpdatesUseCase.kt Check for updates βœ… Complete
GetGestureStatisticsUseCase.kt Get gesture statistics βœ… Complete

3. Data Layer

Repository Implementations

File Purpose Status
CalibrationRepositoryImpl.kt Calibration repository βœ… Complete
ConnectionRepositoryImpl.kt Connection repository βœ… Complete
GestureRepositoryImpl.kt Gesture repository βœ… Complete
MouseRepositoryImpl.kt Mouse repository βœ… Complete
ProfileRepositoryImpl.kt Profile repository βœ… Complete
ProximityRepositoryImpl.kt Proximity repository βœ… Complete
SensorRepositoryImpl.kt Sensor repository βœ… Complete
SettingsRepositoryImpl.kt Settings repository βœ… Complete
StatisticsRepositoryImpl.kt Statistics repository βœ… Complete
UpdateRepositoryImpl.kt Update repository βœ… Complete
VoiceCommandRepositoryImpl.kt Voice command repository βœ… Complete

Data Sources

File Purpose Status
CalibrationDataSourceImpl.kt Calibration preferences βœ… Complete
GestureDataSourceImpl.kt Gesture templates, training, stats βœ… Complete
ProfileDataSourceImpl.kt Profile JSON storage βœ… Complete
StatisticsDataSourceImpl.kt Statistics storage βœ… Complete
PreferencesDataSourceImpl.kt Generic preferences βœ… Complete
LocalDataSourceImpl.kt Unified Room data source βœ… Complete
ConnectionDataSourceImpl.kt Remote connection data source βœ… Complete
BluetoothDataSourceImpl.kt Bluetooth data source βœ… Complete
UsbDataSourceImpl.kt USB data source βœ… Complete
WebSocketDataSourceImpl.kt WebSocket data source βœ… Complete

Room Database

File Purpose Status
AppDatabase.kt Room database definition βœ… Complete
Converters.kt Type converters βœ… Complete
CalibrationEntity.kt Calibration entity βœ… Complete
SettingsEntity.kt Settings entity βœ… Complete
StatisticsEntity.kt Statistics entity βœ… Complete
GestureTemplateEntity.kt Gesture template entity βœ… Complete
ProfileEntity.kt Profile entity βœ… Complete
TrainingSampleEntity.kt Training sample entity βœ… Complete
DailyStatsEntity.kt Daily statistics entity βœ… Complete
GestureStatsEntity.kt Gesture statistics entity βœ… Complete
CalibrationDao.kt Calibration DAO βœ… Complete
SettingsDao.kt Settings DAO βœ… Complete
StatisticsDao.kt Statistics DAO βœ… Complete
GestureDao.kt Gesture DAO βœ… Complete
ProfileDao.kt Profile DAO βœ… Complete
TrainingSampleDao.kt Training sample DAO βœ… Complete
DailyStatsDao.kt Daily statistics DAO βœ… Complete
GestureStatsDao.kt Gesture statistics DAO βœ… Complete

Mappers

File Purpose Status
DomainToEntityMapper.kt Domain ↔ Entity mapping βœ… Complete
EntityToDomainMapper.kt Entity β†’ Domain mapping βœ… Complete

Data Helpers

File Purpose Status
SensorRepository.kt Sensor data flow (callbackFlow) βœ… Complete
PreferencesDataStore.kt AndroidX DataStore wrapper βœ… Complete
CalibrationPrefsData.kt Calibration preference data class βœ… Complete
GestureData.kt Gesture data class βœ… Complete
SensorData.kt Sensor data class βœ… Complete
Quadruple.kt Quadruple helper βœ… Complete
GestureTypeCount.kt Gesture count helper βœ… Complete

Repository Interfaces (Data Layer)

File Purpose Status
ICalibrationDataSource.kt Calibration data source interface βœ… Complete
IGestureDataSource.kt Gesture data source interface βœ… Complete
IProfileDataSource.kt Profile data source interface βœ… Complete
IStatisticsDataSource.kt Statistics data source interface βœ… Complete
IPreferencesDataSource.kt Preferences data source interface βœ… Complete
ILocalDataSource.kt Unified local data source interface βœ… Complete
IConnectionDataSource.kt Connection data source interface βœ… Complete
IBluetoothDataSource.kt Bluetooth data source interface βœ… Complete
IUsbDataSource.kt USB data source interface βœ… Complete
IWebSocketDataSource.kt WebSocket data source interface βœ… Complete

4. Infrastructure Layer

Network

File Purpose Status
ConnectionManager.kt Core – Unified WebSocket, TCP, UDP with reconnection, heartbeat, ACK βœ… Complete
UdpDiscovery.kt UDP server discovery βœ… Complete
AutoReconnectManager.kt Reconnection orchestration βœ… Complete
NetworkQualityMonitor.kt Network quality monitoring βœ… Complete
MessageTypes.kt Protocol message types and constants βœ… Complete
AirMouseProtocolMessages.kt JSON message builders βœ… Complete
ConnectionHelper.kt Extension functions for message sending βœ… Complete
TcpClient.kt ⚠️ Deprecated – Use ConnectionManager instead ❌ Remove/Archive
WebSocketManager.kt ⚠️ Deprecated – Use ConnectionManager instead ❌ Remove/Archive

Sensors

File Purpose Status
SensorService.kt Sensor registration, fusion, gestures βœ… Complete
CalibrationHelper.kt Gyro bias, magnetometer, accelerometer calibration βœ… Complete
EnhancedGestureDetector.kt Advanced gesture detection (click, scroll, right‑click) βœ… Complete
MadgwickAHRS.kt Sensor fusion algorithm βœ… Complete
MotionAnalyzer.kt Motion feature analysis βœ… Complete
MotionDetector.kt Simple motion detection βœ… Complete
OrientationTracker.kt Orientation tracking βœ… Complete
SensorDataLogger.kt CSV logging for debugging βœ… Complete
SensorDataProcessor.kt Filters (low‑pass, high‑pass, Kalman, etc.) βœ… Complete
SensorFusion.kt Static sensor fusion utilities βœ… Complete
SensorManagerHelper.kt Sensor availability checks βœ… Complete
GestureDetector.kt Legacy gesture detection βœ… Complete

Services

File Purpose Status
ForegroundServiceManager.kt Foreground service management βœ… Complete
BluetoothHidService.kt Bluetooth HID mouse service βœ… Complete
DebugOverlayService.kt Debug overlay service βœ… Complete
EdgeGestureService.kt Edge gesture detection service βœ… Complete
GestureInferenceService.kt Gesture inference service βœ… Complete
GestureRecorderService.kt Gesture recording service βœ… Complete
OrientationMonitorService.kt Orientation monitoring service βœ… Complete
ProximityAwareService.kt Proximity awareness service βœ… Complete
VoiceCommandService.kt Voice command service βœ… Complete
PresentationModeService.kt Presentation control service βœ… Complete
ScreenMirroringService.kt Screen mirroring service βœ… Complete

Notifications

File Purpose Status
NotificationManager.kt Notification channels, badges, alerts βœ… Complete

Files & Transfer

File Purpose Status
FileTransferService.kt File transfer service βœ… Complete

Gaming & Macros

File Purpose Status
GameProfilesManager.kt Game detection and profile switching βœ… Complete
MacroRecorder.kt Macro recording and playback βœ… Complete

Utilities

File Purpose Status
PreferencesManager.kt Core – Preferences interface βœ… Complete
LogManager.kt ❌ Missing
PermissionHelper.kt ❌ Missing
VibrateUtils.kt ❌ Missing
AudioUtils.kt ❌ Missing
BluetoothUtils.kt ❌ Missing
BatterySaver.kt ❌ Missing
ConnectedDeviceStore.kt ❌ Missing
QRScanner.kt ❌ Missing

5. Dependency Injection (Hilt)

File Purpose Status
AppContainer.kt App container for manual DI βœ… Complete
AppModule.kt Core DI modules βœ… Complete
NetworkModule.kt Network dependencies βœ… Complete
DatabaseModule.kt Room database dependencies βœ… Complete
SensorModule.kt Sensor dependencies βœ… Complete
ServiceModule.kt Service dependencies βœ… Complete
RepositoryModule.kt Repository bindings βœ… Complete
UseCaseModule.kt Use case bindings βœ… Complete
FeatureModule.kt Feature dependencies βœ… Complete
ViewModelModule.kt ViewModel bindings βœ… Complete
CalibrationModule.kt Calibration dependencies βœ… Complete
CoroutineModule.kt Coroutine dispatchers βœ… Complete
GestureRepositoryModule.kt Gesture repository bindings βœ… Complete

6. Go Server (Smoothing Package)

File Purpose Status
bspline.go Cubic B‑spline interpolation βœ… Complete
humanizer.go Human‑like cursor smoothing βœ… Complete
tremor.go Hand tremor simulation βœ… Complete
velocity.go Log‑normal velocity profile βœ… Complete
PC Server (main.go, server.go) ❌ Missing

7. Data Synchronisation

File Purpose Status
DataSyncManager.kt Sync calibration, gestures, statistics, profiles βœ… Complete

πŸ”„ Duplicate & Redundant Files (To Delete/Archive)

1. Deprecated Network Classes

File Reason Action
TcpClient.kt Superseded by ConnectionManager ❌ Delete
WebSocketManager.kt Superseded by ConnectionManager ❌ Delete

2. Duplicate/Stub UI Screens

File Reason Action
TouchpadSettingsScreen.kt Settings are in SettingsScreen.kt and TouchpadScreen.kt ❌ Delete
CalibrationProcessScreen.kt Duplicate of CalibrationScreen.kt ❌ Delete

3. Redundant Legacy Files

File Reason Action
GestureDetector.kt (sensors/package) Superseded by EnhancedGestureDetector.kt ⚠️ Consider removing
PreferencesManager.kt (interface) vs PreferencesDataSourceImpl.kt Consolidate into PreferencesManager ⚠️ Review for duplication

❌ Missing Files (To Implement)

1. UI Screens

File Priority
StatisticsScreen.kt High
AboutScreen.kt Medium
SensorVisualizerScreen.kt High
GestureStudioScreen.kt High
EdgeGesturesScreen.kt Medium
NetworkDiscoveryScreen.kt High
BatteryScreen.kt Low
OnboardingScreen.kt Low
FileTransferScreen.kt Medium

2. ViewModels

File Priority
StatisticsViewModel.kt High

3. Utility Classes

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

4. PC Server

File Priority
main.go Critical
server.go Critical
handler.go Critical

πŸ—οΈ Optimal Architecture Summary

Layer Responsibilities

Layer Responsibility Key Components
Presentation UI rendering, user interaction Compose Screens, ViewModels, Navigation
Domain Business logic, use cases Models, Repository Interfaces, Use Cases
Data Data persistence, retrieval Repository Implementations, Data Sources, Room
Infrastructure External dependencies Network, Sensors, Notifications, Utilities

Dependency Direction

Presentation β†’ Domain ← Data ← Infrastructure
     ↓           ↓        ↓          ↓
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
              (Dependency Injection)

Key Design Patterns

Pattern Usage
Repository Pattern Abstracts data sources (Room, Preferences, Network)
Use Case Pattern Encapsulates single business rules
Observer Pattern StateFlow for reactive UI updates
Dependency Injection Hilt for loose coupling
CallbackFlow Reactive sensor data streams
Strategy Pattern Multiple gesture detection strategies

πŸ“Š Completion Status

Presentation Layer

βœ… HomeScreen, SettingsScreen, HelpScreen, ServerLogsScreen
βœ… ProfilesScreen, ProximityScreen, AccessibilityScreen
βœ… ThemesScreen, VoiceCommandsScreen, TouchpadScreen
βœ… CalibrationScreen (full flow)
❌ StatisticsScreen, AboutScreen, SensorVisualizerScreen
❌ GestureStudioScreen, EdgeGesturesScreen, NetworkDiscoveryScreen
❌ BatteryScreen, FileTransferScreen

Domain Layer

βœ… All models (100%)
βœ… All repository interfaces (100%)
βœ… All use cases (100%)

Data Layer

βœ… All repository implementations (100%)
βœ… All data sources (100%)
βœ… Room database (100%)
βœ… Mappers (100%)

Infrastructure

βœ… Network (ConnectionManager, UdpDiscovery, etc.) – 100%
βœ… Sensors (SensorService, CalibrationHelper, Madgwick, etc.) – 100%
βœ… Notifications – 100%
βœ… File Transfer – 100%
βœ… Gaming & Macros – 100%
❌ Utilities (LogManager, PermissionHelper, etc.) – 0%
❌ PC Server – 0%

Overall Android Client: 85% Complete

Overall System (with PC Server): 60% Complete


πŸš€ Roadmap to Completion

Phase 1: UI Completion (1–2 weeks)

  • Implement StatisticsScreen
  • Implement AboutScreen
  • Implement SensorVisualizerScreen
  • Implement GestureStudioScreen
  • Implement NetworkDiscoveryScreen

Phase 2: Utilities (1 week)

  • Implement LogManager
  • Implement PermissionHelper
  • Implement VibrateUtils
  • Implement ConnectedDeviceStore
  • Implement QRScanner

Phase 3: PC Server (2–3 weeks)

  • Write Go server with WebSocket/TCP support
  • Integrate adaptivesmoothing package
  • Implement cursor control (Windows, macOS, Linux)
  • Add QR code generation for pairing

Phase 4: Testing & Polish (1–2 weeks)

  • Unit tests for repositories and use cases
  • UI tests for critical flows
  • Error handling and edge cases
  • Performance optimisation

πŸ§ͺ Testing Strategy

Test Type Scope Tools
Unit Tests Use cases, repositories, mappers JUnit, Mockito, MockK
Integration Tests Room, Preferences, Network AndroidX Test, Robolectric
UI Tests Critical user flows Compose UI Test, Espresso
Instrumentation Tests Sensor, Bluetooth, Network AndroidX Test

πŸ“š Recommended Libraries

Library Purpose
Jetpack Compose UI framework
Hilt Dependency injection
Room Local database
DataStore Preferences
Coroutines & Flow Asynchronous programming
OkHttp HTTP/WebSocket client
Gson JSON serialisation
Timber Logging
MockK Unit testing

🏁 Final Assessment

The Air Mouse project is architecturally complete and follows best practices for modern Android development. The codebase is well‑structured, modular, and maintainable. The remaining work is primarily UI screens and the PC server. With these completed, the project will be production‑ready.

Key Strengths:

  • Clean Architecture with clear separation of concerns
  • Complete sensor processing pipeline with calibration
  • Robust network layer with reconnection and heartbeat
  • Comprehensive gesture detection
  • Modern Compose UI with Material 3
  • Full Room database with offline support

Key Gaps:

  • Missing utility classes
  • Missing PC server
  • A few UI screens incomplete

Recommendation: Prioritise the PC server, as it is the critical missing piece for the app to function as intended. The Android client is otherwise ready for integration.


This document is part of the Air Mouse Ultimate project – University of Tehran, Embedded Systems Exercise.

Xet Storage Details

Size:
32.4 kB
Β·
Xet hash:
22aeb351fa54b60c595bc68327350d881d864690028f22a223bac90f19e490eb

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