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)
This commit is contained in:
1 parent
3d026ae60e
commit
a3b397920e
7 files changed
+320
-18
No files matched your search
@@ -50,6 +50,7 @@ from .const import (
|
||||
CONF_ADB_COMMAND_ENABLED,
|
||||
CONF_ADB_STORE_APP_INFO,
|
||||
CONF_ANDROIDTV_ENTITY,
|
||||
CONF_APP_ICON_MAP,
|
||||
CONF_APP_NAME_MAP,
|
||||
CONF_CHANNEL_DIGIT_DELAY,
|
||||
CONF_CHANNEL_SEND_ENTER,
|
||||
@@ -629,7 +630,16 @@ class NvidiaShieldMediaPlayer(MediaPlayerEntity):
|
||||
|
||||
@property
|
||||
def media_image_url(self):
|
||||
return self._jf_attr("entity_picture") if self._jf_active() else None
|
||||
"""Jellyfin session picture, else the P5-2 apps-map icon override."""
|
||||
if self._jf_active():
|
||||
jf = self._jf_attr("entity_picture")
|
||||
if jf:
|
||||
return jf
|
||||
package = self._manager.foreground_app if self._manager else None
|
||||
if package:
|
||||
icon_map = self._entry.options.get(CONF_APP_ICON_MAP, {})
|
||||
return icon_map.get(package)
|
||||
return None
|
||||
|
||||
@property
|
||||
def volume_level(self) -> float | None:
|
||||
@@ -949,7 +959,25 @@ class NvidiaShieldMediaPlayer(MediaPlayerEntity):
|
||||
Channel path replicates HA core androidtv_remote exactly: digits only,
|
||||
configurable inter-digit delay (default 0.1 s), no ENTER — and the
|
||||
padded prior in-flight channel sequence is cancelled first.
|
||||
TEXT entry (P5-2): play_media("text", "...") — protocol IME send_text
|
||||
first; the ADB `input text` fallback tier runs only when the
|
||||
protocol send is unavailable or failed (the Shield may swallow IME
|
||||
text while its on-screen keyboard is up, RESEARCH_IDEAS §2).
|
||||
"""
|
||||
if media_type == "text":
|
||||
if not media_id:
|
||||
_LOGGER.warning("play_media(text): empty text ignored")
|
||||
return
|
||||
if self._manager is not None and await self._manager.send_text_ime(media_id):
|
||||
return
|
||||
if self._manager is not None and await self._manager.send_adb_input_text(media_id):
|
||||
return
|
||||
_LOGGER.warning(
|
||||
"play_media(text): no transport available (protocol down, ADB"
|
||||
" unavailable) — text not sent"
|
||||
)
|
||||
return
|
||||
|
||||
if media_type == "channel":
|
||||
digits = [c for c in media_id if c.isdigit()]
|
||||
if not digits:
|
||||
|
||||
Reference in new issue
Block a user