Air Mouse Android App - Complete Architecture & Folder Structure Documentation
π Table of Contents
- Overview
- Architecture
- Package Structure
- Module Breakdown
- Data Flow
- Layer Diagrams
- Key Components
- Dependency Injection
- Testing Strategy
- Build Variants
- Third-Party Libraries
- 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 storagedatasource/remote/- Network data sourcesmapper/- Data mappers between domain and entitiesrepository/- Repository implementations
3. Domain Module
- Purpose: Business logic and models
- Sub-packages:
model/- Domain modelsrepository/- Repository interfacesusecase/- Business logic use cases
4. Features Module
- Purpose: Feature orchestration
- Key Files:
ConnectionFeature.kt- Network connection managementMouseControlFeature.kt- Mouse controlCalibrationFeature.kt- Sensor calibrationGestureRecognitionFeature.kt- Gesture detectionProximityFeature.kt- Proximity securityStatisticsFeature.kt- Statistics trackingVoiceFeature.kt- Voice commandsProfileFeature.kt- User profilesUpdateFeature.kt- App updatesSensorFeature.kt- Sensor management
5. Network Module
- Purpose: Network communication
- Key Files:
ConnectionManager.kt- Unified connection managerWebSocketManager.kt- WebSocket communicationTcpClient.kt- TCP communicationUdpDiscovery.kt- UDP discoveryNetworkQualityMonitor.kt- Network quality monitoringMessageTypes.kt- Message type constants
6. Presentation Module
- Purpose: UI and user interaction
- Sub-packages:
base/- Base classes (ViewModel)extensions/- Compose extensionsnavigation/- Navigationtheme/- Themingui/- UI Screens and components
7. Sensors Module
- Purpose: Sensor data processing
- Key Files:
CalibrationHelper.kt- Sensor calibrationMadgwickAHRS.kt- Sensor fusionEnhancedGestureDetector.kt- Gesture detection
8. Service Module
- Purpose: Background services
- Key Files:
SensorService.kt- Sensor data serviceBluetoothHidService.kt- Bluetooth HIDProximityService.kt- Proximity monitoringVoiceCommandService.kt- Voice recognition
9. Utils Module
- Purpose: Utility classes and helpers
- Key Files:
PreferencesManager.kt- Shared preferencesPermissionManager.kt- Permission handlingBatteryOptimizer.kt- Battery optimizationErrorHandler.kt- Error handlingAnalyticsManager.kt- Analytics tracking
10. DI Module
- Purpose: Dependency injection
- Key Files:
- All
*Module.ktfiles for Hilt
- All
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
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
@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
@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
StateFlowfor UI state - Use
SharedFlowfor events - Use
MutableStateFlowfor mutable state - Use
update {}for atomic updates
5. Error Handling
- Use
Result<T>for operations - Use
sealed classfor error types - Use
ErrorHandlerfor centralized error handling
6. Logging
- Use
Timberfor 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.