From 76c2aaa24947128b5841f332eff2f664af4d6d1e Mon Sep 17 00:00:00 2001 From: Philip Abbey Date: Sat, 23 Dec 2023 14:30:58 +0000 Subject: [PATCH] Finishing off widget+app code changes. Glance now updates the status. Fix for quitting the application when persistently displaying an ErrorView. Added option for Widget RootView to immediately start HomeAssistant without waiting for a tap as requested by a user. --- resources-ara/strings/strings.xml | 2 + resources-bul/strings/strings.xml | 2 + resources-ces/strings/strings.xml | 2 + resources-dan/strings/strings.xml | 2 + resources-deu/strings/strings.xml | 6 +- resources-dut/strings/strings.xml | 4 +- resources-est/strings/strings.xml | 6 +- resources-fin/strings/strings.xml | 4 +- resources-fre/strings/strings.xml | 8 +- resources-gre/strings/strings.xml | 6 +- resources-heb/strings/strings.xml | 6 +- resources-hrv/strings/strings.xml | 2 + resources-hun/strings/strings.xml | 4 +- resources-ind/strings/strings.xml | 4 +- resources-ita/strings/strings.xml | 2 + resources-jpn/strings/strings.xml | 4 +- resources-kor/strings/strings.xml | 4 +- resources-lav/strings/strings.xml | 2 + resources-lit/strings/strings.xml | 2 + resources-nob/strings/strings.xml | 2 + resources-pol/strings/strings.xml | 2 + resources-por/strings/strings.xml | 2 + resources-ron/strings/strings.xml | 8 +- resources-slo/strings/strings.xml | 4 +- resources-slv/strings/strings.xml | 4 +- resources-spa/strings/strings.xml | 2 + resources-swe/strings/strings.xml | 4 +- resources-tha/strings/strings.xml | 2 + resources-tur/strings/strings.xml | 6 +- resources-ukr/strings/strings.xml | 6 +- resources-vie/strings/strings.xml | 6 +- resources-zhs/strings/strings.xml | 2 + resources-zht/strings/strings.xml | 2 + resources-zsm/strings/strings.xml | 2 + resources/settings/properties.xml | 14 +++ resources/settings/settings.xml | 9 ++ resources/strings/strings.xml | 2 + source/Alert.mc | 34 +++--- source/ErrorView.mc | 8 +- source/Globals.mc | 5 + source/HomeAssistantApp.mc | 150 +++++++++++++++++++------- source/HomeAssistantToggleMenuItem.mc | 31 ++---- 42 files changed, 272 insertions(+), 107 deletions(-) diff --git a/resources-ara/strings/strings.xml b/resources-ara/strings/strings.xml index fcf9cf1..f7f388c 100644 --- a/resources-ara/strings/strings.xml +++ b/resources-ara/strings/strings.xml @@ -40,6 +40,7 @@ متاح تدقيق... غير متوفره + غير مهيأ قائمة طعام مفتاح API لـ HomeAssistant. @@ -50,4 +51,5 @@ بعد هذا الوقت (بالثواني)، يتم إغلاق مربع حوار تأكيد الإجراء تلقائيًا ويتم إلغاء الإجراء. اضبط على 0 لتعطيل المهلة. تمثيل الأنواع بأيقونات (إيقاف) أو بالتسميات (تشغيل). محاذاة القائمة لليسار (إيقاف) أو لليمين (تشغيل). + (القطعة فقط) قم بتشغيل التطبيق تلقائيًا من الأداة دون انتظار نقرة واحدة. \ No newline at end of file diff --git a/resources-bul/strings/strings.xml b/resources-bul/strings/strings.xml index 2308ae5..7c70a3c 100644 --- a/resources-bul/strings/strings.xml +++ b/resources-bul/strings/strings.xml @@ -40,6 +40,7 @@ На разположение Проверка... Недостъпен + Неконфигуриран Меню API ключ за HomeAssistant. @@ -50,4 +51,5 @@ След това време (в секунди) диалоговият прозорец за потвърждение за действие се затваря автоматично и действието се отменя. Задайте 0, за да деактивирате изчакването. Представяне на типове с икони (изключено) или с етикети (включено). Ляво (изключено) или дясно (включено) подравняване на менюто. + (Само за джаджа) Автоматично стартирайте приложението от джаджата, без да чакате докосване. \ No newline at end of file diff --git a/resources-ces/strings/strings.xml b/resources-ces/strings/strings.xml index a002808..80217d0 100644 --- a/resources-ces/strings/strings.xml +++ b/resources-ces/strings/strings.xml @@ -40,6 +40,7 @@ Dostupný Kontrola... Není k dispozici + Nenakonfigurováno Jídelní lístek Klíč API pro HomeAssistant. @@ -50,4 +51,5 @@ Po uplynutí této doby (v sekundách) se dialog pro potvrzení akce automaticky zavře a akce se zruší. Nastavením na 0 deaktivujete časový limit. Znázornění typů pomocí ikon (vypnuto) nebo pomocí štítků (zapnuto). Zarovnání nabídky vlevo (vypnuto) nebo vpravo (zapnuto). + (Pouze widget) Automaticky spusťte aplikaci z widgetu bez čekání na klepnutí. \ No newline at end of file diff --git a/resources-dan/strings/strings.xml b/resources-dan/strings/strings.xml index be369fc..0eb465d 100644 --- a/resources-dan/strings/strings.xml +++ b/resources-dan/strings/strings.xml @@ -40,6 +40,7 @@ Ledig Tjekker... Ikke tilgængelig + Ukonfigureret Menu API-nøgle til HomeAssistant. @@ -50,4 +51,5 @@ Efter dette tidspunkt (i sekunder) lukkes en bekræftelsesdialog for en handling automatisk, og handlingen annulleres. Indstil til 0 for at deaktivere timeout. Repræsenterer typer med ikoner (fra) eller med etiketter (til). Venstre (fra) eller Højre (til) menujustering. + (Kun widget) Start automatisk applikationen fra widgetten uden at vente på et tryk. \ No newline at end of file diff --git a/resources-deu/strings/strings.xml b/resources-deu/strings/strings.xml index f76d107..57cc521 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,11 +35,12 @@ URL nicht gefunden. Möglicher API-URL-Fehler in den Einstellungen. URL nicht gefunden. Möglicher Konfigurations-URL-Fehler in den Einstellungen. Von der HTTP-Anfrage wurde kein JSON zurückgegeben. - 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. Verfügbar Überprüfung... Nicht verfügbar + Unkonfiguriert Speisekarte API-Schlüssel für HomeAssistant. @@ -50,4 +51,5 @@ Nach dieser Zeit (in Sekunden) wird automatisch ein Bestätigungsdialog für eine Aktion geschlossen und die Aktion abgebrochen. Auf 0 setzen, um das Timeout zu deaktivieren. Darstellen von Typen mit Symbolen (aus) oder mit Beschriftungen (ein). Menüausrichtung links (aus) oder rechts (ein). + (Nur Widget) Starten Sie die Anwendung automatisch über das Widget, ohne auf einen Tipp warten zu müssen. \ No newline at end of file diff --git a/resources-dut/strings/strings.xml b/resources-dut/strings/strings.xml index c1dc5b6..20b60e1 100644 --- a/resources-dut/strings/strings.xml +++ b/resources-dut/strings/strings.xml @@ -40,8 +40,9 @@ Beschikbaar Controleren... Niet beschikbaar + Niet geconfigureerd Menu - + API-sleutel voor HomeAssistant. Toegangstoken met lange levensduur. URL voor HomeAssistant API. @@ -50,4 +51,5 @@ Na deze tijd (in seconden) wordt automatisch een bevestigingsvenster voor een actie gesloten en wordt de actie geannuleerd. Stel in op 0 om de time-out uit te schakelen. Typen weergeven met pictogrammen (uit) of met labels (aan). Links (uit) of rechts (aan) Menu-uitlijning. + (Alleen Widget) Start de applicatie automatisch vanuit de widget zonder te wachten op een tik. \ No newline at end of file diff --git a/resources-est/strings/strings.xml b/resources-est/strings/strings.xml index 0ae229c..8740623 100644 --- a/resources-est/strings/strings.xml +++ b/resources-est/strings/strings.xml @@ -31,7 +31,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 taotluste esitamist. URL-i ei leitud. Võimalik API URL-i viga seadetes. URL-i ei leitud. Võimalik konfiguratsiooni URL-i viga seadetes. HTTP päringust ei tagastatud ühtegi JSON-i. @@ -40,6 +40,7 @@ Saadaval Kontrollimine... Pole saadaval + Konfigureerimata Menüü API-võti HomeAssistantile. @@ -48,6 +49,7 @@ URL menüü konfigureerimiseks (JSON). Aegumine sekundites. Seadme aku säästmiseks sulgege rakendus pärast seda tegevusetusperioodi. Pärast seda aega (sekundites) suletakse automaatselt toimingu kinnitusdialoog ja toiming tühistatakse. Ajalõpu keelamiseks määrake väärtusele 0. - Tüüpide esindamine ikoonidega (väljas) või siltidega (sees). + Tüüpide tähistamine ikoonidega (väljas) või siltidega (sees). Vasak (väljas) või parem (sees) menüü joondamine. + (Ainult vidin) Käivitage rakendus automaatselt vidinast ilma puudutust ootamata. \ No newline at end of file diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml index 16b25ba..2419693 100644 --- a/resources-fin/strings/strings.xml +++ b/resources-fin/strings/strings.xml @@ -40,6 +40,7 @@ Saatavilla Tarkistetaan... Ei saatavilla + Määrittämätön Valikko API-avain HomeAssistantille. @@ -47,7 +48,8 @@ HomeAssistant API:n URL-osoite. URL-osoite valikon määrityksiä varten (JSON). Aikakatkaisu sekunneissa. Poistu sovelluksesta tämän käyttämättömyyden jälkeen säästääksesi laitteen akkua. - Tämän ajan kuluttua (sekunneissa) toiminnon vahvistusikkuna suljetaan automaattisesti ja toiminto peruutetaan. Aseta arvoksi 0 poistaaksesi aikakatkaisun käytöstä. + Tämän ajan kuluttua (sekunneissa) toiminnon vahvistusikkuna suljetaan automaattisesti ja toiminto peruutetaan. Aseta arvoksi 0, jos haluat poistaa aikakatkaisun käytöstä. Esittää tyyppejä kuvakkeilla (pois päältä) tai tarroilla (päällä). Vasen (pois) tai oikea (päällä) valikon kohdistus. + (Vain widget) Käynnistä sovellus automaattisesti widgetistä odottamatta napautusta. \ No newline at end of file diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml index 85be66f..149e6cc 100644 --- a/resources-fre/strings/strings.xml +++ b/resources-fre/strings/strings.xml @@ -20,7 +20,7 @@ HomeAssistant - Activé + Activé Désactivé Clic Menu @@ -31,7 +31,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. Aucun JSON renvoyé par la requête HTTP. @@ -40,14 +40,16 @@ Disponible Vérification... Indisponible + Non configuré Menu Clé API pour HomeAssistant. Jeton d'accès de longue durée. URL de l’API HomeAssistant. URL de configuration des menus (JSON). - Délai d'attente en secondes. Quittez l'application après cette période d'inactivité pour économiser la batterie de l'appareil. + Délai d'expiration en secondes. Quittez l'application après cette période d'inactivité pour économiser la batterie de l'appareil. Passé ce délai (en secondes), une boîte de dialogue de confirmation d'une action se ferme automatiquement et l'action est annulée. Réglez sur 0 pour désactiver le délai d'attente. Représentation des types avec des icônes (off) ou avec des étiquettes (on). Alignement du menu à gauche (désactivé) ou à droite (activé). + (Widget uniquement) Démarrez automatiquement l'application à partir du widget sans attendre un clic. \ No newline at end of file diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml index 6d04999..9a21be5 100644 --- a/resources-gre/strings/strings.xml +++ b/resources-gre/strings/strings.xml @@ -29,17 +29,18 @@ Δεν υπάρχει σύνδεση στο διαδίκτυο Καμία απάντηση, ελέγξτε τη σύνδεση στο Διαδίκτυο Δεν υπάρχει κλειδί API στις ρυθμίσεις της εφαρμογής - Δεν υπάρχει διεύθυνση URL API στις ρυθμίσεις της εφαρμογής + Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής Κλήσεις API πολύ γρήγορες. Παρακαλώ επιβραδύνετε τα αιτήματά σας. Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL API στις ρυθμίσεις. - Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διεύθυνσης URL διαμόρφωσης στις ρυθμίσεις. + Η διεύθυνση URL δεν βρέθηκε. Πιθανό σφάλμα διαμόρφωσης URL στις ρυθμίσεις. Δεν επιστράφηκε JSON από αίτημα HTTP. Το αίτημα HTTP επέστρεψε κωδικό σφάλματος = Η διεύθυνση URL του API δεν πρέπει να έχει τελική κάθετο "/" Διαθέσιμος Ελεγχος... Μη διαθέσιμο + Μη διαμορφωμένο Μενού Κλειδί API για το HomeAssistant. @@ -50,4 +51,5 @@ Μετά από αυτό το χρονικό διάστημα (σε δευτερόλεπτα), ένα παράθυρο διαλόγου επιβεβαίωσης για μια ενέργεια κλείνει αυτόματα και η ενέργεια ακυρώνεται. Ορίστε στο 0 για να απενεργοποιήσετε το χρονικό όριο. Αναπαράσταση τύπων με εικονίδια (απενεργοποίηση) ή με ετικέτες (ενεργό). Αριστερά (απενεργοποίηση) ή Δεξιά (ενεργό) Ευθυγράμμιση μενού. + (Μόνο widget) Αυτόματη εκκίνηση της εφαρμογής από το widget χωρίς να περιμένετε ένα πάτημα. \ No newline at end of file diff --git a/resources-heb/strings/strings.xml b/resources-heb/strings/strings.xml index 85f844f..fa911cf 100644 --- a/resources-heb/strings/strings.xml +++ b/resources-heb/strings/strings.xml @@ -30,7 +30,7 @@ אין תגובה, בדוק חיבור לאינטרנט אין מפתח API בהגדרות האפליקציה אין כתובת API בהגדרות האפליקציה - אין כתובת אתר תצורה בהגדרות האפליקציה + אין כתובת URL לתצורה בהגדרות האפליקציה קריאות API מהירות מדי. נא להאט את הבקשות שלך. כתובת האתר לא נמצאה. שגיאה פוטנציאלית של כתובת ה-API בהגדרות. כתובת האתר לא נמצאה. שגיאת כתובת אתר פוטנציאלית של תצורה בהגדרות. @@ -40,6 +40,7 @@ זמין בודק... אינו זמין + לא מוגדר תַפרִיט מפתח API עבור HomeAssistant. @@ -47,7 +48,8 @@ כתובת URL עבור HomeAssistant API. כתובת URL לתצורת תפריט (JSON). פסק זמן בשניות. צא מהאפליקציה לאחר תקופה זו של חוסר פעילות כדי לחסוך בסוללת המכשיר. - לאחר זמן זה (בשניות), תיבת דו-שיח לאישור פעולה נסגרת אוטומטית והפעולה מבוטלת. הגדר ל-0 כדי להשבית את הזמן הקצוב. + לאחר זמן זה (בשניות), תיבת דו-שיח לאישור פעולה נסגרת אוטומטית והפעולה מבוטלת. הגדר ל-0 כדי לבטל את הזמן הקצוב. ייצוג סוגים עם סמלים (כבוי) או עם תוויות (מופעל). יישור תפריט שמאלה (כבוי) או ימינה (מופעל). + (יישומון בלבד) הפעל אוטומטית את האפליקציה מהווידג'ט מבלי לחכות להקשה. \ No newline at end of file diff --git a/resources-hrv/strings/strings.xml b/resources-hrv/strings/strings.xml index c30697a..79ac32c 100644 --- a/resources-hrv/strings/strings.xml +++ b/resources-hrv/strings/strings.xml @@ -40,6 +40,7 @@ Dostupno Provjera... Nedostupan + Nekonfigurirano Jelovnik API ključ za HomeAssistant. @@ -50,4 +51,5 @@ Nakon tog vremena (u sekundama), dijaloški okvir za potvrdu radnje automatski se zatvara i radnja se poništava. Postavite na 0 da onemogućite vremensko ograničenje. Predstavljanje tipova ikonama (isključeno) ili oznakama (uključeno). Lijevo (isključeno) ili desno (uključeno) poravnanje izbornika. + (Samo widget) Automatski pokrenite aplikaciju iz widgeta bez čekanja na dodir. \ No newline at end of file diff --git a/resources-hun/strings/strings.xml b/resources-hun/strings/strings.xml index cc7f2dc..22da591 100644 --- a/resources-hun/strings/strings.xml +++ b/resources-hun/strings/strings.xml @@ -40,6 +40,7 @@ Elérhető Ellenőrzés... Nem érhető el + Nincs konfigurálva Menü API-kulcs a HomeAssistant számára. @@ -47,7 +48,8 @@ A HomeAssistant API URL-je. URL a menükonfigurációhoz (JSON). Időtúllépés másodpercben. Az eszköz akkumulátorának kímélése érdekében lépjen ki az alkalmazásból ezen inaktivitási időszak után. - Ezen idő elteltével (másodpercben) egy művelet megerősítő párbeszédpanele automatikusan bezárul, és a művelet megszakad. Állítsa 0-ra az időtúllépés letiltásához. + Ezen idő letelte után (másodpercben) a művelet megerősítő párbeszédablakja automatikusan bezárul, és a művelet megszakad. Állítsa 0-ra az időtúllépés letiltásához. A típusokat ikonokkal (kikapcsolva) vagy címkékkel (bekapcsolva) ábrázolja. Balra (ki) vagy Jobbra (be) Menüigazítás. + (Csak widget) Az alkalmazás automatikus indítása a widgetről anélkül, hogy egy érintésre várna. \ No newline at end of file diff --git a/resources-ind/strings/strings.xml b/resources-ind/strings/strings.xml index 6d8e673..0a8591d 100644 --- a/resources-ind/strings/strings.xml +++ b/resources-ind/strings/strings.xml @@ -30,7 +30,7 @@ Tidak Ada Respon, periksa koneksi Internet Tidak ada kunci API di pengaturan aplikasi Tidak ada URL API di pengaturan aplikasi - Tidak ada URL konfigurasi dalam pengaturan aplikasi + Tidak ada URL konfigurasi di pengaturan aplikasi Panggilan API terlalu cepat. Harap memperlambat permintaan Anda. URL tidak ditemukan. Potensi kesalahan URL API dalam pengaturan. URL tidak ditemukan. Potensi kesalahan URL Konfigurasi dalam pengaturan. @@ -40,6 +40,7 @@ Tersedia Memeriksa... Tidak tersedia + Tidak dikonfigurasi Menu Kunci API untuk HomeAssistant. @@ -50,4 +51,5 @@ Setelah waktu ini (dalam detik), dialog konfirmasi untuk suatu tindakan secara otomatis ditutup dan tindakan tersebut dibatalkan. Setel ke 0 untuk menonaktifkan batas waktu. Mewakili tipe dengan ikon (mati) atau dengan label (aktif). Penyelarasan Menu Kiri (mati) atau Kanan (hidup). + (Khusus widget) Secara otomatis memulai aplikasi dari widget tanpa menunggu ketukan. \ No newline at end of file diff --git a/resources-ita/strings/strings.xml b/resources-ita/strings/strings.xml index de8bcdb..1c02546 100644 --- a/resources-ita/strings/strings.xml +++ b/resources-ita/strings/strings.xml @@ -40,6 +40,7 @@ Disponibile Controllo... Non disponibile + Non configurato Menù Chiave API per HomeAssistant. @@ -50,4 +51,5 @@ Trascorso questo tempo (in secondi), una finestra di dialogo di conferma per un'azione viene chiusa automaticamente e l'azione viene annullata. Impostare su 0 per disabilitare il timeout. Rappresentazione dei tipi con icone (disattivata) o con etichette (attivata). Allineamento del menu a sinistra (spento) o a destra (acceso). + (Solo widget) Avvia automaticamente l'applicazione dal widget senza attendere un tocco. \ No newline at end of file diff --git a/resources-jpn/strings/strings.xml b/resources-jpn/strings/strings.xml index 9394488..ca86db1 100644 --- a/resources-jpn/strings/strings.xml +++ b/resources-jpn/strings/strings.xml @@ -40,14 +40,16 @@ 利用可能 チェック中... 利用不可 + 未構成 メニュー ホームアシスタントの API キー。 - 有効期間の長いアクセス トークン。 + 有効期限の長いアクセス トークン。 ホームアシスタント API の URL。 メニュー構成の URL (JSON)。 秒単位のタイムアウト。デバイスのバッテリーを節約するために、この期間非アクティブになった後はアプリケーションを終了してください。 この時間 (秒単位) が経過すると、アクションの確認ダイアログが自動的に閉じられ、アクションがキャンセルされます。タイムアウトを無効にするには、0 に設定します。 タイプをアイコン (オフ) またはラベル (オン) で表します。 左 (オフ) または右 (オン) メニューの配置。 + (ウィジェットのみ)タップを待たずにウィジェットからアプリを自動起動します。 \ No newline at end of file diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml index a2cc5c0..7b5c855 100644 --- a/resources-kor/strings/strings.xml +++ b/resources-kor/strings/strings.xml @@ -36,10 +36,11 @@ URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다. HTTP 요청에서 JSON이 반환되지 않았습니다. HTTP 요청이 오류 코드를 반환했습니다 = - API URL에는 후행 슬래시 '/'가 없어야 합니다. + API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다. 사용 가능 확인 중... 없는 + 구성되지 않음 메뉴 HomeAssistant용 API 키. @@ -50,4 +51,5 @@ 이 시간(초)이 지나면 작업에 대한 확인 대화 상자가 자동으로 닫히고 작업이 취소됩니다. 시간 초과를 비활성화하려면 0으로 설정합니다. 아이콘(끄기) 또는 레이블(켜기)로 유형을 나타냅니다. 왼쪽(끄기) 또는 오른쪽(켜기) 메뉴 정렬. + (위젯만 해당) 탭을 기다리지 않고 위젯에서 애플리케이션을 자동으로 시작합니다. \ No newline at end of file diff --git a/resources-lav/strings/strings.xml b/resources-lav/strings/strings.xml index bae5625..727f4fb 100644 --- a/resources-lav/strings/strings.xml +++ b/resources-lav/strings/strings.xml @@ -40,6 +40,7 @@ Pieejams Notiek pārbaude... Nav pieejams + Nav konfigurēts Izvēlne API atslēga Home Assistant. @@ -50,4 +51,5 @@ Pēc šī laika (sekundēs) tiek automātiski aizvērts darbības apstiprinājuma dialoglodziņš un darbība tiek atcelta. Iestatiet uz 0, lai atspējotu taimautu. Apzīmē veidus ar ikonām (izslēgts) vai ar etiķetēm (ieslēgts). Kreisā (izslēgta) vai labā (ieslēgta) izvēlnes izlīdzināšana. + (tikai logrīkam) Automātiski startējiet lietojumprogrammu no logrīka, negaidot pieskārienu. \ No newline at end of file diff --git a/resources-lit/strings/strings.xml b/resources-lit/strings/strings.xml index 9f62f75..d99e7d8 100644 --- a/resources-lit/strings/strings.xml +++ b/resources-lit/strings/strings.xml @@ -40,6 +40,7 @@ Galima Tikrinama... Nepasiekiamas + Nesukonfigūruotas Meniu API raktas, skirtas „HomeAssistant“. @@ -50,4 +51,5 @@ Praėjus šiam laikui (sekundėmis), veiksmo patvirtinimo dialogo langas automatiškai uždaromas ir veiksmas atšaukiamas. Nustatykite 0, kad išjungtumėte skirtąjį laiką. Tipai su piktogramomis (išjungta) arba etiketėmis (įjungta). Kairysis (išjungtas) arba dešinysis (įjungtas) meniu lygiavimas. + (Tik valdiklis) Automatiškai paleiskite programą iš valdiklio, nelaukdami palietimo. \ No newline at end of file diff --git a/resources-nob/strings/strings.xml b/resources-nob/strings/strings.xml index 37fdbea..044215f 100644 --- a/resources-nob/strings/strings.xml +++ b/resources-nob/strings/strings.xml @@ -40,6 +40,7 @@ Tilgjengelig Sjekker... Utilgjengelig + Ukonfigurert Meny API-nøkkel for HomeAssistant. @@ -50,4 +51,5 @@ Etter denne tiden (i sekunder), lukkes en bekreftelsesdialog for en handling automatisk og handlingen avbrytes. Sett til 0 for å deaktivere tidsavbruddet. Representerer typer med ikoner (av) eller med etiketter (på). Venstre (av) eller Høyre (på) Menyjustering. + (Kun widget) Start applikasjonen automatisk fra widgeten uten å vente på et trykk. \ No newline at end of file diff --git a/resources-pol/strings/strings.xml b/resources-pol/strings/strings.xml index 783aeb8..adf1b27 100644 --- a/resources-pol/strings/strings.xml +++ b/resources-pol/strings/strings.xml @@ -40,6 +40,7 @@ Dostępny Kontrola... Niedostępne + Nieskonfigurowane Menu Klucz API dla HomeAssistant. @@ -50,4 +51,5 @@ Po tym czasie (w sekundach) okno dialogowe z potwierdzeniem akcji zamyka się automatycznie, a akcja zostaje anulowana. Ustaw na 0, aby wyłączyć limit czasu. Reprezentowanie typów za pomocą ikon (wyłączone) lub etykiet (włączone). Wyrównanie menu do lewej (wyłączone) lub do prawej (włączone). + (Tylko widget) Automatycznie uruchamiaj aplikację z widgetu, bez czekania na dotknięcie. \ No newline at end of file diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml index ee84c84..620fc13 100644 --- a/resources-por/strings/strings.xml +++ b/resources-por/strings/strings.xml @@ -40,6 +40,7 @@ Disponível Verificando... Indisponível + Não configurado Cardápio Chave de API para HomeAssistant. @@ -50,4 +51,5 @@ Após esse tempo (em segundos), uma caixa de diálogo de confirmação de uma ação é automaticamente fechada e a ação é cancelada. Defina como 0 para desativar o tempo limite. Representando tipos com ícones (desligado) ou com rótulos (ligado). Alinhamento do menu à esquerda (desligado) ou à direita (ligado). + (Somente widget) Inicie automaticamente o aplicativo a partir do widget sem esperar por um toque. \ No newline at end of file diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml index e5fb7b3..5c0d7d6 100644 --- a/resources-ron/strings/strings.xml +++ b/resources-ron/strings/strings.xml @@ -21,7 +21,7 @@ HomeAssistant Pe - Oprit + Off Atingeți Meniul Sigur? @@ -31,15 +31,16 @@ 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. - Nu a fost returnat niciun JSON de la solicitarea HTTP. + Niciun JSON nu a fost returnat de la solicitarea HTTP. Solicitarea HTTP a returnat codul de eroare = Adresa URL API nu trebuie să aibă o bară oblică „/” Disponibil Control... Indisponibil + Neconfigurat Meniul Cheie API pentru HomeAssistant. @@ -50,4 +51,5 @@ După acest timp (în secunde), un dialog de confirmare pentru o acțiune este închis automat și acțiunea este anulată. Setați la 0 pentru a dezactiva timeout-ul. Reprezentarea tipurilor cu pictograme (dezactivate) sau cu etichete (activate). Alinierea meniului la stânga (dezactivată) sau la dreapta (activată). + (Numai widget) Porniți automat aplicația din widget fără a aștepta o atingere. \ No newline at end of file diff --git a/resources-slo/strings/strings.xml b/resources-slo/strings/strings.xml index 9162e3d..caa140d 100644 --- a/resources-slo/strings/strings.xml +++ b/resources-slo/strings/strings.xml @@ -40,14 +40,16 @@ Dostupné Prebieha kontrola... nedostupné + Nekonfigurované Ponuka Kľúč API pre HomeAssistant. - Prístupový token s dlhou životnosťou. + Dlhotrvajúci prístupový token. URL pre HomeAssistant API. Webová adresa pre konfiguráciu ponuky (JSON). Časový limit v sekundách. Po tejto dobe nečinnosti ukončite aplikáciu, aby ste šetrili batériu zariadenia. Po tomto čase (v sekundách) sa dialógové okno s potvrdením akcie automaticky zatvorí a akcia sa zruší. Ak chcete časový limit deaktivovať, nastavte na 0. Typy predstavujú ikony (vypnuté) alebo štítky (zapnuté). Zarovnanie ponuky vľavo (vypnuté) alebo vpravo (zapnuté). + (Len miniaplikácia) Automaticky spustite aplikáciu z miniaplikácie bez čakania na klepnutie. \ No newline at end of file diff --git a/resources-slv/strings/strings.xml b/resources-slv/strings/strings.xml index b40bd8c..1feb812 100644 --- a/resources-slv/strings/strings.xml +++ b/resources-slv/strings/strings.xml @@ -40,14 +40,16 @@ Na voljo Preverjanje ... Ni na voljo + Nekonfigurirano meni API ključ za HomeAssistant. Dolgoživ dostopni žeton. - URL za HomeAssistant API. + URL za API HomeAssistant. URL za konfiguracijo menija (JSON). Časovna omejitev v sekundah. Po tem obdobju nedejavnosti zaprite aplikacijo, da prihranite baterijo naprave. Po tem času (v sekundah) se potrditveno pogovorno okno za dejanje samodejno zapre in dejanje je preklicano. Nastavite na 0, da onemogočite časovno omejitev. Predstavljanje tipov z ikonami (izklopljeno) ali z oznakami (vklopljeno). Leva (izklopljena) ali desna (vklopljena) poravnava menija. + (Samo pripomoček) Samodejno zaženite aplikacijo iz pripomočka, ne da bi čakali na dotik. \ No newline at end of file diff --git a/resources-spa/strings/strings.xml b/resources-spa/strings/strings.xml index e5d91f1..5961adb 100644 --- a/resources-spa/strings/strings.xml +++ b/resources-spa/strings/strings.xml @@ -40,6 +40,7 @@ Disponible Comprobación... Indisponible + Desconfigurado Menú Clave API para HomeAssistant. @@ -50,4 +51,5 @@ Después de este tiempo (en segundos), se cierra automáticamente un cuadro de diálogo de confirmación de una acción y se cancela la acción. Establezca en 0 para desactivar el tiempo de espera. Representando tipos con iconos (apagados) o con etiquetas (encendido). Alineación del menú izquierda (desactivada) o derecha (activada). + (Solo widget) Inicia automáticamente la aplicación desde el widget sin esperar un toque. \ No newline at end of file diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml index 3cc3c86..dcfed57 100644 --- a/resources-swe/strings/strings.xml +++ b/resources-swe/strings/strings.xml @@ -40,14 +40,16 @@ Tillgängliga Kontroll... Inte tillgänglig + Okonfigurerad Meny API-nyckel för HomeAssistant. Långlivad åtkomsttoken. URL för HomeAssistant API. URL för menykonfiguration (JSON). - Timeout i sekunder. Avsluta programmet efter denna period av inaktivitet för att spara enhetens batteri. + Timeout på sekunder. Avsluta programmet efter denna period av inaktivitet för att spara enhetens batteri. Efter denna tid (i sekunder) stängs en bekräftelsedialog för en åtgärd automatiskt och åtgärden avbryts. Ställ in på 0 för att inaktivera timeout. Representerar typer med ikoner (av) eller med etiketter (på). Vänster (av) eller höger (på) menyjustering. + (Endast widget) Starta programmet automatiskt från widgeten utan att vänta på ett tryck. \ No newline at end of file diff --git a/resources-tha/strings/strings.xml b/resources-tha/strings/strings.xml index 6aabc27..7ebd76a 100644 --- a/resources-tha/strings/strings.xml +++ b/resources-tha/strings/strings.xml @@ -40,6 +40,7 @@ มีอยู่ กำลังตรวจสอบ... ไม่พร้อมใช้งาน + ไม่ได้กำหนดค่า เมนู คีย์ API สำหรับ HomeAssistant @@ -50,4 +51,5 @@ หลังจากเวลานี้ (เป็นวินาที) กล่องโต้ตอบการยืนยันสำหรับการดำเนินการจะปิดโดยอัตโนมัติและการดำเนินการจะถูกยกเลิก ตั้งค่าเป็น 0 เพื่อปิดใช้งานการหมดเวลา เป็นตัวแทนประเภทด้วยไอคอน (ปิด) หรือมีป้ายกำกับ (เปิด) การจัดตำแหน่งเมนูซ้าย (ปิด) หรือขวา (เปิด) + (วิดเจ็ตเท่านั้น) เริ่มแอปพลิเคชันโดยอัตโนมัติจากวิดเจ็ตโดยไม่ต้องรอการแตะ \ No newline at end of file diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml index 7d2a8ca..c1bf51d 100644 --- a/resources-tur/strings/strings.xml +++ b/resources-tur/strings/strings.xml @@ -36,10 +36,11 @@ URL bulunamadı. Ayarlarda Olası Yapılandırma URL'si hatası. HTTP isteğinden JSON döndürülmedi. 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 Mevcut Kontrol etme... Kullanım dışı + Yapılandırılmamış Menü HomeAssistant için API Anahtarı. @@ -47,7 +48,8 @@ HomeAssistant API'sinin URL'si. Menü yapılandırmasının URL'si (JSON). Saniye cinsinden zaman aşımı. Cihazın pilinden tasarruf etmek için bu süre boyunca işlem yapılmadığında uygulamadan çıkın. - Bu sürenin sonunda (saniye cinsinden), bir eyleme ilişkin onay iletişim kutusu otomatik olarak kapatılır ve eylem iptal edilir. Zaman aşımını devre dışı bırakmak için 0'a ayarlayın. + Bu sürenin sonunda (saniye olarak), bir eyleme ilişkin onay iletişim kutusu otomatik olarak kapatılır ve eylem iptal edilir. Zaman aşımını devre dışı bırakmak için 0'a ayarlayın. Türleri simgelerle (kapalı) veya etiketlerle (açık) temsil etme. Sol (kapalı) veya Sağ (açık) Menü Hizalaması. + (Yalnızca Widget) Dokunmayı beklemeden uygulamayı widget'tan otomatik olarak başlatın. \ No newline at end of file diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml index 0ca091e..a5b19c2 100644 --- a/resources-ukr/strings/strings.xml +++ b/resources-ukr/strings/strings.xml @@ -15,7 +15,7 @@ @@ -40,14 +40,16 @@ в наявності Перевірка... Недоступний + Неналаштований Меню Ключ API для HomeAssistant. Довговічний маркер доступу. URL для HomeAssistant API. - URL-адреса для налаштування меню (JSON). + URL для налаштування меню (JSON). Час очікування в секундах. Вийдіть із програми після цього періоду бездіяльності, щоб заощадити батарею пристрою. Після закінчення цього часу (у секундах) діалогове вікно підтвердження дії автоматично закривається, а дія скасовується. Встановіть 0, щоб вимкнути тайм-аут. Представлення типів піктограмами (вимкнено) або мітками (увімкнено). Ліворуч (вимкнено) або праворуч (увімкнено) вирівнювання меню. + (Лише віджет) Автоматично запускайте програму з віджета, не чекаючи дотику. \ No newline at end of file diff --git a/resources-vie/strings/strings.xml b/resources-vie/strings/strings.xml index ebe993f..ca576fa 100644 --- a/resources-vie/strings/strings.xml +++ b/resources-vie/strings/strings.xml @@ -40,6 +40,7 @@ Có sẵn Đang kiểm tra... Không có sẵn + Chưa được định cấu hình Thực đơn Khóa API cho HomeAssistant. @@ -47,7 +48,8 @@ URL cho API HomeAssistant. URL cho cấu hình menu (JSON). Thời gian chờ tính bằng giây. Thoát khỏi ứng dụng sau khoảng thời gian không hoạt động này để tiết kiệm pin cho thiết bị. - Sau thời gian này (tính bằng giây), hộp thoại xác nhận cho một hành động sẽ tự động đóng lại và hành động đó sẽ bị hủy. Đặt thành 0 để tắt thời gian chờ. - Thể hiện các loại bằng biểu tượng (tắt) hoặc bằng nhãn (bật). + Sau thời gian này (tính bằng giây), hộp thoại xác nhận cho một hành động sẽ tự động đóng và hành động đó sẽ bị hủy. Đặt thành 0 để tắt thời gian chờ. + Biểu diễn các loại bằng biểu tượng (tắt) hoặc bằng nhãn (bật). Căn chỉnh menu Trái (tắt) hoặc Phải (bật). + (Chỉ tiện ích) Tự động khởi động ứng dụng từ tiện ích mà không cần chờ nhấn. \ No newline at end of file diff --git a/resources-zhs/strings/strings.xml b/resources-zhs/strings/strings.xml index 1d59279..72928d5 100644 --- a/resources-zhs/strings/strings.xml +++ b/resources-zhs/strings/strings.xml @@ -40,6 +40,7 @@ 可用的 检查... 不可用 + 未配置 菜单 HomeAssistant 的 API 密钥。 @@ -50,4 +51,5 @@ 在此时间(以秒为单位)之后,操作的确认对话框将自动关闭并取消该操作。设置为 0 以禁用超时。 用图标(关闭)或标签(打开)表示类型。 左(关)或右(开)菜单对齐。 + (仅限小部件)从小部件自动启动应用程序,无需等待点击。 \ No newline at end of file diff --git a/resources-zht/strings/strings.xml b/resources-zht/strings/strings.xml index 0e9d36a..3196f55 100644 --- a/resources-zht/strings/strings.xml +++ b/resources-zht/strings/strings.xml @@ -40,6 +40,7 @@ 可用的 檢查... 不可用 + 未配置 選單 HomeAssistant 的 API 金鑰。 @@ -50,4 +51,5 @@ 在此時間(以秒為單位)之後,操作的確認對話方塊將自動關閉並取消該操作。設定為 0 以停用逾時。 用圖示(關閉)或標籤(開啟)表示類型。 左(關)或右(開)選單對齊。 + (僅限小部件)從小部件自動啟動應用程序,無需等待點擊。 \ No newline at end of file diff --git a/resources-zsm/strings/strings.xml b/resources-zsm/strings/strings.xml index 8cceb5f..d5d5c20 100644 --- a/resources-zsm/strings/strings.xml +++ b/resources-zsm/strings/strings.xml @@ -40,6 +40,7 @@ Tersedia Menyemak... Tidak ada + Tidak dikonfigurasikan Menu Kunci API untuk HomeAssistant. @@ -50,4 +51,5 @@ Selepas masa ini (dalam beberapa saat), dialog pengesahan untuk tindakan ditutup secara automatik dan tindakan itu dibatalkan. Tetapkan kepada 0 untuk melumpuhkan tamat masa. Mewakili jenis dengan ikon (dimatikan) atau dengan label (dihidupkan). Penjajaran Menu Kiri (mati) atau Kanan (hidup). + (Widget sahaja) Mulakan aplikasi secara automatik daripada widget tanpa menunggu satu ketikan. \ No newline at end of file diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml index fbc6a81..03fd708 100644 --- a/resources/settings/properties.xml +++ b/resources/settings/properties.xml @@ -36,8 +36,22 @@ --> 3 + + + + + diff --git a/resources/settings/settings.xml b/resources/settings/settings.xml index b972088..22aab55 100644 --- a/resources/settings/settings.xml +++ b/resources/settings/settings.xml @@ -81,4 +81,13 @@ /> + + + + diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml index a69dfca..b93f732 100644 --- a/resources/strings/strings.xml +++ b/resources/strings/strings.xml @@ -34,6 +34,7 @@ Available Checking... Unavailable + Unconfigured Menu @@ -45,4 +46,5 @@ After this time (in seconds), a confirmation dialog for an action is automatically closed and the action is cancelled. Set to 0 to disable the timeout. Representing types with icons (off) or with labels (on). Left (off) or Right (on) Menu Alignment. + (Widget only) Automatically start the application from the widget without waiting for a tap. diff --git a/source/Alert.mc b/source/Alert.mc index c617356..121d31e 100644 --- a/source/Alert.mc +++ b/source/Alert.mc @@ -29,37 +29,37 @@ using Toybox.Timer; class Alert extends WatchUi.View { private static const bRadius = 10; - private var mTimer; - private var mTimeout; - private var mText; - private var mFont; - private var mFgcolor; - private var mBgcolor; + private var mTimer as Timer.Timer; + private var mTimeout as Lang.Number; + private var mText as Lang.String; + private var mFont as Graphics.FontType; + private var mFgcolor as Graphics.ColorType; + private var mBgcolor as Graphics.ColorType; function initialize(params as Lang.Dictionary) { View.initialize(); - mText = params.get(:text); + mText = params.get(:text) as Lang.String; if (mText == null) { mText = "Alert"; } - mFont = params.get(:font); + mFont = params.get(:font) as Graphics.FontType; if (mFont == null) { mFont = Graphics.FONT_MEDIUM; } - mFgcolor = params.get(:fgcolor); + mFgcolor = params.get(:fgcolor) as Graphics.ColorType; if (mFgcolor == null) { mFgcolor = Graphics.COLOR_BLACK; } - mBgcolor = params.get(:bgcolor); + mBgcolor = params.get(:bgcolor) as Graphics.ColorType; if (mBgcolor == null) { mBgcolor = Graphics.COLOR_WHITE; } - mTimeout = params.get(:timeout); + mTimeout = params.get(:timeout) as Lang.Number; if (mTimeout == null) { mTimeout = 2000; } @@ -83,7 +83,7 @@ class Alert extends WatchUi.View { var bX = (dc.getWidth() - bWidth) / 2; var bY = (dc.getHeight() - bHeight) / 2; - if(dc has :setAntiAlias) { + if (dc has :setAntiAlias) { dc.setAntiAlias(true); } @@ -112,30 +112,30 @@ class Alert extends WatchUi.View { // Remove the alert from view, usually on user input, but that is defined by the calling function. // - function dismiss() { + function dismiss() as Void { WatchUi.popView(SLIDE_IMMEDIATE); } - function pushView(transition) { + function pushView(transition) as Void { WatchUi.pushView(self, new AlertDelegate(self), transition); } } class AlertDelegate extends WatchUi.InputDelegate { - hidden var mView; + private var mView; function initialize(view) { InputDelegate.initialize(); mView = view; } - function onKey(evt) { + function onKey(evt) as Lang.Boolean { mView.dismiss(); getApp().getQuitTimer().reset(); return true; } - function onTap(evt) { + function onTap(evt) as Lang.Boolean { mView.dismiss(); getApp().getQuitTimer().reset(); return true; diff --git a/source/ErrorView.mc b/source/ErrorView.mc index 81de6b3..729851d 100644 --- a/source/ErrorView.mc +++ b/source/ErrorView.mc @@ -33,6 +33,7 @@ using Toybox.Graphics; using Toybox.Lang; using Toybox.WatchUi; using Toybox.Communications; +using Toybox.Timer; class ErrorView extends ScalableView { private var mText as Lang.String = ""; @@ -94,14 +95,15 @@ class ErrorView extends ScalableView { } if (!mShown) { instance.setText(text); + mShown = true; } return [instance, instance.getDelegate()]; } // Create or reuse an existing ErrorView, and pass on the text. static function show(text as Lang.String) as Void { - create(text); // Ignore returned values if (!mShown) { + create(text); // Ignore returned values WatchUi.pushView(instance, instance.getDelegate(), WatchUi.SLIDE_UP); // This must be last to avoid a race condition with unShow(), where the // ErrorView can't be dismissed. @@ -112,6 +114,10 @@ class ErrorView extends ScalableView { static function unShow() as Void { if (mShown) { WatchUi.popView(WatchUi.SLIDE_DOWN); + // The call to 'updateNextMenuItem()' must be on another thread so that the view is popped above. + var myTimer = new Timer.Timer(); + // Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer. + myTimer.start(getApp().method(:updateNextMenuItem), Globals.scApiResume, false); // This must be last to avoid a race condition with show(), where the // ErrorView can't be dismissed. mShown = false; diff --git a/source/Globals.mc b/source/Globals.mc index 17f1c39..6089b16 100644 --- a/source/Globals.mc +++ b/source/Globals.mc @@ -26,5 +26,10 @@ class Globals { static const scDebug = false; static const scAlertTimeout = 2000; // ms static const scTapTimeout = 1000; // ms + // Time to let the existing HTTP responses get serviced after a + // Communications.NETWORK_RESPONSE_OUT_OF_MEMORY response code. static const scApiBackoff = 1000; // ms + // Needs to be long enough to enable a "double ESC" to quit the application from + // an ErrorView. + static const scApiResume = 200; // ms } diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc index 58c7900..8c9e93e 100644 --- a/source/HomeAssistantApp.mc +++ b/source/HomeAssistantApp.mc @@ -22,6 +22,7 @@ using Toybox.Application; using Toybox.Lang; using Toybox.WatchUi; using Toybox.Application.Properties; +using Toybox.Timer; class HomeAssistantApp extends Application.AppBase { private var strNoApiKey as Lang.String or Null; @@ -37,19 +38,23 @@ class HomeAssistantApp extends Application.AppBase { private var strTrailingSlashErr as Lang.String or Null; private var strAvailable = WatchUi.loadResource($.Rez.Strings.Available); private var strUnavailable = WatchUi.loadResource($.Rez.Strings.Unavailable); + private var strUnconfigured = WatchUi.loadResource($.Rez.Strings.Unconfigured); - private var mApiKey as Lang.String; + private var mApiKey as Lang.String or Null; // The compiler can't tell these are updated by + private var mApiUrl as Lang.String or Null; // initialize(), hence the "or Null". + private var mConfigUrl as Lang.String or Null; // private var mApiStatus as Lang.String = WatchUi.loadResource($.Rez.Strings.Checking); private var mMenuStatus as Lang.String = WatchUi.loadResource($.Rez.Strings.Checking); private var mHaMenu as HomeAssistantView or Null; - private var mQuitTimer as QuitTimer or Null; + private var mQuitTimer as QuitTimer or Null; + private var mTimer as Timer.Timer or Null; private var mItemsToUpdate; // Array initialised by onReturnFetchMenuConfig() private var mNextItemToUpdate = 0; // Index into the above array private var mIsGlance as Lang.Boolean = false; function initialize() { AppBase.initialize(); - mApiKey = Properties.getValue("api_key"); + onSettingsChanged(); // ATTENTION when adding stuff into this block: // Because of the >>GlanceView<<, it should contain only // code, which is used as well for the glance: @@ -110,24 +115,22 @@ class HomeAssistantApp extends Application.AppBase { strTrailingSlashErr = WatchUi.loadResource($.Rez.Strings.TrailingSlashErr); mQuitTimer = new QuitTimer(); - var api_url = Properties.getValue("api_url") as Lang.String; - - if ((Properties.getValue("api_key") as Lang.String).length() == 0) { + if (mApiKey.length() == 0) { if (Globals.scDebug) { System.println("HomeAssistantApp getInitialView(): No API key in the application settings."); } return ErrorView.create(strNoApiKey + "."); - } else if (api_url.length() == 0) { + } else if (mApiUrl.length() == 0) { if (Globals.scDebug) { System.println("HomeAssistantApp getInitialView(): No API URL in the application settings."); } return ErrorView.create(strNoApiUrl + "."); - } else if (api_url.substring(-1, api_url.length()).equals("/")) { + } else if (mApiUrl.substring(-1, mApiUrl.length()).equals("/")) { if (Globals.scDebug) { System.println("HomeAssistantApp getInitialView(): API URL must not have a trailing slash '/'."); } return ErrorView.create(strTrailingSlashErr + "."); - } else if ((Properties.getValue("config_url") as Lang.String).length() == 0) { + } else if (mConfigUrl.length() == 0) { if (Globals.scDebug) { System.println("HomeAssistantApp getInitialView(): No configuration URL in the application settings."); } @@ -215,6 +218,12 @@ class HomeAssistantApp extends Application.AppBase { if (!mIsGlance) { mHaMenu = new HomeAssistantView(data, null); mQuitTimer.begin(); + if (Properties.getValue("widget_start_no_tap")) { + // As soon as the menu has been fetched start show the menu of items. + // This behaviour is inconsistent with the standard Garmin User Interface, but has been + // requested by users so has been made the non-default option. + 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. @@ -225,7 +234,6 @@ class HomeAssistantApp extends Application.AppBase { WatchUi.switchToView(mHaMenu, new HomeAssistantViewDelegate(false), WatchUi.SLIDE_IMMEDIATE); } } - WatchUi.requestUpdate(); break; default: @@ -237,20 +245,48 @@ class HomeAssistantApp extends Application.AppBase { } break; } + WatchUi.requestUpdate(); } (:glance) function fetchMenuConfig() as Void { - var options = { - :method => Communications.HTTP_REQUEST_METHOD_GET, - :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON - }; - Communications.makeWebRequest( - Properties.getValue("config_url"), - null, - options, - method(:onReturnFetchMenuConfig) - ); + if (mConfigUrl.equals("")) { + mMenuStatus = strUnconfigured; + WatchUi.requestUpdate(); + } else { + var options = { + :method => Communications.HTTP_REQUEST_METHOD_GET, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }; + if (! System.getDeviceSettings().phoneConnected) { + if (Globals.scDebug) { + System.println("HomeAssistantToggleMenuItem getState(): No Phone connection, skipping API call."); + } + if (mIsGlance) { + WatchUi.requestUpdate(); + } else { + ErrorView.show(strNoPhone + "."); + } + mMenuStatus = strUnavailable; + } else if (! System.getDeviceSettings().connectionAvailable) { + if (Globals.scDebug) { + System.println("HomeAssistantToggleMenuItem getState(): No Internet connection, skipping API call."); + } + if (mIsGlance) { + WatchUi.requestUpdate(); + } else { + ErrorView.show(strNoInternet + "."); + } + mMenuStatus = strUnavailable; + } else { + Communications.makeWebRequest( + mConfigUrl, + null, + options, + method(:onReturnFetchMenuConfig) + ); + } + } } // Callback function after completing the GET request to fetch the API status. @@ -322,7 +358,6 @@ class HomeAssistantApp extends Application.AppBase { ErrorView.show("API " + mApiStatus + "."); } } - WatchUi.requestUpdate(); break; default: @@ -333,23 +368,51 @@ class HomeAssistantApp extends Application.AppBase { ErrorView.show(strUnhandledHttpErr + responseCode); } } + WatchUi.requestUpdate(); } (:glance) function fetchApiStatus() as Void { - var options = { - :method => Communications.HTTP_REQUEST_METHOD_GET, - :headers => { - "Authorization" => "Bearer " + mApiKey - }, - :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON - }; - Communications.makeWebRequest( - Properties.getValue("api_url") + "/", - null, - options, - method(:onReturnFetchApiStatus) - ); + if (mApiUrl.equals("")) { + mApiStatus = strUnconfigured; + WatchUi.requestUpdate(); + } else { + var options = { + :method => Communications.HTTP_REQUEST_METHOD_GET, + :headers => { + "Authorization" => "Bearer " + mApiKey + }, + :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON + }; + if (! System.getDeviceSettings().phoneConnected) { + if (Globals.scDebug) { + System.println("HomeAssistantToggleMenuItem getState(): No Phone connection, skipping API call."); + } + mApiStatus = strUnavailable; + if (mIsGlance) { + WatchUi.requestUpdate(); + } else { + ErrorView.show(strNoPhone + "."); + } + } else if (! System.getDeviceSettings().connectionAvailable) { + if (Globals.scDebug) { + System.println("HomeAssistantToggleMenuItem getState(): No Internet connection, skipping API call."); + } + mApiStatus = strUnavailable; + if (mIsGlance) { + WatchUi.requestUpdate(); + } else { + ErrorView.show(strNoInternet + "."); + } + } else { + Communications.makeWebRequest( + mApiUrl + "/", + null, + options, + method(:onReturnFetchApiStatus) + ); + } + } } function setApiStatus(s as Lang.String) { @@ -387,11 +450,26 @@ class HomeAssistantApp extends Application.AppBase { } (:glance) - function getGlanceView() { + function getGlanceView() as Lang.Array or Null { mIsGlance = true; + updateGlance(); + mTimer = new Timer.Timer(); + mTimer.start(method(:updateGlance), Globals.scApiBackoff, true); + return [new HomeAssistantGlanceView(self)]; + } + + // Required for the Glance update timer. + function updateGlance() as Void { fetchMenuConfig(); fetchApiStatus(); - return [new HomeAssistantGlanceView(self)]; + } + + // Replace this functionality with a more central settings class as proposed in + // https://github.com/house-of-abbey/GarminHomeAssistant/pull/17. + function onSettingsChanged() as Void { + mApiKey = Properties.getValue("api_key"); + mApiUrl = Properties.getValue("api_url"); + mConfigUrl = Properties.getValue("config_url"); } } diff --git a/source/HomeAssistantToggleMenuItem.mc b/source/HomeAssistantToggleMenuItem.mc index ab3a85c..c27024f 100644 --- a/source/HomeAssistantToggleMenuItem.mc +++ b/source/HomeAssistantToggleMenuItem.mc @@ -67,6 +67,8 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { } // Callback function after completing the GET request to fetch the status. + // Terminate updating the toggle menu items via the chain of calls for a permanent network + // error. The ErrorView cancellation will resume the call chain. // function onReturnGetState(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void { if (Globals.scDebug) { @@ -74,8 +76,6 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Data: " + data); } - // Provide the ability to terminate updating chain of calls for a permanent network error. - var keepUpdating = true; var status = strUnavailable; switch (responseCode) { case Communications.BLE_HOST_TIMEOUT: @@ -111,8 +111,6 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { if (Globals.scDebug) { System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: NETWORK_RESPONSE_OUT_OF_MEMORY, are we going too fast?"); } - // Pause updates - keepUpdating = false; var myTimer = new Timer.Timer(); // Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer. myTimer.start(getApp().method(:updateNextMenuItem), Globals.scApiBackoff, false); @@ -135,7 +133,6 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { } ErrorView.show(strApiUrlNotFound); } - keepUpdating = false; break; case 405: @@ -143,7 +140,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: 405. " + mIdentifier + " " + data.get("message")); } ErrorView.show("HTTP 405, " + mIdentifier + ". " + data.get("message")); - keepUpdating = false; + break; case 200: @@ -157,6 +154,8 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { } setUiToggle(state); ErrorView.unShow(); + // Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer. + getApp().updateNextMenuItem(); break; default: @@ -165,10 +164,6 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { } ErrorView.show(strUnhandledHttpErr + responseCode); } - if (keepUpdating) { - // Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer. - getApp().updateNextMenuItem(); - } getApp().setApiStatus(status); } @@ -180,17 +175,18 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { }, :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON }; - var keepUpdating = true; if (! System.getDeviceSettings().phoneConnected) { if (Globals.scDebug) { System.println("HomeAssistantToggleMenuItem getState(): No Phone connection, skipping API call."); } ErrorView.show(strNoPhone + "."); + getApp().setApiStatus(strUnavailable); } else if (! System.getDeviceSettings().connectionAvailable) { if (Globals.scDebug) { System.println("HomeAssistantToggleMenuItem getState(): No Internet connection, skipping API call."); } ErrorView.show(strNoInternet + "."); + getApp().setApiStatus(strUnavailable); } else { var url = Properties.getValue("api_url") + "/states/" + mIdentifier; if (Globals.scDebug) { @@ -202,19 +198,6 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem { options, method(:onReturnGetState) ); - // The update is called by onReturnGetState() instead - keepUpdating = false; - } - // On temporary failure, keep the updating going. - if (keepUpdating) { - // Need to avoid an infinite loop where the pushed ErrorView does not appear before getState() is called again - // and the call stack overflows. So continue the call chain from somewhere asynchronous. - var myTimer = new Timer.Timer(); - // Now this feels very "closely coupled" to the application, but it is the most reliable method instead of using a timer. - myTimer.start(getApp().method(:updateNextMenuItem), 500, false); - if (Globals.scDebug) { - System.println("HomeAssistantToggleMenuItem getState(): Updated failed " + mIdentifier); - } } }