07bdfe6b87
- Kiosk: replace header-inject overlay with position:fixed div appended to <html> so buttons appear regardless of SPA init timing - Kiosk: bump versionCode 3→4, versionName 1.2.0→1.3.0 - Kiosk: add explicit signingConfigs block (debug keystore) to avoid signature mismatch on updates; update banner now shows uninstall instruction + 12s timeout - Web: v1.4.0 → v1.5.0 - Preferred use-location: remember last N location choices per product; after 3+ consistent picks auto-select and collapse location picker (with 'cambia' link) - Scale: call updateScaleReadButtons() on every status change so live-box and read button appear instantly on reconnect without manual refresh - Smart shopping cache: invalidate JSON cache file on every inventory_add and inventory_use so next shopping-page load always sees current stock - isLowStock: conf threshold changed <= 1 → < 1 (1 full pack is not low stock) - italianToBring: replace substring matching with whole-word matching (min 4 chars) to prevent 'gin' matching 'original', 'rum' matching 'crumble', etc. Philadelphia original was silently mapped to Gin and skipped as duplicate - Storico: add undo support (transaction_undo endpoint, undone column, JS undo btn) - LOG → Storico rename in UI, nav, translations - Bring! sync: urgency-aware purchased blocklist TTL (critical 30m, high 90m, others 4h) - forceSyncBring() button to clear all guards and re-sync from scratch - Scale live-box: position:fixed CSS class, 1.6rem/800 value, direct ml display - Recipe use modal: scale live-box with 10s stability + 5s auto-confirm countdown - Recipe use modal: show recipe quantity as highlighted row in Usa popup
EverShelf Kiosk
Android kiosk app for wall-mounted kitchen tablets. A pure full-screen WebView wrapper that displays the EverShelf web interface in immersive mode — no BLE, no gateway, just the web app locked to screen.
Version: 1.2.0 (versionCode 3)
Package:it.dadaloop.evershelf.kiosk
Features
- Full-screen WebView — immersive mode hides status bar and navigation bar
- True kiosk lock — screen pinning (
startLockTask) blocks home/recent/back buttons - 3-step setup wizard — Welcome → Server URL (with connection test) → Scale Gateway detection
- Gateway auto-launch — starts EverShelf Scale Gateway in background on boot
- Exit button (✕) — visible in header, requires confirmation dialog to exit kiosk
- Hard refresh (↻) — clears WebView cache to pick up web app updates instantly
- Camera & microphone — runtime permission handling for barcode scanning and voice
- SSL support — accepts self-signed certificates for local HTTPS servers
- Splash screen — branded 1.5-second splash on startup
- Update notifications — checks GitHub releases every 6 hours, shows auto-dismiss banner
- Settings activity — change server URL, test connection, re-run setup wizard
- Error recovery — retry page when server is unreachable
Architecture
KioskActivity (WebView — full-screen EverShelf)
├── Setup wizard (3 steps, shown on first launch only)
├── Immersive mode (SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
├── Screen pinning (startLockTask / stopLockTask)
├── JS bridge (_kioskBridge: exit, hardReload)
├── Header injection (✕ exit + ↻ refresh buttons)
└── Gateway launcher (launches gateway APK in background)
↓ FLAG_ACTIVITY_NEW_TASK
EverShelf Scale Gateway (separate app, runs in background)
The kiosk app does not contain any BLE or scale code. Scale functionality is handled entirely by the separate EverShelf Scale Gateway app.
Setup
- Install both APKs on your Android tablet:
- EverShelf Kiosk (this app)
- EverShelf Scale Gateway (optional, for smart scale support)
- Launch the kiosk app — the setup wizard starts automatically
- Enter your EverShelf server URL (e.g.
https://192.168.1.100/dispensa) - The wizard tests the connection and detects the gateway app
- Done — the web app loads in full-screen kiosk mode
Exiting Kiosk Mode
Tap the ✕ button in the header (left of the title). A confirmation dialog appears — tap "Esci" to exit.
Triple-tap (Developer)
Triple-tap the setup wizard title to access hidden settings.
Permissions
| Permission | Purpose |
|---|---|
INTERNET |
Load EverShelf web app |
ACCESS_NETWORK_STATE |
Check connectivity |
ACCESS_WIFI_STATE |
WiFi status |
WAKE_LOCK |
Keep screen on |
CAMERA |
Barcode scanning, AI photo identification |
RECORD_AUDIO |
Voice input in chat assistant |
READ_MEDIA_IMAGES / READ_EXTERNAL_STORAGE |
Image access for AI scan |
REORDER_TASKS |
Bring kiosk to foreground after gateway launch |
Building
cd evershelf-kiosk
./gradlew assembleDebug
# APK at app/build/outputs/apk/debug/app-debug.apk
For release builds:
./gradlew assembleRelease
Requirements
- Android 7.0+ (API 24)
- Network access to EverShelf server
- EverShelf Scale Gateway app (optional, for smart scale support)
License
GPLv3 — see LICENSE