From 7fd90fe85d2fc300248618cc927ad42648a6873c Mon Sep 17 00:00:00 2001 From: JosephAbbey Date: Tue, 21 Nov 2023 18:24:57 +0000 Subject: [PATCH 01/11] Apply automatic changes --- resources-dan/strings/strings.xml | 2 +- resources-gre/strings/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources-dan/strings/strings.xml b/resources-dan/strings/strings.xml index 1a3826e..d9a510a 100644 --- a/resources-dan/strings/strings.xml +++ b/resources-dan/strings/strings.xml @@ -27,7 +27,7 @@ Ingen telefonforbindelse Ingen internetforbindelse Intet svar, tjek internetforbindelse - Menuhentningsfejl + Fejl ved menuhentning Ingen API-nøgle i applikationsindstillingerne Ingen API-URL i applikationsindstillingerne Ingen konfigurations-URL i applikationsindstillingerne diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml index baa25a7..cc531f3 100644 --- a/resources-gre/strings/strings.xml +++ b/resources-gre/strings/strings.xml @@ -29,7 +29,7 @@ Καμία απάντηση, ελέγξτε τη σύνδεση στο Διαδίκτυο Σφάλμα ανάκτησης μενού Δεν υπάρχει κλειδί API στις ρυθμίσεις της εφαρμογής - Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής + Δεν υπάρχει διεύθυνση URL API στις ρυθμίσεις της εφαρμογής Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής Κλήσεις API πολύ γρήγορες. Παρακαλώ επιβραδύνετε τα αιτήματά σας. Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL API στις ρυθμίσεις. From ae403e724c6397e8f98e68ed761fe83096650c85 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Tue, 21 Nov 2023 20:31:32 +0000 Subject: [PATCH 02/11] Update README.md Added description of v1.4 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 41c2c43..3796ced 100644 --- a/README.md +++ b/README.md @@ -170,3 +170,4 @@ When you change the JSON file defining your dashboard, you must exit the applica | 1.1 | Updated for 54 more devices, 80 in total. Scene support. Added vibrate acknowledgement for tap-based menu items. Falls back to a custom visual confirmation in the absence of 'toast' and vibrate support. Bug fix for large menus needing status updates. | | 1.2 | Do not crash on zero items to update. Report unreachable URLs. Verify API URL does not have a trailing slash '/'. Increased HTTP response diagnosis. Reduced minimum API Level required from 3.3.0 to 3.1.0 to allow more device "part numbers" to be satisfied. | | 1.3 | Tap for scripts was working in emulation but not on some phones. Decision is to make the 'service' field in the JSON compulsory for 'tap' menu items. This is a breaking change, but for many might be a fix for something not working correctly. Improve language support, we can now accept language corrections and prevent the automated translation of strings from clobbering manually refined entries. Thank you to two new contributors. | +| 1.4 | Lean User Interface which is now the default. If you prefer the old style you can still select it in the settings. The provision of a 'service' tag is now not just heavily suggested by the JSON schema, it is enforced in code. With apologies to anyone suffering a breakage as a result. | \ No newline at end of file From e41adff62dca6e5cdc5a97811f5ed973431f5bfa Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Tue, 21 Nov 2023 20:35:27 +0000 Subject: [PATCH 03/11] Update README.md Added credit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3796ced..78c2f9b 100644 --- a/README.md +++ b/README.md @@ -170,4 +170,4 @@ When you change the JSON file defining your dashboard, you must exit the applica | 1.1 | Updated for 54 more devices, 80 in total. Scene support. Added vibrate acknowledgement for tap-based menu items. Falls back to a custom visual confirmation in the absence of 'toast' and vibrate support. Bug fix for large menus needing status updates. | | 1.2 | Do not crash on zero items to update. Report unreachable URLs. Verify API URL does not have a trailing slash '/'. Increased HTTP response diagnosis. Reduced minimum API Level required from 3.3.0 to 3.1.0 to allow more device "part numbers" to be satisfied. | | 1.3 | Tap for scripts was working in emulation but not on some phones. Decision is to make the 'service' field in the JSON compulsory for 'tap' menu items. This is a breaking change, but for many might be a fix for something not working correctly. Improve language support, we can now accept language corrections and prevent the automated translation of strings from clobbering manually refined entries. Thank you to two new contributors. | -| 1.4 | Lean User Interface which is now the default. If you prefer the old style you can still select it in the settings. The provision of a 'service' tag is now not just heavily suggested by the JSON schema, it is enforced in code. With apologies to anyone suffering a breakage as a result. | \ No newline at end of file +| 1.4 | New lean user Interface with thanks to [SomeoneOnEarth](https://github.com/Someone0nEarth) for their contribution which is now the default. If you prefer the old style you can still select it in the settings. The provision of a 'service' tag is now not just heavily suggested by the JSON schema, it is enforced in code. With appologies to anyone suffering a breakage as a result. | From 3fe48be7563abc6054f8f4669177aa27e7409a68 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Thu, 30 Nov 2023 18:56:42 +0000 Subject: [PATCH 04/11] Update README.md Adding some hints to avoid setup errors. --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 78c2f9b..3bb0874 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,19 @@ Possible future extensions might include specifying the alternative texts to use The [schema](https://raw.githubusercontent.com/house-of-abbey/GarminHomeAssistant/main/config.schema.json) is checked by using a URL directly back to this GitHub source repository, so you do not need to install that file. You can just copy & paste your entity names from the YAML configuration files used to configure Home Assistant. With a submenu, there's a difference between "title" and "name". The "name" goes on the menu item, and the "title" at the head of the submenu. If your dashboard definition fails to meet the schema, the application will simply drop items with the wrong field names without warning. +## Editing the JSON file + +You have options. The first is what we use. +1. **Best!** Use the [Studio Code Server](https://community.home-assistant.io/t/home-assistant-community-add-on-visual-studio-code/107863) addon for Home Assistant. You can then edit your JSON file in place. +2. Locally installed VSCode, or if not installed +3. try the on-line version at https://vscode.dev/ + +Paste in your JSON (and change the file type to JSON if not saving), it will then verify your file format and schema for you, highlighting any errors for you to fix. + +A failure to get the file format right tends to mean that the response to the application errors with `INVALID_HTTP_BODY_IN_NETWORK_RESPONSE` (code of -400). This means the response did not contain JSON, it was probably an error message in plain text that could not be parsed by the Connect IQ API call. See [Toybox.Communications](https://developer.garmin.com/connect-iq/api-docs/Toybox/Communications.html) for the list of error code you might be present with on your device. + +Make sure you can browse to the URL of your JSON file in a standard web browser to make sure it is accessible. + ## API Key Creation Having created your JSON definition for your dashboard, you need to create an API key for your personal account on Home Assistant. @@ -130,6 +143,8 @@ Having created your JSON definition for your dashboard, you need to create an AP Having created that token, before you dismiss the dialogue box with the value you will never see again, copy it somewhere safe. You need to paste this into the Garmin Application's settings. +**Please, please, please!** Copy and paste this API key, do not retype as it will be wrong. + ## Settings From 0ab9cb800a93fcd5443f44dee8eeba050b8a2974 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 1 Dec 2023 09:15:59 +0000 Subject: [PATCH 05/11] Initial solution For optional confirmation dialogue box. --- manifest.xml | 2 +- resources-ara/strings/strings.xml | 1 + resources-bul/strings/strings.xml | 1 + resources-ces/strings/strings.xml | 1 + resources-dan/strings/strings.xml | 1 + resources-deu/strings/strings.xml | 5 +-- resources-dut/strings/strings.xml | 1 + resources-est/strings/strings.xml | 5 +-- resources-fin/strings/strings.xml | 3 +- resources-fre/strings/strings.xml | 5 +-- resources-gre/strings/strings.xml | 1 + resources-heb/strings/strings.xml | 1 + resources-hrv/strings/strings.xml | 1 + resources-hun/strings/strings.xml | 1 + resources-ind/strings/strings.xml | 1 + resources-ita/strings/strings.xml | 1 + resources-jpn/strings/strings.xml | 1 + resources-kor/strings/strings.xml | 3 +- resources-lav/strings/strings.xml | 1 + resources-lit/strings/strings.xml | 1 + resources-nob/strings/strings.xml | 1 + resources-pol/strings/strings.xml | 1 + resources-por/strings/strings.xml | 1 + resources-ron/strings/strings.xml | 5 +-- resources-slo/strings/strings.xml | 1 + resources-slv/strings/strings.xml | 1 + resources-spa/strings/strings.xml | 1 + resources-swe/strings/strings.xml | 1 + resources-tha/strings/strings.xml | 1 + resources-tur/strings/strings.xml | 3 +- resources-ukr/strings/strings.xml | 3 +- resources-vie/strings/strings.xml | 1 + resources-zhs/strings/strings.xml | 1 + resources-zht/strings/strings.xml | 1 + resources-zsm/strings/strings.xml | 1 + resources/strings/strings.xml | 1 + source/HomeAssistantConfirmation.mc | 48 ++++++++++++++++++++++++++ source/HomeAssistantIconMenuItem.mc | 16 ++++++++- source/HomeAssistantMenuItem.mc | 16 ++++++++- source/HomeAssistantMenuItemFactory.mc | 9 ++++- source/HomeAssistantView.mc | 19 +++++++--- 41 files changed, 148 insertions(+), 21 deletions(-) create mode 100644 source/HomeAssistantConfirmation.mc diff --git a/manifest.xml b/manifest.xml index 3f2a12b..6c011ed 100644 --- a/manifest.xml +++ b/manifest.xml @@ -21,7 +21,7 @@ Use "Monkey C: Edit Application" from the Visual Studio Code command palette to update the application attributes. --> - + @@ -24,6 +24,7 @@ Väljas Puudutage Menüü + Muidugi? Telefoniühendus puudub Interneti-ühendus puudub Ei reageeri, kontrollige Interneti-ühendust @@ -31,7 +32,7 @@ Rakenduse seadetes pole API-võtit Rakenduse seadetes pole API URL-i Rakenduse seadetes pole konfiguratsiooni URL-i - API-kõned liiga kiired. Palun aeglustage oma taotlusi. + API-kutsed liiga kiired. Palun aeglustage oma taotlusi. URL-i ei leitud. Võimalik API URL-i viga seadetes. URL-i ei leitud. Võimalik konfiguratsiooni URL-i viga seadetes. HTTP päring tagastas veakoodi = diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml index fa32bf2..e754e2c 100644 --- a/resources-fin/strings/strings.xml +++ b/resources-fin/strings/strings.xml @@ -24,11 +24,12 @@ Vinossa Napauta Valikko + Varma? Ei puhelinyhteyttä Ei Internet-yhteyttä Ei vastausta, tarkista Internet-yhteys Valikkohakuvirhe - Sovellusasetuksissa ei ole API-avainta + Sovelluksen asetuksissa ei ole API-avainta Sovellusasetuksissa ei ole API URL-osoitetta Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta API-kutsut liian nopeita. Hidasta pyyntöjäsi. diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml index 1efc9ea..b143787 100644 --- a/resources-fre/strings/strings.xml +++ b/resources-fre/strings/strings.xml @@ -20,10 +20,11 @@ HomeAssistant - Activé + Activé Désactivé Clic Menu + Bien sûr? Pas de connexion téléphonique Pas de connexion Internet Pas de réponse, vérifiez la connexion Internet @@ -31,7 +32,7 @@ Pas de clé API dans les paramètres de l'application Aucune URL API dans les paramètres de l'application Aucune URL de configuration dans les paramètres de l'application - Appels API trop rapide. Veuillez signaler cette erreur avec les détails de l'appareil. + Appels API trop rapide. Veuillez signaler cette erreur avec les détails de l'appareil. URL introuvable. Erreur potentielle d'URL d'API dans les paramètres. URL introuvable. Erreur potentielle d'URL de configuration dans les paramètres. La requête HTTP a renvoyé un code d'erreur = diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml index cc531f3..5660b65 100644 --- a/resources-gre/strings/strings.xml +++ b/resources-gre/strings/strings.xml @@ -24,6 +24,7 @@ Μακριά από Παρακέντηση Μενού + Σίγουρος? Δεν υπάρχει σύνδεση τηλεφώνου Δεν υπάρχει σύνδεση στο διαδίκτυο Καμία απάντηση, ελέγξτε τη σύνδεση στο Διαδίκτυο diff --git a/resources-heb/strings/strings.xml b/resources-heb/strings/strings.xml index f17e60d..ff5d53c 100644 --- a/resources-heb/strings/strings.xml +++ b/resources-heb/strings/strings.xml @@ -24,6 +24,7 @@ כבוי בֶּרֶז תַפרִיט + בטוח? אין חיבור לטלפון אין חיבור אינטרנט אין תגובה, בדוק חיבור לאינטרנט diff --git a/resources-hrv/strings/strings.xml b/resources-hrv/strings/strings.xml index f483f23..f146d63 100644 --- a/resources-hrv/strings/strings.xml +++ b/resources-hrv/strings/strings.xml @@ -24,6 +24,7 @@ Isključeno Dodirnite Jelovnik + Naravno? Nema telefonske veze Nema internetske veze Nema odgovora, provjerite internetsku vezu diff --git a/resources-hun/strings/strings.xml b/resources-hun/strings/strings.xml index 2a9b120..82d7395 100644 --- a/resources-hun/strings/strings.xml +++ b/resources-hun/strings/strings.xml @@ -24,6 +24,7 @@ Ki Koppintson a Menü + Biztos? Nincs telefonkapcsolat Nincs internetkapcsolat Nincs válasz, ellenőrizze az internetkapcsolatot diff --git a/resources-ind/strings/strings.xml b/resources-ind/strings/strings.xml index f2f617a..a4ab5c5 100644 --- a/resources-ind/strings/strings.xml +++ b/resources-ind/strings/strings.xml @@ -24,6 +24,7 @@ Mati Mengetuk Menu + Tentu? Tidak ada koneksi Telepon Tidak ada koneksi internet Tidak Ada Respon, periksa koneksi Internet diff --git a/resources-ita/strings/strings.xml b/resources-ita/strings/strings.xml index f0fc0ea..57fd138 100644 --- a/resources-ita/strings/strings.xml +++ b/resources-ita/strings/strings.xml @@ -24,6 +24,7 @@ Spento Rubinetto Menù + Sicuro? Nessuna connessione telefonica Nessuna connessione internet Nessuna risposta, controlla la connessione Internet diff --git a/resources-jpn/strings/strings.xml b/resources-jpn/strings/strings.xml index 5cb6461..cfbbcae 100644 --- a/resources-jpn/strings/strings.xml +++ b/resources-jpn/strings/strings.xml @@ -24,6 +24,7 @@ オフ タップ メニュー + もちろん? 電話が接続されていません インターネット接続なし 応答がありません。インターネット接続を確認してください diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml index b65012e..25025e7 100644 --- a/resources-kor/strings/strings.xml +++ b/resources-kor/strings/strings.xml @@ -24,6 +24,7 @@ 끄다 수도꼭지 메뉴 + 확신하는? 전화 연결 없음 인터넷에 연결되지 않음 응답이 없습니다. 인터넷 연결을 확인하세요. @@ -35,5 +36,5 @@ URL을 찾을 수 없습니다. 설정에 잠재적인 API URL 오류가 있습니다. URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다. HTTP 요청이 오류 코드를 반환했습니다 = - API URL에는 후행 슬래시 '/'가 없어야 합니다. + API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다. \ No newline at end of file diff --git a/resources-lav/strings/strings.xml b/resources-lav/strings/strings.xml index 727c7f7..c4310f5 100644 --- a/resources-lav/strings/strings.xml +++ b/resources-lav/strings/strings.xml @@ -24,6 +24,7 @@ Izslēgts Krāns Izvēlne + Protams? Nav tālruņa savienojuma Nav interneta savienojuma Nav atbildes, pārbaudiet interneta savienojumu diff --git a/resources-lit/strings/strings.xml b/resources-lit/strings/strings.xml index 8627cf6..0a226a7 100644 --- a/resources-lit/strings/strings.xml +++ b/resources-lit/strings/strings.xml @@ -24,6 +24,7 @@ Išjungta Bakstelėkite Meniu + Žinoma? Nėra telefono ryšio Nėra interneto ryšio Neatsako, patikrinkite interneto ryšį diff --git a/resources-nob/strings/strings.xml b/resources-nob/strings/strings.xml index 3974ee7..f05d71c 100644 --- a/resources-nob/strings/strings.xml +++ b/resources-nob/strings/strings.xml @@ -24,6 +24,7 @@ Av Trykk på Meny + Sikker? Ingen telefonforbindelse Ingen Internett-tilkobling Ingen svar, sjekk Internett-tilkoblingen diff --git a/resources-pol/strings/strings.xml b/resources-pol/strings/strings.xml index a1b68c0..68e9eaf 100644 --- a/resources-pol/strings/strings.xml +++ b/resources-pol/strings/strings.xml @@ -24,6 +24,7 @@ Wyłączony Uzyskiwać Menu + Jasne? Brak połączenia telefonicznego Brak połączenia z internetem Brak odpowiedzi, sprawdź połączenie internetowe diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml index e1b248d..6e836c7 100644 --- a/resources-por/strings/strings.xml +++ b/resources-por/strings/strings.xml @@ -24,6 +24,7 @@ Desligado Tocar Cardápio + Claro? Sem conexão telefônica Sem conexão com a Internet Sem resposta, verifique a conexão com a Internet diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml index 31ebd98..5928813 100644 --- a/resources-ron/strings/strings.xml +++ b/resources-ron/strings/strings.xml @@ -21,9 +21,10 @@ HomeAssistant Pe - Oprit + Off Atingeți Meniul + Sigur? Fără conexiune telefonică Fără conexiune internet Niciun răspuns, verificați conexiunea la internet @@ -31,7 +32,7 @@ Nicio cheie API în setările aplicației Nicio adresă URL API în setările aplicației Nicio adresă URL de configurare în setările aplicației - Apeluri API prea rapide. Vă rugăm să vă încetiniți solicitările. + Apeluri API prea rapide. Vă rugăm să încetiniți cererile dvs. Adresa URL nu a fost găsită. Potențială eroare URL API în setări. Adresa URL nu a fost găsită. Potențială eroare URL de configurare în setări. Solicitarea HTTP a returnat codul de eroare = diff --git a/resources-slo/strings/strings.xml b/resources-slo/strings/strings.xml index 67c02d1..036c04b 100644 --- a/resources-slo/strings/strings.xml +++ b/resources-slo/strings/strings.xml @@ -24,6 +24,7 @@ Vypnuté Klepnite Ponuka + Samozrejme? Žiadne telefónne spojenie Žiadne internetové pripojenie Žiadna odpoveď, skontrolujte internetové pripojenie diff --git a/resources-slv/strings/strings.xml b/resources-slv/strings/strings.xml index 57a321c..55ae72d 100644 --- a/resources-slv/strings/strings.xml +++ b/resources-slv/strings/strings.xml @@ -24,6 +24,7 @@ Izključeno Tapnite meni + Seveda? Ni telefonske povezave Ni internetne povezave Ni odgovora, preverite internetno povezavo diff --git a/resources-spa/strings/strings.xml b/resources-spa/strings/strings.xml index 95fe1f0..5d5397a 100644 --- a/resources-spa/strings/strings.xml +++ b/resources-spa/strings/strings.xml @@ -24,6 +24,7 @@ Apagado Grifo Menú + ¿Seguro? Sin conexión telefónica Sin conexión a Internet No hay respuesta, verifique la conexión a Internet diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml index e0e131a..8daf71f 100644 --- a/resources-swe/strings/strings.xml +++ b/resources-swe/strings/strings.xml @@ -24,6 +24,7 @@ Av Knacka Meny + Säker? Ingen telefonanslutning Ingen internetanslutning Inget svar, kontrollera internetanslutningen diff --git a/resources-tha/strings/strings.xml b/resources-tha/strings/strings.xml index 9b12cc7..c1e8db1 100644 --- a/resources-tha/strings/strings.xml +++ b/resources-tha/strings/strings.xml @@ -24,6 +24,7 @@ ปิด แตะ เมนู + แน่นอน? ไม่มีการเชื่อมต่อโทรศัพท์ ไม่มีการเชื่อมต่ออินเทอร์เน็ต ไม่มีการตอบสนอง ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml index 690aeb2..57f8dc2 100644 --- a/resources-tur/strings/strings.xml +++ b/resources-tur/strings/strings.xml @@ -24,6 +24,7 @@ Kapalı Musluk Menü + Elbette? Telefon bağlantısı yok İnternet bağlantısı yok Yanıt Yok, İnternet bağlantısını kontrol edin @@ -35,5 +36,5 @@ URL bulunamadı. Ayarlarda olası API URL hatası. URL bulunamadı. Ayarlarda Olası Yapılandırma URL'si hatası. HTTP isteği hata kodunu döndürdü = - API URL'sinin sonunda eğik çizgi '/' olmamalıdır + API URL'sinin sonunda '/' eğik çizgi olmamalıdır \ No newline at end of file diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml index 4916e32..1f410f7 100644 --- a/resources-ukr/strings/strings.xml +++ b/resources-ukr/strings/strings.xml @@ -15,7 +15,7 @@ @@ -24,6 +24,7 @@ Вимкнено Торкніться Меню + Зрозуміло? Немає телефонного зв'язку Немає підключення до Інтернету Немає відповіді, перевірте підключення до Інтернету diff --git a/resources-vie/strings/strings.xml b/resources-vie/strings/strings.xml index 782fee7..d6769c6 100644 --- a/resources-vie/strings/strings.xml +++ b/resources-vie/strings/strings.xml @@ -24,6 +24,7 @@ Tắt Vỗ nhẹ Thực đơn + Chắc chắn? Không có kết nối điện thoại Không có kết nối Internet Không có phản hồi, kiểm tra kết nối Internet diff --git a/resources-zhs/strings/strings.xml b/resources-zhs/strings/strings.xml index 9d603cf..ae2d75d 100644 --- a/resources-zhs/strings/strings.xml +++ b/resources-zhs/strings/strings.xml @@ -24,6 +24,7 @@ 离开 轻敲 菜单 + 当然? 没有电话连接 没有网络连接 无响应,请检查互联网连接 diff --git a/resources-zht/strings/strings.xml b/resources-zht/strings/strings.xml index 2aa3c34..3950bab 100644 --- a/resources-zht/strings/strings.xml +++ b/resources-zht/strings/strings.xml @@ -24,6 +24,7 @@ 離開 輕敲 選單 + 當然? 沒有電話連接 沒有網路連線 無響應,請檢查互聯網連接 diff --git a/resources-zsm/strings/strings.xml b/resources-zsm/strings/strings.xml index c805903..c0c505c 100644 --- a/resources-zsm/strings/strings.xml +++ b/resources-zsm/strings/strings.xml @@ -24,6 +24,7 @@ Mati Ketik Menu + pasti? Tiada sambungan Telefon Tiada sambungan internet Tiada Respons, semak sambungan Internet diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml index 057cac9..ea590e7 100644 --- a/resources/strings/strings.xml +++ b/resources/strings/strings.xml @@ -18,6 +18,7 @@ Off Tap Menu + Sure? No Phone connection No Internet connection No Response, check Internet connection diff --git a/source/HomeAssistantConfirmation.mc b/source/HomeAssistantConfirmation.mc new file mode 100644 index 0000000..243a685 --- /dev/null +++ b/source/HomeAssistantConfirmation.mc @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------------------- +// +// Distributed under MIT Licence +// See https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/LICENSE. +// +//----------------------------------------------------------------------------------- +// +// GarminHomeAssistant is a Garmin IQ application written in Monkey C and routinely +// tested on a Venu 2 device. The source code is provided at: +// https://github.com/house-of-abbey/GarminHomeAssistant. +// +// P A Abbey & J D Abbey & SomeoneOnEarth, 19 November 2023 +// +// +// Description: +// +// Calling a Home Assistant confirmation dialogue view. +// +//----------------------------------------------------------------------------------- + +using Toybox.Lang; +// Required for callback method definition +typedef Method as Toybox.Lang.Method; +using Toybox.WatchUi; + +class HomeAssistantConfirmation extends WatchUi.Confirmation { + + function initialize() { + WatchUi.Confirmation.initialize(WatchUi.loadResource($.Rez.Strings.Confirm)); + } + +} + +class HomeAssistantConfirmationDelegate extends WatchUi.ConfirmationDelegate { + private var confirmMethod; + + function initialize(callback as Method() as Void) { + WatchUi.ConfirmationDelegate.initialize(); + confirmMethod = callback; + } + + function onResponse(response) as Lang.Boolean { + if (response == WatchUi.CONFIRM_YES) { + confirmMethod.invoke(); + } + return true; + } +} diff --git a/source/HomeAssistantIconMenuItem.mc b/source/HomeAssistantIconMenuItem.mc index f932807..a42055d 100644 --- a/source/HomeAssistantIconMenuItem.mc +++ b/source/HomeAssistantIconMenuItem.mc @@ -21,17 +21,18 @@ using Toybox.Lang; using Toybox.WatchUi; using Toybox.Graphics; -using Toybox.Application.Properties; class HomeAssistantIconMenuItem extends WatchUi.IconMenuItem { private var mHomeAssistantService as HomeAssistantService; private var mService as Lang.String; + private var mConfirm as Lang.Boolean; function initialize( 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, + confirm as Lang.Boolean, icon as Graphics.BitmapType or WatchUi.Drawable, options as { :alignment as WatchUi.MenuItem.Alignment @@ -49,9 +50,22 @@ class HomeAssistantIconMenuItem extends WatchUi.IconMenuItem { mHomeAssistantService = haService; mIdentifier = identifier; mService = service; + mConfirm = confirm; } function callService() as Void { + if (mConfirm) { + WatchUi.pushView( + new HomeAssistantConfirmation(), + new HomeAssistantConfirmationDelegate(method(:onConfirm)), + WatchUi.SLIDE_IMMEDIATE + ); + } else { + onConfirm(); + } + } + + function onConfirm() as Void { mHomeAssistantService.call(mIdentifier as Lang.String, mService); } diff --git a/source/HomeAssistantMenuItem.mc b/source/HomeAssistantMenuItem.mc index a2f914f..8b4166e 100644 --- a/source/HomeAssistantMenuItem.mc +++ b/source/HomeAssistantMenuItem.mc @@ -21,17 +21,18 @@ using Toybox.Lang; using Toybox.WatchUi; using Toybox.Graphics; -using Toybox.Application.Properties; class HomeAssistantMenuItem extends WatchUi.MenuItem { private var mHomeAssistantService as HomeAssistantService; private var mService as Lang.String; + private var mConfirm as Lang.Boolean; function initialize( 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, + confirm as Lang.Boolean, options as { :alignment as WatchUi.MenuItem.Alignment, :icon as Graphics.BitmapType or WatchUi.Drawable or Lang.Symbol @@ -47,9 +48,22 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem { mHomeAssistantService = haService; mService = service; + mConfirm = confirm; } function callService() as Void { + if (mConfirm) { + WatchUi.pushView( + new HomeAssistantConfirmation(), + new HomeAssistantConfirmationDelegate(method(:onConfirm)), + WatchUi.SLIDE_IMMEDIATE + ); + } else { + onConfirm(); + } + } + + function onConfirm() as Void { mHomeAssistantService.call(mIdentifier as Lang.String, mService); } diff --git a/source/HomeAssistantMenuItemFactory.mc b/source/HomeAssistantMenuItemFactory.mc index faa9303..a98e283 100644 --- a/source/HomeAssistantMenuItemFactory.mc +++ b/source/HomeAssistantMenuItemFactory.mc @@ -89,13 +89,19 @@ class HomeAssistantMenuItemFactory { ); } - function tap(label as Lang.String or Lang.Symbol, identifier as Lang.Object or Null, service as Lang.String or Null) as WatchUi.MenuItem { + function tap( + label as Lang.String or Lang.Symbol, + identifier as Lang.Object or Null, + service as Lang.String or Null, + confirm as Lang.Boolean + ) as WatchUi.MenuItem { if (bRepresentTypesWithLabels) { return new HomeAssistantMenuItem( label, strMenuItemTap, identifier, service, + confirm, mMenuItemOptions, mHomeAssistantService ); @@ -105,6 +111,7 @@ class HomeAssistantMenuItemFactory { null, identifier, service, + confirm, mTapTypeIcon, mMenuItemOptions, mHomeAssistantService diff --git a/source/HomeAssistantView.mc b/source/HomeAssistantView.mc index d8308de..5b5f3cb 100644 --- a/source/HomeAssistantView.mc +++ b/source/HomeAssistantView.mc @@ -48,17 +48,26 @@ class HomeAssistantView extends WatchUi.Menu2 { var items = definition.get("items") as Lang.Dictionary; for(var i = 0; i < items.size(); i++) { - var type = items[i].get("type") as Lang.String or Null; - var name = items[i].get("name") as Lang.String or Null; - var entity = items[i].get("entity") as Lang.String or Null; - var service = items[i].get("service") as Lang.String or Null; + var type = items[i].get("type") as Lang.String or Null; + var name = items[i].get("name") 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; + if (tap_action != null) { + service = tap_action.get("service"); + confirm = tap_action.get("confirm"); + if (confirm == null) { + confirm = false; + } + } if (type != null && name != null && entity != null) { if (type.equals("toggle")) { var item = HomeAssistantMenuItemFactory.create().toggle(name, entity); addItem(item); mListToggleItems.add(item); } else if (type.equals("tap") && service != null) { - addItem( HomeAssistantMenuItemFactory.create().tap(name, entity, service)); + addItem( HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm)); } else if (type.equals("group")) { var item = HomeAssistantMenuItemFactory.create().group(items[i]); addItem(item); From 1df64286f075091c1c71390fb232f835bb1bfbec Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 1 Dec 2023 09:54:23 +0000 Subject: [PATCH 06/11] Updated README Also missed schema changes of the previous commit. Added a photo of the confirmation view. --- README.md | 50 ++++++++++++++++++++++++++++++----- config.schema.json | 30 ++++++++++++++++++--- images/confirmation_view.jpg | Bin 0 -> 43043 bytes 3 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 images/confirmation_view.jpg diff --git a/README.md b/README.md index 3bb0874..bee6556 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,10 @@ Example schema as shown in the images: "entity": "script.food_on_table", "name": "Food is Ready!", "type": "tap", - "service" : "script.turn_on" + "tap_action": { + "service": "script.turn_on", + "confirm": true + } }, { "entity": "light.bedside_light_switch", @@ -84,13 +87,17 @@ Example schema as shown in the images: "entity": "automation.turn_off_usb_chargers", "name": "Turn off USBs", "type": "tap", - "service" : "automation.trigger" + "tap_action": { + "service": "automation.trigger" + } }, { "entity": "scene.tv_light", "name": "TV Lights Scene", "type": "tap", - "service": "scene.turn_on" + "tap_action": { + "service": "scene.turn_on" + } } ] } @@ -112,9 +119,9 @@ The example JSON shows an example usage of each of these Home Assistance entity |------------|:---:|:------:| | Switch | ❌ | ✅ | | Light | ❌ | ✅ | -| Automation | ✅ | ✅ | -| Script | ✅ | ❌ | -| Scene | ✅ | ❌ | +| Automation | ✅ | ✅ | +| Script | ✅ | ❌ | +| Scene | ✅ | ❌ | NB. All 'tap' items must specify a 'service' tag. @@ -122,6 +129,34 @@ Possible future extensions might include specifying the alternative texts to use The [schema](https://raw.githubusercontent.com/house-of-abbey/GarminHomeAssistant/main/config.schema.json) is checked by using a URL directly back to this GitHub source repository, so you do not need to install that file. You can just copy & paste your entity names from the YAML configuration files used to configure Home Assistant. With a submenu, there's a difference between "title" and "name". The "name" goes on the menu item, and the "title" at the head of the submenu. If your dashboard definition fails to meet the schema, the application will simply drop items with the wrong field names without warning. +### Old depricated format + +Version 1.5 brought in a change to the JSON schema so the follow old format remains useable but is no longer favoured. The schema now marks it as 'depracated' to nudge people over. + +```json + { + "entity": "scene.tv_light", + "name": "TV Lights Scene", + "type": "tap", + "service": "scene.turn_on" + } +``` + +The above should be replaced by the following: + +```json + { + "entity": "scene.tv_light", + "name": "TV Lights Scene", + "type": "tap", + "tap_action": { + "service": "scene.turn_on" + } + } +``` + +This allows the `confirm` field to be accommodated in the `tap_action` along side the `service` tag, and follows the Home Assistant YAML format more closely. + ## Editing the JSON file You have options. The first is what we use. @@ -185,4 +220,5 @@ When you change the JSON file defining your dashboard, you must exit the applica | 1.1 | Updated for 54 more devices, 80 in total. Scene support. Added vibrate acknowledgement for tap-based menu items. Falls back to a custom visual confirmation in the absence of 'toast' and vibrate support. Bug fix for large menus needing status updates. | | 1.2 | Do not crash on zero items to update. Report unreachable URLs. Verify API URL does not have a trailing slash '/'. Increased HTTP response diagnosis. Reduced minimum API Level required from 3.3.0 to 3.1.0 to allow more device "part numbers" to be satisfied. | | 1.3 | Tap for scripts was working in emulation but not on some phones. Decision is to make the 'service' field in the JSON compulsory for 'tap' menu items. This is a breaking change, but for many might be a fix for something not working correctly. Improve language support, we can now accept language corrections and prevent the automated translation of strings from clobbering manually refined entries. Thank you to two new contributors. | -| 1.4 | New lean user Interface with thanks to [SomeoneOnEarth](https://github.com/Someone0nEarth) for their contribution which is now the default. If you prefer the old style you can still select it in the settings. The provision of a 'service' tag is now not just heavily suggested by the JSON schema, it is enforced in code. With appologies to anyone suffering a breakage as a result. | +| 1.4 | New lean user Interface with thanks to [SomeoneOnEarth](https://github.com/Someone0nEarth) for their contribution which is now the default. If you prefer the old style you can still select it in the settings. The provision of a 'service' tag is now not just heavily suggested by the JSON schema, it is enforced in code. With apologies to anyone suffering a breakage as a result. | +| 1.5 | Added an optional confirmation dialogue view to prevent accidental execution of actions on mistaken tap. This also brings a change in the JSON schema to allow an optional field to specify that the confirmation should be used for a menu item. As we are now maturing and adding features we have decided to mitigate breaking changes to the JSON schema by being more careful to adopt the Home Assistant schema (noting there is a 1:1 mapping between YAML and JSON). This change does deprecate the top level `service` tag in favour of `tag_action` containing multiple fields including `service` & `confirm`. Users should migrate to the new format for the new functionality, but the timescale for actual deprecation are long and undecided. | diff --git a/config.schema.json b/config.schema.json index 1edd1e9..ea65969 100644 --- a/config.schema.json +++ b/config.schema.json @@ -22,11 +22,20 @@ "type": "object", "properties": { "entity": { "$ref": "#/$defs/entity" }, - "name": { "type": "string" }, + "name": { "title": "Your familiar name", "type": "string" }, "type": { "const": "tap" }, - "service": { "$ref": "#/$defs/entity" } + "service": { + "$ref": "#/$defs/entity", + "deprecated": true, + "title": "Schema change:", + "description": "Use 'tap_action' instead to mirror Home Assistant." + }, + "tap_action": { "$ref": "#/$defs/action" } }, - "required": ["entity", "name", "type", "service"], + "oneOf": [ + { "required": ["entity", "name", "type", "service"] }, + { "required": ["entity", "name", "type", "tap_action"] } + ], "additionalProperties": false }, "menu": { @@ -52,8 +61,23 @@ } }, "entity": { + "title": "Home Assistant entity name", "type": "string", "pattern": "^[^.]+\\.[^.]+$" + }, + "action": { + "title": "Action", + "description": "Field 'confirm' is optional.", + "type": "object", + "properties": { + "service": { "$ref": "#/$defs/entity" }, + "confirm": { + "type": "boolean", + "default": false, + "description": "Confirm the action before execution as a precaution." + } + }, + "required": ["service"] } } } diff --git a/images/confirmation_view.jpg b/images/confirmation_view.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c90828344a8cebdf6d4c125b6042b7e78118bd3b GIT binary patch literal 43043 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 Date: Fri, 1 Dec 2023 10:08:12 +0000 Subject: [PATCH 07/11] Apply automatic changes --- resources-ces/strings/strings.xml | 2 +- resources-deu/strings/strings.xml | 4 ++-- resources-est/strings/strings.xml | 2 +- resources-fin/strings/strings.xml | 2 +- resources-fre/strings/strings.xml | 4 ++-- resources-gre/strings/strings.xml | 2 +- resources-kor/strings/strings.xml | 2 +- resources-ron/strings/strings.xml | 4 ++-- resources-swe/strings/strings.xml | 2 +- resources-tur/strings/strings.xml | 2 +- resources-ukr/strings/strings.xml | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/resources-ces/strings/strings.xml b/resources-ces/strings/strings.xml index 1744c33..6bc14ee 100644 --- a/resources-ces/strings/strings.xml +++ b/resources-ces/strings/strings.xml @@ -33,7 +33,7 @@ V nastavení aplikace není žádná adresa URL API V nastavení aplikace není žádná konfigurační URL Příliš rychlá volání API. Zpomalte prosím své požadavky. - Adresa URL nenalezena. Potenciální chyba adresy URL rozhraní API v nastavení. + Adresa URL nenalezena. Potenciální chyba URL API v nastavení. Adresa URL nenalezena. Potenciální chyba konfigurační adresy URL v nastavení. Požadavek HTTP vrátil kód chyby = Adresa URL rozhraní API nesmí mít koncové lomítko „/“ diff --git a/resources-deu/strings/strings.xml b/resources-deu/strings/strings.xml index 8981e24..a5628c4 100644 --- a/resources-deu/strings/strings.xml +++ b/resources-deu/strings/strings.xml @@ -23,7 +23,7 @@ An Aus Antippen - Menü + Menü Sicher? Keine Telefonverbindung Keine Internetverbindung @@ -35,6 +35,6 @@ API-Aufrufe zu schnell. Bitte verlangsamen Sie Ihre Anfragen. URL nicht gefunden. Möglicher API-URL-Fehler in den Einstellungen. URL nicht gefunden. Möglicher Konfigurations-URL-Fehler in den Einstellungen. - Die HTTP-Anfrage gab folgenden Fehlercode zurück = + Die HTTP-Anfrage gab folgenden Fehlercode zurück = Die API-URL darf keinen abschließenden Schrägstrich „/“ enthalten. \ No newline at end of file diff --git a/resources-est/strings/strings.xml b/resources-est/strings/strings.xml index 86d61b5..61f1886 100644 --- a/resources-est/strings/strings.xml +++ b/resources-est/strings/strings.xml @@ -15,7 +15,7 @@ diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml index e754e2c..93fd3b8 100644 --- a/resources-fin/strings/strings.xml +++ b/resources-fin/strings/strings.xml @@ -29,7 +29,7 @@ Ei Internet-yhteyttä Ei vastausta, tarkista Internet-yhteys Valikkohakuvirhe - Sovelluksen asetuksissa ei ole API-avainta + Sovellusasetuksissa ei ole API-avainta Sovellusasetuksissa ei ole API URL-osoitetta Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta API-kutsut liian nopeita. Hidasta pyyntöjäsi. diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml index b143787..71dabe2 100644 --- a/resources-fre/strings/strings.xml +++ b/resources-fre/strings/strings.xml @@ -20,7 +20,7 @@ HomeAssistant - Activé + Activé Désactivé Clic Menu @@ -32,7 +32,7 @@ Pas de clé API dans les paramètres de l'application Aucune URL API dans les paramètres de l'application Aucune URL de configuration dans les paramètres de l'application - Appels API trop rapide. Veuillez signaler cette erreur avec les détails de l'appareil. + Appels API trop rapide. Veuillez signaler cette erreur avec les détails de l'appareil. URL introuvable. Erreur potentielle d'URL d'API dans les paramètres. URL introuvable. Erreur potentielle d'URL de configuration dans les paramètres. La requête HTTP a renvoyé un code d'erreur = diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml index 5660b65..965adae 100644 --- a/resources-gre/strings/strings.xml +++ b/resources-gre/strings/strings.xml @@ -30,7 +30,7 @@ Καμία απάντηση, ελέγξτε τη σύνδεση στο Διαδίκτυο Σφάλμα ανάκτησης μενού Δεν υπάρχει κλειδί API στις ρυθμίσεις της εφαρμογής - Δεν υπάρχει διεύθυνση URL API στις ρυθμίσεις της εφαρμογής + Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής Κλήσεις API πολύ γρήγορες. Παρακαλώ επιβραδύνετε τα αιτήματά σας. Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL API στις ρυθμίσεις. diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml index 25025e7..b696aad 100644 --- a/resources-kor/strings/strings.xml +++ b/resources-kor/strings/strings.xml @@ -36,5 +36,5 @@ URL을 찾을 수 없습니다. 설정에 잠재적인 API URL 오류가 있습니다. URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다. HTTP 요청이 오류 코드를 반환했습니다 = - API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다. + API URL에는 후행 슬래시 '/'가 없어야 합니다. \ No newline at end of file diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml index 5928813..df5ab8f 100644 --- a/resources-ron/strings/strings.xml +++ b/resources-ron/strings/strings.xml @@ -21,7 +21,7 @@ HomeAssistant Pe - Off + Oprit Atingeți Meniul Sigur? @@ -32,7 +32,7 @@ Nicio cheie API în setările aplicației Nicio adresă URL API în setările aplicației Nicio adresă URL de configurare în setările aplicației - Apeluri API prea rapide. Vă rugăm să încetiniți cererile dvs. + Apeluri API prea rapide. Vă rugăm să vă încetiniți solicitările. Adresa URL nu a fost găsită. Potențială eroare URL API în setări. Adresa URL nu a fost găsită. Potențială eroare URL de configurare în setări. Solicitarea HTTP a returnat codul de eroare = diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml index 8daf71f..9d43deb 100644 --- a/resources-swe/strings/strings.xml +++ b/resources-swe/strings/strings.xml @@ -30,7 +30,7 @@ Inget svar, kontrollera internetanslutningen Menyhämtningsfel Ingen API-nyckel i applikationsinställningarna - Ingen API-URL i applikationsinställningarna + Ingen API-URL i programinställningarna Ingen konfigurations-URL i programinställningarna API-anrop för snabba. Vänligen sakta ner dina förfrågningar. Webbadressen hittades inte. Potentiellt API-URL-fel i inställningarna. diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml index 57f8dc2..850dce9 100644 --- a/resources-tur/strings/strings.xml +++ b/resources-tur/strings/strings.xml @@ -36,5 +36,5 @@ URL bulunamadı. Ayarlarda olası API URL hatası. URL bulunamadı. Ayarlarda Olası Yapılandırma URL'si hatası. HTTP isteği hata kodunu döndürdü = - API URL'sinin sonunda '/' eğik çizgi olmamalıdır + API URL'sinin sonunda eğik çizgi '/' olmamalıdır \ No newline at end of file diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml index 1f410f7..b79b976 100644 --- a/resources-ukr/strings/strings.xml +++ b/resources-ukr/strings/strings.xml @@ -15,7 +15,7 @@ From e616a6bd76ddb8cb8f5c9fccc90022fabf01e685 Mon Sep 17 00:00:00 2001 From: philipabbey Date: Fri, 1 Dec 2023 10:10:43 +0000 Subject: [PATCH 08/11] Apply automatic changes --- resources-por/strings/strings.xml | 2 +- resources-swe/strings/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml index 6e836c7..f564fbb 100644 --- a/resources-por/strings/strings.xml +++ b/resources-por/strings/strings.xml @@ -32,7 +32,7 @@ Nenhuma chave de API nas configurações do aplicativo Nenhum URL de API nas configurações do aplicativo Nenhum URL de configuração nas configurações do aplicativo - Chamadas de API muito rápidas. Por favor, diminua a velocidade de seus pedidos. + Chamadas de API muito rápidas. Por favor, desacelere seus pedidos. URL não encontrado. Possível erro de URL da API nas configurações. URL não encontrado. Possível erro de URL de configuração nas configurações. Solicitação HTTP retornou código de erro = diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml index 9d43deb..8daf71f 100644 --- a/resources-swe/strings/strings.xml +++ b/resources-swe/strings/strings.xml @@ -30,7 +30,7 @@ Inget svar, kontrollera internetanslutningen Menyhämtningsfel Ingen API-nyckel i applikationsinställningarna - Ingen API-URL i programinställningarna + Ingen API-URL i applikationsinställningarna Ingen konfigurations-URL i programinställningarna API-anrop för snabba. Vänligen sakta ner dina förfrågningar. Webbadressen hittades inte. Potentiellt API-URL-fel i inställningarna. From 0e443e33d38bc829020147f5b647e3549b7d7747 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 1 Dec 2023 10:19:49 +0000 Subject: [PATCH 09/11] Update config.schema.json Tidy up of help text --- config.schema.json | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/config.schema.json b/config.schema.json index ea65969..b82eda9 100644 --- a/config.schema.json +++ b/config.schema.json @@ -12,8 +12,12 @@ "type": "object", "properties": { "entity": { "$ref": "#/$defs/entity" }, - "name": { "type": "string" }, - "type": { "const": "toggle" } + "name": { "title": "Your familiar name", "type": "string" }, + "type": { + "title": "Menu item type", + "description": "One of 'tap, 'toggle' or 'group'", + "const": "toggle" + } }, "required": ["entity", "name", "type"], "additionalProperties": false @@ -23,7 +27,11 @@ "properties": { "entity": { "$ref": "#/$defs/entity" }, "name": { "title": "Your familiar name", "type": "string" }, - "type": { "const": "tap" }, + "type": { + "title": "Menu item type", + "description": "One of 'tap, 'toggle' or 'group'", + "const": "tap" + }, "service": { "$ref": "#/$defs/entity", "deprecated": true, @@ -42,9 +50,13 @@ "type": "object", "properties": { "entity": { "$ref": "#/$defs/entity" }, - "name": { "type": "string" }, + "name": { "title": "Your familiar name", "type": "string" }, "title": { "type": "string" }, - "type": { "const": "group" }, + "type": { + "title": "Menu item type", + "description": "One of 'tap, 'toggle' or 'group'", + "const": "group" + }, "items": { "$ref": "#/$defs/items" } }, "required": ["entity", "name", "title", "type", "items"], @@ -67,7 +79,7 @@ }, "action": { "title": "Action", - "description": "Field 'confirm' is optional.", + "description": "'confirm' field is optional.", "type": "object", "properties": { "service": { "$ref": "#/$defs/entity" }, From 2d07eaa9c67b4fd0933b192bef126dc1f7f1c7cf Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 1 Dec 2023 11:28:19 +0000 Subject: [PATCH 10/11] Update HomeAssistantView.mc Review comment about a random space. --- source/HomeAssistantView.mc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/HomeAssistantView.mc b/source/HomeAssistantView.mc index 5b5f3cb..6a040dd 100644 --- a/source/HomeAssistantView.mc +++ b/source/HomeAssistantView.mc @@ -67,7 +67,7 @@ class HomeAssistantView extends WatchUi.Menu2 { addItem(item); mListToggleItems.add(item); } else if (type.equals("tap") && service != null) { - addItem( HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm)); + addItem(HomeAssistantMenuItemFactory.create().tap(name, entity, service, confirm)); } else if (type.equals("group")) { var item = HomeAssistantMenuItemFactory.create().group(items[i]); addItem(item); From 531c3e972ee233b1036071d7f068ba3248cdf028 Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Fri, 1 Dec 2023 11:42:11 +0000 Subject: [PATCH 11/11] Update config.schema.json Added missing full stops. --- config.schema.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config.schema.json b/config.schema.json index b82eda9..3037b2f 100644 --- a/config.schema.json +++ b/config.schema.json @@ -15,7 +15,7 @@ "name": { "title": "Your familiar name", "type": "string" }, "type": { "title": "Menu item type", - "description": "One of 'tap, 'toggle' or 'group'", + "description": "One of 'tap, 'toggle' or 'group'.", "const": "toggle" } }, @@ -29,7 +29,7 @@ "name": { "title": "Your familiar name", "type": "string" }, "type": { "title": "Menu item type", - "description": "One of 'tap, 'toggle' or 'group'", + "description": "One of 'tap, 'toggle' or 'group'.", "const": "tap" }, "service": { @@ -54,7 +54,7 @@ "title": { "type": "string" }, "type": { "title": "Menu item type", - "description": "One of 'tap, 'toggle' or 'group'", + "description": "One of 'tap, 'toggle' or 'group'.", "const": "group" }, "items": { "$ref": "#/$defs/items" }