diff --git a/src/dialogs/more-info/controls/more-info-media_player.js b/src/dialogs/more-info/controls/more-info-media_player.js
index 0263626886..68aba88d2f 100644
--- a/src/dialogs/more-info/controls/more-info-media_player.js
+++ b/src/dialogs/more-info/controls/more-info-media_player.js
@@ -97,6 +97,19 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
+
+
+
+
+
+
+
+ [[item]]
+
+
+
+
+
@@ -122,6 +135,12 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
observer: 'handleSourceChanged',
},
+ SoundModeInput: {
+ type: String,
+ value: '',
+ observer: 'handleSoundModeChanged',
+ },
+
ttsLoaded: {
type: Boolean,
computed: 'computeTTSLoaded(hass)',
@@ -144,6 +163,10 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
this.sourceIndex = newVal.sourceList.indexOf(newVal.source);
}
+ if (newVal && newVal.soundModeList !== undefined) {
+ this.SoundModeInput = newVal.soundMode;
+ }
+
if (oldVal) {
setTimeout(() => {
this.fire('iron-resize');
@@ -182,6 +205,10 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
return playerObj.isOff || !playerObj.supportsSelectSource || !playerObj.sourceList;
}
+ computeHideSelectSoundMode(playerObj) {
+ return playerObj.isOff || !playerObj.supportsSelectSoundMode || !playerObj.soundModeList;
+ }
+
computeHideTTS(ttsLoaded, playerObj) {
return !ttsLoaded || !playerObj.supportsPlayMedia;
}
@@ -227,6 +254,15 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
this.playerObj.selectSource(sourceInput);
}
+ handleSoundModeChanged(newVal, oldVal) {
+ if (oldVal
+ && newVal !== this.playerObj.soundMode
+ && this.playerObj.supportsSelectSoundMode
+ ) {
+ this.playerObj.selectSoundMode(newVal);
+ }
+ }
+
handleVolumeTap() {
if (!this.playerObj.supportsVolumeMute) {
return;
diff --git a/src/util/hass-media-player-model.js b/src/util/hass-media-player-model.js
index 86e977afe5..f18fc4145b 100644
--- a/src/util/hass-media-player-model.js
+++ b/src/util/hass-media-player-model.js
@@ -101,6 +101,10 @@ export default class MediaPlayerEntity {
return (this._feat & 2048) !== 0;
}
+ get supportsSelectSoundMode() {
+ return (this._feat & 65536) !== 0;
+ }
+
get supportsPlay() {
return (this._feat & 16384) !== 0;
}
@@ -140,6 +144,14 @@ export default class MediaPlayerEntity {
return this._attr.source_list;
}
+ get soundMode() {
+ return this._attr.sound_mode;
+ }
+
+ get soundModeList() {
+ return this._attr.sound_mode_list;
+ }
+
mediaPlayPause() {
this.callService('media_play_pause');
}
@@ -195,6 +207,10 @@ export default class MediaPlayerEntity {
this.callService('select_source', { source });
}
+ selectSoundMode(soundMode) {
+ this.callService('select_sound_mode', { sound_mode: soundMode });
+ }
+
// helper method
callService(service, data = {}) {