FocusFlow needs two permissions to reach its baseline enforcement level. Three more unlock the full tamper-resistant stack. Here is exactly what each does and how to enable it.
Step-by-step setup
Follow these steps in order. Steps 1–3 are required; steps 4–6 are optional but significantly increase tamper resistance.
Download the APK from the GitHub Releases page. Open the downloaded file. If prompted about "Install from unknown sources," enable it in Settings for your browser or file manager.
Go to Settings → Accessibility → Installed Services → FocusFlow and toggle it on. Confirm the system prompt. This is the primary enforcement layer — FocusFlow monitors every window change and fires within milliseconds of detecting a blocked app.
Go to Settings → Apps → Special App Access → Usage Access → FocusFlow and enable it. This lets FocusFlow identify which app is in the foreground, required for accurate app detection alongside the Accessibility Service.
FocusFlow will prompt you to grant Device Administrator status. This registers FocusFlow as a device admin, which prevents uninstallation via Settings → Apps during an active session. Without this, a determined user can uninstall the blocker mid-session.
When you first use a blocking mode, FocusFlow requests VPN permission. Grant it to enable the local null-routing VPN layer. This adds network-level enforcement on top of the Accessibility Service — even if the AS is somehow killed, the VPN continues blocking the app's internet access.
Select a mode, add the apps you want blocked (or set a whitelist of allowed apps), set a duration or schedule, and tap Start. FocusFlow activates all enabled enforcement layers. A persistent foreground notification shows session status and provides quick controls.
How it enforces
FocusFlow runs three independent blocking mechanisms simultaneously. Each one closes the bypass the previous layer leaves open.
Blocking modes
FocusFlow's scheduling engine handles conflicts, gaps, and overruns automatically. Each mode uses the same three enforcement layers underneath.
Each task carries its own allowed-app snapshot. Apps not on the whitelist are blocked during the task. Best for deep work where you need one specific set of tools.
Timed blacklist blocking without any task management. Specify which apps to block and for how long. Best for impromptu focus sessions.
Permanent blacklist always active — no session required. Specified apps are always blocked. Best for apps you never want available.
Calendar-based per-app blocking without any session. Block Instagram Mon–Fri 09:00–18:00 automatically. Best for work-hour separation.
The blocking experience
The sequence from "open blocked app" to "redirected away" takes under 300 ms across all three enforcement layers.
AppBlockerAccessibilityService fires onAccessibilityEvent as soon as the blocked app's window appears. It performs up to 5 re-checks at 300 ms intervals to close the timing bypass window.
Screen brightness drops to 2% hardware minimum plus 70% black overlay. Vibration motor starts pulsing. System notification sound plays once. All three fire simultaneously.
BlockOverlayActivity appears over the blocked app with a configurable message — default or custom quote from your pool, optionally with your personal wallpaper at 30% opacity behind it.
TemptationLogManager stores the app name, package name, and timestamp. This entry counts toward your Weekly Temptation Report delivered every Sunday at 08:00.