1fdd785ee5
android / Build + lint + test (push) Has been cancelled
Pull-to-refresh produced a strong full-screen fade on Library (both tabs) and the Album / Artist / Playlist detail screens because their Crossfades were keyed on the entire state value. A refresh emits a fresh UiState.Success with a NEW data instance (same kind, different content) so Crossfade animated old grid → new grid even though both are the same Success branch — the visible result was a flash that read as "broken/heavy." HomeScreen already keys on `state::class` (4b9d-ish prior fix); apply the same pattern to the four screens that still flicker. Inner content reads the outer `state` directly via `val s = state` so the branch still has access to the typed value. Row-level diffs are owned by LazyVerticalGrid / LazyColumn via item keys, so the visual update is smooth and granular instead of a full fade. Only Loading ↔ Success ↔ Error ↔ Empty transitions animate now — the intended use of Crossfade. Same-kind state updates flow through Compose's normal recomposition.