ActivityWatch / ActivityWatch/aw-android

Play Store rating collapse (4.2→3.1) is driven by the ChromeWatcher.kt:76 NPE — data

Open
#185 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
Kotlin
Stars
265
Forks
57
Avg merge
2d 21h
Merged PRs (30d)
19

Description

## The Play Store rating is collapsing, and the data points at one specific crash

We now auto-collect Android vitals + rating history in [ActivityWatch/stats](https://github.com/ActivityWatch/stats) (see ActivityWatch/stats#17). Pulling it together makes the picture clear.

### Rating is in free-fall (`data/android-ratings.csv`)

| Date | Store rating |
|---|---|
| 2019 | 5.00 |
| 2022–2024 | ~4.4–4.5 |
| Jan 2026 | 4.21 |
| **Jun 2026** | **3.15** |

A ~1-point drop in ~6 months.

### Crash rate spiked over the same window (`data/android-crash-rate.csv`)

User-perceived crash rate ~**8–9%** (over Google's ~8% bad-behavior threshold); raw crash rate ~15–27%/day. User-perceived **ANR is ~0%** — this is a *crash* problem, not ANR.

### One crash dominates (`vitals.py errors`)

| Reports | Exception | Location |
|--------:|-----------|----------|
| **791** | `NullPointerException` | `ChromeWatcher.onAccessibilityEvent` (**ChromeWatcher.kt:76**) |
| 26 | `NotImplementedError` | `ChromeWatcher.onInterrupt` |
| ~22 | `SIGABRT` | `libaw_server.so` (Rust OOM) |

The #1 cluster (791) dwarfs everything else combined. Stacktrace:

```
Exception java.lang.NullPointerException:
at net.activitywatch.android.watcher.ChromeWatcher.onAccessibilityEvent (ChromeWatcher.kt:76)
at android.accessibilityservice.AccessibilityService$2.onAccessibilityEvent (AccessibilityService.java:2744)
...
```

### Conclusion

The rating collapse tracks the crash spike, and the crash spike is essentially **one NPE at `ChromeWatcher.kt:76`**. So the highest-leverage lever for *both* crash rate and rating recovery is:

1. **Null-guard `ChromeWatcher.kt:76`** (`onAccessibilityEvent`).
2. **Cut a fresh release from `master`** (~124 commits ahead of the 2023 Play build; already carries merged ANR fixes).

That one fix + a release should take the crash rate from ~9% toward the Rust-OOM floor and start the rating recovering.

### Reproduce the data yourself
In `ActivityWatch/stats` (key already on your machine):
```
uv run vitals.py errors --limit 10 --stacktraces
uv run vitals.py summary
# rating history: data/android-ratings.csv
```

Related: #176 (crash/ANR tracking — this issue is the rating-impact analysis). cc @TimeToBuildBob

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.