James Mackay
194a97ce34
feat(button,media_player): Pair ADB carries entity_category CONFIG (t30 G11) + BrowseMediaSource domain parameter at root and children (t30 G18, 2026-05-20 blog contract); stubs/tests pin both
2026-10-09 07:17:14 +01:00
James Mackay
bcb8b962e7
fix: the deprecated listener+reload combo is gone — reauth uses async_update_reload_and_abort(_get_reauth_entry()), zeroconf host update is update-only, the __init__ options-reload listener is removed (grep-pinned); host-change tests assert update-without-reload (t29 G3a)
2026-10-09 07:02:21 +01:00
James Mackay
3587747c72
fix(media_player): unique_id migration pre-checks for an existing entry holding the target MAC — falls back to the config-entry id on collision (t26 F4)
2026-10-09 06:11:36 +01:00
James Mackay
a3b397920e
test(config_flow,media_player,remote): digit-delay/send-enter options (store + window/error validation), IME-first text entry with ADB fallback tier, icon column parse/prefill/store (P5-2)
2026-10-09 06:00:17 +01:00
James Mackay
c57a2e2ff2
test(ha_adb_common,connection): application-label tolerance (dual quotes, empty multi-label blocks, null, absent) + label cache reuse across cycles — no duplicate pm dump (P5-1)
2026-10-09 05:52:02 +01:00
James Mackay
cd0e634a76
feat(connection,media_player): on-demand manifest-label cache (≥24h TTL, one pm dump per watchdog cycle via the task pool) + app_name order map > label > entity > raw package (P5-1)
2026-10-09 05:48:39 +01:00
James Mackay
17648f43c9
fix(media_player): store the computed adb_command participant key on the entity — completes the F4 add/remove key symmetry in the lifecycle hooks
2026-10-08 11:22:23 +01:00
James Mackay
b37a14b920
fix(media_player): the adb_command participant registry key is computed once at registration and stored on the entity — add/remove always match (F4)
2026-10-08 11:21:09 +01:00
James Mackay
326f02cb59
feat(media_player): BrowseMedia app directory — root lists the options apps map (curated TiviMate/Wholphin/Netflix/YouTube fallback), selection launches via play_media(app) (P4-2c)
2026-10-08 11:12:37 +01:00
James Mackay
034cb5c83d
feat(media_player): option-gated adb_command service (default off; registered at setup, unregistered at last unload, ADB-down rejection) + redacted entry diagnostics (P4-2a,b)
2026-10-08 11:08:57 +01:00
James Mackay
61c7ac99a3
feat(config_flow,media_player): apps name/icon map editor in the options flow (package=name per line, invalid input error) + app_name resolves through CONF_APP_NAME_MAP after the entity/push tiers (P4-1b)
2026-10-08 10:58:04 +01:00
James Mackay
3b8e97fe5b
fix(media_player): privacy bare-app identity outranks the channel-title fallback in the foreground tier (F3)
2026-10-08 10:52:24 +01:00
James Mackay
392553ee26
fix(media_player): channel-title fallback gated to the channel app (TIVIMATE_PACKAGE or audio_playback membership) — launcher never shows a channel number (F1)
2026-10-08 10:52:08 +01:00
James Mackay
bc457baae7
feat(media_player): foreground tier in the state ladder with app-source now-playing (last-known → last_channel → audio hint), sensor reads the store's foreground priority chain (P3-3a,c)
2026-10-08 10:45:58 +01:00
James Mackay
1f0a4b2021
feat(running_apps): media_dag_running_apps enrichment — TTL-capped last_known_state/last_known_title for apps without a live session (P3-3b)
2026-10-08 10:42:41 +01:00
James Mackay
34d09e9f70
feat(media_player): app_id/app_name prefer the androidtv entity, fall back to the protocol current_app push when absent/unavailable; manifest androidtvremote2 floor aligned to >=0.2.0 (P3-1b,c)
2026-10-08 10:28:56 +01:00
James Mackay
a65c893339
refactor(connection): public protocol_active accessor replaces the remote entity's private reach-in; media_player module docstring describes the Phase 2 architecture (F7)
2026-10-08 10:12:40 +01:00
James Mackay
5f8c3290cc
fix: flow VERSION=2 for new entries; optional ENTER gains the ADB keyevent-66 fallback; CI installs androidtvremote2 for the real-library tests (F4, F5, F6)
2026-10-08 10:12:12 +01:00
James Mackay
b451638c65
test: command-routing and play_media(channel) orchestration — digit sequence with cancel guard, fallback ordering protocol→ADB→legacy, remote send_command holds/repeats, volume readout, is_on ladder
2026-10-08 09:54:23 +01:00
James Mackay
728b7ccbf9
feat(media_player): protocol-first command routing with ADB + legacy fallbacks, play_media(channel/app/url) per §7 with digit task-cancel guard, volume readout from protocol push, is_on tier in the power ladder
2026-10-08 09:43:34 +01:00
James Mackay
75fff11d04
fix(media_player): ADB-health-aware _attr_available; fetch_media_info dispatches through _track_task (F2, F4)
2026-10-08 09:13:51 +01:00
James Mackay
93b766ae97
refactor(media_player): entity becomes a thin view over the ShieldConnectionManager store; poll loop and socket removed from the entity
2026-10-08 09:03:18 +01:00
James Mackay
a1e671ac6a
fix: track intent-retry tasks in the unload-cancelled task registry so removal can't trigger a shell() auto-reconnect (reviewer F2)
2026-10-08 08:43:23 +01:00
James Mackay
6b4227cb40
refactor: centralize ADB host/key resolution in helpers.py; drop the three duplicated resolvers
2026-10-08 07:48:30 +01:00
James Mackay
d3afda0a25
fix: make ADB poll failures visible and stop stale-state cling; cancel tracked poll tasks on unload (B2, B5-prep); lint cleanups across daemon modules
2026-10-08 07:45:45 +01:00
James Mackay
359b96ef9c
fix: retry playback intents over the command path that originally served them (ADB broadcasts annotate the intent, self-heal retry goes back over ADB)
2026-10-08 07:39:53 +01:00
Levi and Claude Opus 4.7
db138a9b4c
v0.1.1: Forward media_position_updated_at through DAG now_playing
...
So ha-media-zone's card can interpolate the playhead smoothly between
server polls instead of snapping once every 10-30s.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-17 17:31:56 -05:00
Levi and Claude Opus 4.7
0ad51879ae
Initial release v0.1.0
...
Home Assistant custom integration for NVIDIA Shield TV that composes
the Android TV Remote, Jellyfin, smart plug, and receiver entities
into a single unified media player with ADB-based now-playing from
any app. Part of the Media Zone ecosystem.
Entities:
- media_player: power (with smart plug fallback), transport, input,
volume routed to receiver, rich stream info overlay when Jellyfin
is active
- sensor: DAG attributes and stream info
- button: Pair ADB
Config:
- Two-step flow: basic setup + optional ADB pairing on the Shield
- Configurable ADB port (default 5555)
- Pick an existing Jellyfin media_player entity — stream info is read
from the HA Jellyfin integration's own DataUpdateCoordinator, so
no server URL / API key / extra config needed here
- Privacy mode (adb_store_app_info=False) suppresses non-Jellyfin
media details, showing only the app name
Ecosystem:
- Exposes media_dag_* attributes for ha-media-zone orchestration
- Exposes media_dag_running_apps and async_bring_to_foreground for
the Media Zone card's app switcher
Shared ADB code lives in ltomes/ha-adb-common and is vendored at
custom_components/nvidia_shield/ha_adb_common/ for HACS installs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-17 17:04:30 -05:00