James Mackay
0c7e405108
fix(connection): a failed app-label fetch is retried, not cached as a miss (t55)
...
The Current App sensor and media_player.app_name showed a package id in
the live run. Root cause was in the manifest-label tier: `_fetch_app_label`
returned early (no poller, ADB down) or logged and returned on a shell
error WITHOUT touching the cache, but `app_label` had already put the
package in `_app_label_requests`; the drain then threw the request away,
so a render between the failure and the next cycle re-enqueued — while
nothing distinguished "the device answered, this package has no label"
from "we never got an answer". Nothing was visibly retried, and the label
tier could stay silent indefinitely.
The cache is now (label, stamp, resolved) and records the FETCH, not the
wishful result:
* a fetch that RAN caches its outcome for APP_LABEL_TTL — the label, or
the empty string for a genuinely label-less package. Definitive: no
re-enqueue, so the t24 F1 per-heartbeat round-trip tax stays closed.
* a fetch that could NOT run stamps nothing, logs at debug (so a
package id in the UI is diagnosable), and the next render retries.
* a queued or in-flight fetch is not enqueued twice, so a burst of
renders still costs one `pm dump` per watchdog cycle.
`cache_app_label()` is the one public writer of the cache (tests and any
future out-of-band reader no longer poke the private tuple), and
`app_label_requests`/`app_label_inflight` expose the queue for tests.
The old 2-tuple seeds in the label tests move to `cache_app_label`.
2026-10-12 06:53:09 +01:00
James Mackay
2e70587871
feat: standards polish — G7 sensor translation_key naming + entity strings, G10 protocol-push device identity on the registry card, G12 unrecorded poll-driven attributes (media player DAG internals + sensors), G14 async_redact_data with an explicit redaction list behind the marker scan (t30)
2026-10-09 07:22:23 +01:00
James Mackay
e51545262e
fix(connection,adb_client): commit the F-NEW1..3 wiring lost in the amend cycle — no-idle-timeout transport budget with in-code rationale, config accessor consumption, wrapped-line buffer
2026-10-09 06:20:46 +01:00
James Mackay
9b3142874f
fix(connection,adb_client): the logcat stream survives quiet windows — transport_timeout_s=None (bulk_read blocks quiet gaps; the ladder + async_stop remain recovery/cleanup), 3-line parse buffer for wrapped cmp records, public poller config accessor replaces the private reach-ins (t27 F-NEW1..3)
2026-10-09 06:20:38 +01:00
James Mackay
b442440ccf
fix(connection,app_labels): negative-cache label-less packages (same 24h TTL, no re-enqueue — kills the per-heartbeat pm dump tax) + shlex.quote the pm dump package argument (t26 F1,F2)
2026-10-09 06:08:33 +01:00
James Mackay
697e3ba307
feat(connection,const,strings): complete the P5-3 logcat consumer wiring lost in an earlier amend — dedicated stream, instant stamp, ladder + auto-disable, default-off toggle strings
2026-10-09 06:06:34 +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
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
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
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
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
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
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
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