James Mackay
f4d750ff92
test(config_flow): zeroconf discovery (pre-fill, no-host abort, IP-change host update, same-IP skip) + apps map editor (store/parse/clear/prefill) + app_name map resolution tiers (P4-1)
2026-10-08 11:03:28 +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
1dbb695cec
feat(config_flow): zeroconf discovery step — pre-filled user step from the discovery address, duplicate-MAC abort, IP-change host update + reload for known entries (P4-1a)
2026-10-08 10:57:31 +01:00
James Mackay
8b4fea9a5c
feat(const,manifest): zeroconf service type + CONF_APP_NAME_MAP; manifest declares the _androidtvremote2._tcp discovery dependency (P4-1)
2026-10-08 10:57:08 +01:00
James Mackay
ce90f59f8e
fix(config_flow): no_state_source fires only when none of the three sources is present — ADB-only standalone is valid; strings/docs name all three (F2)
2026-10-08 10:52:44 +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
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