Added
- π Optional Reset Session button for shared tablets (#156). Settings > General > Session Reset Button (WebView mode, off by default) shows a small button in the bottom-left corner. After a confirmation it clears cookies, cache, form data and web storage (localStorage, IndexedDB), then reloads the start URL on a clean WebView. Tested on an Android 15 emulator: a cookie and a localStorage value set by a page were gone after the reset, twice in a row. The wipe waits for the cookies to be removed and then 3 seconds for the HTTP cache: loading the page sooner failed once with
ERR_CONTENT_LENGTH_MISMATCHon the emulator. Also available over ADB (session_reset_button_enabled). Not tested on a physical tablet. Part of the config export/import (general.sessionResetButtonEnabled) and the backup. - π Option to remove the elastic stretch at the edges of a page (#233). Settings > Display > Page Edges > Disable Overscroll Effect (WebView mode, off by default, so nothing changes unless you turn it on). Checked on an Android 15 emulator by holding a drag on a short page: the content stretched by default and stayed still with the option on. Also available over ADB (
disable_overscroll), and part of the config export/import (display.disableOverscroll) and the backup. - π Optional: answer the "Allow USB debugging?" prompt while Lock Mode is on (#268). A computer that has never been authorized stays
unauthorizedin Lock Mode, because the prompt is a screen of the system interface and Lock Mode only lets whitelisted apps through. Settings > Security > Allow the USB Debugging Prompt In Lock Mode (Device Owner only, off by default, so nothing changes unless you turn it on) whitelists the system interface. While it is on, anyone who can plug a computer into the tablet can see the prompt and tap Allow, so turn it off afterwards; a warning says so. It takes effect the next time Lock Mode starts. Checked on an Android 15 emulator with another system screen, since the emulator does not enforce ADB authorization: with the setting off the system refused it (Attempted Lock Task Mode violation), with it on it opened over Lock Mode. Not tested with the real prompt, on a physical tablet, or on a manufacturer's Android (the prompt may belong to another package there). Also available over ADB (allow_usb_debug_dialog), and part of the config export/import (security.allowUsbDebugDialog) and the backup. - βοΈ FreeKiosk Cloud is now offered on the welcome screen and in Settings. The welcome screen (shown until a URL is set) has a Connect this tablet / Discover the cloud block, and the GitHub button becomes a small footer link. Settings shows a dismissible banner while the tablet is not enrolled; closing it is final. Connect opens Settings > Advanced, after the PIN. Both disappear once the tablet is enrolled.
- π§π· The app is available in Brazilian Portuguese. Settings > General > Language now offers PortuguΓͺs (Brasil) next to English and French. Without a choice, a device set to any Portuguese locale opens the app in Portuguese. Every string of the app is translated. As in French, Device Owner, ADB and MQTT stay in English, and texts sent to the REST API, MQTT and FreeKiosk Cloud stay in English too.
Fixed
-
π The app now follows the device language on Android. Without a language chosen in Settings, the app always opened in English, even on a device set to French. It read the locale from
NativeModules.I18nManager.localeIdentifier, which is empty under the New Architecture; it now usesI18nManager.getConstants(). -
π External App mode: the return gesture no longer falls back to "5 taps anywhere" after the app is relaunched (#294). When FreeKiosk relaunched the external app (back button mode Immediate: the app crashed, was killed, or restarted itself), the overlay was started with the built-in defaults (5 taps, 1500 ms, anywhere, bottom-right) instead of your return settings, until the next restart of FreeKiosk. On a public kiosk, visitors tapping the screen then got the PIN screen. Reproduced on an Android 15 emulator with
return_mode button, 10 taps, 3000 ms, bottom-left: after killing the app the overlay restarted withtapCount=5, mode=tap_anywhereand 5 taps anywhere opened the PIN screen. With the fix, three kills in a row keep the saved values, 5 taps anywhere do nothing and 10 taps on the corner button open the PIN screen. Two other values handed to the overlay came from the same stale state: the NFC/notifications flag (allow_notifications; seen on the emulator, it was passed as off although saved as on) and Auto-relaunch (by reading the code only: it would be passed as on whatever was saved). Not tested on a physical tablet. -
π PDF Viewer: a PDF that the page builds itself (a
blob:URL) now opens in the viewer (#295). Single-page apps that fetch a PDF with anAuthorizationheader and then trigger a download withURL.createObjectURL()got nothing: the native download hook sent the whole page to the viewer, which cannot read ablob:URL of a page that has just been replaced (the viewer showed Cannot Load PDF). With Inline PDF Viewer on, the page now hands the bytes to the app, which keeps them in its cache and opens them in the viewer. Covers a download link (<a download>, clicked by a person or by the page) andwindow.open(blobUrl). Reproduced then checked on an Android 15 emulator with a local page: before, Cannot Load PDF ... blob:http://...; after, the PDF is displayed, and a plainhttpsPDF link still opens as before. Limits: the viewer's download button is hidden for these PDFs (the file is not saved to Downloads), closing the viewer reloads the page, PDFs above about 30 MB are ignored, and other kinds of blobs are not handled. Not tested on the platform of the report (it needs a session) nor on a physical tablet. -
πͺ A web session no longer gets lost when the tablet loses power right after a login (#293). The WebView keeps new cookies in memory and writes them to disk on its own schedule, about every 30 seconds, and FreeKiosk never asked it to write them sooner: a login followed by a power cut within that time logged the user out again. FreeKiosk now writes the cookies to disk every 10 seconds and whenever it leaves the foreground. Measured on an Android 15 emulator by killing the app's process (the closest thing to a power cut available there) after a page set a cookie: before, the cookie was lost when the kill came 2, 7 or 15 seconds later and kept at 41 seconds; after, it was kept at 7 and 15 seconds and still lost at 2 seconds, so the window shrinks from about 30 seconds to at most 10. A value in
localStoragewas kept in every kill we tried on a healthy store. Not tested on a real power cut nor on the Rockchip RK3568 boards of the report.
Documentation
- π ADB guide: every key is now documented (#250). Added
cloud_token/cloud_url(new Cloud Enrollment section), theauto_relaunch_appsynonym and the two keys above. New section Scripting the settings gesture:return_tap_timeoutis the total window for all the taps, counted from the first one, not a delay between two taps (confirmed on the emulator: with 2 seconds between taps, 1500 ms and 5000 ms both reset the count, 10000 ms opened the PIN screen). The Settings screen only accepts 500 to 5000 and clamps on save; ADB accepts more.pdf_viewer_enablednow says it is what allowsfile://URLs (confirmed:ERR_ACCESS_DENIEDwithout it, page loaded with it). The setting's own hint in the app now says so too, in English and French. - π οΈ ADB guide:
return_modetakestap_anywhereorbutton, nottaps. The old value was accepted over ADB but matched neither mode, which left no way into the settings. Values ofkeyboard_modeandstatus_bar_themeare listed too.