Added
-
๐ค "Keep Screen On" Toggle (#83): New option in Display settings to disable
FLAG_KEEP_SCREEN_ON- When turned off, the Android system manages screen timeout normally โ the display turns off after the device's configured inactivity period, just like a regular device
- Default is ON (standard kiosk behavior โ no change for existing users)
- Screensaver is automatically disabled and hidden when this option is off, since the system handles sleep
- Only available in WebView mode (External App mode already delegates screen management to the system)
- Included in backup/restore and reset
- REST API / MQTT
screensaverOncommand is ignored when keep-screen-on is disabled
-
๐ Device Hardware Info in MQTT & REST API (#80): Status now includes
manufacturer,model,androidVersion,apiLevel,processor,deviceName,product, anduptimefields- Home Assistant Discovery now registers 5 new sensors: Manufacturer, Model, Android Version, Processor, and Uptime
- Real device info in Home Assistant Discovery: Device block now shows actual manufacturer and model (e.g., "Samsung Galaxy Tab A") instead of hardcoded "FreeKiosk"
Fixed
-
โฟ Accessibility Service Persistence (#80): Added
android:isAccessibilityTool="true"to prevent Android 12+ from auto-disabling the service after inactivity- Added automatic re-enablement on boot when app is Device Owner โ the accessibility service is now programmatically re-enabled in
BootReceiverusing Device Owner privileges, surviving reboots without manual intervention
- Added automatic re-enablement on boot when app is Device Owner โ the accessibility service is now programmatically re-enabled in
-
๐ก MQTT Disconnects When App Goes to Background (#80): Added
AppStatelistener that detects when the app returns to foreground and automatically reconnects MQTT if the connection was lost during background/Doze mode- Devices now recover their MQTT connection seamlessly
-
๐ท๏ธ MQTT Device Name Not Updating (#80): Changing the Device Name in MQTT settings now prompts the user to reconnect, ensuring the new name takes effect in topics and Home Assistant discovery
- Previously the old name/ID persisted until a manual disconnect/connect cycle
-
๐ท๏ธ MQTT Device Name Pre-Filled with Device Model (#80): The Device Name field now auto-fills with the Android device model (e.g., "SM-T510", "Pixel 7") on first use, instead of generating a random hex ID
- Makes it easy to identify devices in a fleet
-
๐งช ExecuteJS Command Reliability (#80): Fixed
executeJs(via REST API and MQTT) silently failing when:- (a) the same JS code was sent twice in a row (React state didn't change)
- (b) the page was still loading
- Now appends a unique marker to force re-execution, and retries up to 5 seconds if the page is loading
-
๐ถ SSID Reporting Inconsistency (#80): Fixed
<unknown ssid>being passed through raw inSystemInfoModule(Status Bar)- Now consistently shows "WiFi" as fallback across all modules when location permission prevents SSID access
-
๐ท Camera2 Fallback for Devices Where CameraX Fails Entirely (MediaTek LEGACY, front-only cameras): On some devices, CameraX's
CameraValidatorpermanently rejects the camera- Added a Camera2 API fallback: the settings screen now queries
Camera2directly via a newgetCamera2Devices()native method when CameraX returns nothing - The motion detector automatically switches to Camera2-based photo capture (
captureCamera2Photo()) when vision-camera has no device โ enabling motion detection on hardware that CameraX cannot handle
- Added a Camera2 API fallback: the settings screen now queries
-
๐ Fixed Crash (CalledFromWrongThreadException) When Entering Standby/Screensaver (#82): Native events (
onScheduledSleep,onScheduledWake,navigateToPin,onScreenStateChanged, API commands) were triggering React state updates synchronously on themqt_v_nativethread- Caused
react-native-screensto manipulate the Android view hierarchy from a non-UI thread - Wrapped all native event callbacks with
setTimeout(cb, 0)to defer state updates to the next event loop tick, ensuring React commits go through proper UI thread dispatch
- Caused
-
๐ Fixed Invisible PIN Input on Dark Mode Devices (#81): The PIN
TextInputhad no explicitcolorset, so Android dark mode overrode the text/dot color to white โ making input invisible against the white background- Added explicit
color: '#333333'andplaceholderTextColorto ensure dots and placeholder are always visible regardless of system theme
- Added explicit