Setup Guide

Up and running in
under 5 minutes

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.

How to set up FocusFlow

Follow these steps in order. Steps 1–3 are required; steps 4–6 are optional but significantly increase tamper resistance.

1

Install FocusFlow APK

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.

Note: FocusFlow is not yet on the Play Store — install via APK from GitHub Releases. The source code is fully open and auditable.
2

Grant Accessibility Service access

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.

On some OEMs (Samsung, Xiaomi, Oppo): Accessibility may be under Settings → Special Functions, Settings → Additional Settings, or a similar non-standard path. FocusFlow guides you to the correct path in the onboarding screen.
3

Grant Usage Stats access

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.

4

Enable Device Administrator (recommended)

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.

Optional but important: Without Device Admin, FocusFlow can be uninstalled normally. With it, removal during a session requires ending the session with the correct PIN first.
5

Enable VPN (for network-level blocking)

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.

Privacy note: No traffic ever leaves your device. The VPN is entirely local — it routes blocked app traffic to a null endpoint on the device itself.
6

Choose your blocking mode and start

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.

Three enforcement layers, stacked

FocusFlow runs three independent blocking mechanisms simultaneously. Each one closes the bypass the previous layer leaves open.

Layer 1 — UI level
Accessibility Service (AppBlockerAccessibilityService)
Fires within milliseconds of any blocked app window appearing. Up to 5 rapid re-checks at 300 ms intervals. Intercepts Play Store installs, uninstall dialogs, and Accessibility Settings navigation during sessions. Powers 15+ OEM SystemUI interceptions.
Layer 2 — Network level
Local Null-Routing VPN (NetworkBlockerVpnService)
Routes blocked app traffic into a local VPN that discards all packets. No external server involved. PER_APP mode cuts only the blocked app's internet. GLOBAL mode cuts all device internet except emergency calls. Independent of the Accessibility Service — if AS is killed, VPN keeps blocking network.
Layer 3 — System level
Device Administrator + System Guard + Native PIN
Device Admin prevents Settings-based uninstallation. System Guard intercepts navigation to Accessibility Settings, Clear Data, and Uninstall screens. SHA-256 hashed session PIN stored natively ensures even a compromised JavaScript layer cannot end a session. Three independent tamper-prevention mechanisms.

Four modes — pick what fits your workflow

FocusFlow's scheduling engine handles conflicts, gaps, and overruns automatically. Each mode uses the same three enforcement layers underneath.

🎯 Task-Based

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.

⚡ Standalone

Timed blacklist blocking without any task management. Specify which apps to block and for how long. Best for impromptu focus sessions.

🔒 Always-On

Permanent blacklist always active — no session required. Specified apps are always blocked. Best for apps you never want available.

📅 Scheduled Greyout

Calendar-based per-app blocking without any session. Block Instagram Mon–Fri 09:00–18:00 automatically. Best for work-hour separation.

What happens when you open a blocked app

The sequence from "open blocked app" to "redirected away" takes under 300 ms across all three enforcement layers.

Accessibility Service detects the window

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.

Aversive feedback fires (if enabled)

Screen brightness drops to 2% hardware minimum plus 70% black overlay. Vibration motor starts pulsing. System notification sound plays once. All three fire simultaneously.

Block overlay launches

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.

Temptation Log records the attempt

TemptationLogManager stores the app name, package name, and timestamp. This entry counts toward your Weekly Temptation Report delivered every Sunday at 08:00.

Ready to set it up?

Download the APK and be fully protected in under 5 minutes.

⬇ Download APK Read the FAQ →