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
aa4ee7ed62
feat(connection): TTL-filtered last_known_map snapshot of the per-package cache (P3-3b feed)
2026-10-08 10:42:24 +01:00
James Mackay
bb2f787fcd
test(ha_adb_common): fixture-driven foreground-parser tests — TiviMate capture, R4 launcher, wrap join, topResumed fallback ordering, duplicates tolerated (P3-2a)
2026-10-08 10:39:43 +01:00
James Mackay
8885ddd5b5
feat(connection): ADB foreground fallback on the watchdog cadence when the protocol push is silent (store priority protocol > ADB); audio-playback hint filtered through SYSTEM_MEDIA_PACKAGES (P3-2b,c)
2026-10-08 10:33:38 +01:00
James Mackay
f1e49a661b
feat(ha_adb_common): foreground parser — mResumedActivity primary with block-join for ActivityRecord wraps, topResumedActivity fallback (R4); no window-focus parsing
2026-10-08 10:32:39 +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
d35b61078d
feat(config_flow): standalone setup — androidtv entity optional with no_state_source validation, entry data omits the field for standalone entries, sensor tolerates its absence; migration keeps v1 field / v2 absence valid (P3-1a,d)
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
8462ad494c
fix(connection): ADB outage clears only ADB-derived store fields — protocol push truth survives by TTL (F2)
2026-10-08 10:03:27 +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
f071d540bd
feat(remote): protocol-backed RemoteEntity — SHORT/START_LONG/END_LONG prefixes, num_repeats/delay/hold, activity = current-app push, POWER keys honoring is_on
2026-10-08 09:45:06 +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
61aca9d413
feat: protocol key/launch command layer — RemoteKeyCode maps, C-LAUNCH app launch, ADB digit keyevent fallback, PlaybackIntent protocol path
2026-10-08 09:41:45 +01:00
James Mackay
d57c4eaa40
feat: protocol_settings wiring + InvalidAuth reauth start + entry migration to v2; PLATFORMS gains REMOTE (placeholder platform until t10)
2026-10-08 09:33:19 +01:00
James Mackay
b5fc0dacf4
feat(config_flow): remote-protocol cert/PIN pairing step + reauth after device hard reset (shared .storage cert paths; ADB step body byte-intact, routes onward when protocol enabled)
2026-10-08 09:32:27 +01:00
James Mackay
e37a3be75f
feat(const): protocol config keys + ports; connection manager generates missing certs before protocol start
2026-10-08 09:30:50 +01:00
James Mackay
a4e7a285d4
fix(connection): let the library own keep_reconnecting's task — no double scheduling on protocol start/stop
2026-10-08 09:27:50 +01:00
James Mackay
49cf402bbe
feat(pyproject): androidtvremote2 dev dependency; manager docstring covers both transports
2026-10-08 09:25:25 +01:00
James Mackay
27cc69b1d3
feat(connection): protocol transport alongside ADB — AndroidTVRemote client, keep_reconnecting ownership, push callbacks into StateStore, InvalidAuth→reauth hook, cert/PIN client factory
2026-10-08 09:25:11 +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
9c409b3805
fix(connection): reconnect decision closes the failed socket (health_check's documented role) + symmetric backoff-bound test assertion (F3, F5)
2026-10-08 09:13:51 +01:00
James Mackay
24981d84a8
fix(config_flow): pairing step passes test_connect's declared signature (host, port, key_path) — regression tests cover the adb_pair submit path (F1)
2026-10-08 09:13:51 +01:00
James Mackay
48c30463ec
fix: await the async ADB poller-factory builder during entry setup (keeps setup non-blocking, no ConfigEntryNotReady)
2026-10-08 09:04:13 +01:00
James Mackay
0da84a5a6e
refactor(sensor): Current App sensor falls back to the connection manager StateStore and refreshes on store updates
2026-10-08 09:03:42 +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
0a7dd887d7
refactor(config_flow): ADB pairing step reuses ShieldConnectionManager.test_connect (throwaway one-shot connect)
2026-10-08 08:59:36 +01:00
James Mackay
63f76f5328
feat: entry.runtime_data ShieldConnectionManager lifecycle — passive when ADB unavailable, close on HA stop + unload; adb_session adapter docstring
2026-10-08 08:59:07 +01:00
James Mackay
4779c20407
feat(connection): ShieldConnectionManager + StateStore — persistent socket, watchdog backoff reconnect, TTL expiry, listener API (Phase 1, B1/B5)
2026-10-08 08:54:54 +01:00
James Mackay
2ade5091c4
feat(const): persistent-connection timing constants — watchdog backoff/cap/jitter, StateStore TTL
2026-10-08 08:53:27 +01:00
James Mackay
4269e233b8
feat(adb_client): expose last_dump so consumers can parse the Audio playback section from the same query
2026-10-08 08:53:13 +01:00
James Mackay
37164b6f24
feat: re-export parse_audio_playback + parse_wakefulness from ha_adb_common (additive, keeps hisense_tv consumer parity)
2026-10-08 08:45:06 +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
b91a4242ba
feat(adb_client): exact-value mWakefulness= parse (R5), health_check(), optional media-session truncation (B4); wakefulness fixtures + tests
2026-10-08 08:41:21 +01:00
James Mackay
8f27618e3d
feat(media_session): parse PlaybackState position/speed/updated (uptime-ms) + parse_audio_playback section (MVP plan Phase 1, R9/R2)
2026-10-08 08:38:35 +01:00
James Mackay
ce82127a40
ci: add lint+test workflow; schedule package constants (TiviMate/Wholphin/system media); drop the stale sibling-checkout dev dependency
Test / test (push) Failing after 6s
Release / release (push) Successful in 4s
2026-10-08 07:49:07 +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
6622cc04b4
chore: adopt date-based versioning; point manifest metadata at the Gitea repo
2026-10-08 07:26:13 +01:00
Levi and Claude Opus 4.7
41d3b94107
Fix manifest.json key order for hassfest
...
HA requires domain, name, then alphabetical. Previous file had
issue_tracker before iot_class; alphabetically iot_class (i-o-t) sorts
before issue_tracker (i-s-s). Reordering unblocks hassfest.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-17 18:38:59 -05: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