Repository navigation
Fixes the landscape effect-menu issue LO reported. UI state restore only — zero USB/protocol changes.
ROOT CAUSE (found by code-path tracing, not guessing)
configChanges means rotation does NOT recreate the Activity — my 2.1.0 rotation path re-inflated the fresh landscape layout but never re-applied live UI state. Fresh views revert to XML defaults: all four action buttons (RGB ON/OFF, APPLY COLOR, APPLY EFFECT) came back disabled, status text reset. In landscape the effect menu looked dead/unavailable — exactly what you saw. The effect menu itself (Solid/Cycle/Wave/Breathe/Blend/Zones) was never removed; it was the enable-state that was lost.
THE FIX (12 lines, MainActivity only)
After re-inflation, re-run the SAME read-only state refresh that onResume uses: commandListener() -> status text + refreshDeviceState() (reads USB state, enables buttons, NEVER sends commands) + diagnostics panel open/closed restore. No new USB path, no listener churn, no config change. Byte-identical hardware behavior.
VERIFY
- No-automatic-USB guard green, layout guard green (4 variants x 24 IDs), 57/57 tests
- CI run 34338121205 GREEN, versionCode 6 / 2.1.1, pinned keystore (installs over 2.1.0)
PHYSICAL TEST (Tab A9+)
- Open app portrait — RGB ON/OFF, effect menu all live.
- Rotate to landscape — RGB ON/OFF and APPLY EFFECT must still be clickable, effect dropdown opens with all 6 effects, device name + status text intact.
- Open diagnostics, rotate — panel stays open with history.
- Rotate back — same. Repeat a few times.
- RGB OFF/ON + an effect apply in BOTH orientations — behavior must be unchanged from 2.1.0.
APK SHA-256: 6df62d0c5664b6322fc6e5a1cd419bf72702675c7c84ce75f60f3a4d90813d94