Merge pull request #82 from house-of-abbey/52-allow-parameters-to-be-send-with-tap-menu-items
52 allow parameters to be send with tap menu items
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-18/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="18" viewBox="0 -960 960 960" width="18" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-21/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="21" viewBox="0 -960 960 960" width="21" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-24/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="24" viewBox="0 -960 960 960" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-26/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="26" viewBox="0 -960 960 960" width="26" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-28/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="28" viewBox="0 -960 960 960" width="28" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-30/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="30" viewBox="0 -960 960 960" width="30" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-32/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="32" viewBox="0 -960 960 960" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-38/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="38" viewBox="0 -960 960 960" width="38" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-42/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="42" viewBox="0 -960 960 960" width="42" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-46/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="46" viewBox="0 -960 960 960" width="46" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-48/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -19,4 +19,5 @@
|
|||||||
<bitmap id="ErrorIcon" filename="error.svg"/>
|
<bitmap id="ErrorIcon" filename="error.svg"/>
|
||||||
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
<bitmap id="GroupTypeIcon" filename="group_type.svg"/>
|
||||||
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
<bitmap id="TapTypeIcon" filename="tap_type.svg"/>
|
||||||
|
<bitmap id="InfoTypeIcon" filename="info_type.svg"/>
|
||||||
</drawables>
|
</drawables>
|
||||||
|
1
resources-icons-53/info_type.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="53" viewBox="0 -960 960 960" width="53" xmlns="http://www.w3.org/2000/svg"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z" fill="blue" stroke="blue"/></svg>
|
After Width: | Height: | Size: 543 B |
@ -14,26 +14,27 @@
|
|||||||
//
|
//
|
||||||
// Description:
|
// Description:
|
||||||
//
|
//
|
||||||
// Menu button with an icon that opens a sub-menu.
|
// Menu button with an icon that opens a sub-menu, i.e. group.
|
||||||
//
|
//
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
using Toybox.Lang;
|
using Toybox.Lang;
|
||||||
using Toybox.WatchUi;
|
using Toybox.WatchUi;
|
||||||
|
|
||||||
class HomeAssistantViewMenuItem extends WatchUi.IconMenuItem {
|
class HomeAssistantGroupMenuItem extends WatchUi.IconMenuItem {
|
||||||
private var mMenu as HomeAssistantView;
|
private var mMenu as HomeAssistantView;
|
||||||
|
|
||||||
function initialize(definition as Lang.Dictionary, icon as WatchUi.Drawable, options as {
|
function initialize(
|
||||||
|
definition as Lang.Dictionary,
|
||||||
|
icon as WatchUi.Drawable,
|
||||||
|
options as {
|
||||||
:alignment as WatchUi.MenuItem.Alignment
|
:alignment as WatchUi.MenuItem.Alignment
|
||||||
} or Null) {
|
} or Null) {
|
||||||
var label = definition.get("name") as Lang.String;
|
|
||||||
var identifier = definition.get("entity") as Lang.String;
|
|
||||||
|
|
||||||
WatchUi.IconMenuItem.initialize(
|
WatchUi.IconMenuItem.initialize(
|
||||||
label,
|
definition.get("name") as Lang.String,
|
||||||
|
null,
|
||||||
null,
|
null,
|
||||||
identifier,
|
|
||||||
icon,
|
icon,
|
||||||
options
|
options
|
||||||
);
|
);
|
@ -26,6 +26,7 @@ class HomeAssistantMenuItemFactory {
|
|||||||
private var mMenuItemOptions as Lang.Dictionary;
|
private var mMenuItemOptions as Lang.Dictionary;
|
||||||
private var mTapTypeIcon as WatchUi.Bitmap;
|
private var mTapTypeIcon as WatchUi.Bitmap;
|
||||||
private var mGroupTypeIcon as WatchUi.Bitmap;
|
private var mGroupTypeIcon as WatchUi.Bitmap;
|
||||||
|
private var mInfoTypeIcon as WatchUi.Bitmap;
|
||||||
private var mHomeAssistantService as HomeAssistantService;
|
private var mHomeAssistantService as HomeAssistantService;
|
||||||
|
|
||||||
private static var instance;
|
private static var instance;
|
||||||
@ -47,6 +48,12 @@ class HomeAssistantMenuItemFactory {
|
|||||||
:locY => WatchUi.LAYOUT_VALIGN_CENTER
|
:locY => WatchUi.LAYOUT_VALIGN_CENTER
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mInfoTypeIcon = new WatchUi.Bitmap({
|
||||||
|
:rezId => $.Rez.Drawables.InfoTypeIcon,
|
||||||
|
:locX => WatchUi.LAYOUT_HALIGN_CENTER,
|
||||||
|
:locY => WatchUi.LAYOUT_VALIGN_CENTER
|
||||||
|
});
|
||||||
|
|
||||||
mHomeAssistantService = new HomeAssistantService();
|
mHomeAssistantService = new HomeAssistantService();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,29 +64,52 @@ class HomeAssistantMenuItemFactory {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggle(label as Lang.String or Lang.Symbol, identifier as Lang.Object or Null) as WatchUi.MenuItem {
|
function toggle(label as Lang.String or Lang.Symbol, entity_id as Lang.String or Null) as WatchUi.MenuItem {
|
||||||
return new HomeAssistantToggleMenuItem(
|
return new HomeAssistantToggleMenuItem(
|
||||||
label,
|
label,
|
||||||
null,
|
{ "entity_id" => entity_id },
|
||||||
identifier,
|
|
||||||
false,
|
|
||||||
mMenuItemOptions
|
mMenuItemOptions
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function template(
|
function template_tap(
|
||||||
label as Lang.String or Lang.Symbol,
|
label as Lang.String or Lang.Symbol,
|
||||||
identifier as Lang.Object or Null,
|
entity as Lang.String or Null,
|
||||||
template as Lang.String or Null,
|
template as Lang.String or Null,
|
||||||
service as Lang.String or Null,
|
service as Lang.String or Null,
|
||||||
confirm as Lang.Boolean
|
confirm as Lang.Boolean,
|
||||||
|
data as Lang.Dictionary or Null
|
||||||
) as WatchUi.MenuItem {
|
) as WatchUi.MenuItem {
|
||||||
|
if (entity != null) {
|
||||||
|
if (data == null) {
|
||||||
|
data = { "entity_id" => entity };
|
||||||
|
} else {
|
||||||
|
data.put("entity_id", entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
return new HomeAssistantTemplateMenuItem(
|
return new HomeAssistantTemplateMenuItem(
|
||||||
label,
|
label,
|
||||||
identifier,
|
|
||||||
template,
|
template,
|
||||||
service,
|
service,
|
||||||
confirm,
|
confirm,
|
||||||
|
data,
|
||||||
|
mTapTypeIcon,
|
||||||
|
mMenuItemOptions,
|
||||||
|
mHomeAssistantService
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function template_notap(
|
||||||
|
label as Lang.String or Lang.Symbol,
|
||||||
|
template as Lang.String or Null
|
||||||
|
) as WatchUi.MenuItem {
|
||||||
|
return new HomeAssistantTemplateMenuItem(
|
||||||
|
label,
|
||||||
|
template,
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
mInfoTypeIcon,
|
||||||
mMenuItemOptions,
|
mMenuItemOptions,
|
||||||
mHomeAssistantService
|
mHomeAssistantService
|
||||||
);
|
);
|
||||||
@ -87,16 +117,23 @@ class HomeAssistantMenuItemFactory {
|
|||||||
|
|
||||||
function tap(
|
function tap(
|
||||||
label as Lang.String or Lang.Symbol,
|
label as Lang.String or Lang.Symbol,
|
||||||
identifier as Lang.Object or Null,
|
entity as Lang.String or Null,
|
||||||
service as Lang.String or Null,
|
service as Lang.String or Null,
|
||||||
confirm as Lang.Boolean
|
confirm as Lang.Boolean,
|
||||||
|
data as Lang.Dictionary or Null
|
||||||
) as WatchUi.MenuItem {
|
) as WatchUi.MenuItem {
|
||||||
return new HomeAssistantMenuItem(
|
if (entity != null) {
|
||||||
|
if (data == null) {
|
||||||
|
data = { "entity_id" => entity };
|
||||||
|
} else {
|
||||||
|
data.put("entity_id", entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new HomeAssistantTapMenuItem(
|
||||||
label,
|
label,
|
||||||
null,
|
|
||||||
identifier,
|
|
||||||
service,
|
service,
|
||||||
confirm,
|
confirm,
|
||||||
|
data,
|
||||||
mTapTypeIcon,
|
mTapTypeIcon,
|
||||||
mMenuItemOptions,
|
mMenuItemOptions,
|
||||||
mHomeAssistantService
|
mHomeAssistantService
|
||||||
@ -104,6 +141,6 @@ class HomeAssistantMenuItemFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function group(definition as Lang.Dictionary) as WatchUi.MenuItem {
|
function group(definition as Lang.Dictionary) as WatchUi.MenuItem {
|
||||||
return new HomeAssistantViewMenuItem(definition, mGroupTypeIcon, mMenuItemOptions);
|
return new HomeAssistantGroupMenuItem(definition, mGroupTypeIcon, mMenuItemOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ class HomeAssistantService {
|
|||||||
private var mHasToast as Lang.Boolean = false;
|
private var mHasToast as Lang.Boolean = false;
|
||||||
private var mHasVibrate as Lang.Boolean = false;
|
private var mHasVibrate as Lang.Boolean = false;
|
||||||
|
|
||||||
function initialise() {
|
function initialize() {
|
||||||
if (WatchUi has :showToast) {
|
if (WatchUi has :showToast) {
|
||||||
mHasToast = true;
|
mHasToast = true;
|
||||||
}
|
}
|
||||||
@ -38,8 +38,12 @@ class HomeAssistantService {
|
|||||||
|
|
||||||
// Callback function after completing the POST request to call a service.
|
// Callback function after completing the POST request to call a service.
|
||||||
//
|
//
|
||||||
function onReturnCall(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String, context as Lang.Object) as Void {
|
function onReturnCall(
|
||||||
var identifier = context as Lang.String;
|
responseCode as Lang.Number,
|
||||||
|
data as Null or Lang.Dictionary or Lang.String,
|
||||||
|
context as Lang.Object
|
||||||
|
) as Void {
|
||||||
|
var entity_id = context as Lang.String or Null;
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantService onReturnCall() Response Code: " + responseCode);
|
System.println("HomeAssistantService onReturnCall() Response Code: " + responseCode);
|
||||||
System.println("HomeAssistantService onReturnCall() Response Data: " + data);
|
System.println("HomeAssistantService onReturnCall() Response Data: " + data);
|
||||||
@ -95,7 +99,7 @@ class HomeAssistantService {
|
|||||||
var d = data as Lang.Array;
|
var d = data as Lang.Array;
|
||||||
var toast = RezStrings.getExecuted();
|
var toast = RezStrings.getExecuted();
|
||||||
for(var i = 0; i < d.size(); i++) {
|
for(var i = 0; i < d.size(); i++) {
|
||||||
if ((d[i].get("entity_id") as Lang.String).equals(identifier)) {
|
if ((d[i].get("entity_id") as Lang.String).equals(entity_id)) {
|
||||||
toast = (d[i].get("attributes") as Lang.Dictionary).get("friendly_name") as Lang.String;
|
toast = (d[i].get("attributes") as Lang.Dictionary).get("friendly_name") as Lang.String;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,7 +124,10 @@ class HomeAssistantService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function call(identifier as Lang.String, service as Lang.String) as Void {
|
function call(
|
||||||
|
service as Lang.String,
|
||||||
|
data as Lang.Dictionary or Null
|
||||||
|
) as Void {
|
||||||
if (! System.getDeviceSettings().phoneConnected) {
|
if (! System.getDeviceSettings().phoneConnected) {
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantService call(): No Phone connection, skipping API call.");
|
System.println("HomeAssistantService call(): No Phone connection, skipping API call.");
|
||||||
@ -138,11 +145,15 @@ class HomeAssistantService {
|
|||||||
System.println("HomeAssistantService call() URL=" + url);
|
System.println("HomeAssistantService call() URL=" + url);
|
||||||
System.println("HomeAssistantService call() service=" + service);
|
System.println("HomeAssistantService call() service=" + service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var entity_id = data.get("entity_id");
|
||||||
|
if (entity_id == null) {
|
||||||
|
entity_id = "";
|
||||||
|
}
|
||||||
|
|
||||||
Communications.makeWebRequest(
|
Communications.makeWebRequest(
|
||||||
url,
|
url,
|
||||||
{
|
data, // Includes {"entity_id": xxxx}
|
||||||
"entity_id" => identifier
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
:method => Communications.HTTP_REQUEST_METHOD_POST,
|
:method => Communications.HTTP_REQUEST_METHOD_POST,
|
||||||
:headers => {
|
:headers => {
|
||||||
@ -150,7 +161,7 @@ class HomeAssistantService {
|
|||||||
"Authorization" => "Bearer " + Settings.getApiKey()
|
"Authorization" => "Bearer " + Settings.getApiKey()
|
||||||
},
|
},
|
||||||
:responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON,
|
:responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON,
|
||||||
:context => identifier
|
:context => entity_id
|
||||||
},
|
},
|
||||||
method(:onReturnCall)
|
method(:onReturnCall)
|
||||||
);
|
);
|
||||||
|
@ -22,17 +22,17 @@ using Toybox.Lang;
|
|||||||
using Toybox.WatchUi;
|
using Toybox.WatchUi;
|
||||||
using Toybox.Graphics;
|
using Toybox.Graphics;
|
||||||
|
|
||||||
class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
|
class HomeAssistantTapMenuItem extends WatchUi.IconMenuItem {
|
||||||
private var mHomeAssistantService as HomeAssistantService;
|
private var mHomeAssistantService as HomeAssistantService;
|
||||||
private var mService as Lang.String;
|
private var mService as Lang.String;
|
||||||
private var mConfirm as Lang.Boolean;
|
private var mConfirm as Lang.Boolean;
|
||||||
|
private var mData as Lang.Dictionary or Null;
|
||||||
|
|
||||||
function initialize(
|
function initialize(
|
||||||
label as Lang.String or Lang.Symbol,
|
label as Lang.String or Lang.Symbol,
|
||||||
subLabel as Lang.String or Lang.Symbol or Null,
|
|
||||||
identifier as Lang.Object or Null,
|
|
||||||
service as Lang.String or Null,
|
service as Lang.String or Null,
|
||||||
confirm as Lang.Boolean,
|
confirm as Lang.Boolean,
|
||||||
|
data as Lang.Dictionary or Null,
|
||||||
icon as Graphics.BitmapType or WatchUi.Drawable,
|
icon as Graphics.BitmapType or WatchUi.Drawable,
|
||||||
options as {
|
options as {
|
||||||
:alignment as WatchUi.MenuItem.Alignment
|
:alignment as WatchUi.MenuItem.Alignment
|
||||||
@ -41,16 +41,16 @@ class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
|
|||||||
) {
|
) {
|
||||||
WatchUi.IconMenuItem.initialize(
|
WatchUi.IconMenuItem.initialize(
|
||||||
label,
|
label,
|
||||||
subLabel,
|
null,
|
||||||
identifier,
|
null,
|
||||||
icon,
|
icon,
|
||||||
options
|
options
|
||||||
);
|
);
|
||||||
|
|
||||||
mHomeAssistantService = haService;
|
mHomeAssistantService = haService;
|
||||||
mIdentifier = identifier;
|
|
||||||
mService = service;
|
mService = service;
|
||||||
mConfirm = confirm;
|
mConfirm = confirm;
|
||||||
|
mData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function callService() as Void {
|
function callService() as Void {
|
||||||
@ -66,7 +66,7 @@ class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onConfirm() as Void {
|
function onConfirm() as Void {
|
||||||
mHomeAssistantService.call(mIdentifier as Lang.String, mService);
|
mHomeAssistantService.call(mService, mData);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -14,7 +14,7 @@
|
|||||||
//
|
//
|
||||||
// Description:
|
// Description:
|
||||||
//
|
//
|
||||||
// Rendering a Home Assistant Template.
|
// Menu button that renders a Home Assistant Template, and optionally triggers a service.
|
||||||
//
|
//
|
||||||
// Reference:
|
// Reference:
|
||||||
// * https://developers.home-assistant.io/docs/api/rest/
|
// * https://developers.home-assistant.io/docs/api/rest/
|
||||||
@ -26,28 +26,30 @@ using Toybox.Lang;
|
|||||||
using Toybox.WatchUi;
|
using Toybox.WatchUi;
|
||||||
using Toybox.Graphics;
|
using Toybox.Graphics;
|
||||||
|
|
||||||
class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
|
class HomeAssistantTemplateMenuItem extends WatchUi.IconMenuItem {
|
||||||
private var mHomeAssistantService as HomeAssistantService;
|
private var mHomeAssistantService as HomeAssistantService;
|
||||||
private var mTemplate as Lang.String;
|
private var mTemplate as Lang.String;
|
||||||
private var mService as Lang.String or Null;
|
private var mService as Lang.String or Null;
|
||||||
private var mConfirm as Lang.Boolean;
|
private var mConfirm as Lang.Boolean;
|
||||||
|
private var mData as Lang.Dictionary or Null;
|
||||||
|
|
||||||
function initialize(
|
function initialize(
|
||||||
label as Lang.String or Lang.Symbol,
|
label as Lang.String or Lang.Symbol,
|
||||||
identifier as Lang.Object or Null,
|
|
||||||
template as Lang.String,
|
template as Lang.String,
|
||||||
service as Lang.String or Null,
|
service as Lang.String or Null,
|
||||||
confirm as Lang.Boolean,
|
confirm as Lang.Boolean,
|
||||||
|
data as Lang.Dictionary or Null,
|
||||||
|
icon as Graphics.BitmapType or WatchUi.Drawable,
|
||||||
options as {
|
options as {
|
||||||
:alignment as WatchUi.MenuItem.Alignment,
|
:alignment as WatchUi.MenuItem.Alignment
|
||||||
:icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol
|
|
||||||
} or Null,
|
} or Null,
|
||||||
haService as HomeAssistantService
|
haService as HomeAssistantService
|
||||||
) {
|
) {
|
||||||
WatchUi.MenuItem.initialize(
|
WatchUi.IconMenuItem.initialize(
|
||||||
label,
|
label,
|
||||||
null,
|
null,
|
||||||
identifier,
|
null,
|
||||||
|
icon,
|
||||||
options
|
options
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -55,6 +57,7 @@ class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
|
|||||||
mTemplate = template;
|
mTemplate = template;
|
||||||
mService = service;
|
mService = service;
|
||||||
mConfirm = confirm;
|
mConfirm = confirm;
|
||||||
|
mData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function callService() as Void {
|
function callService() as Void {
|
||||||
@ -71,7 +74,7 @@ class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
|
|||||||
|
|
||||||
function onConfirm() as Void {
|
function onConfirm() as Void {
|
||||||
if (mService != null) {
|
if (mService != null) {
|
||||||
mHomeAssistantService.call(mIdentifier as Lang.String, mService);
|
mHomeAssistantService.call(mService, mData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +148,6 @@ class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
|
|||||||
status = RezStrings.getAvailable();
|
status = RezStrings.getAvailable();
|
||||||
setSubLabel(data);
|
setSubLabel(data);
|
||||||
requestUpdate();
|
requestUpdate();
|
||||||
ErrorView.unShow();
|
|
||||||
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
||||||
getApp().updateNextMenuItem();
|
getApp().updateNextMenuItem();
|
||||||
break;
|
break;
|
||||||
|
@ -25,21 +25,18 @@ using Toybox.Application.Properties;
|
|||||||
using Toybox.Timer;
|
using Toybox.Timer;
|
||||||
|
|
||||||
class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
||||||
|
private var mData as Lang.Dictionary;
|
||||||
|
|
||||||
function initialize(
|
function initialize(
|
||||||
label as Lang.String or Lang.Symbol,
|
label as Lang.String or Lang.Symbol,
|
||||||
subLabel as Lang.String or Lang.Symbol or {
|
data as Lang.Dictionary or Null,
|
||||||
:enabled as Lang.String or Lang.Symbol or Null,
|
|
||||||
:disabled as Lang.String or Lang.Symbol or Null
|
|
||||||
} or Null,
|
|
||||||
identifier,
|
|
||||||
enabled as Lang.Boolean,
|
|
||||||
options as {
|
options as {
|
||||||
:alignment as WatchUi.MenuItem.Alignment,
|
:alignment as WatchUi.MenuItem.Alignment,
|
||||||
:icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol
|
:icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol
|
||||||
} or Null
|
} or Null
|
||||||
) {
|
) {
|
||||||
WatchUi.ToggleMenuItem.initialize(label, subLabel, identifier, enabled, options);
|
WatchUi.ToggleMenuItem.initialize(label, null, null, false, options);
|
||||||
|
mData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setUiToggle(state as Null or Lang.String) as Void {
|
private function setUiToggle(state as Null or Lang.String) as Void {
|
||||||
@ -114,9 +111,9 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
if (msg != null) {
|
if (msg != null) {
|
||||||
// Should be an HTTP 404 according to curl queries
|
// Should be an HTTP 404 according to curl queries
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 404. " + mIdentifier + " " + msg);
|
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 404. " + mData.get("entity_id") + " " + msg);
|
||||||
}
|
}
|
||||||
ErrorView.show("HTTP 404, " + mIdentifier + ". " + data.get("message"));
|
ErrorView.show("HTTP 404, " + mData.get("entity_id") + ". " + data.get("message"));
|
||||||
} else {
|
} else {
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 404, page not found. Check API URL setting.");
|
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 404, page not found. Check API URL setting.");
|
||||||
@ -127,9 +124,9 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
|
|
||||||
case 405:
|
case 405:
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 405. " + mIdentifier + " " + data.get("message"));
|
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 405. " + mData.get("entity_id") + " " + data.get("message"));
|
||||||
}
|
}
|
||||||
ErrorView.show("HTTP 405, " + mIdentifier + ". " + data.get("message"));
|
ErrorView.show("HTTP 405, " + mData.get("entity_id") + ". " + data.get("message"));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -143,7 +140,6 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
setLabel((data.get("attributes") as Lang.Dictionary).get("friendly_name") as Lang.String);
|
setLabel((data.get("attributes") as Lang.Dictionary).get("friendly_name") as Lang.String);
|
||||||
}
|
}
|
||||||
setUiToggle(state);
|
setUiToggle(state);
|
||||||
ErrorView.unShow();
|
|
||||||
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
// Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer.
|
||||||
getApp().updateNextMenuItem();
|
getApp().updateNextMenuItem();
|
||||||
break;
|
break;
|
||||||
@ -171,7 +167,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
ErrorView.show(RezStrings.getNoInternet() + ".");
|
ErrorView.show(RezStrings.getNoInternet() + ".");
|
||||||
getApp().setApiStatus(RezStrings.getUnavailable());
|
getApp().setApiStatus(RezStrings.getUnavailable());
|
||||||
} else {
|
} else {
|
||||||
var url = Settings.getApiUrl() + "/states/" + mIdentifier;
|
var url = Settings.getApiUrl() + "/states/" + mData.get("entity_id");
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantToggleMenuItem getState() URL=" + url);
|
System.println("HomeAssistantToggleMenuItem getState() URL=" + url);
|
||||||
}
|
}
|
||||||
@ -240,7 +236,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
var state;
|
var state;
|
||||||
var d = data as Lang.Array;
|
var d = data as Lang.Array;
|
||||||
for(var i = 0; i < d.size(); i++) {
|
for(var i = 0; i < d.size(); i++) {
|
||||||
if ((d[i].get("entity_id") as Lang.String).equals(mIdentifier)) {
|
if ((d[i].get("entity_id") as Lang.String).equals(mData.get("entity_id"))) {
|
||||||
state = d[i].get("state") as Lang.String;
|
state = d[i].get("state") as Lang.String;
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println((d[i].get("attributes") as Lang.Dictionary).get("friendly_name") + " State=" + state);
|
System.println((d[i].get("attributes") as Lang.Dictionary).get("friendly_name") + " State=" + state);
|
||||||
@ -278,7 +274,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
} else {
|
} else {
|
||||||
// Updated SDK and got a new error
|
// Updated SDK and got a new error
|
||||||
// ERROR: venu: Cannot find symbol ':substring' on type 'PolyType<Null or $.Toybox.Lang.Object>'.
|
// ERROR: venu: Cannot find symbol ':substring' on type 'PolyType<Null or $.Toybox.Lang.Object>'.
|
||||||
var id = mIdentifier as Lang.String;
|
var id = mData.get("entity_id") as Lang.String;
|
||||||
var url = Settings.getApiUrl() + "/services/";
|
var url = Settings.getApiUrl() + "/services/";
|
||||||
if (s) {
|
if (s) {
|
||||||
url = url + id.substring(0, id.find(".")) + "/turn_on";
|
url = url + id.substring(0, id.find(".")) + "/turn_on";
|
||||||
@ -286,14 +282,12 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
|
|||||||
url = url + id.substring(0, id.find(".")) + "/turn_off";
|
url = url + id.substring(0, id.find(".")) + "/turn_off";
|
||||||
}
|
}
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("HomeAssistantToggleMenuItem setState() URL=" + url);
|
System.println("HomeAssistantToggleMenuItem setState() URL = " + url);
|
||||||
System.println("HomeAssistantToggleMenuItem setState() mIdentifier=" + mIdentifier);
|
System.println("HomeAssistantToggleMenuItem setState() entity_id = " + id);
|
||||||
}
|
}
|
||||||
Communications.makeWebRequest(
|
Communications.makeWebRequest(
|
||||||
url,
|
url,
|
||||||
{
|
mData,
|
||||||
"entity_id" => mIdentifier
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
:method => Communications.HTTP_REQUEST_METHOD_POST,
|
:method => Communications.HTTP_REQUEST_METHOD_POST,
|
||||||
:headers => {
|
:headers => {
|
||||||
|
@ -51,11 +51,13 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
var content = items[i].get("content") as Lang.String or Null;
|
var content = items[i].get("content") as Lang.String or Null;
|
||||||
var entity = items[i].get("entity") as Lang.String or Null;
|
var entity = items[i].get("entity") as Lang.String or Null;
|
||||||
var tap_action = items[i].get("tap_action") as Lang.Dictionary or Null;
|
var tap_action = items[i].get("tap_action") as Lang.Dictionary or Null;
|
||||||
var service = items[i].get("service") as Lang.String or Null;
|
var service = items[i].get("service") as Lang.String or Null; // Deprecated schema
|
||||||
var confirm = false as Lang.Boolean;
|
var confirm = false as Lang.Boolean or Null;
|
||||||
|
var data = null as Lang.Dictionary or Null;
|
||||||
if (tap_action != null) {
|
if (tap_action != null) {
|
||||||
service = tap_action.get("service");
|
service = tap_action.get("service");
|
||||||
confirm = tap_action.get("confirm");
|
confirm = tap_action.get("confirm"); // Optional
|
||||||
|
data = tap_action.get("data"); // Optional
|
||||||
if (confirm == null) {
|
if (confirm == null) {
|
||||||
confirm = false;
|
confirm = false;
|
||||||
}
|
}
|
||||||
@ -64,9 +66,14 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
if (type.equals("toggle") && entity != null) {
|
if (type.equals("toggle") && entity != null) {
|
||||||
addItem(HomeAssistantMenuItemFactory.create().toggle(name, entity));
|
addItem(HomeAssistantMenuItemFactory.create().toggle(name, entity));
|
||||||
} else if (type.equals("template") && content != null) {
|
} else if (type.equals("template") && content != null) {
|
||||||
addItem(HomeAssistantMenuItemFactory.create().template(name, entity, content, service, confirm));
|
if (service == null) {
|
||||||
} else if (type.equals("tap") && entity != null && service != null) {
|
addItem(HomeAssistantMenuItemFactory.create().template_notap(name, content));
|
||||||
addItem(HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm));
|
} else {
|
||||||
|
addItem(HomeAssistantMenuItemFactory.create().template_tap(name, entity, content, service, confirm, data));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (type.equals("tap") && service != null) {
|
||||||
|
addItem(HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm, data));
|
||||||
} else if (type.equals("group")) {
|
} else if (type.equals("group")) {
|
||||||
addItem(HomeAssistantMenuItemFactory.create().group(items[i]));
|
addItem(HomeAssistantMenuItemFactory.create().group(items[i]));
|
||||||
}
|
}
|
||||||
@ -80,7 +87,7 @@ class HomeAssistantView extends WatchUi.Menu2 {
|
|||||||
var lmi = mItems as Lang.Array<WatchUi.MenuItem>;
|
var lmi = mItems as Lang.Array<WatchUi.MenuItem>;
|
||||||
for(var i = 0; i < mItems.size(); i++) {
|
for(var i = 0; i < mItems.size(); i++) {
|
||||||
var item = lmi[i];
|
var item = lmi[i];
|
||||||
if (item instanceof HomeAssistantViewMenuItem) {
|
if (item instanceof HomeAssistantGroupMenuItem) {
|
||||||
fullList.addAll(item.getMenuView().getItemsToUpdate());
|
fullList.addAll(item.getMenuView().getItemsToUpdate());
|
||||||
} else if (item instanceof HomeAssistantToggleMenuItem) {
|
} else if (item instanceof HomeAssistantToggleMenuItem) {
|
||||||
fullList.add(item);
|
fullList.add(item);
|
||||||
@ -143,8 +150,8 @@ class HomeAssistantViewDelegate extends WatchUi.Menu2InputDelegate {
|
|||||||
System.println(haToggleItem.getLabel() + " " + haToggleItem.getId() + " " + haToggleItem.isEnabled());
|
System.println(haToggleItem.getLabel() + " " + haToggleItem.getId() + " " + haToggleItem.isEnabled());
|
||||||
}
|
}
|
||||||
haToggleItem.setState(haToggleItem.isEnabled());
|
haToggleItem.setState(haToggleItem.isEnabled());
|
||||||
} else if (item instanceof HomeAssistantMenuItem) {
|
} else if (item instanceof HomeAssistantTapMenuItem) {
|
||||||
var haItem = item as HomeAssistantMenuItem;
|
var haItem = item as HomeAssistantTapMenuItem;
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println(haItem.getLabel() + " " + haItem.getId());
|
System.println(haItem.getLabel() + " " + haItem.getId());
|
||||||
}
|
}
|
||||||
@ -155,8 +162,8 @@ class HomeAssistantViewDelegate extends WatchUi.Menu2InputDelegate {
|
|||||||
System.println(haItem.getLabel() + " " + haItem.getId());
|
System.println(haItem.getLabel() + " " + haItem.getId());
|
||||||
}
|
}
|
||||||
haItem.callService();
|
haItem.callService();
|
||||||
} else if (item instanceof HomeAssistantViewMenuItem) {
|
} else if (item instanceof HomeAssistantGroupMenuItem) {
|
||||||
var haMenuItem = item as HomeAssistantViewMenuItem;
|
var haMenuItem = item as HomeAssistantGroupMenuItem;
|
||||||
if (Globals.scDebug) {
|
if (Globals.scDebug) {
|
||||||
System.println("IconMenu: " + haMenuItem.getLabel() + " " + haMenuItem.getId());
|
System.println("IconMenu: " + haMenuItem.getLabel() + " " + haMenuItem.getId());
|
||||||
}
|
}
|
||||||
|