From 6fca9804311cb0f551326c2c14f8e017331cf96d Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Thu, 5 Nov 2026 12:37:52 +0000 Subject: [PATCH] firetv: replace catalog with user supplied RSS reader --- firetv/README.md | 34 +- firetv/app/build.gradle | 4 +- firetv/app/src/main/AndroidManifest.xml | 3 - firetv/app/src/main/assets/offline.html | 24 -- firetv/app/src/main/assets/reader.html | 108 +++++++ firetv/app/src/main/assets/tv.js | 8 +- .../java/com/p0dcasters/tv/MainActivity.java | 300 ++++++++++++++---- firetv/app/src/main/res/values/strings.xml | 4 +- firetv/emulator-test.sh | 96 +++--- firetv/store/capture.sh | 51 --- firetv/store/listing.md | 54 ++-- firetv/store/shots/01-empty.png | Bin 0 -> 116260 bytes firetv/store/shots/01-hero.png | Bin 172030 -> 0 bytes firetv/store/shots/02-grid.png | Bin 141927 -> 0 bytes firetv/store/shots/02-url-entry.png | Bin 0 -> 114812 bytes 15 files changed, 425 insertions(+), 261 deletions(-) delete mode 100644 firetv/app/src/main/assets/offline.html create mode 100644 firetv/app/src/main/assets/reader.html mode change 100644 => 100755 firetv/emulator-test.sh delete mode 100755 firetv/store/capture.sh create mode 100644 firetv/store/shots/01-empty.png delete mode 100644 firetv/store/shots/01-hero.png delete mode 100644 firetv/store/shots/02-grid.png create mode 100644 firetv/store/shots/02-url-entry.png diff --git a/firetv/README.md b/firetv/README.md index 31be55e..da43fa1 100644 --- a/firetv/README.md +++ b/firetv/README.md @@ -1,18 +1,23 @@ -# podcasters (p0dcasters.com) for Fire TV +# podcasters RSS reader for Fire TV -A small native Android app (`com.p0dcasters.tv`) that puts https://p0dcasters.com on a Fire TV -and makes it work with a remote. No dependencies beyond the Android SDK. +A small native Android app (`com.p0dcasters.tv`) for playing podcast episodes from HTTPS RSS +feeds that the viewer enters. It includes no podcast directory, show artwork or preloaded feeds. +The feed is fetched only after the viewer chooses Load; audio is played from the publisher's +HTTPS URL. No dependencies beyond the Android SDK. -- **WebView** on p0dcasters.com. Remote play/pause, fast-forward 30 s and rewind 15 s drive the page's player (`pitMedia`). Results open in the app; `mailto:`/`intent:` links go to the system. +- **Bundled reader UI** (`app/src/main/assets/reader.html`): a local page with no external scripts, + images or catalog requests. Native code downloads the user-selected RSS document and accepts + HTTPS audio enclosures only. - **Remote navigation** (`app/src/main/assets/tv.js`): Chromium's WebView scrolls on arrow - keys instead of moving between links, so every D-pad press runs `pitNav(dir)` in the page: + keys instead of moving between controls, so every D-pad press runs `pitNav(dir)` in the page: spatial focus to the nearest link/button, scrolling across long gaps, and a large focus - ring. The ring is set through `element.style` because strict CSPs (`style-src 'self'`) - blocks an injected ` - - -
-

podcasters is out of reach

-

Check this TV's network connection, then press OK to try again.

- Try again -
- - diff --git a/firetv/app/src/main/assets/reader.html b/firetv/app/src/main/assets/reader.html new file mode 100644 index 0000000..9356d10 --- /dev/null +++ b/firetv/app/src/main/assets/reader.html @@ -0,0 +1,108 @@ + + + + + + +Podcast RSS Reader + + + +
+

Podcast RSS Reader

+

Enter an HTTPS podcast RSS feed URL you choose. This app has no podcast catalog, show artwork, or preloaded episodes.

+
+ + +
+

No feed loaded. Add a feed URL to begin.

+

+
+ +
+ + + diff --git a/firetv/app/src/main/assets/tv.js b/firetv/app/src/main/assets/tv.js index e0770f0..97a375c 100644 --- a/firetv/app/src/main/assets/tv.js +++ b/firetv/app/src/main/assets/tv.js @@ -1,4 +1,4 @@ -/* Podcasters (p0dcasters.com) for Fire TV: remote-control navigation for any page in the WebView. +/* Podcasters RSS reader for Fire TV: remote-control navigation for the bundled reader UI. * * Chromium's WebView scrolls on arrow keys instead of moving between links, so * the activity hands every D-pad press to pitNav() and OK to pitEnter(). Both @@ -14,9 +14,7 @@ var TEXT = /^(search|text|email|url|tel|number|password|)$/; var field = null; // the text field OK was pressed on, while the keyboard is up - // The focus ring is set through CSSOM on the element itself: p0dcasters.com (and - // many sites) ship style-src 'self', which blocks an injected