Why Nudge needs the Accessibility permission (and what it can't see)

Why does an Android app need Accessibility just to count scrolls?

Android deliberately gives apps no other way to detect what happens inside other apps. There is no public API for "tell me when the user scrolled in some other app." The only system-level channel that can observe that, across the whole device, is an AccessibilityService — a framework built for screen readers and other assistive tools. Nudge uses that same channel for one narrow purpose: counting scroll gestures, wherever they happen.

What does Nudge's Accessibility service actually listen for?

It listens for TYPE_VIEW_SCROLLED accessibility events — the signal that something on screen just scrolled — plus the package name of the app that fired it (so scrolls can be grouped by app) and, briefly, the view's class name (used only to filter out false positives, like a keyboard animating in). Several heuristics then filter the noise out: events from keyboard/input-method packages, events within 500 ms of a window or text change, scrolls inside an on-screen text field, and the kinetic "glide" tail of a single swipe are all discarded so one real swipe counts once.

What does it never read?

It never reads on-screen text, messages, images, or passwords, and it never inspects node content, view hierarchies, or clipboard data. It also never taps, types, or otherwise acts on your behalf — it only observes that a scroll event fired and which app it came from. Everything it does with that signal — counting, debouncing, grouping by app — happens inside the app itself, which is open source, so this can be checked directly in MyAccessibilityService.kt.

What's the second permission for?

Nudge also asks for Display over other apps (SYSTEM_ALERT_WINDOW). That's what lets the small floating bubble — showing your live scroll count — draw on top of whatever app you're using. It's unrelated to Accessibility and doesn't grant any extra visibility into other apps.

How do I revoke either permission?

Both are ordinary Android system permissions, controlled entirely in Settings, not inside Nudge:

Turning either off immediately stops that capability; scroll counting stops the moment Accessibility is off, and the bubble disappears the moment the overlay permission is off. Nothing you've already recorded locally is deleted by doing this.