Most indicator bugs are state bugs: a flag never set, never cleared, or cleared on one path only. The rest come from edge to edge, which broke code written for the old opaque status bar.
| Symptom | Cause | Fix |
|---|---|---|
| Pull spinner vanishes at once | refreshing never set to true | Set it first thing in onRefresh |
| Spinner never stops | Flag cleared only on success | Clear it in finally |
| Endless spinner when offline | No error state or timeout | Show an error with a retry button |
| Clock and battery invisible | Icons match the background | style="auto" and "automatic" theme |
| Header hidden under the clock | Edge to edge, no insets | Pad with useSafeAreaInsets().top |
| Status bar color ignored | No effect since Android 15 | Paint a header behind the bar |
Two habits prevent most of these. Keep one source of truth for a screen's loading state, as the Load union in Loading States in BookNest does, and test every screen in airplane mode (adb shell cmd connectivity airplane-mode enable) and in dark mode before you ship it. Give every spinner an accessibilityLabel for TalkBack and VoiceOver; Accessibility and i18n shows how to announce "catalog loaded" when the wait ends.