General sound mode support (#1275)

* Add sound mode support

* Add sound mode support

* Rebase Sound Mode support

* Cammel case fix

* Sound mode support

* Add sound mode support

* change to attr-for-selected

* Simplify sound mode support
This commit is contained in:
starkillerOG 2018-06-12 21:27:54 +02:00 committed by c727
parent 7f133d0316
commit cf3d864378
2 changed files with 52 additions and 0 deletions

View File

@ -97,6 +97,19 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
</paper-listbox>
</paper-dropdown-menu>
</div>
<!-- SOUND MODE PICKER -->
<template is='dom-if' if='[[!computeHideSelectSoundMode(playerObj)]]'>
<div class="controls layout horizontal justified">
<iron-icon class="source-input" icon="hass:music-note"></iron-icon>
<paper-dropdown-menu class="flex source-input" dynamic-align label-float label='Sound Mode'>
<paper-listbox slot="dropdown-content" attr-for-selected="item-name" selected="{{SoundModeInput}}">
<template is='dom-repeat' items='[[playerObj.soundModeList]]'>
<paper-item item-name$="[[item]]">[[item]]</paper-item>
</template>
</paper-listbox>
</paper-dropdown-menu>
</div>
</template>
<!-- TTS -->
<div hidden\$="[[computeHideTTS(ttsLoaded, playerObj)]]" class="layout horizontal end">
<paper-input id="ttsInput" label="[[localize('ui.card.media_player.text_to_speak')]]" class="flex" value="{{ttsMessage}}" on-keydown="ttsCheckForEnter"></paper-input>
@ -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;

View File

@ -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 = {}) {