Repository navigation
Releases: Kaiser0733/G102-Android-Controller
Release list
v2.1.1 — Landscape rotation state fix
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
v2.1.0 — Responsive UI (phone + tablet, portrait + landscape)
UI-ONLY release. Installs directly over 2.0.2 (pinned key, versionCode 5).
WHAT CHANGED (presentation only — zero USB/protocol/behavior changes)
- Four responsive layouts: phone portrait, phone landscape (2-column), tablet portrait (centered 560dp), tablet landscape (45/55 two-panel).
- 8 shared section includes — every layout carries every control, structurally (CI-enforced).
- Preset swatches now a 4x2 grid (was 8 cramped in one row); sizes scale by device class.
- Consistent spacing scale (4/8/12/16/24dp) via dimens; landscape is denser, tablets roomier.
- Rotation swaps layouts without recreating the Activity — no USB command can fire, hex draft preserved.
- New CI guard: every layout variant must expose all 24 view IDs exactly once.
VERIFY (same interaction -> same bytes)
- v1 RGB OFF sequence byte-identical, regression-pinned: 57/57 unit tests green.
- No-automatic-USB guard + layout structure guard green in CI.
- Kotlin diff vs 2.0.2: MainActivity presentation only (rotation re-inflate, GridLayout presets, dimen sizes, version-safe diagnostics string).
PHYSICAL TEST (Tab A9+)
- Portrait: balanced centered controls, presets in 4x2 grid, scroll works.
- Rotate to landscape: two-panel layout, no overlap, cursor stable, NO command sent from rotation.
- RGB OFF -> RGB ON -> color + APPLY (behavior unchanged).
- All 6 effects — dynamic controls appear per effect in both orientations.
- Rotate back and forth several times: no crash, no lag growth, no ghost cursors, no auto RGB.
- Diagnostics expand in both orientations.
If anything fails: COPY DIAGNOSTICS + test number + last button.
APK SHA-256: 6c74e6206973ba537451b760d526ce27e4160af049d90535dcb5cc8436376c92
v2.0.2 — Runtime stability hotfix
Stability hotfix. Installs directly over 2.0.1 (pinned signing key, versionCode 4).
WHAT CHANGED
- Removed automatic live USB preview completely. Only RGB ON / RGB OFF / APPLY send commands.
- Removed auto-apply (was unreliable across Activity recreation).
- Fixed invisible color swatches (Android alpha).
- Bounded diagnostics (500 lines) and crash log (64KB) — no runaway memory growth.
- One-command-at-a-time USB gate; detach of an unrelated peripheral no longer cancels a mouse command.
- v1 RGB OFF path unchanged — byte-identical, regression-pinned (57/57 unit tests green).
PHYSICAL TEST
- Install over 2.0.1, open with mouse connected, touch nothing 2 min — expect no lag, no ghost cursors, no auto 'Working'.
- Adjust brightness/effect/color WITHOUT apply — expect zero mouse change.
- RGB OFF once, then RGB ON once.
- Custom color + APPLY.
- Use 10 minutes — expect no progressive lag.
If anything fails: COPY DIAGNOSTICS and report the test number + last button pressed.
APK SHA-256: 58bfe1fe5f5cb11c9e541c31d0542056112d0609bc58d564f7c8473ca053b3bc