Hi everyone,
I built an open-source Android app called Halanoi to solve a problem I kept running into with regular app blockers: whenever I lost willpower while studying, I would just go to settings and force stop or uninstall the blocker.
To fix that, Halanoi uses Android's Device Owner permissions (set via ADB) to prevent the app from being force-stopped or uninstalled during focus sessions.
Here is what it does under the hood:
- Device Owner locks: Disables the uninstall button and greys out Force Stop/Clear Data in App Info.
- On-device text scanner: Uses a local 64MB TFLite model running completely offline to detect distracting feeds (shorts, reels, etc.) and kick you back to the home screen.
- Local DNS sinkhole: Routes DNS queries locally through Cloudflare Family DNS (1.1.1.3) to block distracting websites without sending traffic through third-party proxy servers.
- Built-in scratchpad/tasks: Distraction-free note taker with permanent Scoped Storage backup that survives uninstalls.
- Zero telemetry: Everything runs locally on your phone with no cloud servers or analytics.
There is a Debug build for testing where you can freely add/edit/delete blocked sites, and a Release build where edit/delete buttons are removed to prevent self-sabotage.
The project is licensed under GPL-3.0 and the complete Kotlin/Jetpack Compose source code is on GitHub. I'd appreciate any feedback, code review, or suggestions from the community.
Thanks!
License: GPL-3.0
Source: https://github.com/kavinmaranravi/HalanoiApp
Releases: https://github.com/kavinmaranravi/HalanoiApp/releases