Added
-
🏠 Inactivity Return to Home: Automatically navigate back to start page after inactivity
- Configurable timeout (5–3600 seconds)
- Timer resets on every touch/scroll/click interaction in the WebView
- Option to reset timer when a new page loads within the WebView
- Option to clear cache on return (full reload)
- Smart detection: won't reload if already on the start page
- Automatically paused during Screensaver, URL Rotation, and URL Planner
- New settings section in General tab: "Inactivity Return"
-
🌙 Screen Sleep Scheduler: Automatically turn off screen during scheduled time periods
- Create multiple schedule rules with custom names
- Set specific days of the week for each rule
- Define sleep and wake times (supports midnight-crossing schedules)
- Option to wake screen on touch during scheduled sleep
- Native AlarmManager integration for reliable wake-up (survives Doze mode)
- Smart handling for Device Owner and non-Device Owner modes
- PIN bypass support for automatic wake-up
- Visual feedback with midnight-crossing badge for overnight schedules
- New settings section in Display tab: "Screen Sleep Schedule"
Fixed
-
🔄 Update Installation on Samsung Devices: Resolved installation hanging issue
- Added silent installation support for Device Owner mode using PackageInstaller API
- Improved feedback message explaining installation may require user action
- Added UpdateInstallReceiver to monitor installation status
- Better fallback to manual installation when silent install is not available
- Automatic app restart after successful installation (both Device Owner and normal modes)
- Fixes issue where "Installation in progress..." popup never closed on Samsung Galaxy devices
-
🚀 ADB Configuration Kiosk Mode: Fixed kiosk mode not activating on first launch with
auto_start=true- External app now launches after kiosk mode is properly activated
- Ensures lock task whitelist includes both FreeKiosk and external app before launch
- Proper restart sequence: save config → restart FreeKiosk → activate kiosk → launch app
-
📡 EXTERNAL_APP_LAUNCHED Broadcast: Improved broadcast reliability for ADB monitoring
- Fixed broadcast invisible in release builds (now uses
android.util.Log) - Now verifies app is in foreground before broadcasting (up to 10 retries over 5 seconds)
- Adds
verifiedboolean to broadcast extras to indicate foreground verification status - Logcat tag:
FreeKiosk-ADB— filter withadb logcat -s "FreeKiosk-ADB" - Consistent behavior whether launched via ADB auto_start or normal app flow
- Fixed broadcast invisible in release builds (now uses
-
🗄️ AsyncStorage v2 Compatibility: Fixed ADB configuration not persisting after restart
- AsyncStorage v2 uses Room database instead of legacy storage
- ADB config now writes to SharedPreferences as "pending config" bridge
- KioskScreen reads and applies pending config to AsyncStorage on startup
- All native-side reads migrated to new database format
-
🔑 PIN via ADB Config: PIN is now correctly saved to Android Keystore (PBKDF2 hashed)
- Previously PIN was only written to AsyncStorage where the secure PIN system couldn't find it
- KioskScreen now routes
@kiosk_pinfrom pending config tosaveSecurePin() - PIN appears correctly in Settings after ADB provisioning
-
🎯 ADB
test_modeParameter: New--es test_mode "false"for production deployment- Controls physical back button behavior (blocked when
false) - Automatically sets
back_button_modetoimmediate(auto-relaunch) ortest(stay on FreeKiosk) - Test mode synced to native SharedPrefs on every app start
- Controls physical back button behavior (blocked when
-
🔄 ADB
back_button_modeParameter: New--es back_button_mode "immediate"for fine control- Supports
test(no auto-relaunch),timer(countdown then relaunch),immediate(instant relaunch) - Can be set independently or automatically via
test_mode
- Supports
-
🔧 ADB
auto_startBoolean Fix:--ez auto_start truenow works correctly- Previously only
--es auto_launch "true"(string) was handled - Now supports both
--ez auto_start true(boolean) and--es auto_launch "true"(string)
- Previously only
-
⚡ Low-End Device Performance: Reduced resource usage to prevent crashes/unresponsiveness
- Foreground monitoring interval: 2s → 5s (reduced UsageStatsManager polling overhead)
- Status bar updates: 5s → 15s (time/battery don't need sub-second accuracy)
- Cached Bluetooth
isConnected()reflection method (avoid repeated reflection per bonded device) - Settings loading: 50+ sequential
getItemcalls replaced by singlemultiGetbatch (1 bridge call) onStartCommandguard: avoid unnecessary overlay destroy/recreate onSTART_STICKYrestart- Skip full overlay recreation when parameters haven't changed
-
🌐 REST API Reboot Endpoint: Fixed
/api/rebootnot executing the reboot- Reboot now runs natively via
DevicePolicyManager.reboot()instead of through JS bridge - No longer depends on React Native bridge being active (works with screen off)
- Returns clear error if app is not Device Owner
- Reboot now runs natively via
-
🔀 REST API Method Handling: Control endpoints now accept both GET and POST
- Endpoints without body (
/api/screen/on,/api/reboot,/api/reload, etc.) accept GET or POST - Endpoints requiring body (
/api/url,/api/tts,/api/brightness, etc.) remain POST-only - Wrong method on POST-only endpoints now returns 405 "Method Not Allowed" instead of 404 "Not Found"
- Endpoints without body (