Files
EverShelf/evershelf-kiosk
dadaloop82 9cb29de1f0 kiosk: integrate BLE scale gateway + fix logo/branding
- Kiosk v1.6.0 (versionCode 10)
  - Integrate BLE scale gateway directly into kiosk app (no external app needed)
    - New scale/ package: BleScaleManager, GatewayWebSocketServer, ScaleProtocol, GatewayService
    - GatewayService: foreground service, runs BLE scan + WebSocket :8765 server
    - Auto-reconnect on BLE disconnect; protocol compatible with old gateway app
  - Setup step 4: replace gateway install flow with BLE device scan + selection (mandatory)
  - Permissions: added BLUETOOTH_SCAN, BLUETOOTH_CONNECT, ACCESS_FINE_LOCATION (pre-S),
    FOREGROUND_SERVICE, FOREGROUND_SERVICE_CONNECTED_DEVICE
  - KioskActivity: replace launchGatewayInBackground() with startGatewayService()
  - checkForUpdates: remove gateway APK check (gateway is now internal)
  - Remove GATEWAY_PACKAGE / GATEWAY_DOWNLOAD_URL constants

- Logo / branding
  - logo.png + logo_icon.png: transparent background (no more black)
  - ic_logo.png regenerated in all densities
  - Removed house emoji (🏠) from web UI: favicon, bottom nav, setup wizard header
  - Removed 🏠 prefix from all translations (it/en/de) and manifest
  - Setup wizard: logo shown in language + welcome steps
  - Setup wizard: footer with credits ('Creato da Stimpfl Daniel • Open Source')
  - CSS: .nav-logo-icon for bottom nav logo sizing

- Scale Gateway v2.1.1 (versionCode 8)
  - Fix false update notification: replace == comparison with proper semverNewer()
    (was reporting 'update available' whenever tag != current, e.g. v2.1.0 != 2.1.0)
2026-05-05 17:24:24 +00:00
..

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

  1. Install both APKs on your Android tablet:
  2. Launch the kiosk app — the setup wizard starts automatically
  3. Enter your EverShelf server URL (e.g. https://192.168.1.100/dispensa)
  4. The wizard tests the connection and detects the gateway app
  5. 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