tailscale / tailscale/tailscale

Android: health warnings can remain stuck after the underlying issue has cleared

Open
#19,241 0 comments 0 reactions 0 assignees View on GitHub
bug OS-android
Dominant language
Go
Stars
36.5k
Forks
3.2k
Avg merge
2d 3h
Merged PRs (30d)
123

Description

### Summary

On Android, health warnings do not always clear automatically after the backend health state has recovered.

### Steps to reproduce

1. Trigger a transient health warning on Android (for example a temporary DNS/router/connectivity-related warning).
2. Let the underlying condition recover without stopping Tailscale.
3. Open the Health warnings screen, or observe the warning badge/notification state.

### Expected behavior

Once the backend health state no longer includes the warnable, the corresponding health warning should disappear automatically from the UI, and any related warning indicator should clear as well.

### Actual behavior

The warning can remain visible even after the underlying issue has already been resolved.

### Notes

From local inspection, the backend appears to send the full current health state on each health change, and the health model treats a missing warnable as healthy again.

The Android-side issue seems to be in `HealthNotifier`:

- it only calls the warning reconciliation path when `health.Warnings` is non-null, so a healthy state can fail to clear previously displayed warnings
- it also uses `distinctUntilChanged` based only on warning count, so if warning A disappears and warning B appears with the same count, the update may be dropped

That combination can leave stale warnings in the Android UI until another state transition happens (for example stopping the client).

### Environment

- App: Tailscale Android
- Repo: `tailscale/tailscale-android`
- Observed on local checkout at commit `2d5671203f5b5b074db33395d1f9750145ab0600`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.