DriveSwipe is an Android app for touchless in-car media control using camera-based hand gestures. It uses CameraX + MediaPipe for live gesture recognition and maps recognized gestures to media actions (track, play/pause, volume).
- Compose multi-screen UX (
Home,Setup,Gestures,Modes,History) - Foreground gesture service for reliable in-drive operation
- Day/Night operating modes (camera + proximity flow)
- Gesture mapping and tuning controls in-app
- DataStore-backed persistent settings
- Runtime gesture history feed for quick validation
- Branded launcher icon and signed release build support
Pinch_Drag_Right-> mapped action (defaultNEXT_TRACK)Pinch_Drag_Left-> mapped action (defaultPREVIOUS_TRACK)Two_Finger_Point-> mapped action (defaultPLAY_PAUSE)Thumb_Up-> mapped action (defaultVOLUME_UP, repeat by tick interval)Thumb_Down-> mapped action (defaultVOLUME_DOWN, repeat by tick interval)
- Kotlin
- Jetpack Compose + Material 3
- AndroidX Navigation
- CameraX
- MediaPipe Tasks Vision (
com.google.mediapipe:tasks-vision) - Coroutines
- DataStore Preferences
- Android Studio (latest stable recommended)
- Android SDK 34
- Min SDK 26
- Front camera device (proximity sensor optional but recommended)
./gradlew.bat :app:assembleDebugOutput:
app/build/outputs/apk/debug/app-debug.apk
./gradlew.bat :app:assembleReleaseOutput:
app/build/outputs/apk/release/DriveSwipe-v1.2.apk
This project reads local signing config from keystore.properties.
- Copy template:
keystore.properties.example->keystore.properties
- Fill your real values:
storeFilestorePasswordkeyAliaskeyPassword
- Build release:
./gradlew.bat :app:assembleRelease
app/src/main/java/com/example/driveswipe/MainActivity.kt- app host + permission/service orchestrationapp/src/main/java/com/example/driveswipe/DriveSwipeApp.kt- app UI shell and screensapp/src/main/java/com/example/driveswipe/GestureService.kt- foreground service and media action dispatchapp/src/main/java/com/example/driveswipe/GestureRecognizerHelper.kt- inference pipeline and pinch/gesture logicapp/src/main/java/com/example/driveswipe/SettingsRepository.kt- DataStore persistence layerapp/src/main/java/com/example/driveswipe/DriveSwipeModels.kt- shared settings/action models
- Camera permission is required for full functionality.
- There are known non-blocking build warnings around
android:extractNativeLibsand deprecated CameraX analyzer sizing API.