Files
margaret 768c0d6e44
CI / build (push) Has been cancelled
CI / lint (push) Has been cancelled
docs: Update README with v1.1.0 features
2026-02-03 20:53:22 +00:00

131 lines
3.4 KiB
Markdown

# Android Kiosk Browser
A customizable locked-down browser for Android kiosk and digital signage deployments.
## Features
### Core (v1.0)
- **Fullscreen WebView** — Immersive mode, no address bar or browser chrome
- **URL Whitelist** — Only allow configured domains with proper boundary matching
- **Lock Task Mode** — Disables home/back/recent buttons
- **Admin PIN Exit** — PIN-protected escape from kiosk mode (triple-tap top-left)
- **Auto-launch on Boot** — Starts automatically when device powers on
- **Idle Timeout** — Returns to homepage after inactivity
### Security (v1.1)
- **PIN Hashing** 🔐 — PINs stored as salted SHA-256 hashes, not plain text
- **Whitelist Bypass Protection** — Proper domain boundary checking
### Remote Management (v1.1)
- **Remote Configuration** 📡 — Fetch settings from a JSON endpoint (polls every 5 min)
- **Digital Signage Mode** 🖼️ — Auto-rotate through multiple URLs at configurable intervals
- **Usage Analytics** 📊 — Track page views, sessions, and admin access (local SQLite)
### UX
- **Error Handling** — Graceful network error pages with retry button
- **Loading Indicator** — Progress bar during page loads
## Tech Stack
- Kotlin
- Android WebView
- Lock Task Mode (API 21+)
- DataStore Preferences
- Room Database (analytics)
- Material Design 3
## Requirements
- Android 5.0+ (API 21)
- For Lock Task Mode: Device Owner provisioning
## Building
```bash
./gradlew assembleDebug
```
APK output: `app/build/outputs/apk/debug/app-debug.apk`
## Device Setup
To enable Lock Task Mode (full kiosk lockdown):
```bash
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` (change this after setup!)
## Configuration
### Local Settings (Admin Panel)
| Section | Settings |
|---------|----------|
| **Basic** | Homepage URL, allowed domains, idle timeout |
| **Remote Config** | Config URL, poll interval |
| **Digital Signage** | Enable, URL list, rotation interval |
| **Security** | Change admin PIN |
| **Analytics** | View/export/clear usage data |
### Remote Configuration (JSON)
Host a JSON file at a URL and point the kiosk to it:
```json
{
"homepage": "https://example.com",
"whitelist": "example.com,*.example.com",
"idle_timeout": "300",
"signage_urls": [
"https://example.com/slide1",
"https://example.com/slide2"
],
"signage_interval": "30"
}
```
## Testing
Run unit tests:
```bash
./gradlew test
```
See [TESTING.md](TESTING.md) for the full QA checklist.
## Documentation
- [CHANGELOG.md](CHANGELOG.md) — Version history
- [TESTING.md](TESTING.md) — QA checklist
- [CONTRIBUTING.md](CONTRIBUTING.md) — Development guidelines
- [IMPROVEMENTS.md](IMPROVEMENTS.md) — Code review notes
## Roadmap
- [x] MVP (whitelist, admin PIN, idle timeout)
- [x] PIN hashing (SHA-256)
- [x] Remote configuration
- [x] Digital signage mode
- [x] Usage analytics
- [ ] Scheduled content (time-based configs)
- [ ] Multiple device profiles
- [ ] Fleet management dashboard
- [ ] OTA updates
- [ ] Custom branding
## License
MIT License — hobbs.farm
---
*Built by the hobbs.farm team: Pluto 🪐, Spirit 👻, Margaret 🌸*
*Project tracking: [Vikunja](https://vikunja.hobbs.farm) | Code: [Gitea](https://git.hobbs.farm/pluto/android-kiosk-browser)*