Repository navigation
feat(tv): add Android TV / Fire TV wrapper and Roku channel - #1259
Conversation
# Conflicts: # package.json
- android-tv/: native Leanback WebView wrapper loading https://openhamclock.com, D-pad navigation, offline retry screen, keep-screen-on, boot auto-start, official logo icon + banner, adb/network install script (install-firetv.sh covers Fire TV sticks) - roku/: native SceneGraph channel (Roku has no WebView) rendering a TV dashboard from the hosted JSON API - map-lite world map with runtime day/night terminator, DX spots, SFI/Kp/SSN, N0NBH bands; package.sh produces a sideloadable zip - .gitignore: local TV build outputs
accius
left a comment
There was a problem hiding this comment.
Thanks for this. Getting OpenHamClock onto the shack TV is a great idea, and the Android TV / Fire TV wrapper and the Roku channel are both very welcome. Before it can merge, though, the PR needs to shrink to just the TV apps: some files from your fork's own setup came along with it.
Please remove (fork-only, these would misbehave here):
.github/workflows/sync-upstream.yml,scripts/sync-upstream.shand thesync:upstreamnpm script. In this repo, the workflow would add accius/openhamclock as its own upstream and pushStagingand tags back to itself every night, with git identity 9M2PJU.
Please split into separate PRs (packaging needs its own discussion):
- AUR:
.github/workflows/update-aur.yml,aur/,scripts/update-aur.sh, theupdate:aurnpm script. It pushes toaur.archlinux.org/openhamclock-gitwith commits authored as 9M2PJU, from anAUR_SSH_PRIVATE_KEYsecret. - Snap:
.github/workflows/publish-snap.yml,snap/,scripts/build-snap.sh, thebuild:snapnpm script,docs/SNAP.md, and the Snapcraft lines in.gitignore. It would publish to the Snap Store on our release tags. docs/PACKAGING.md, if it's about AUR/Snap.
Who owns and maintains those store listings and keys is a project decision, so let's talk about them on their own PRs or in an issue.
What stays here: android-tv/, roku/, the two README rows, and the Android/Roku .gitignore entries. Keep Android TV and Roku together or split them, whichever you prefer.
Two questions on the TV apps themselves:
- Package id: releases use
com.openhamclock.tv. Please don't publish to Google Play or the Amazon Appstore under that id yet; sideload builds are fine for now, and we'll sort out store accounts separately. - Roku polling: every 60 s against the hosted API is fine for the spots and solar data, but an optional self-hosted server URL would help people running their own install.
Thanks again, 73 de K0CJH
Remove fork-only sync workflow (sync-upstream.yml, scripts/sync-upstream.sh, sync:upstream) and split AUR/Snap packaging out of this PR (update-aur.yml, publish-snap.yml, aur/, snap/, scripts/update-aur.sh, scripts/build-snap.sh, docs/PACKAGING.md, docs/SNAP.md + scripts). Packaging work is preserved on feat/snap-package for separate PRs. Keep only android-tv/, roku/, README rows, Android/Roku .gitignore entries. Roku: add optional self-hosted serverUrl (OpenHamClock registry section, trailing-slash tolerant, defaults to https://openhamclock.com) and document it; status line shows effective host. Sideload-only, no store publishing.
|
Thanks for the review — and for welcoming the TV apps! I've trimmed this PR to TV-only, per your notes:
On your two questions:
Thanks again — let me know if you'd like anything else adjusted. 73! |
accius
left a comment
There was a problem hiding this comment.
Thanks for the quick turnaround. The net diff is now just android-tv/, roku/, the two README rows and the TV .gitignore entries, and CI is green. Approving.
I went through the Android wrapper with an eye on WebView safety, and it's in good shape:
- Certificate errors:
onReceivedSslErrorcancels and shows the retry screen, so a bad certificate is never accepted. - Links: only http(s) stays in the WebView; other schemes go to the OS through a plain
ACTION_VIEW, sointent://links can't launch arbitrary components. - Everything else: no JavaScript bridge, file access off, cleartext off, and the boot receiver only listens for
BOOT_COMPLETED.
Two small follow-ups, not blocking:
- Roku: the registry override is a nice touch, but a user has no on-device way to write it. A one-screen "Server URL" option (or an ECP deep-link parameter such as
serverUrl=on launch) would let self-hosters switch without repackaging. - Android TV:
HOME_URLis fixed to openhamclock.com. A self-hosted option to match Roku would be welcome in a later PR.
Thanks also for keeping the Snap/AUR work on feat/snap-package. Open an issue when you're ready to talk about store ownership. 73 de K0CJH
|
Thanks for the follow-ups — implemented both in #1268, sideload-only unchanged: 1. Roku — on-device Server URL + ECP deep-link
2. Android TV — self-hosted to match Roku
Verification
Follow-up PR: #1268. Let me know if you want the dialog copy / key mapping adjusted. 73! |
What
Puts OpenHamClock on the shack TV three ways:
android-tv/) — native Leanback WebView wrapper loading https://openhamclock.com full-screen. D-pad passthrough, Back = history then double-press exit, Menu reloads, offline retry screen, keep-screen-on, boot auto-start, official logo icon + 320x180 banner. VerifiedBUILD SUCCESSFUL+ leanback-launchable badging.android-tv/install-firetv.shinstalls over the network via adb; Downloader sideload also documented.roku/) — Roku has no WebView, so this is a native SceneGraph channel using the hosted JSON API: map-lite world map (Natural Earth coastline, reproducible viaimages/render-map.py) with a runtime day/night terminator + sun marker, latest 20 DX spots, SFI/Kp/SSN strip, daytime N0NBH bands.package.shbuilds a validated sideload zip (13 entries, XML-checked).Verification
cd android-tv && bash build.sh→ BUILD SUCCESSFUL; aapt confirmsleanback-launchable-activity+ banner.cd roku && bash package.sh→ zip builds, both component XMLs parse, manifest/icons/splash present. BrightScript reviewed against SceneGraph API (Task-thread fetching, 1-based string indexing, nocontinue).Notes for review
com.openhamclock.tv.debug; release iscom.openhamclock.tv.