Merge branch 'main' into 29-vivoactive-4s-crashes-user-reported-error

This commit is contained in:
Philip Abbey
2023-12-17 11:57:24 +00:00
43 changed files with 421 additions and 85 deletions

View File

@ -223,3 +223,4 @@ When you change the JSON file defining your dashboard, you must exit the applica
| 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 | <img src="images/confirmation_view.jpg" width="200" title="Confirmation View" style="float:right"/> 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. |
| 1.6 | Added a user configurable 'timeout' in seconds so that when no action is taken the application automatically closes, stopping the continuous polling for changes of status and hence saving the drain on the battery. This can be disabled with timeout=0. |
| 1.7 | Added timeout to confirmation views so that when used for security devices it does not linger when left unconfirmed. Thanks to [Jan Schneider](https://github.com/j-a-n) for the contribution. Known bug for devices not supporting [`WatchUi.getCurrentView()`](https://developer.garmin.com/connect-iq/api-docs/Toybox/WatchUi.html#getCurrentView-instance_function) API call which is only available on API Level 3.4.0, e.g. Vivoactive 4S. |

View File

@ -11,17 +11,17 @@
P A Abbey & J D Abbey & SomeoneOnEarth, 31 October 2023
Test Application id="98c36259-498a-4458-9cef-74a273ad2bc3"
Live Application id="40131e87-31ff-454b-a8e2-92276ee399d6"
Widget/Glance App id="bf69be91-5833-4d96-92ea-c5f1a9db5dcc"
Test Application id="98c36259-498a-4458-9cef-74a273ad2bc3"
Live Application id="40131e87-31ff-454b-a8e2-92276ee399d6"
-->
<iq:manifest version="3" xmlns:iq="http://www.garmin.com/xml/connectiq">
<!--
Use "Monkey C: Edit Application" from the Visual Studio Code command palette
to update the application attributes.
-->
<iq:application id="98c36259-498a-4458-9cef-74a273ad2bc3" type="watch-app" name="@Strings.AppName" entry="HomeAssistantApp" launcherIcon="@Drawables.LauncherIcon" minApiLevel="3.1.0">
<iq:application id="bf69be91-5833-4d96-92ea-c5f1a9db5dcc" type="widget" name="@Strings.AppName" entry="HomeAssistantApp" launcherIcon="@Drawables.LauncherIcon" minApiLevel="3.1.0">
<!--
Use the following from the Visual Studio Code comand palette to edit
the build targets:

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">على</string>
<string id="MenuItemOff">عن</string>
<string id="MenuItemTap">مقبض</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">لم يتم العثور على عنوان URL. خطأ محتمل في عنوان URL للتكوين في الإعدادات.</string>
<string id="UnhandledHttpErr">قام طلب HTTP بإرجاع رمز الخطأ =</string>
<string id="TrailingSlashErr">يجب ألا يحتوي عنوان URL لواجهة برمجة التطبيقات على شرطة مائلة لاحقة '/'</string>
<string id="FetchingMenuConfig">جارٍ جلب تكوين القائمة..</string>
<string id="ExitViewTouch">مرّر سريعًا إلى اليمين للخروج\nانقر للبقاء</string>
<string id="ExitViewButtons">اضغط على "الرجوع للخروج"\nأدخل للبقاء</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">На</string>
<string id="MenuItemOff">Изкл</string>
<string id="MenuItemTap">Докоснете</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL не е намерен. Потенциална грешка в URL адреса на конфигурацията в настройките.</string>
<string id="UnhandledHttpErr">HTTP заявката върна код на грешка =</string>
<string id="TrailingSlashErr">URL адресът на API не трябва да има наклонена черта '/' в края</string>
<string id="FetchingMenuConfig">Извличане на конфигурацията на менюто..</string>
<string id="ExitViewTouch">Плъзнете надясно, за да излезете\nДокоснете, за да останете</string>
<string id="ExitViewButtons">Натиснете Назад, за да излезете\nВлезте, за да останете</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Na</string>
<string id="MenuItemOff">Vypnuto</string>
<string id="MenuItemTap">Klepněte</string>
@ -33,8 +33,11 @@
<string id="NoApiUrl">V nastavení aplikace není žádná adresa URL API</string>
<string id="NoConfigUrl">V nastavení aplikace není žádná konfigurační URL</string>
<string id="ApiFlood">Příliš rychlá volání API. Zpomalte prosím své požadavky.</string>
<string id="ApiUrlNotFound">Adresa URL nenalezena. Potenciální chyba URL API v nastavení.</string>
<string id="ApiUrlNotFound">Adresa URL nenalezena. Potenciální chyba adresy URL rozhraní API v nastavení.</string>
<string id="ConfigUrlNotFound">Adresa URL nenalezena. Potenciální chyba konfigurační adresy URL v nastavení.</string>
<string id="UnhandledHttpErr">Požadavek HTTP vrátil kód chyby =</string>
<string id="TrailingSlashErr">Adresa URL rozhraní API nesmí mít koncové lomítko „/“</string>
<string id="FetchingMenuConfig">Načítání konfigurace nabídky...</string>
<string id="ExitViewTouch">Přejetím prstem doprava ukončíte\nKlepnutím zůstanete</string>
<string id="ExitViewButtons">Stisknutím Zpět ukončíte\nVstupte a zůstanete</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn"></string>
<string id="MenuItemOff">Af</string>
<string id="MenuItemTap">Tryk på</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL ikke fundet. Potentiel konfigurations-URL-fejl i indstillinger.</string>
<string id="UnhandledHttpErr">HTTP-anmodning returnerede fejlkode =</string>
<string id="TrailingSlashErr">API URL må ikke have en efterfølgende skråstreg '/'</string>
<string id="FetchingMenuConfig">Henter menukonfiguration..</string>
<string id="ExitViewTouch">Stryg til højre for at afslutte\nTryk for at blive</string>
<string id="ExitViewButtons">Tryk på Tilbage for at afslutte\nEnter for at blive</string>
</strings>

View File

@ -22,4 +22,7 @@
<string id="MenuItemTap">Antippen</string>
<string id="MenuItemMenu">Menü</string>
<string id="UnhandledHttpErr">Die HTTP-Anfrage gab folgenden Fehlercode zurück = </string>
<string id="ExitViewTouch">Zum Beenden nach rechts swipen\nZum Bleiben antippen</string>
<string id="ExitViewButtons">Drücke „Zurück“, um zu Beenden.\n„Enter“, um zu bleiben</string>
<string id="FetchingMenuConfig">Lade Config vom Server ... </string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">An</string>
<string id="MenuItemOff">Aus</string>
<string id="MenuItemTap">Antippen</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL nicht gefunden. Möglicher Konfigurations-URL-Fehler in den Einstellungen.</string>
<string id="UnhandledHttpErr">Die HTTP-Anfrage gab folgenden Fehlercode zurück = </string>
<string id="TrailingSlashErr">Die API-URL darf keinen abschließenden Schrägstrich „/“ enthalten.</string>
<string id="FetchingMenuConfig">Lade Config vom Server ... </string>
<string id="ExitViewTouch">Zum Beenden nach rechts swipen\nZum Bleiben antippen</string>
<string id="ExitViewButtons">Drücke „Zurück“, um zu Beenden.\n„Enter“, um zu bleiben</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Op</string>
<string id="MenuItemOff">Uit</string>
<string id="MenuItemTap">Kraan</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL niet gevonden. Mogelijke configuratie-URL-fout in de instellingen.</string>
<string id="UnhandledHttpErr">HTTP-verzoek retourneerde foutcode =</string>
<string id="TrailingSlashErr">API-URL mag geen afsluitende slash '/' bevatten</string>
<string id="FetchingMenuConfig">Menuconfiguratie ophalen..</string>
<string id="ExitViewTouch">Veeg naar rechts om af te sluiten\nTik om te blijven</string>
<string id="ExitViewButtons">Druk op Terug om af te sluiten\nEnter om te blijven</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Peal</string>
<string id="MenuItemOff">Väljas</string>
<string id="MenuItemTap">Puudutage</string>
@ -32,9 +32,12 @@
<string id="NoAPIKey">Rakenduse seadetes pole API-võtit</string>
<string id="NoApiUrl">Rakenduse seadetes pole API URL-i</string>
<string id="NoConfigUrl">Rakenduse seadetes pole konfiguratsiooni URL-i</string>
<string id="ApiFlood">API-kutsed liiga kiired. Palun aeglustage oma taotlusi.</string>
<string id="ApiFlood">API-kutsed liiga kiired. Palun aeglustage taotluste esitamist.</string>
<string id="ApiUrlNotFound">URL-i ei leitud. Võimalik API URL-i viga seadetes.</string>
<string id="ConfigUrlNotFound">URL-i ei leitud. Võimalik konfiguratsiooni URL-i viga seadetes.</string>
<string id="UnhandledHttpErr">HTTP päring tagastas veakoodi =</string>
<string id="TrailingSlashErr">API URL-i lõpus ei tohi olla kaldkriipsu „/”</string>
<string id="FetchingMenuConfig">Menüü konfiguratsiooni toomine...</string>
<string id="ExitViewTouch">Väljumiseks pühkige paremale\nPuudutage, et jääda</string>
<string id="ExitViewButtons">Väljumiseks vajutage Tagasi\nSisestage, et jääda</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Päällä</string>
<string id="MenuItemOff">Vinossa</string>
<string id="MenuItemTap">Napauta</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL-osoitetta ei löydy. Mahdollinen konfigurointi-URL-virhe asetuksissa.</string>
<string id="UnhandledHttpErr">HTTP-pyyntö palautti virhekoodin =</string>
<string id="TrailingSlashErr">API-URL-osoitteessa ei saa olla perässä olevaa kauttaviivaa '/'</string>
<string id="FetchingMenuConfig">Haetaan valikon asetuksia...</string>
<string id="ExitViewTouch">Poistu pyyhkäisemällä oikealle\nPysy napauttamalla</string>
<string id="ExitViewButtons">Poistu painamalla Takaisin\nSyötä jäädäksesi</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Activé</string>
<string id="MenuItemOff">Désactivé</string>
<string id="MenuItemTap">Clic</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL introuvable. Erreur potentielle d'URL de configuration dans les paramètres.</string>
<string id="UnhandledHttpErr">La requête HTTP a renvoyé un code d'erreur =</string>
<string id="TrailingSlashErr">L'URL de l'API ne doit pas comporter de barre oblique finale '/'</string>
<string id="FetchingMenuConfig">Récupération de la configuration du menu.</string>
<string id="ExitViewTouch">Balayez vers la droite pour quitter\nAppuyez pour rester</string>
<string id="ExitViewButtons">Appuyez sur Retour pour quitter\nEntrez pour rester</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Επί</string>
<string id="MenuItemOff">Μακριά από</string>
<string id="MenuItemTap">Παρακέντηση</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL διαμόρφωσης στις ρυθμίσεις.</string>
<string id="UnhandledHttpErr">Το αίτημα HTTP επέστρεψε κωδικό σφάλματος =</string>
<string id="TrailingSlashErr">Η διεύθυνση URL του API δεν πρέπει να έχει τελική κάθετο "/"</string>
<string id="FetchingMenuConfig">Ανάκτηση παραμέτρων μενού..</string>
<string id="ExitViewTouch">Σύρετε προς τα δεξιά για έξοδο\nΠατήστε για να μείνετε</string>
<string id="ExitViewButtons">Πατήστε Επιστροφή για Έξοδος\nEnter για να μείνετε</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">עַל</string>
<string id="MenuItemOff">כבוי</string>
<string id="MenuItemTap">בֶּרֶז</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">כתובת האתר לא נמצאה. שגיאת כתובת אתר פוטנציאלית של תצורה בהגדרות.</string>
<string id="UnhandledHttpErr">בקשת HTTP החזירה קוד שגיאה =</string>
<string id="TrailingSlashErr">כתובת ה-API לא חייבת לכלול לוכסן אחורי '/'</string>
<string id="FetchingMenuConfig">מביא את תצורת התפריט...</string>
<string id="ExitViewTouch">החלק ימינה כדי לצאת\nהקש כדי להישאר</string>
<string id="ExitViewButtons">לחץ על חזרה ליציאה\nEnter כדי להישאר</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Na</string>
<string id="MenuItemOff">Isključeno</string>
<string id="MenuItemTap">Dodirnite</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL nije pronađen. Potencijalna pogreška URL-a konfiguracije u postavkama.</string>
<string id="UnhandledHttpErr">HTTP zahtjev vratio je kod greške =</string>
<string id="TrailingSlashErr">API URL ne smije imati kosu crtu na kraju '/'</string>
<string id="FetchingMenuConfig">Dohvaćanje konfiguracije izbornika..</string>
<string id="ExitViewTouch">Prijeđite prstom udesno za izlaz\nDodirnite za ostanak</string>
<string id="ExitViewButtons">Pritisnite Natrag za izlaz\nUnesite za ostanak</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Tovább</string>
<string id="MenuItemOff">Ki</string>
<string id="MenuItemTap">Koppintson a</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Az URL nem található. Lehetséges konfigurációs URL hiba a beállításokban.</string>
<string id="UnhandledHttpErr">A HTTP-kérés = hibakódot adott vissza</string>
<string id="TrailingSlashErr">Az API URL-ben nem lehet perjel a „/”</string>
<string id="FetchingMenuConfig">Menükonfiguráció lekérése...</string>
<string id="ExitViewTouch">Csúsztassa jobbra a kilépéshez.\nKoppintson a Maradáshoz</string>
<string id="ExitViewButtons">Nyomja meg a Vissza gombot a kilépéshez\nEnter a Maradáshoz</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Pada</string>
<string id="MenuItemOff">Mati</string>
<string id="MenuItemTap">Mengetuk</string>
@ -31,10 +31,13 @@
<string id="NoMenu">Kesalahan Pengambilan Menu</string>
<string id="NoAPIKey">Tidak ada kunci API di pengaturan aplikasi</string>
<string id="NoApiUrl">Tidak ada URL API di pengaturan aplikasi</string>
<string id="NoConfigUrl">Tidak ada URL konfigurasi dalam pengaturan aplikasi</string>
<string id="NoConfigUrl">Tidak ada URL konfigurasi di pengaturan aplikasi</string>
<string id="ApiFlood">Panggilan API terlalu cepat. Harap memperlambat permintaan Anda.</string>
<string id="ApiUrlNotFound">URL tidak ditemukan. Potensi kesalahan URL API dalam pengaturan.</string>
<string id="ConfigUrlNotFound">URL tidak ditemukan. Potensi kesalahan URL Konfigurasi dalam pengaturan.</string>
<string id="UnhandledHttpErr">Permintaan HTTP mengembalikan kode kesalahan =</string>
<string id="TrailingSlashErr">URL API tidak boleh memiliki garis miring '/'</string>
<string id="FetchingMenuConfig">Mengambil Konfigurasi Menu..</string>
<string id="ExitViewTouch">Geser ke Kanan untuk Keluar\nKetuk untuk Tetap</string>
<string id="ExitViewButtons">Tekan Kembali untuk Keluar\nMasuk untuk Tetap</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">SU</string>
<string id="MenuItemOff">Spento</string>
<string id="MenuItemTap">Rubinetto</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL non trovato. Potenziale errore dell'URL di configurazione nelle impostazioni.</string>
<string id="UnhandledHttpErr">La richiesta HTTP ha restituito il codice di errore =</string>
<string id="TrailingSlashErr">L'URL dell'API non deve avere una barra finale "/"</string>
<string id="FetchingMenuConfig">Recupero configurazione menu..</string>
<string id="ExitViewTouch">Scorri verso destra per uscire\nTocca per restare</string>
<string id="ExitViewButtons">Premi Indietro per uscire\nInvio per restare</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">の上</string>
<string id="MenuItemOff">オフ</string>
<string id="MenuItemTap">タップ</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URLが見つかりません。設定内の構成 URL エラーの可能性があります。</string>
<string id="UnhandledHttpErr">HTTP リクエストがエラー コードを返しました =</string>
<string id="TrailingSlashErr">API URL の末尾にスラッシュ「/」を含めることはできません</string>
<string id="FetchingMenuConfig">メニュー構成を取得しています。</string>
<string id="ExitViewTouch">右にスワイプして終了\nタップしてそのまま残ります</string>
<string id="ExitViewButtons">終了するには戻るキーを押してください\n続行するには Enter キーを押してください</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">~에</string>
<string id="MenuItemOff">끄다</string>
<string id="MenuItemTap">수도꼭지</string>
@ -36,5 +36,8 @@
<string id="ApiUrlNotFound">URL을 찾을 수 없습니다. 설정에 잠재적인 API URL 오류가 있습니다.</string>
<string id="ConfigUrlNotFound">URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다.</string>
<string id="UnhandledHttpErr">HTTP 요청이 오류 코드를 반환했습니다 =</string>
<string id="TrailingSlashErr">API URL에는 후행 슬래시 '/'가 없어야 합니다.</string>
<string id="TrailingSlashErr">API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다.</string>
<string id="FetchingMenuConfig">메뉴 구성을 가져오는 중..</string>
<string id="ExitViewTouch">종료하려면 오른쪽으로 스와이프하세요.\n계속 유지하려면 탭하세요.</string>
<string id="ExitViewButtons">종료하려면 뒤로 버튼을 누르세요.\n계속하려면 입력하세요.</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Ieslēgts</string>
<string id="MenuItemOff">Izslēgts</string>
<string id="MenuItemTap">Krāns</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL nav atrasts. Iespējama konfigurācijas URL kļūda iestatījumos.</string>
<string id="UnhandledHttpErr">HTTP pieprasījums atgrieza kļūdas kodu =</string>
<string id="TrailingSlashErr">API URL beigās nedrīkst būt slīpsvītra “/”</string>
<string id="FetchingMenuConfig">Notiek izvēlnes konfigurācijas iegūšana...</string>
<string id="ExitViewTouch">Lai izietu, velciet pa labi\nPieskarieties, lai paliktu</string>
<string id="ExitViewButtons">Noklikšķiniet uz Atpakaļ, lai izietu.\nIevadiet, lai paliktu</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Įjungta</string>
<string id="MenuItemOff">Išjungta</string>
<string id="MenuItemTap">Bakstelėkite</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL nerastas. Galima konfigūracijos URL klaida nustatymuose.</string>
<string id="UnhandledHttpErr">HTTP užklausa grąžino klaidos kodą =</string>
<string id="TrailingSlashErr">API URL pabaigoje negali būti pasvirojo brūkšnio „/“</string>
<string id="FetchingMenuConfig">Gaunama meniu konfigūracija...</string>
<string id="ExitViewTouch">Norėdami išeiti, braukite į dešinę\nPalieskite, kad pasiliktumėte</string>
<string id="ExitViewButtons">Norėdami išeiti, paspauskite „Atgal“\nĮveskite, kad pasiliktumėte</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn"></string>
<string id="MenuItemOff">Av</string>
<string id="MenuItemTap">Trykk på</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Finner ikke URL. Potensiell konfigurasjons-URL-feil i innstillingene.</string>
<string id="UnhandledHttpErr">HTTP-forespørsel returnerte feilkode =</string>
<string id="TrailingSlashErr">API URL må ikke ha en etterfølgende skråstrek '/'</string>
<string id="FetchingMenuConfig">Henter menykonfigurasjon..</string>
<string id="ExitViewTouch">Sveip til høyre for å avslutte\nTrykk for å bli</string>
<string id="ExitViewButtons">Trykk Tilbake for å avslutte\nEnter for å bli</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">NA</string>
<string id="MenuItemOff">Wyłączony</string>
<string id="MenuItemTap">Uzyskiwać</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Nie znaleziono adresu URL. Potencjalny błąd adresu URL konfiguracji w ustawieniach.</string>
<string id="UnhandledHttpErr">Żądanie HTTP zwróciło kod błędu =</string>
<string id="TrailingSlashErr">Adres URL interfejsu API nie może zawierać końcowego ukośnika „/”</string>
<string id="FetchingMenuConfig">Pobieranie konfiguracji menu..</string>
<string id="ExitViewTouch">Przesuń w prawo, aby wyjść\nDotknij, aby pozostać</string>
<string id="ExitViewButtons">Naciśnij Wstecz, aby wyjść\nEnter, aby pozostać</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Sobre</string>
<string id="MenuItemOff">Desligado</string>
<string id="MenuItemTap">Tocar</string>
@ -32,9 +32,12 @@
<string id="NoAPIKey">Nenhuma chave de API nas configurações do aplicativo</string>
<string id="NoApiUrl">Nenhum URL de API nas configurações do aplicativo</string>
<string id="NoConfigUrl">Nenhum URL de configuração nas configurações do aplicativo</string>
<string id="ApiFlood">Chamadas de API muito rápidas. Por favor, desacelere seus pedidos.</string>
<string id="ApiFlood">Chamadas de API muito rápidas. Por favor, diminua a velocidade de seus pedidos.</string>
<string id="ApiUrlNotFound">URL não encontrado. Possível erro de URL da API nas configurações.</string>
<string id="ConfigUrlNotFound">URL não encontrado. Possível erro de URL de configuração nas configurações.</string>
<string id="UnhandledHttpErr">Solicitação HTTP retornou código de erro =</string>
<string id="TrailingSlashErr">O URL da API não deve ter uma barra final '/'</string>
<string id="FetchingMenuConfig">Buscando configuração do menu..</string>
<string id="ExitViewTouch">Deslize para a direita para sair\nToque para permanecer</string>
<string id="ExitViewButtons">Volte para sair\nEntre para ficar</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Pe</string>
<string id="MenuItemOff">Oprit</string>
<string id="MenuItemTap">Atingeți</string>
@ -32,9 +32,12 @@
<string id="NoAPIKey">Nicio cheie API în setările aplicației</string>
<string id="NoApiUrl">Nicio adresă URL API în setările aplicației</string>
<string id="NoConfigUrl">Nicio adresă URL de configurare în setările aplicației</string>
<string id="ApiFlood">Apeluri API prea rapide. Vă rugăm să încetiniți solicitările.</string>
<string id="ApiFlood">Apeluri API prea rapide. Vă rugăm să încetiniți cererile dvs.</string>
<string id="ApiUrlNotFound">Adresa URL nu a fost găsită. Potențială eroare URL API în setări.</string>
<string id="ConfigUrlNotFound">Adresa URL nu a fost găsită. Potențială eroare URL de configurare în setări.</string>
<string id="UnhandledHttpErr">Solicitarea HTTP a returnat codul de eroare =</string>
<string id="TrailingSlashErr">Adresa URL API nu trebuie să aibă o bară oblică „/”</string>
<string id="FetchingMenuConfig">Se preiau configurarea meniului...</string>
<string id="ExitViewTouch">Glisați spre dreapta pentru a ieși\nAtingeți pentru a rămâne</string>
<string id="ExitViewButtons">Apăsați Înapoi pentru a ieși\nIntră pentru a rămâne</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Zapnuté</string>
<string id="MenuItemOff">Vypnuté</string>
<string id="MenuItemTap">Klepnite</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Adresa URL sa nenašla. Potenciálna chyba konfiguračnej adresy URL v nastaveniach.</string>
<string id="UnhandledHttpErr">Požiadavka HTTP vrátila kód chyby =</string>
<string id="TrailingSlashErr">Adresa URL rozhrania API nesmie obsahovať koncovú lomku „/“</string>
<string id="FetchingMenuConfig">Načítava sa konfigurácia ponuky...</string>
<string id="ExitViewTouch">Ukončite prejdením prstom doprava\nKlepnutím zostanete</string>
<string id="ExitViewButtons">Stlačte Späť na ukončenie\nVstúpte a zostaňte</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Vklopljeno</string>
<string id="MenuItemOff">Izključeno</string>
<string id="MenuItemTap">Tapnite</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL-ja ni bilo mogoče najti. Morebitna napaka URL-ja konfiguracije v nastavitvah.</string>
<string id="UnhandledHttpErr">Zahteva HTTP je vrnila kodo napake =</string>
<string id="TrailingSlashErr">URL API-ja ne sme imeti končne poševnice '/'</string>
<string id="FetchingMenuConfig">Pridobivanje konfiguracije menija..</string>
<string id="ExitViewTouch">Povlecite v desno za izhod\nDotaknite se, da ostanete</string>
<string id="ExitViewButtons">Pritisnite Nazaj za izhod\nVstopite, da ostanete</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">En</string>
<string id="MenuItemOff">Apagado</string>
<string id="MenuItemTap">Grifo</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL no encontrada. Posible error de URL de configuración en la configuración.</string>
<string id="UnhandledHttpErr">La solicitud HTTP devolvió el código de error =</string>
<string id="TrailingSlashErr">La URL de API no debe tener una barra diagonal '/'</string>
<string id="FetchingMenuConfig">Obteniendo configuración del menú..</string>
<string id="ExitViewTouch">Desliza hacia la derecha para salir\nToca para permanecer</string>
<string id="ExitViewButtons">Presione Atrás para salir\nEntrar para permanecer</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn"></string>
<string id="MenuItemOff">Av</string>
<string id="MenuItemTap">Knacka</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Webbadressen hittades inte. Potentiellt konfigurations-URL-fel i inställningarna.</string>
<string id="UnhandledHttpErr">HTTP-begäran returnerade felkod =</string>
<string id="TrailingSlashErr">API-URL får inte ha ett snedstreck '/'</string>
<string id="FetchingMenuConfig">Hämtar menykonfiguration..</string>
<string id="ExitViewTouch">Svep åt höger för att avsluta\nKnacka för att stanna</string>
<string id="ExitViewButtons">Tryck på Tillbaka för att avsluta\nEnter för att stanna</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">บน</string>
<string id="MenuItemOff">ปิด</string>
<string id="MenuItemTap">แตะ</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">ไม่พบ URL ข้อผิดพลาด URL การกำหนดค่าที่อาจเกิดขึ้นในการตั้งค่า</string>
<string id="UnhandledHttpErr">คำขอ HTTP ส่งคืนรหัสข้อผิดพลาด =</string>
<string id="TrailingSlashErr">URL ของ API ต้องไม่มีเครื่องหมายทับต่อท้าย '/'</string>
<string id="FetchingMenuConfig">กำลังดึงข้อมูลการกำหนดค่าเมนู..</string>
<string id="ExitViewTouch">ปัดไปทางขวาเพื่อออก\nแตะเพื่ออยู่ต่อ</string>
<string id="ExitViewButtons">กดกลับเพื่อออก\nเข้าไปเพื่ออยู่ต่อ</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">ık</string>
<string id="MenuItemOff">Kapalı</string>
<string id="MenuItemTap">Musluk</string>
@ -36,5 +36,8 @@
<string id="ApiUrlNotFound">URL bulunamadı. Ayarlarda olası API URL hatası.</string>
<string id="ConfigUrlNotFound">URL bulunamadı. Ayarlarda Olası Yapılandırma URL'si hatası.</string>
<string id="UnhandledHttpErr">HTTP isteği hata kodunu döndürdü =</string>
<string id="TrailingSlashErr">API URL'sinin sonunda eğik çizgi '/' olmamalıdır</string>
<string id="TrailingSlashErr">API URL'sinin sonunda '/' eğik çizgi olmamalıdır</string>
<string id="FetchingMenuConfig">Menü Yapılandırması alınıyor..</string>
<string id="ExitViewTouch">Çıkmak için Sağa Kaydırın\nKalmak için Dokunun</string>
<string id="ExitViewButtons">Çıkış için Geri tuşuna basın\nKalmak için Enter'a basın</string>
</strings>

View File

@ -15,11 +15,11 @@
<!--
Generated by Google Translate: English to Ukrainian
Згенеровано Google Translate з англійської
Створено Google Translate з англійської
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">Увімкнено</string>
<string id="MenuItemOff">Вимкнено</string>
<string id="MenuItemTap">Торкніться</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL не знайдено. Потенційна помилка URL-адреси конфігурації в налаштуваннях.</string>
<string id="UnhandledHttpErr">Запит HTTP повернув код помилки =</string>
<string id="TrailingSlashErr">URL-адреса API не повинна містити косу риску '/'</string>
<string id="FetchingMenuConfig">Отримання конфігурації меню..</string>
<string id="ExitViewTouch">Проведіть праворуч, щоб вийти\nТоркніться, щоб залишитися</string>
<string id="ExitViewButtons">Натисніть «Назад», щоб вийти\nВведіть, щоб залишитися</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">TRÊN</string>
<string id="MenuItemOff">Tắt</string>
<string id="MenuItemTap">Vỗ nhẹ</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">Không tìm thấy URL. Lỗi URL cấu hình tiềm ẩn trong cài đặt.</string>
<string id="UnhandledHttpErr">Yêu cầu HTTP trả về mã lỗi =</string>
<string id="TrailingSlashErr">URL API không được có dấu gạch chéo ở cuối '/'</string>
<string id="FetchingMenuConfig">Đang tìm nạp cấu hình menu..</string>
<string id="ExitViewTouch">Vuốt sang phải để thoát\nNhấn để ở lại</string>
<string id="ExitViewButtons">Nhấn Quay lại để thoát\nNhập để ở lại</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn"></string>
<string id="MenuItemOff">离开</string>
<string id="MenuItemTap">轻敲</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">找不到网址。设置中可能存在配置 URL 错误。</string>
<string id="UnhandledHttpErr">HTTP请求返回错误码=</string>
<string id="TrailingSlashErr">API URL 不得有尾部斜杠“/”</string>
<string id="FetchingMenuConfig">正在获取菜单配置..</string>
<string id="ExitViewTouch">向右滑动即可退出\n点击即可停留</string>
<string id="ExitViewButtons">按回车键退出\n按回车键继续</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn"></string>
<string id="MenuItemOff">離開</string>
<string id="MenuItemTap">輕敲</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">找不到網址。設定中可能存在配置 URL 錯誤。</string>
<string id="UnhandledHttpErr">HTTP請求回傳錯誤碼=</string>
<string id="TrailingSlashErr">API URL 不得有尾部斜線“/”</string>
<string id="FetchingMenuConfig">正在取得選單配置..</string>
<string id="ExitViewTouch">向右滑動即可退出\n點選即可停留</string>
<string id="ExitViewButtons">按回車鍵退出\n按回車鍵繼續</string>
</strings>

View File

@ -19,7 +19,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">hidup</string>
<string id="MenuItemOff">Mati</string>
<string id="MenuItemTap">Ketik</string>
@ -37,4 +37,7 @@
<string id="ConfigUrlNotFound">URL tidak ditemui. Ralat URL Konfigurasi Potensi dalam tetapan.</string>
<string id="UnhandledHttpErr">Permintaan HTTP mengembalikan kod ralat =</string>
<string id="TrailingSlashErr">URL API tidak boleh mempunyai garis miring '/'</string>
<string id="FetchingMenuConfig">Mengambil Konfigurasi Menu..</string>
<string id="ExitViewTouch">Leret ke Kanan untuk Keluar\nKetik untuk Kekal</string>
<string id="ExitViewButtons">Tekan Kembali untuk Keluar\nMasuk untuk Kekal</string>
</strings>

View File

@ -13,7 +13,7 @@
-->
<strings>
<string id="AppName">HomeAssistant</string>
<string id="AppName" scope="glance">HomeAssistant</string>
<string id="MenuItemOn">On</string>
<string id="MenuItemOff">Off</string>
<string id="MenuItemTap">Tap</string>
@ -31,4 +31,7 @@
<string id="ConfigUrlNotFound">URL not found. Potential Configuration URL error in settings.</string>
<string id="UnhandledHttpErr">HTTP request returned error code = </string>
<string id="TrailingSlashErr">API URL must not have a trailing slash '/'</string>
<string id="FetchingMenuConfig">Fetching Menu Config..</string>
<string id="ExitViewTouch">Swipe to Right to Exit\nTap to Stay</string>
<string id="ExitViewButtons">Hit Back to Exit\nEnter to Stay</string>
</strings>

View File

@ -78,11 +78,10 @@ class ErrorView extends ScalableView {
function onUpdate(dc as Graphics.Dc) as Void {
var w = dc.getWidth();
var hw = w/2;
var bg = 0x3B444C;
if(dc has :setAntiAlias) {
dc.setAntiAlias(true);
}
dc.setColor(Graphics.COLOR_WHITE, bg);
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_BLUE);
dc.clear();
dc.drawBitmap(hw - mErrorIcon.getWidth()/2, mErrorIconMargin, mErrorIcon);
mTextArea.draw(dc);

View File

@ -24,24 +24,71 @@ using Toybox.WatchUi;
using Toybox.Application.Properties;
class HomeAssistantApp extends Application.AppBase {
private var mHaMenu;
private var quitTimer as QuitTimer;
private var strNoApiKey as Lang.String;
private var strNoApiUrl as Lang.String;
private var strNoConfigUrl as Lang.String;
private var strNoPhone as Lang.String;
private var strNoInternet as Lang.String;
private var strNoResponse as Lang.String;
private var strNoMenu as Lang.String;
private var strApiFlood as Lang.String;
private var strConfigUrlNotFound as Lang.String;
private var strUnhandledHttpErr as Lang.String;
private var strTrailingSlashErr as Lang.String;
private var mHaMenu as HomeAssistantView or Null;
private var mQuitTimer as QuitTimer or Null;
private var strNoApiKey as Lang.String or Null;
private var strNoApiUrl as Lang.String or Null;
private var strNoConfigUrl as Lang.String or Null;
private var strNoPhone as Lang.String or Null;
private var strNoInternet as Lang.String or Null;
private var strNoResponse as Lang.String or Null;
private var strNoMenu as Lang.String or Null;
private var strApiFlood as Lang.String or Null;
private var strConfigUrlNotFound as Lang.String or Null;
private var strUnhandledHttpErr as Lang.String or Null;
private var strTrailingSlashErr as Lang.String or Null;
private var mItemsToUpdate; // Array initialised by onReturnFetchMenuConfig()
private var mNextItemToUpdate = 0; // Index into the above array
function initialize() {
AppBase.initialize();
// ATTENTION when adding stuff into this block:
// Because of the >>GlanceView<<, it should contain only
// code, which is used as well for the glance:
// - https://developer.garmin.com/connect-iq/core-topics/glances/
//
// Also dealing with resources "Rez" needs attention, too. See
// "Resource Scopes":
// - https://developer.garmin.com/connect-iq/core-topics/resources/
//
// Classes which are used for the glance view, needed to be tagged
// with "(:glance)".
}
// onStart() is called on application start up
function onStart(state as Lang.Dictionary?) as Void {
// ATTENTION when adding stuff into this block:
// Because of the >>GlanceView<<, it should contain only
// code, which is used as well for the glance:
// - https://developer.garmin.com/connect-iq/core-topics/glances/
//
// Also dealing with resources "Rez" needs attention, too. See
// "Resource Scopes":
// - https://developer.garmin.com/connect-iq/core-topics/resources/
//
// Classes which are used for the glance view, needed to be tagged
// with "(:glance)".
}
// onStop() is called when your application is exiting
function onStop(state as Lang.Dictionary?) as Void {
// ATTENTION when adding stuff into this block:
// Because of the >>GlanceView<<, it should contain only
// code, which is used as well for the glance:
// - https://developer.garmin.com/connect-iq/core-topics/glances/
//
// Also dealing with resources "Rez" needs attention, too. See
// "Resource Scopes":
// - https://developer.garmin.com/connect-iq/core-topics/resources/
//
// Classes which are used for the glance view, needed to be tagged
// with "(:glance)".
}
// Return the initial view of your application here
function getInitialView() as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>? {
strNoApiKey = WatchUi.loadResource($.Rez.Strings.NoAPIKey);
strNoApiUrl = WatchUi.loadResource($.Rez.Strings.NoApiUrl);
strNoConfigUrl = WatchUi.loadResource($.Rez.Strings.NoConfigUrl);
@ -53,21 +100,8 @@ class HomeAssistantApp extends Application.AppBase {
strConfigUrlNotFound = WatchUi.loadResource($.Rez.Strings.ConfigUrlNotFound);
strUnhandledHttpErr = WatchUi.loadResource($.Rez.Strings.UnhandledHttpErr);
strTrailingSlashErr = WatchUi.loadResource($.Rez.Strings.TrailingSlashErr);
quitTimer = new QuitTimer();
}
mQuitTimer = new QuitTimer();
// onStart() is called on application start up
function onStart(state as Lang.Dictionary?) as Void {
quitTimer.begin();
}
// onStop() is called when your application is exiting
function onStop(state as Lang.Dictionary?) as Void {
quitTimer.stop();
}
// Return the initial view of your application here
function getInitialView() as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>? {
var api_url = Properties.getValue("api_url") as Lang.String;
if ((Properties.getValue("api_key") as Lang.String).length() == 0) {
@ -102,7 +136,7 @@ class HomeAssistantApp extends Application.AppBase {
return ErrorView.create(strNoInternet + ".");
} else {
fetchMenuConfig();
return [new WatchUi.View(), new WatchUi.BehaviorDelegate()] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
return [new RootView(self), new RootViewDelegate(self)] as Lang.Array<WatchUi.Views or WatchUi.InputDelegates>;
}
}
@ -136,7 +170,8 @@ class HomeAssistantApp extends Application.AppBase {
ErrorView.show(strConfigUrlNotFound);
} else if (responseCode == 200) {
mHaMenu = new HomeAssistantView(data, null);
WatchUi.switchToView(mHaMenu, new HomeAssistantViewDelegate(), WatchUi.SLIDE_IMMEDIATE);
mQuitTimer.begin();
pushHomeAssistantMenuView();
mItemsToUpdate = mHaMenu.getItemsToUpdate();
// Start the continuous update process that continues for as long as the application is running.
// The chain of functions from 'updateNextMenuItem()' calls 'updateNextMenuItem()' on completion.
@ -169,6 +204,14 @@ class HomeAssistantApp extends Application.AppBase {
);
}
function homeAssistantMenuIsLoaded() as Lang.Boolean{
return mHaMenu!=null;
}
function pushHomeAssistantMenuView() as Void{
WatchUi.pushView(mHaMenu, new HomeAssistantViewDelegate(true), WatchUi.SLIDE_IMMEDIATE);
}
// We need to spread out the API calls so as not to overload the results queue and cause Communications.BLE_QUEUE_FULL (-101) error.
// This function is called by a timer every Globals.menuItemUpdateInterval ms.
function updateNextMenuItem() as Void {
@ -178,9 +221,13 @@ class HomeAssistantApp extends Application.AppBase {
}
function getQuitTimer() as QuitTimer{
return quitTimer;
return mQuitTimer;
}
(:glance)
function getGlanceView() {
return [new HomeAssistantGlanceView()];
}
}
function getApp() as HomeAssistantApp {

View File

@ -0,0 +1,42 @@
//-----------------------------------------------------------------------------------
//
// 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, 23 November 2023
//
//
// Description:
//
// Glance view for GarminHomeAssistant
//
//-----------------------------------------------------------------------------------
using Toybox.Lang;
using Toybox.WatchUi;
using Toybox.Graphics;
(:glance)
class HomeAssistantGlanceView extends WatchUi.GlanceView {
private var mText as Lang.String;
function initialize() {
GlanceView.initialize();
mText = WatchUi.loadResource($.Rez.Strings.AppName);
}
function onUpdate(dc) as Void {
GlanceView.onUpdate(dc);
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_BLACK);
dc.drawText(0, dc.getHeight() / 2, Graphics.FONT_TINY, mText, Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER);
}
}

View File

@ -21,6 +21,7 @@
using Toybox.Application;
using Toybox.Lang;
using Toybox.Graphics;
using Toybox.System;
using Toybox.WatchUi;
class HomeAssistantView extends WatchUi.Menu2 {
@ -103,12 +104,23 @@ class HomeAssistantView extends WatchUi.Menu2 {
//
class HomeAssistantViewDelegate extends WatchUi.Menu2InputDelegate {
function initialize() {
private var mIsRootMenuView = false;
function initialize(isRootMenuView as Lang.Boolean) {
Menu2InputDelegate.initialize();
mIsRootMenuView = isRootMenuView;
}
function onBack() {
getApp().getQuitTimer().reset();
if (mIsRootMenuView){
// If its started from glance or as an activity, directly exit the widget/app
// (on widgets without glance, this exit() won`t do anything,
// so the base view will be shown instead, through the popView below this "if body")
System.exit();
}
WatchUi.popView(WatchUi.SLIDE_RIGHT);
}
@ -147,15 +159,13 @@ class HomeAssistantViewDelegate extends WatchUi.Menu2InputDelegate {
if (Globals.scDebug) {
System.println("Menu: " + haMenuItem.getLabel() + " " + haMenuItem.getId());
}
// No delegate state to be amended, so re-use 'self'.
WatchUi.pushView(haMenuItem.getMenuView(), self, WatchUi.SLIDE_LEFT);
WatchUi.pushView(haMenuItem.getMenuView(), new HomeAssistantViewDelegate(false), WatchUi.SLIDE_LEFT);
} else if (item instanceof HomeAssistantViewIconMenuItem) {
var haMenuItem = item as HomeAssistantViewIconMenuItem;
if (Globals.scDebug) {
System.println("IconMenu: " + haMenuItem.getLabel() + " " + haMenuItem.getId());
}
// No delegate state to be amended, so re-use 'self'.
WatchUi.pushView(haMenuItem.getMenuView(), self, WatchUi.SLIDE_LEFT);
WatchUi.pushView(haMenuItem.getMenuView(), new HomeAssistantViewDelegate(false), WatchUi.SLIDE_LEFT);
} else {
if (Globals.scDebug) {
System.println(item.getLabel() + " " + item.getId());

129
source/RootView.mc Normal file
View File

@ -0,0 +1,129 @@
//-----------------------------------------------------------------------------------
//
// 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, 5 December 2023
//
//
// Description:
//
// Application root view for GarminHomeAssistant
//
//-----------------------------------------------------------------------------------
using Toybox.Graphics;
using Toybox.Lang;
using Toybox.WatchUi;
class RootView extends ScalableView {
// ATTENTION when the app is running as a "widget" (that means, it runs on devices
// without glance view support), the input events in this view are limited, as
// described under "Base View and the Widget Carousel" on:
//
// https://developer.garmin.com/connect-iq/connect-iq-basics/app-types/
//
// Also the view type of the base view is limited too (for example "WatchUi.Menu2"
// is not possible)).
//
// Also System.exit() is not working/do nothing when running as a widget: A widget will be
// terminated automatically by OS after some time or can be quit manually, when on the base
// view a swipe to left / "back button" press is done.
private var mApp as HomeAssistantApp;
private var strFetchingMenuConfig as Lang.String;
private var strExit as Lang.String;
private var mTextAreaExit as WatchUi.TextArea or Null;
private var mTextAreaFetching as WatchUi.TextArea or Null;
function initialize(app as HomeAssistantApp) {
ScalableView.initialize();
mApp=app;
strFetchingMenuConfig = WatchUi.loadResource($.Rez.Strings.FetchingMenuConfig);
if (System.getDeviceSettings().isTouchScreen){
strExit = WatchUi.loadResource($.Rez.Strings.ExitViewTouch);
} else {
strExit = WatchUi.loadResource($.Rez.Strings.ExitViewButtons);
}
}
function onLayout(dc as Graphics.Dc) as Void {
var w = dc.getWidth();
var h = dc.getHeight();
mTextAreaExit = new WatchUi.TextArea({
:text => strExit,
:color => Graphics.COLOR_WHITE,
:font => Graphics.FONT_XTINY,
:justification => Graphics.TEXT_JUSTIFY_CENTER | Graphics.TEXT_JUSTIFY_VCENTER,
:locX => 0,
:locY => 83,
:width => w,
:height => h - 166
});
mTextAreaFetching = new WatchUi.TextArea({
:text => strFetchingMenuConfig,
:color => Graphics.COLOR_WHITE,
:font => Graphics.FONT_XTINY,
:justification => Graphics.TEXT_JUSTIFY_CENTER | Graphics.TEXT_JUSTIFY_VCENTER,
:locX => 0,
:locY => 83,
:width => w,
:height => h - 166
});
}
function onUpdate(dc as Graphics.Dc) as Void {
if(dc has :setAntiAlias) {
dc.setAntiAlias(true);
}
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_BLACK);
dc.clear();
if(mApp.homeAssistantMenuIsLoaded()) {
mTextAreaExit.draw(dc);
} else {
mTextAreaFetching.draw(dc);
}
}
}
class RootViewDelegate extends WatchUi.BehaviorDelegate {
var mApp as HomeAssistantApp;
function initialize(app as HomeAssistantApp ) {
BehaviorDelegate.initialize();
mApp=app;
}
function onTap(evt as WatchUi.ClickEvent) as Lang.Boolean {
return backToMainMenu();
}
function onSelect() as Lang.Boolean {
return backToMainMenu();
}
function onMenu() as Lang.Boolean{
return backToMainMenu();
}
private function backToMainMenu() as Lang.Boolean{
if(mApp.homeAssistantMenuIsLoaded()){
mApp.pushHomeAssistantMenuView();
return true;
}
return false;
}
}