Adds full Android TV support to the audiobookshelf app: leanback launcher integration, spatial D-pad navigation, focus ring styling, focus memory with fingerprint-based restore, overlay trapping, audio player TV controls, author detail page, and a TV user guide. All TV behavior is gated behind device detection — mobile/tablet behavior is unchanged.
Combines what was originally two PRs (basic TV scaffolding + D-pad navigation) into one since the scaffolding has no standalone value.
Full description
For the complete file-by-file breakdown, design decisions, post-release audit hardening (35 findings, all HIGH + actionable MEDIUM fixed), and test plan, see docs/PR_DESCRIPTION.md.
feat: add Android TV support with D-pad navigation — all feature code + audit hardening
chore: normalize line endings to LF — cosmetic-only pass across the repo since core.autocrlf differed between contributor machines. Kept separate from the feature commit for review clarity.
Note to maintainer
Shared components (cards, toolbars, modals, player) have tabindex + keydown.enter.prevent added to enable D-pad activation. These attributes are inert on touch devices — they don't affect tap, layout, or mobile behavior.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/advplyr/audiobookshelf-app/pull/1843
**Author:** [@bilbospocketses](https://github.com/bilbospocketses)
**Created:** 4/7/2026
**Status:** 🔄 Open
**Base:** `master` ← **Head:** `android-tv-dpad-navigation`
---
### 📝 Commits (3)
- [`70b26e2`](https://github.com/advplyr/audiobookshelf-app/commit/70b26e2828355e23ecd7a61dff3303deeaef5b9c) feat: add Android TV support with D-pad navigation
- [`5b02ba1`](https://github.com/advplyr/audiobookshelf-app/commit/5b02ba1d4fe3c3730ab6f2325fc1fa61823b5b65) chore: normalize line endings to LF
- [`14034b8`](https://github.com/advplyr/audiobookshelf-app/commit/14034b8757810c318ac9446dcef50bf05173945b) feat(tv): v1.0.6 screensaver prevention + v1.0.7 regression fixes
### 📊 Changes
**452 files changed** (+85557 additions, -82585 deletions)
<details>
<summary>View changed files</summary>
📝 `.editorconfig` (+12 -12)
📝 `.github/ISSUE_TEMPLATE/bug_report.yml` (+98 -98)
📝 `.github/ISSUE_TEMPLATE/config.yml` (+5 -5)
📝 `.github/ISSUE_TEMPLATE/feature_request.yml` (+57 -57)
📝 `.github/pull_request_template.md` (+41 -41)
📝 `.github/testing-page-template.html` (+81 -81)
📝 `.github/workflows/build-apk.yml` (+53 -53)
📝 `.github/workflows/close-issues-on-release.yml` (+20 -20)
📝 `.github/workflows/close_blank_issues.yaml` (+41 -41)
📝 `.github/workflows/deploy-apk.yml` (+82 -82)
📝 `.github/workflows/i18n-check.yml` (+28 -28)
📝 `.gitignore` (+93 -92)
📝 `.prettierrc` (+17 -17)
📝 `.vscode/extensions.json` (+7 -7)
📝 `.vscode/settings.json` (+27 -27)
📝 `LICENSE` (+674 -674)
📝 `android/.gitignore` (+96 -96)
📝 `android/.vscode/settings.json` (+6 -6)
📝 `android/app/.gitignore` (+2 -2)
📝 `android/app/build.gradle` (+150 -132)
_...and 80 more files_
</details>
### 📄 Description
**Closes #606**
## Summary
Adds full Android TV support to the audiobookshelf app: leanback launcher integration, spatial D-pad navigation, focus ring styling, focus memory with fingerprint-based restore, overlay trapping, audio player TV controls, author detail page, and a TV user guide. All TV behavior is gated behind device detection — mobile/tablet behavior is unchanged.
Combines what was originally two PRs (basic TV scaffolding + D-pad navigation) into one since the scaffolding has no standalone value.
## Full description
For the complete file-by-file breakdown, design decisions, post-release audit hardening (35 findings, all HIGH + actionable MEDIUM fixed), and test plan, see [`docs/PR_DESCRIPTION.md`](https://github.com/bilbospocketses/audiobookshelf-app/blob/android-tv-dpad-navigation/docs/PR_DESCRIPTION.md).
User guide for testers: [`docs/TV_USER_GUIDE.md`](https://github.com/bilbospocketses/audiobookshelf-app/blob/android-tv-dpad-navigation/docs/TV_USER_GUIDE.md) (with [PDF version](https://github.com/bilbospocketses/audiobookshelf-app/blob/android-tv-dpad-navigation/docs/TV_USER_GUIDE.pdf)).
Sideload APK: [latest release](https://github.com/bilbospocketses/audiobookshelf-app/releases/latest).
## Commits
1. `feat: add Android TV support with D-pad navigation` — all feature code + audit hardening
2. `chore: normalize line endings to LF` — cosmetic-only pass across the repo since `core.autocrlf` differed between contributor machines. Kept separate from the feature commit for review clarity.
## Note to maintainer
Shared components (cards, toolbars, modals, player) have `tabindex` + `keydown.enter.prevent` added to enable D-pad activation. These attributes are inert on touch devices — they don't affect tap, layout, or mobile behavior.
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/advplyr/audiobookshelf-app/pull/1843
Author: @bilbospocketses
Created: 4/7/2026
Status: 🔄 Open
Base:
master← Head:android-tv-dpad-navigation📝 Commits (3)
70b26e2feat: add Android TV support with D-pad navigation5b02ba1chore: normalize line endings to LF14034b8feat(tv): v1.0.6 screensaver prevention + v1.0.7 regression fixes📊 Changes
452 files changed (+85557 additions, -82585 deletions)
View changed files
📝
.editorconfig(+12 -12)📝
.github/ISSUE_TEMPLATE/bug_report.yml(+98 -98)📝
.github/ISSUE_TEMPLATE/config.yml(+5 -5)📝
.github/ISSUE_TEMPLATE/feature_request.yml(+57 -57)📝
.github/pull_request_template.md(+41 -41)📝
.github/testing-page-template.html(+81 -81)📝
.github/workflows/build-apk.yml(+53 -53)📝
.github/workflows/close-issues-on-release.yml(+20 -20)📝
.github/workflows/close_blank_issues.yaml(+41 -41)📝
.github/workflows/deploy-apk.yml(+82 -82)📝
.github/workflows/i18n-check.yml(+28 -28)📝
.gitignore(+93 -92)📝
.prettierrc(+17 -17)📝
.vscode/extensions.json(+7 -7)📝
.vscode/settings.json(+27 -27)📝
LICENSE(+674 -674)📝
android/.gitignore(+96 -96)📝
android/.vscode/settings.json(+6 -6)📝
android/app/.gitignore(+2 -2)📝
android/app/build.gradle(+150 -132)...and 80 more files
📄 Description
Closes #606
Summary
Adds full Android TV support to the audiobookshelf app: leanback launcher integration, spatial D-pad navigation, focus ring styling, focus memory with fingerprint-based restore, overlay trapping, audio player TV controls, author detail page, and a TV user guide. All TV behavior is gated behind device detection — mobile/tablet behavior is unchanged.
Combines what was originally two PRs (basic TV scaffolding + D-pad navigation) into one since the scaffolding has no standalone value.
Full description
For the complete file-by-file breakdown, design decisions, post-release audit hardening (35 findings, all HIGH + actionable MEDIUM fixed), and test plan, see
docs/PR_DESCRIPTION.md.User guide for testers:
docs/TV_USER_GUIDE.md(with PDF version).Sideload APK: latest release.
Commits
feat: add Android TV support with D-pad navigation— all feature code + audit hardeningchore: normalize line endings to LF— cosmetic-only pass across the repo sincecore.autocrlfdiffered between contributor machines. Kept separate from the feature commit for review clarity.Note to maintainer
Shared components (cards, toolbars, modals, player) have
tabindex+keydown.enter.preventadded to enable D-pad activation. These attributes are inert on touch devices — they don't affect tap, layout, or mobile behavior.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.