Skip to content
Neal Gysemans
All projects
2026Live & in use

Focus Modes

iPhone-style Focus modes for Android 15+. Each mode is a real system Do Not Disturb rule, switched from a Quick Settings tile, a widget or a schedule.

Role
Sole developer, building with Claude Code as a pair — feasibility research, zen-rule engine, Quick Settings tile, widget, schedules, and release
Stack
  • Kotlin
  • Jetpack Compose
  • Glance
  • Room
  • DataStore
  • AutomaticZenRule
Focus Modes main screen with Work, Sleep and Personal modes and the Quick Settings tile options
Screenshots show the real software. Any names, plans or workout history in them are locally seeded demo data, never real customer data.

Status

Live: a signed v1.0.0 APK on GitHub Releases, for Android 15 and later.

Decisions

Two throwaway diagnostic apps first

Before any product code, two diagnostic apps measured the platform on Xiaomi HyperOS: about 2 ms to flip the tile and about 36 ms to apply a rule.

One idempotent reconciliation loop

A single idempotent ModeEngine reconciliation loop, plus explicit state for the manual-dismissal window, instead of event-driven toggles.

No internet, accessibility or contacts permissions

The app requests zero INTERNET, accessibility or contacts permissions.

What it cost

  • Diagnostic apps: two discarded apps, and honest platform limits — starred contacts instead of per-contact allowlists.
  • Reconciliation loop: every user-intent rule must be modelled as explicit state.
  • Minimal permissions: no crash telemetry and no usage analytics.
Edit mode screen for the Work mode with name, icon, colour and who gets through
The mode editor: icon, colour, and which calls and messages get through.
Mode settings with screen effects and an every-day schedule from 23:00 to 07:00
Per-mode screen effects and schedules.