diff --git a/lib/entity_class/entity.class.dart b/lib/entity_class/entity.class.dart index 066cf3d..bdaf699 100644 --- a/lib/entity_class/entity.class.dart +++ b/lib/entity_class/entity.class.dart @@ -76,6 +76,15 @@ class Entity { } } + List getStringListAttributeValue(String attribute) { + if (attributes["$attribute"] != null) { + List result = (attributes["$attribute"] as List).cast(); + return result; + } else { + return null; + } + } + Widget buildDefaultWidget(BuildContext context) { return DefaultEntityContainer( state: _buildStatePart(context) diff --git a/lib/entity_class/light_entity.class.dart b/lib/entity_class/light_entity.class.dart index 91b1b98..2bcd4b7 100644 --- a/lib/entity_class/light_entity.class.dart +++ b/lib/entity_class/light_entity.class.dart @@ -38,7 +38,7 @@ class LightEntity extends Entity { double get minMireds => _getDoubleAttributeValue("min_mireds"); Color get color => _getColor(); bool get isAdditionalControls => ((attributes["supported_features"] != null) && (attributes["supported_features"] != 0)); - List get effectList => _getEffectList(); + List get effectList => getStringListAttributeValue("effect_list"); LightEntity(Map rawData) : super(rawData); @@ -55,15 +55,6 @@ class LightEntity extends Entity { } } - List _getEffectList() { - if (attributes["effect_list"] != null) { - List result = (attributes["effect_list"] as List).cast(); - return result; - } else { - return null; - } - } - @override Widget _buildStatePart(BuildContext context) { return SwitchStateWidget(); diff --git a/lib/entity_class/media_player_entity.class.dart b/lib/entity_class/media_player_entity.class.dart index 6ff62cd..482dd01 100644 --- a/lib/entity_class/media_player_entity.class.dart +++ b/lib/entity_class/media_player_entity.class.dart @@ -72,6 +72,8 @@ class MediaPlayerEntity extends Entity { MediaPlayerEntity.SUPPORT_SELECT_SOUND_MODE) == MediaPlayerEntity.SUPPORT_SELECT_SOUND_MODE); + List get soundModeList => getStringListAttributeValue("sound_mode_list"); + @override Widget _buildAdditionalControlsForPage(BuildContext context) { return MediaPlayerControls(); diff --git a/lib/entity_widgets/common/mode_selector.dart b/lib/entity_widgets/common/mode_selector.dart index 1f6a8c8..472f856 100644 --- a/lib/entity_widgets/common/mode_selector.dart +++ b/lib/entity_widgets/common/mode_selector.dart @@ -12,7 +12,7 @@ class ModeSelectorWidget extends StatelessWidget { ModeSelectorWidget({ Key key, - this.caption, + @required this.caption, @required this.options, this.value, @required this.onChange, diff --git a/lib/entity_widgets/controls/media_player_widgets.dart b/lib/entity_widgets/controls/media_player_widgets.dart index 397a76b..ea0d9f3 100644 --- a/lib/entity_widgets/controls/media_player_widgets.dart +++ b/lib/entity_widgets/controls/media_player_widgets.dart @@ -255,6 +255,7 @@ class _MediaPlayerControlsState extends State { double _newVolumeLevel; bool _changedHere = false; + String _newSoundMode; void _setVolume(double value, String entityId) { setState(() { @@ -276,6 +277,14 @@ class _MediaPlayerControlsState extends State { eventBus.fire(ServiceCallEvent("media_player", "volume_down", entityId, null)); } + void _setSoundMode(String value, String entityId) { + setState(() { + _newSoundMode = value; + _changedHere = true; + eventBus.fire(ServiceCallEvent("media_player", "select_sound_mode", entityId, {"sound_mode": "$value"})); + }); + } + @override Widget build(BuildContext context) { final MediaPlayerEntity entity = EntityModel.of(context).entityWrapper.entity; @@ -347,6 +356,22 @@ class _MediaPlayerControlsState extends State { )); } + if (entity.supportSelectSoundMode && entity.soundModeList != null) { + if (!_changedHere) { + _newSoundMode = entity.attributes["sound_mode"]; + } else { + _changedHere = false; + } + children.add( + ModeSelectorWidget( + options: entity.soundModeList, + caption: "Sound mode", + value: _newSoundMode, + onChange: (value) => _setSoundMode(value, entity.entityId) + ) + ); + } + } return Column( children: children, diff --git a/lib/main.dart b/lib/main.dart index 2a03588..747bc6d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -81,7 +81,7 @@ part 'ui_widgets/card_header_widget.dart'; EventBus eventBus = new EventBus(); const String appName = "HA Client"; -const appVersion = "0.3.9-69"; +const appVersion = "0.3.9-70"; String homeAssistantWebHost; diff --git a/pubspec.yaml b/pubspec.yaml index be2f2c3..2e96891 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: hass_client description: Home Assistant Android Client -version: 0.3.9+69 +version: 0.3.9+70 environment: sdk: ">=2.0.0-dev.68.0 <3.0.0"