v0.15.0-dev-01 — Development Build
Pre-release
Pre-release
What's new since v0.14.0
Input System
- Touch injection via Accessibility Service — bypasses
INJECT_EVENTSpermission restriction on HyperOS/Android 15 devices (Redmi 12 fix) - Adaptive injection path — VD server reports
IInputManagercapability at handshake; phone selects direct injection or accessibility gestures per device - Phantom pointer prevention — stuck pointers from interrupted sessions are released on next DOWN and on disconnect
- Fixed touch coordinate mapping — shared
VideoConfig.VIRTUAL_DISPLAY_DPI = 480constant ensures VD and phone use same DPI for touch mapping
Video Pipeline
- SurfaceScaler always renders — eliminates multi-second frame gaps on MediaTek devices where
repeat-previous-frame-afteris unreliable - Graduated decoder catchup — 4-zone speedup (normal/gentle/medium/aggressive) replaces single-threshold skip
Connection
- Dev mode for emulator testing — TCP ADB replaces USB for VD server deployment; development mode toggle in car UI
- Network loss debounce — 3-second delay before reacting to network flaps prevents 4G-induced disconnects
- Auto-update cooldown — 5-minute cooldown after failed auto-update prevents infinite retry loops
- Display restore fix —
ON_AFTER_RELEASEflag +cmd display power-onfallback for HyperOS screen wake-up
Distribution
- Channel selector — Settings screen lets users choose Release (stable) or Pre-release (dev builds)
- Unified signing — debug and release builds use same keystore; install any build without uninstalling
- Version comparison with -dev suffixes —
0.17.0-dev-02>0.17.0-dev-01>0.17.0-dev
UI
- Phone app — simplified main screen (donations visible, updates in Settings, unified Car Install card)
- Car app — 2-column layout for wide displays; manual IP persists across sessions
- 8-language i18n — new strings for Distribution Channel, Dev Mode, Car App, Donations all translated
Bug Fixes
- Self-discovery in
findCarAdb()— own IP no longer detected as car - "Car APK not found" on first install —
ensureAssetsReady()waits for async extraction - Install status spinner — resets after 5 seconds
connectManual()starts USB track alongside WiFi track- Tap gesture via accessibility service (1px path for non-zero length)
versionCode: 53 | versionName: 0.15.0-dev-01