diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 1a0b439b0e9..d7a3e481fbc 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -2,6 +2,8 @@ from __future__ import annotations +from typing import Any + from pyvizio.api.apps import AppConfig, find_app_name from pyvizio.const import APP_HOME, INPUT_APPS, NO_APP_RUNNING, UNKNOWN_APP @@ -14,10 +16,6 @@ from homeassistant.components.media_player import ( from homeassistant.const import CONF_DEVICE_CLASS, CONF_EXCLUDE, CONF_INCLUDE from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.device_registry import DeviceInfo -from homeassistant.helpers.dispatcher import ( - async_dispatcher_connect, - async_dispatcher_send, -) from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity @@ -122,9 +120,7 @@ class VizioDevice(CoordinatorEntity[VizioDeviceCoordinator], MediaPlayerEntity): self._available_inputs: list[str] = [] self._available_apps: list[str] = [] - self._volume_step = config_entry.options[CONF_VOLUME_STEP] self._all_apps = apps_coordinator.data if apps_coordinator else None - self._conf_apps = config_entry.options.get(CONF_APPS, {}) self._additional_app_configs = config_entry.data.get(CONF_APPS, {}).get( CONF_ADDITIONAL_CONFIGS, [] ) @@ -142,6 +138,16 @@ class VizioDevice(CoordinatorEntity[VizioDeviceCoordinator], MediaPlayerEntity): self._attr_device_class = device_class self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, unique_id)}) + @property + def _volume_step(self) -> int: + """Return the configured volume step.""" + return self._config_entry.options[CONF_VOLUME_STEP] + + @property + def _conf_apps(self) -> dict: + """Return the configured app filter options.""" + return self._config_entry.options.get(CONF_APPS, {}) + def _apps_list(self, apps: list[str]) -> list[str]: """Return process apps list based on configured filters.""" if self._conf_apps.get(CONF_INCLUDE): @@ -225,22 +231,6 @@ class VizioDevice(CoordinatorEntity[VizioDeviceCoordinator], MediaPlayerEntity): additional_app["name"] for additional_app in self._additional_app_configs ] - @staticmethod - async def _async_send_update_options_signal( - hass: HomeAssistant, config_entry: VizioConfigEntry - ) -> None: - """Send update event when Vizio config entry is updated.""" - # Move this method to component level if another entity ever gets added for a - # single config entry. - # See here: https://github.com/home-assistant/core/pull/30653#discussion_r366426121 - async_dispatcher_send(hass, config_entry.entry_id, config_entry) - - async def _async_update_options(self, config_entry: VizioConfigEntry) -> None: - """Update options if the update signal comes from this entity.""" - self._volume_step = config_entry.options[CONF_VOLUME_STEP] - # Update so that CONF_ADDITIONAL_CONFIGS gets retained for imports - self._conf_apps.update(config_entry.options.get(CONF_APPS, {})) - async def async_update_setting( self, setting_type: str, setting_name: str, new_value: int | str ) -> None: @@ -259,19 +249,10 @@ class VizioDevice(CoordinatorEntity[VizioDeviceCoordinator], MediaPlayerEntity): # Process initial coordinator data self._handle_coordinator_update() - # Register callback for when config entry is updated. - self.async_on_remove( - self._config_entry.add_update_listener( - self._async_send_update_options_signal - ) - ) + async def _async_write_state(*_: Any) -> None: + self._handle_coordinator_update() - # Register callback for update event - self.async_on_remove( - async_dispatcher_connect( - self.hass, self._config_entry.entry_id, self._async_update_options - ) - ) + self.async_on_remove(self._config_entry.add_update_listener(_async_write_state)) if not (apps_coordinator := self._apps_coordinator): return