pluto 4f2430d354 fix(security): Whitelist bypass vulnerability
- Fixed URL whitelist to use proper domain boundary matching
- Added WhitelistTest.kt with 6 test cases
- Added IMPROVEMENTS.md with code review notes

Security fix identified by Spirit 👻
Co-authored-by: Spirit <spirit@hobbs.farm>
Co-authored-by: Margaret <margaret@hobbs.farm>
2026-02-03 09:11:06 -06:00

Android Kiosk Browser

A customizable locked-down browser for Android kiosk and digital signage deployments.

Features (MVP)

  • Fullscreen WebView - Immersive mode, no address bar or browser chrome
  • URL Whitelist - Only allow configured domains
  • Lock Task Mode - Disables home/back/recent buttons
  • Admin PIN Exit - PIN-protected escape from kiosk mode
  • Auto-launch on Boot - Starts automatically when device powers on
  • Idle Timeout - Returns to homepage after inactivity
  • Admin Settings - Configure whitelist, homepage, timeout, PIN

Tech Stack

  • Kotlin
  • Android WebView
  • Lock Task Mode (API 21+)
  • DataStore Preferences
  • Material Design 3

Requirements

  • Android 5.0+ (API 21)
  • For Lock Task Mode: Device Owner provisioning

Building

./gradlew assembleDebug

Device Setup

To enable Lock Task Mode (full kiosk lockdown):

adb shell dpm set-device-owner farm.hobbs.kioskbrowser/.KioskDeviceAdminReceiver

Admin Access

Triple-tap the top-left corner of the screen to access admin settings.

Default PIN: 1234

Configuration

Settings available in Admin panel:

  • Homepage URL
  • Allowed domains (comma-separated)
  • Idle timeout (seconds)
  • Admin PIN

Future Enhancements

  • Remote configuration
  • Multiple profiles
  • Usage analytics
  • Digital signage mode (URL rotation)
  • Session data clearing on idle

License

MIT License - hobbs.farm


Project managed in Vikunja | Docs on Wiki

S
Description
Android Kiosk Browser - Customizable restricted browser for kiosk/digital signage use
Readme 96 KiB
Languages
Kotlin 94.9%
HTML 5.1%