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])); }