A panic button for awkward social situations.
Secretly tap ESCAPE and your phone shows a believable interruption — a fake incoming call (with system ringtone), a calendar-style reminder, or a full-screen emergency call.
No backend. Settings stay on device.
- Home — one big ESCAPE button
- Setup — fake caller name/subtitle, scenario, countdown delay, notification copy
- Scenarios
- Get me out of here → fake incoming call + system ringtone
- End this conversation → fake reminder notification
- I need to leave NOW → full-screen emergency call + ringtone
- Countdown before the escape UI appears
- Persisted settings via
shared_preferences
- Flutter 3.44+ / Dart 3.12+
- Android device or emulator (ringtone uses a native Android channel)
flutter pub get
flutter runflutter build apk --debugAPK output:
build/app/outputs/flutter-apk/app-debug.apk
If install fails with INSTALL_FAILED_USER_RESTRICTED:
- Enable Developer options → Install via USB (often needs a Mi account)
- Or copy the APK to the phone and install manually from Files → Download
Wireless debugging alone is not enough — that only connects ADB; install permission is separate.
- Configure contact + scenario in Setup
- Tap ESCAPE on the home screen
- Optional countdown
- Fake call / notification / emergency UI appears
- On call scenarios, Android plays the default system ringtone until you accept or decline
The real Phone app cannot be opened as a fake incoming call without being the default dialer. This app uses a native-looking dialer UI plus the system ringtone instead.
lib/
main.dart
app/ # App shell
core/ # Theme, constants
shared/widgets/ # Shared UI
features/
home/presentation/ # ESCAPE home
contacts/domain/ # Fake contact model
escape/
domain/ # Escape scenarios
data/ # Native ringtone channel
presentation/ # Countdown, call, notification UIs
settings/
data/ # SharedPreferences repository
presentation/ # Setup + settings controller
android/app/src/main/kotlin/.../MainActivity.kt
# MethodChannel: system ringtone start/stop
Product notes also live in docs/README.md.
| Piece | Choice |
|---|---|
| UI | Flutter (Material 3) |
| Fonts | Google Fonts (Fraunces + DM Sans) |
| Persistence | shared_preferences |
| Ringtone | Android RingtoneManager via MethodChannel |
Private experiment — not published to pub.dev.