From dc3ca38c787df9acfb10311b598823de7c6e2045 Mon Sep 17 00:00:00 2001 From: Yegor Vyalov Date: Mon, 28 Jan 2019 16:48:49 +0200 Subject: [PATCH] WIP #142 Alarm control panel --- .../alarm_control_panel.class.dart | 10 +++++ lib/entity_collection.class.dart | 3 ++ .../alarm_control_panel_controls.dart | 44 +++++++++++++++++++ lib/main.dart | 2 + lib/mdi.class.dart | 9 +++- 5 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 lib/entity_class/alarm_control_panel.class.dart create mode 100644 lib/entity_widgets/controls/alarm_control_panel_controls.dart diff --git a/lib/entity_class/alarm_control_panel.class.dart b/lib/entity_class/alarm_control_panel.class.dart new file mode 100644 index 0000000..7366d75 --- /dev/null +++ b/lib/entity_class/alarm_control_panel.class.dart @@ -0,0 +1,10 @@ +part of '../main.dart'; + +class AlarmControlPanelEntity extends Entity { + AlarmControlPanelEntity(Map rawData) : super(rawData); + + @override + Widget _buildAdditionalControlsForPage(BuildContext context) { + return AlarmControlPanelControlsWidget(); + } +} \ No newline at end of file diff --git a/lib/entity_collection.class.dart b/lib/entity_collection.class.dart index 769d2e5..67f4a5d 100644 --- a/lib/entity_collection.class.dart +++ b/lib/entity_collection.class.dart @@ -86,6 +86,9 @@ class EntityCollection { case "fan": { return FanEntity(rawEntityData); } + case "alarm_control_panel": { + return AlarmControlPanelEntity(rawEntityData); + } default: { return Entity(rawEntityData); } diff --git a/lib/entity_widgets/controls/alarm_control_panel_controls.dart b/lib/entity_widgets/controls/alarm_control_panel_controls.dart new file mode 100644 index 0000000..0ba2e46 --- /dev/null +++ b/lib/entity_widgets/controls/alarm_control_panel_controls.dart @@ -0,0 +1,44 @@ +part of '../../main.dart'; + +class AlarmControlPanelControlsWidget extends StatefulWidget { + + @override + _AlarmControlPanelControlsWidgetWidgetState createState() => _AlarmControlPanelControlsWidgetWidgetState(); + +} + +class _AlarmControlPanelControlsWidgetWidgetState extends State { + + void _disarm(AlarmControlPanelEntity entity, String code) { + eventBus.fire(new ServiceCallEvent( + entity.domain, "alarm_disarm", entity.entityId, + {"code": "$code"})); + } + + @override + Widget build(BuildContext context) { + final entityModel = EntityModel.of(context); + final AlarmControlPanelEntity entity = entityModel.entityWrapper.entity; + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + + children: [ + TextField( + //focusNode: _focusNode, + obscureText: true, + /*controller: new TextEditingController.fromValue( + new TextEditingValue( + text: _tmpValue, + selection: + new TextSelection.collapsed(offset: _tmpValue.length) + ) + ),*/ + onChanged: (value) { + Logger.d('Alarm code: $value'); + }) + ], + ); + } + + +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 6d054f9..2ad126f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,6 +34,7 @@ part 'entity_class/lock_entity.class.dart'; part 'entity_class/group_entity.class.dart'; part 'entity_class/fan_entity.class.dart'; part 'entity_class/automation_entity.dart'; +part 'entity_class/alarm_control_panel.class.dart'; part 'entity_widgets/common/badge.dart'; part 'entity_widgets/model_widgets.dart'; part 'entity_widgets/default_entity_container.dart'; @@ -69,6 +70,7 @@ part 'entity_widgets/controls/cover_controls.dart'; part 'entity_widgets/controls/light_controls.dart'; part 'entity_widgets/controls/media_player_widgets.dart'; part 'entity_widgets/controls/fan_controls.dart'; +part 'entity_widgets/controls/alarm_control_panel_controls.dart'; part 'settings.page.dart'; part 'home_assistant.class.dart'; part 'log.page.dart'; diff --git a/lib/mdi.class.dart b/lib/mdi.class.dart index a31e979..27ab61f 100644 --- a/lib/mdi.class.dart +++ b/lib/mdi.class.dart @@ -24,7 +24,14 @@ class MaterialDesignIcons { "cover.opening": "mdi:window-open", "lock.locked": "mdi:lock", "lock.unlocked": "mdi:lock-open", - "fan": "mdi:fan" + "fan": "mdi:fan", + "alarm_control_panel.disarmed" : "mdi:bell-outline", + "alarm_control_panel.armed_home" : "mdi:bell-plus", + "alarm_control_panel.armed_away" : "mdi:bell", + "alarm_control_panel.armed_night" : "mdi:bell-sleep", + "alarm_control_panel.armed_custom_bypass" : "mdi:bell-sleep", + "alarm_control_panel.triggered" : "mdi:bell-ring", + "alarm_control_panel" : "mdi:bell" }; static Map _defaultIconsByDeviceClass = {