diff --git a/resources-icons-18/drawables.xml b/resources-icons-18/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-18/drawables.xml
+++ b/resources-icons-18/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-18/info_type.svg b/resources-icons-18/info_type.svg
new file mode 100644
index 0000000..50db92a
--- /dev/null
+++ b/resources-icons-18/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-21/drawables.xml b/resources-icons-21/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-21/drawables.xml
+++ b/resources-icons-21/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-21/info_type.svg b/resources-icons-21/info_type.svg
new file mode 100644
index 0000000..d9d5806
--- /dev/null
+++ b/resources-icons-21/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-24/drawables.xml b/resources-icons-24/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-24/drawables.xml
+++ b/resources-icons-24/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-24/info_type.svg b/resources-icons-24/info_type.svg
new file mode 100644
index 0000000..f8e316c
--- /dev/null
+++ b/resources-icons-24/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-26/drawables.xml b/resources-icons-26/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-26/drawables.xml
+++ b/resources-icons-26/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-26/info_type.svg b/resources-icons-26/info_type.svg
new file mode 100644
index 0000000..4e5492d
--- /dev/null
+++ b/resources-icons-26/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-28/drawables.xml b/resources-icons-28/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-28/drawables.xml
+++ b/resources-icons-28/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-28/info_type.svg b/resources-icons-28/info_type.svg
new file mode 100644
index 0000000..a2acf01
--- /dev/null
+++ b/resources-icons-28/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-30/drawables.xml b/resources-icons-30/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-30/drawables.xml
+++ b/resources-icons-30/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-30/info_type.svg b/resources-icons-30/info_type.svg
new file mode 100644
index 0000000..65fc0b8
--- /dev/null
+++ b/resources-icons-30/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-32/drawables.xml b/resources-icons-32/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-32/drawables.xml
+++ b/resources-icons-32/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-32/info_type.svg b/resources-icons-32/info_type.svg
new file mode 100644
index 0000000..427d108
--- /dev/null
+++ b/resources-icons-32/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-38/drawables.xml b/resources-icons-38/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-38/drawables.xml
+++ b/resources-icons-38/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-38/info_type.svg b/resources-icons-38/info_type.svg
new file mode 100644
index 0000000..9aa14b3
--- /dev/null
+++ b/resources-icons-38/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-42/drawables.xml b/resources-icons-42/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-42/drawables.xml
+++ b/resources-icons-42/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-42/info_type.svg b/resources-icons-42/info_type.svg
new file mode 100644
index 0000000..087960e
--- /dev/null
+++ b/resources-icons-42/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-46/drawables.xml b/resources-icons-46/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-46/drawables.xml
+++ b/resources-icons-46/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-46/info_type.svg b/resources-icons-46/info_type.svg
new file mode 100644
index 0000000..3c9329a
--- /dev/null
+++ b/resources-icons-46/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-48/drawables.xml b/resources-icons-48/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-48/drawables.xml
+++ b/resources-icons-48/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-48/info_type.svg b/resources-icons-48/info_type.svg
new file mode 100644
index 0000000..9825159
--- /dev/null
+++ b/resources-icons-48/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources-icons-53/drawables.xml b/resources-icons-53/drawables.xml
index d560ef6..33c0707 100644
--- a/resources-icons-53/drawables.xml
+++ b/resources-icons-53/drawables.xml
@@ -19,4 +19,5 @@
+
diff --git a/resources-icons-53/info_type.svg b/resources-icons-53/info_type.svg
new file mode 100644
index 0000000..d8ec47d
--- /dev/null
+++ b/resources-icons-53/info_type.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/source/HomeAssistantMenuItem.mc b/source/HomeAssistantMenuItem.mc
index ce0330f..5bcf623 100644
--- a/source/HomeAssistantMenuItem.mc
+++ b/source/HomeAssistantMenuItem.mc
@@ -26,6 +26,7 @@ class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
private var mHomeAssistantService as HomeAssistantService;
private var mService as Lang.String;
private var mConfirm as Lang.Boolean;
+ private var mData as Lang.Dictionary or Null;
function initialize(
label as Lang.String or Lang.Symbol,
@@ -33,6 +34,7 @@ class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
identifier as Lang.Object or Null,
service as Lang.String or Null,
confirm as Lang.Boolean,
+ data as Lang.Dictionary or Null,
icon as Graphics.BitmapType or WatchUi.Drawable,
options as {
:alignment as WatchUi.MenuItem.Alignment
@@ -48,9 +50,14 @@ class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
);
mHomeAssistantService = haService;
- mIdentifier = identifier;
mService = service;
mConfirm = confirm;
+ mData = data;
+ if (mData == null) {
+ mData = {"entity_id" => identifier};
+ } else {
+ mData.put("entity_id", identifier);
+ }
}
function callService() as Void {
@@ -66,7 +73,7 @@ class HomeAssistantMenuItem extends WatchUi.IconMenuItem {
}
function onConfirm() as Void {
- mHomeAssistantService.call(mIdentifier as Lang.String, mService);
+ mHomeAssistantService.call(mIdentifier as Lang.String, mService, mData);
}
}
diff --git a/source/HomeAssistantMenuItemFactory.mc b/source/HomeAssistantMenuItemFactory.mc
index 2ff7fb0..76437a1 100644
--- a/source/HomeAssistantMenuItemFactory.mc
+++ b/source/HomeAssistantMenuItemFactory.mc
@@ -26,6 +26,7 @@ class HomeAssistantMenuItemFactory {
private var mMenuItemOptions as Lang.Dictionary;
private var mTapTypeIcon as WatchUi.Bitmap;
private var mGroupTypeIcon as WatchUi.Bitmap;
+ private var mInfoTypeIcon as WatchUi.Bitmap;
private var mHomeAssistantService as HomeAssistantService;
private static var instance;
@@ -47,6 +48,12 @@ class HomeAssistantMenuItemFactory {
: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();
}
@@ -67,12 +74,13 @@ class HomeAssistantMenuItemFactory {
);
}
- function template(
+ function template_tap(
label as Lang.String or Lang.Symbol,
identifier as Lang.Object or Null,
template 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 {
return new HomeAssistantTemplateMenuItem(
label,
@@ -80,6 +88,29 @@ class HomeAssistantMenuItemFactory {
template,
service,
confirm,
+ data,
+ mTapTypeIcon,
+ mMenuItemOptions,
+ mHomeAssistantService
+ );
+ }
+
+ function template_notap(
+ label as Lang.String or Lang.Symbol,
+ identifier as Lang.Object or Null,
+ template as Lang.String or Null,
+ service as Lang.String or Null,
+ confirm as Lang.Boolean,
+ data as Lang.Dictionary or Null
+ ) as WatchUi.MenuItem {
+ return new HomeAssistantTemplateMenuItem(
+ label,
+ identifier,
+ template,
+ service,
+ confirm,
+ data,
+ mInfoTypeIcon,
mMenuItemOptions,
mHomeAssistantService
);
@@ -89,7 +120,8 @@ class HomeAssistantMenuItemFactory {
label as Lang.String or Lang.Symbol,
identifier as Lang.Object 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 {
return new HomeAssistantMenuItem(
label,
@@ -97,6 +129,7 @@ class HomeAssistantMenuItemFactory {
identifier,
service,
confirm,
+ data,
mTapTypeIcon,
mMenuItemOptions,
mHomeAssistantService
diff --git a/source/HomeAssistantService.mc b/source/HomeAssistantService.mc
index 77b4996..19af6d9 100644
--- a/source/HomeAssistantService.mc
+++ b/source/HomeAssistantService.mc
@@ -27,7 +27,7 @@ class HomeAssistantService {
private var mHasToast as Lang.Boolean = false;
private var mHasVibrate as Lang.Boolean = false;
- function initialise() {
+ function initialize() {
if (WatchUi has :showToast) {
mHasToast = true;
}
@@ -38,7 +38,11 @@ class HomeAssistantService {
// 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(
+ responseCode as Lang.Number,
+ data as Null or Lang.Dictionary or Lang.String,
+ context as Lang.Object
+ ) as Void {
var identifier = context as Lang.String;
if (Globals.scDebug) {
System.println("HomeAssistantService onReturnCall() Response Code: " + responseCode);
@@ -120,7 +124,11 @@ class HomeAssistantService {
}
}
- function call(identifier as Lang.String, service as Lang.String) as Void {
+ function call(
+ identifier as Lang.String,
+ service as Lang.String,
+ data as Lang.Dictionary or Null
+ ) as Void {
if (! System.getDeviceSettings().phoneConnected) {
if (Globals.scDebug) {
System.println("HomeAssistantService call(): No Phone connection, skipping API call.");
@@ -140,9 +148,7 @@ class HomeAssistantService {
}
Communications.makeWebRequest(
url,
- {
- "entity_id" => identifier
- },
+ data, // Includes {"entity_id": identifier}
{
:method => Communications.HTTP_REQUEST_METHOD_POST,
:headers => {
diff --git a/source/HomeAssistantTemplateMenuItem.mc b/source/HomeAssistantTemplateMenuItem.mc
index c8ba460..f2a8555 100644
--- a/source/HomeAssistantTemplateMenuItem.mc
+++ b/source/HomeAssistantTemplateMenuItem.mc
@@ -26,11 +26,12 @@ using Toybox.Lang;
using Toybox.WatchUi;
using Toybox.Graphics;
-class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
+class HomeAssistantTemplateMenuItem extends WatchUi.IconMenuItem {
private var mHomeAssistantService as HomeAssistantService;
private var mTemplate as Lang.String;
private var mService as Lang.String or Null;
private var mConfirm as Lang.Boolean;
+ private var mData as Lang.Dictionary or Null;
function initialize(
label as Lang.String or Lang.Symbol,
@@ -38,16 +39,18 @@ class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
template as Lang.String,
service as Lang.String or Null,
confirm as Lang.Boolean,
+ data as Lang.Dictionary or Null,
+ icon as Graphics.BitmapType or WatchUi.Drawable,
options as {
:alignment as WatchUi.MenuItem.Alignment,
- :icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol
} or Null,
haService as HomeAssistantService
) {
- WatchUi.MenuItem.initialize(
+ WatchUi.IconMenuItem.initialize(
label,
null,
identifier,
+ icon,
options
);
@@ -55,6 +58,12 @@ class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
mTemplate = template;
mService = service;
mConfirm = confirm;
+ mData = data;
+ if (mData == null) {
+ mData = {"entity_id" => identifier};
+ } else {
+ mData.put("entity_id", identifier);
+ }
}
function callService() as Void {
@@ -71,7 +80,7 @@ class HomeAssistantTemplateMenuItem extends WatchUi.MenuItem {
function onConfirm() as Void {
if (mService != null) {
- mHomeAssistantService.call(mIdentifier as Lang.String, mService);
+ mHomeAssistantService.call(mIdentifier as Lang.String, mService, mData);
}
}
diff --git a/source/HomeAssistantView.mc b/source/HomeAssistantView.mc
index 1a65c98..df70ccd 100644
--- a/source/HomeAssistantView.mc
+++ b/source/HomeAssistantView.mc
@@ -51,11 +51,13 @@ class HomeAssistantView extends WatchUi.Menu2 {
var content = items[i].get("content") 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 service = items[i].get("service") as Lang.String or Null;
- var confirm = false as Lang.Boolean;
+ var service = items[i].get("service") as Lang.String or Null; // Deprecated schema
+ var confirm = false as Lang.Boolean or Null;
+ var data = null as Lang.Dictionary or Null;
if (tap_action != null) {
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) {
confirm = false;
}
@@ -64,9 +66,14 @@ class HomeAssistantView extends WatchUi.Menu2 {
if (type.equals("toggle") && entity != null) {
addItem(HomeAssistantMenuItemFactory.create().toggle(name, entity));
} else if (type.equals("template") && content != null) {
- addItem(HomeAssistantMenuItemFactory.create().template(name, entity, content, service, confirm));
+ if (tap_action == null) {
+ addItem(HomeAssistantMenuItemFactory.create().template_notap(name, entity, content, service, confirm, data));
+ } else {
+ addItem(HomeAssistantMenuItemFactory.create().template_tap(name, entity, content, service, confirm, data));
+ }
+
} else if (type.equals("tap") && entity != null && service != null) {
- addItem(HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm));
+ addItem(HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm, data));
} else if (type.equals("group")) {
addItem(HomeAssistantMenuItemFactory.create().group(items[i]));
}