Commit Graph
9 Commits
Author SHA1 Message Date
GGBandClaude Sonnet 5 aac37265a3 Stop BACK from bypassing the JS menu popup
BACK's isFullscreen()/navigate-away logic ran entirely on the Android
side, with no idea whether the website's Menu popup was open - so
pressing Back while the popup was showing jumped straight to the room
list (or reloaded) instead of closing it, since Android can't observe
JS-side modal state.

BACK now just relays a real Escape keypress into the page whenever
we're on a page this app controls (room list or in-room), and lets
the website's own keydown handler - which already knows about the
popup, cinema mode, and (now) fullscreen state - decide what Escape
should do. Removed the now-dead isFullscreen()/fullscreenView-reading
code path (fullscreenView itself stays: WebChromeClient still needs
onShowCustomView/onHideCustomView for HTML5 fullscreen to render).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
v1.1.0
2026-09-17 21:06:20 +02:00
GGBandClaude Sonnet 5 ba422bf089 Fix DPAD/Menu key remaps leaking into login and other non-room pages
isRoomList() only matched the exact "/tv" room-list path, so the
"!isRoomList()" checks gating DPAD center/up/down/left/right and Menu
treated every OTHER page - including /login - as if it were inside a
room. Result: DPAD OK typed a literal space into focused text fields,
DPAD up/down typed 'p'/'n', and Menu typed 'x'.

Replaced with isInRoom() (path starts with "/tv/"), so these remaps
only apply on an actual room page. Also stopped BACK from reloading to
the room list from unrelated pages like /login, which discarded
whatever the user had typed and, since /tv requires auth, just bounced
straight back to /login anyway.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-17 20:28:47 +02:00
GGBandClaude Sonnet 5 3412357526 Fix Menu popup, DPAD room-list navigation, and cleartext leftover
- Menu key: WebView refuses to forward Android "system" keycodes
  (KEYCODE_MENU among them) to page JS, confirmed via diagnostic
  logging (downConsumed=false even though the key reaches
  dispatchKeyEvent). Relay it as KEYCODE_X instead - room.js on the
  website side treats 'x' as an alias for the ContextMenu trigger.
- DPAD center/up/down/media keys are now only remapped inside a room
  (shouldIntercept() gates on isRoomList()) - the room-list page uses
  plain ArrowUp/ArrowDown/Enter and never moved focus when those keys
  arrived pre-remapped as Space/P/N.
- Removed a leftover cleartextTrafficPermitted="true" left over from
  local LAN debugging against a docker instance.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-17 19:55:12 +02:00
GGBandClaude Sonnet 5 5a8f593b98 Add remote-control key mapping, fullscreen tracking, back-button navigation
dispatchKeyEvent() intercepts DPAD/media keys and re-dispatches real
KeyEvents into the WebView per the design spec's mapping table:
- DPAD center / Play-Pause -> Space
- DPAD Left/Right tap -> Arrow (5s seek); held -> Shift+Arrow (30s
  seek), throttled to ~1 event/200ms since Android's own key-repeat
  rate would otherwise flood the room's sync socket
- DPAD Up/Down + media Prev/Next -> P/N (title change, not
  ArrowUp/Down - those are explicit no-ops in the website's TV mode
  since volume is TV/AVR-controlled)
- Back: room list -> no-op; in a room + fullscreen -> Escape
  (browser exits fullscreen natively); in a room + not fullscreen ->
  navigate to /tv (native WebView navigation, not a website reaction)
- Menu (KEYCODE_MENU) deliberately NOT intercepted - passed through
  unchanged, matching the already-confirmed-working raw-browser test

Fullscreen state comes from WebChromeClient.onShowCustomView/
onHideCustomView (needed for HTML5 video fullscreen support anyway).
Current-page tracking comes from WebViewClient.onPageFinished.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-16 22:45:09 +02:00
GGBandClaude Sonnet 5 e3f9a07a67 Add app icon and TV banner
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-16 22:44:12 +02:00
GGBandClaude Sonnet 5 1b6ed31683 Correct plan's JAVA_HOME guidance to the actual working JDK
The plan assumed Android Studio's bundled JBR (JDK 25) would work
for Gradle 8.7 - it doesn't (crashes at startup). Task 1's actual
build used a separately-installed Temurin 21 instead, scoped
per-command to this project only. Updating the remaining tasks'
commands to match what was actually verified working.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-16 22:43:39 +02:00
GGBandClaude Sonnet 5 379ae78bbf Bootstrap KwabaTV Gradle project, minimal WebView shell
Gradle wrapper pinned to 8.7, AGP 8.5.2, compileSdk 34/minSdk 21/
targetSdk 34 - the tested combination from the original app.
MainActivity is a placeholder that just loads BuildConfig.WEBSITE_URL
(the new /tv room-list route); the real key-mapping logic is a
separate follow-up commit.

Note for future builds on this machine: Android Studio's bundled JBR
is JDK 25, which Gradle 8.7 cannot run on at all (crashes at startup
with a bare version-string error). Built and verified with a
separately-installed Temurin JDK 21 instead
(C:\Users\GGB\jdks\jdk-21.0.12.1+1) - set JAVA_HOME to that for any
Gradle command in this repo, not the Android Studio JBR.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-16 22:40:19 +02:00
GGBandClaude Sonnet 5 515bab293f Add KwabaTV rebuild implementation plan
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-16 22:34:07 +02:00
GGBandClaude Sonnet 5 12661077ff Add KwabaTV rebuild design spec
Rebuilds the deleted WebView-shell Android app, now pointed at the
kwaba-sync website's server-side TV mode instead of the desktop
site. Key changes from the original: room selection via a new
website /tv room-list route instead of a baked-in room ID, and the
Menu-button-to-popup mapping is already confirmed working on real
hardware ahead of any app code existing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LHgWjmEJXsJEi1EVAoTp4K
2026-09-16 19:53:28 +02:00