The reported Shield names no app: `pm dump com.netflix.ninja` is ~2241 lines of
dumpsys and grep for `application-label` over the whole capture finds nothing.
The probe shipped `| head -300`, which cut the dump BEFORE the package section,
so "no label" was a truncation artefact; the sweep then named every app after
its own package id, and the apps editor pre-filled the `pkg=pkg` row the user
read as a bug.
* the probe greps ON THE DEVICE for the three shapes Android prints
(`application-label`, `nonLocalizedLabel`, `labelRes`); a quoted value is a
name, `null` and a resource id are not. The dump is never truncated.
* after APP_LABEL_PROBE_LIMIT consecutive "ran, no label" answers the device
is taken at its word: the sweep stops spending a shell per package
(APP_LABEL_TTL expiry re-checks, and a package whose probe FAILED still owes
its retry — t57 UNIT 0 survives, driven by the app on screen).
* ONE precedence chain in `ha_adb_common/app_label.resolve_package_name`, used
by the media player, the Current App sensor, the discovery table, the source
list and the apps editor: user map > device label > curated map > package id
(the id shown ONCE, `name` empty when nothing names the app).
* the curated table covers the user's 21 apps (community-maintained, not
device truth) and the Configure row says when the device named nothing.
* the real device shape is a test fixture (trimmed, and marked as such in the
file: the raw capture is not in the repo) pinning that no label is
extracted, that the probe count is bounded, and that `Netflix` surfaces.
Also drops the dead `ATTR_MEDIA_DAG_NOW_PLAYING` re-exports left by the t65
flattening and updates the RESEARCH_SHIELD now-playing note to the flat names.
No real Shield was available: the fetch/burst behaviour is exercised against the
documented Android output and the trimmed reproduction of the reported capture.
28 lines
1.2 KiB
Python
28 lines
1.2 KiB
Python
"""Shared Media DAG attribute keys.
|
|
|
|
These constants define the contract between source integrations (nvidia_shield,
|
|
hisense_tv, etc.) and the media_zone aggregator. All source integrations MUST
|
|
use these exact attribute keys so media_zone can read them uniformly.
|
|
"""
|
|
|
|
# Role of this entity in the media DAG
|
|
ATTR_MEDIA_DAG_ROLE = "media_dag_role"
|
|
|
|
# Receiver this source is wired to (entity_id)
|
|
ATTR_MEDIA_DAG_RECEIVER_ENTITY = "media_dag_receiver_entity"
|
|
|
|
# Which receiver input this source occupies
|
|
ATTR_MEDIA_DAG_RECEIVER_INPUT = "media_dag_receiver_input"
|
|
|
|
# Jellyfin media_player entity for rich metadata
|
|
ATTR_MEDIA_DAG_JELLYFIN_ENTITY = "media_dag_jellyfin_entity"
|
|
|
|
# t65 flattened the now-playing reading into separate top-level ``now_playing_*``
|
|
# attributes on the media player (``now_playing_via`` names the tier), so the single
|
|
# nested ``media_dag_now_playing`` key this file used to define is GONE — the last
|
|
# reference to it was removed in t66's cleanup. The flattened names live in
|
|
# ``custom_components/nvidia_shield/media_player.py`` (``now_playing_attribute_names``).
|
|
|
|
# List of running app dicts: [{package, state, title?, artist?}, ...]
|
|
ATTR_MEDIA_DAG_RUNNING_APPS = "media_dag_running_apps"
|