Accessibility Service Audit

Mandatory disclosure regarding the use of the Android Accessibility API (`BIND_ACCESSIBILITY_SERVICE`).

Why Accessibility?

Aido is not a traditional app; it is an "overlay" tool designed to help you write better in other apps (like WhatsApp, Telegram, Gmail). Android does not allow apps to read or write text in other apps unless they use the Accessibility API.

We use this powerful permission for exactly two technical reasons:

  1. To "Read" Triggers: We monitor for specific keywords (like @aido or @fixg) so we know when to activate.
  2. To "Write" Responses: Once the AI generates a response, we use this permission to insert the text into the field for you.

The Accessibility Service is activated only after explicit user action and remains inactive otherwise.

Strict Boundaries

Because this permission is sensitive, we have hard-coded strict boundaries into the AidoAccessibilityService.kt file.

The Accessibility Service does NOT run continuously. It reacts only to user-initiated text input events and immediately returns to an idle state.

Critical: Trigger-Only Processing

Your text is ONLY processed when you use a trigger command (like @aido or @fixg).

  • We do NOT continuously read your text
  • We do NOT send anything to AI unless you explicitly trigger it
  • If you don't use a trigger, nothing is processed or transmitted

WE NEVER ACCESS:

  • Password Fields: The service is programmed to ignore fields marked as InputType.TYPE_TEXT_VARIATION_PASSWORD.
  • Secure Apps: We do not collect credit card numbers or sensitive data. Android automatically prevents screen reading in secure fields (like passwords), and you can manually block specific apps in Settings.
  • Biometric Data: We do not interact with fingerprint or face scanners.

Technical Logic Disclosure

For technical transparency, here is how our event processing loop works conceptually:

// Pseudo-code representation of AidoAccessibilityService.kt

fun onAccessibilityEvent(event: Event) {
  // 1. Safety Check: Is app disabled or paused?
  if (isPaused || disabledApps.contains(event.packageName)) return;

  // 2. Event Filter: Only look at text changes
  if (event.type != TYPE_VIEW_TEXT_CHANGED) return;

  // 3. Trigger Detection: Does text end with command?
  val text = event.text.toString()
  if (text.endsWith("@aido")) {
    processAiCommand(text)
  }
}

Note the disabledApps check. You can blacklist any app in Aido settings, and our service will completely ignore all events from that app at the code level.

User Control

You have absolute control over this service.

  • Opt-In Only: You must manually enable this in Android Settings.
  • Revocable: You can turn it off at any time.
  • Selective: You can use the "Blacklist" feature to block Aido from running in specific sensitive apps.

Audit Menu