github bilbospocketses/abs-app android-tv-v1.0.5
Android TV v1.0.5

Bug Fix Release — Full Code Audit

Comprehensive code audit identified 35 findings (5 HIGH, 15 MEDIUM, 15 LOW). This release fixes all HIGH and actionable MEDIUM issues.

Fixes

Critical Safety (H2 + M1)

  • Vertical navigation setTimeout callbacks now wrapped in try/finally — if an exception occurs, the nav guard always clears instead of permanently disabling focus recovery
  • Added CSS.escape polyfill for older Android TV WebViews (Chrome < 46) that lack native support
  • Fixed unescaped CSS selectors in fingerprint system that could throw on special-character IDs

Double-Fire Prevention (H4)

  • Added .prevent modifier to 11 @keydown.enter handlers across 8 components (cards, toolbar, modal, drawer) — prevents Enter from firing both keydown and synthesized click on Android TV D-pad

Connect Page TV Detection (H1)

  • connect.vue now sets isAndroidTv in Vuex store on init — fixes broken TV layout on first launch when no server is saved (the blank layout bypasses default.vue where this was previously set)

Vuex Reactivity Fix (H3)

  • Replaced direct store.state.lastBookshelfScrollData = {} mutation with proper Vuex resetLastBookshelfScrollData mutation — fixes scroll position restoration on library tab switches

Phone/Tablet Safety (M2)

  • All TV-only listeners (focusout, store watchers, router hooks, eventBus) now gated behind android-tv initialization check — prevents focusFirstContentElement() from firing on phones when modals close

Focus Interval Stacking (M3 + M4)

  • refocusAfterContentChange now tracks and clears its interval before creating a new one — prevents parallel polling loops from fighting over focus
  • focusLossTimer cleared on route navigation — prevents stale focusout recovery from causing focus flash during page transitions

Player Controls + Accessibility (M10 + M14)

  • Hidden fullscreen player controls (v-show) now use dynamic tabindex — invisible jump-chapter buttons no longer receive D-pad focus
  • Removed blanket :not(.android-tv) *:focus { outline: none } rule — restores focus indicators for phone/tablet keyboard/accessibility users

Testing

33-item manual test checklist covering all fixes + regression tests.

Don't miss a new abs-app release

NewReleases is sending notifications on new releases.