System-wide overlay that reads visible on-screen text via an AccessibilityService, sends it to TypeSafe's Jev API, and shows a floating badge when a manipulative UI pattern looks likely.
It never sends password-field values, and it skips the scan entirely on screens that look like card / PIN entry.
- Open
~/Projects/UXRayin Android Studio. - Install on an emulator or device (min SDK 26).
- Launch Dark Pattern HUD.
- Paste a Jev API key and tap Save key.
- Tap Enable in Settings, then turn on Dark Pattern HUD under Accessibility. This cannot be granted from the app.
- Tap Grant overlay and allow Display over other apps.
Logcat tag: UXRay. The first real Jev response is logged in full so the Noul probability field can be confirmed.
| Probability | What happens |
|---|---|
| ≥ 0.9 | Floating badge names the pattern(s). Tap the badge for detail, then dismiss. |
| 0.6–0.9 | Quiet review log in the app. No interruption. |
| < 0.6 | Discarded. |
Session stats (screens scanned, median latency, cost from input_tokens at $0.042 / million input tokens) stay in memory. API errors are logged and swallowed — the service never crashes the foreground app.
After enabling the service and overlay:
- Open Indian shopping / food-delivery apps (Flipkart, Amazon.in, Swiggy, Zomato, Meesho).
- Scroll product, cart, and checkout-adjacent screens — stop before entering card or UPI PIN.
- Screenshot or screen-record any screen where the badge fires.
- Open Dark Pattern HUD again and note any 0.6–0.9 review-log rows. That middle band is the interesting result, not only the obvious catches.