Floating Assistive Control Overlay for Android — like iPhone's AssistiveTouch for users with broken or unresponsive physical side buttons.
Tagline: Your buttons, always within reach
TouchEase displays a small semi-transparent circular button that stays on top of all other apps. Tap it to open a radial/grid popup of system controls — power, volume, screenshot, brightness, home, back, recents, and lock screen. The button is draggable and snaps to screen edges.
Built with Flutter (UI) + Kotlin (native overlay service).
- Floating Button — Draggable circular overlay, auto-snaps to screen edge, position persists across reboots
- Control Panel — 3x3 grid of action buttons with scale+fade animation
- 9 Action Buttons — Power Menu, Volume Up/Down, Screenshot, Brightness, Home, Back, Recents, Lock Screen
- Customizable — Opacity (20–100%), Size (40–80dp), Theme color, Button enable/disable, Drag-to-reorder buttons, Panel theme (Light/Dark/Auto)
- Start on Boot — Auto-restarts overlay after device reboot
- Accessibility Service — Enables Back, Recents, Power Menu, Screenshot (API 28+), Lock Screen (API 28+)
| Permission | Purpose |
|---|---|
SYSTEM_ALERT_WINDOW |
Draw floating button over other apps |
FOREGROUND_SERVICE |
Run overlay as foreground service |
WRITE_SETTINGS |
Adjust system brightness |
MODIFY_AUDIO_SETTINGS |
Volume up/down |
RECEIVE_BOOT_COMPLETED |
Start on device boot |
| Accessibility Service | Power dialog, Back, Recents, Screenshot, Lock |
lib/main.dart— App entry with Provider setuplib/screens/home_screen.dart— Permission checks and service startlib/screens/settings_screen.dart— Full settings UI with live previewlib/services/overlay_bridge.dart— MethodChannel bridge to nativelib/services/permission_handler.dart— Permission state managementlib/services/settings_provider.dart— Settings persistence via SharedPreferenceslib/models/settings.dart— Data model + ActionButton enumlib/widgets/color_picker.dart— Theme color selectorlib/widgets/button_reorder_list.dart— Drag-to-reorder + enable/disablelib/widgets/floating_preview.dart— Live preview of button changes
MainActivity.kt— Flutter host + MethodChannel handlerOverlayService.kt— Foreground Service managing the floating overlayOverlayView.kt— Draggable circular button (WindowManager)ControlPanelView.kt— Action button grid popup (WindowManager)TouchEaseAccessibilityService.kt— Accessibility service singletonAccessibilityActionRunner.kt— All 9 action implementationsBootReceiver.kt— Auto-start on bootPreferencesManager.kt— SharedPreferences singletonOverlayPermissionHelper.kt— Runtime permission helpers
- Flutter — UI framework with Provider + SharedPreferences
- Kotlin — Native Android overlay service and accessibility
- Platform Channels — MethodChannel for Flutter ↔ Native communication
- minSdk 26 (Android 8.0) — Required for
TYPE_APPLICATION_OVERLAY - targetSdk 34 (Android 14)
- Material Design 3
flutter pub get
flutter runtouchease/
├── lib/
│ ├── main.dart
│ ├── models/
│ │ └── settings.dart
│ ├── screens/
│ │ ├── home_screen.dart
│ │ └── settings_screen.dart
│ ├── services/
│ │ ├── overlay_bridge.dart
│ │ ├── permission_handler.dart
│ │ └── settings_provider.dart
│ └── widgets/
│ ├── color_picker.dart
│ ├── button_reorder_list.dart
│ └── floating_preview.dart
├── android/app/src/main/
│ ├── AndroidManifest.xml
│ ├── kotlin/com/example/touchease/
│ │ ├── MainActivity.kt
│ │ ├── OverlayService.kt
│ │ ├── OverlayView.kt
│ │ ├── ControlPanelView.kt
│ │ ├── TouchEaseAccessibilityService.kt
│ │ ├── AccessibilityActionRunner.kt
│ │ ├── BootReceiver.kt
│ │ ├── PreferencesManager.kt
│ │ └── OverlayPermissionHelper.kt
│ └── res/
│ ├── xml/accessibility_service_config.xml
│ ├── values/strings.xml
│ └── values/colors.xml
└── pubspec.yaml