From 87f284c7e9093522820dc773d25ed0e7eb47b76a Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 10 Jul 2023 12:58:53 +0200 Subject: [PATCH] Add MEDIA_ANNOUNCE to MediaPlayerEntityFeature (#95906) --- homeassistant/components/forked_daapd/const.py | 1 + homeassistant/components/group/media_player.py | 8 ++++++++ homeassistant/components/media_player/const.py | 1 + homeassistant/components/media_player/services.yaml | 3 +++ homeassistant/components/sonos/media_player.py | 1 + tests/components/group/test_media_player.py | 4 +++- 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/forked_daapd/const.py b/homeassistant/components/forked_daapd/const.py index 5668f941c6e..686a9dbbde9 100644 --- a/homeassistant/components/forked_daapd/const.py +++ b/homeassistant/components/forked_daapd/const.py @@ -82,6 +82,7 @@ SUPPORTED_FEATURES = ( | MediaPlayerEntityFeature.TURN_OFF | MediaPlayerEntityFeature.PLAY_MEDIA | MediaPlayerEntityFeature.BROWSE_MEDIA + | MediaPlayerEntityFeature.MEDIA_ANNOUNCE | MediaPlayerEntityFeature.MEDIA_ENQUEUE ) SUPPORTED_FEATURES_ZONE = ( diff --git a/homeassistant/components/group/media_player.py b/homeassistant/components/group/media_player.py index fa43ac76ea6..b271e57cb8a 100644 --- a/homeassistant/components/group/media_player.py +++ b/homeassistant/components/group/media_player.py @@ -50,6 +50,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.event import async_track_state_change_event from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, EventType +KEY_ANNOUNCE = "announce" KEY_CLEAR_PLAYLIST = "clear_playlist" KEY_ENQUEUE = "enqueue" KEY_ON_OFF = "on_off" @@ -116,6 +117,7 @@ class MediaPlayerGroup(MediaPlayerEntity): self._entities = entities self._features: dict[str, set[str]] = { + KEY_ANNOUNCE: set(), KEY_CLEAR_PLAYLIST: set(), KEY_ENQUEUE: set(), KEY_ON_OFF: set(), @@ -194,6 +196,10 @@ class MediaPlayerGroup(MediaPlayerEntity): self._features[KEY_VOLUME].add(entity_id) else: self._features[KEY_VOLUME].discard(entity_id) + if new_features & MediaPlayerEntityFeature.MEDIA_ANNOUNCE: + self._features[KEY_ANNOUNCE].add(entity_id) + else: + self._features[KEY_ANNOUNCE].discard(entity_id) if new_features & MediaPlayerEntityFeature.MEDIA_ENQUEUE: self._features[KEY_ENQUEUE].add(entity_id) else: @@ -440,6 +446,8 @@ class MediaPlayerGroup(MediaPlayerEntity): | MediaPlayerEntityFeature.VOLUME_SET | MediaPlayerEntityFeature.VOLUME_STEP ) + if self._features[KEY_ANNOUNCE]: + supported_features |= MediaPlayerEntityFeature.MEDIA_ANNOUNCE if self._features[KEY_ENQUEUE]: supported_features |= MediaPlayerEntityFeature.MEDIA_ENQUEUE diff --git a/homeassistant/components/media_player/const.py b/homeassistant/components/media_player/const.py index f96d2a012c8..9ad7b983c7f 100644 --- a/homeassistant/components/media_player/const.py +++ b/homeassistant/components/media_player/const.py @@ -199,6 +199,7 @@ class MediaPlayerEntityFeature(IntFlag): BROWSE_MEDIA = 131072 REPEAT_SET = 262144 GROUPING = 524288 + MEDIA_ANNOUNCE = 1048576 MEDIA_ENQUEUE = 2097152 diff --git a/homeassistant/components/media_player/services.yaml b/homeassistant/components/media_player/services.yaml index 536d229dbda..21807262742 100644 --- a/homeassistant/components/media_player/services.yaml +++ b/homeassistant/components/media_player/services.yaml @@ -172,6 +172,9 @@ play_media: announce: name: Announce description: If the media should be played as an announcement. + filter: + supported_features: + - media_player.MediaPlayerEntityFeature.MEDIA_ANNOUNCE required: false example: "true" selector: diff --git a/homeassistant/components/sonos/media_player.py b/homeassistant/components/sonos/media_player.py index c519d237100..08f2b08f4df 100644 --- a/homeassistant/components/sonos/media_player.py +++ b/homeassistant/components/sonos/media_player.py @@ -195,6 +195,7 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity): MediaPlayerEntityFeature.BROWSE_MEDIA | MediaPlayerEntityFeature.CLEAR_PLAYLIST | MediaPlayerEntityFeature.GROUPING + | MediaPlayerEntityFeature.MEDIA_ANNOUNCE | MediaPlayerEntityFeature.MEDIA_ENQUEUE | MediaPlayerEntityFeature.NEXT_TRACK | MediaPlayerEntityFeature.PAUSE diff --git a/tests/components/group/test_media_player.py b/tests/components/group/test_media_player.py index 3524c0f1e88..2a1a2a05e4e 100644 --- a/tests/components/group/test_media_player.py +++ b/tests/components/group/test_media_player.py @@ -192,7 +192,9 @@ async def test_supported_features(hass: HomeAssistant) -> None: | MediaPlayerEntityFeature.STOP ) play_media = ( - MediaPlayerEntityFeature.PLAY_MEDIA | MediaPlayerEntityFeature.MEDIA_ENQUEUE + MediaPlayerEntityFeature.PLAY_MEDIA + | MediaPlayerEntityFeature.MEDIA_ANNOUNCE + | MediaPlayerEntityFeature.MEDIA_ENQUEUE ) volume = ( MediaPlayerEntityFeature.VOLUME_MUTE