diff --git a/README.md b/README.md
index 4ec9ee1..174e739 100644
--- a/README.md
+++ b/README.md
@@ -220,13 +220,6 @@ You may choose to cache your menu definition on your device in order to reduce t
The application timeout prevents the app running on your watch when you have forgotten to close it. It prevents the refreshing of the menu statuses and therefore excessive wear on your battery level. There is a second timeout value for confirmation views. This is intended for use with more sensitive toggles so that the confirmation view is not left open and forgotten and then confirmed accidentally without you noticing. **We cannot advise you this is safe, be careful what you toggle with the watch application!**
-The menu style option selects between two menu presentations as follows:
-
-| Menu Type | Image | Description |
-|-----------------|------------------------------------------------------------------------|-------------|
-| Icons (default) |
| "Lean User Interface" version removing the second row of text in favour of icons. Tap icons are blue with a pointing finger, menu items has three dots as favours by many graphical user interfaces. |
-| Labels |
| Initial version that had a second row of text. This extra text has yet to add much value. Menu and Tap actions are distinguished by text, and the toggle status is duplicated by text. A future version could possibly offer the means to customise the toggle menu item text, hence this option has not been deprecated yet. |
-
There is a toggle setting for "text alignment" and provides finer adjustment for right-to-left languages. Perhaps this could be made automatic based on device language?
Another toggle setting for the **Widget version only** allows the user to select a non-standard user interface behaviour. As soon as the menu is retrieved the widget view is replaced by the menu without waiting for a user selection. This has been included as requested by a user, but defaults to off which retains the expected user interactions.
@@ -276,8 +269,6 @@ The `id` attribute values are taken from the same names used in [`strings.xml`](
## Battery Level Reporting
-We've had [a report](https://github.com/house-of-abbey/GarminHomeAssistant/issues/39) that this feature does not work without **administrator priviledges**. We've reviewed possible fixes and come up short. We are unable to fix this at present but invite those skilled in the art of Home Assistant to suggest a solution to us!
-
The application and widget both now include a background service to report your watch's battery level and charging status. This requires some [setup](BatteryReporting.md) via YAML in Home Assistant to display the transmitted value. We offer this [trouble shooting](Troubleshooting.md#watch-battery-level-reporting) guide.
## Version History
@@ -296,7 +287,10 @@ The application and widget both now include a background service to report your
| 2.1 | Deployment of an idea to provide Home Assistant with access to the watch battery level. Using this requires [significant setup](BatteryReporting.md) on the Home Assistant configuration and hence is detailed separately. Due to this, the default state for this battery option is _off_. Changed the application settings user interface to be more intuitive, and hence amended the way settings are managed in the background. |
| 2.2 | Adds a feature to cache the menu configuration and save the time taken for an HTTP request to fetch it. You as the user are responsible for managing the cache by clearing it when you update your configuration. Improvement to widget root display updates. Bug fix for battery level reporting when in the glance carousel. Fixed an uninternationalised string, "Execute". Unfixed issue with battery level updates when the user is not an administrator. |
| 2.3 | Fix for battery level updates where previously the function only worked for administrator accounts. The new solution is based on Webhooks and is simpler to implement on Home Assistant. Language support fix where an automatic translation produced an inappropriate word, possibly in more than one language. |
+| 2.4 | Sensor status reporting via Home Assistant 'templates'. This provides a generalised way of viewing the status of any entity as long as the result can be rendered as text, e.g. 'uncovered', 'open', '76%', '21 °C'. Removal of the menu style option. The original style was kept after the introduction of the icon style solely to keep the code for a possible re-use for sensor statuses. This version delivers that new feature, hence the style option has been removed. The new JSON configuration file format allows for the old style to be replicated if you are desperate! |
## Known Issues
1. On some (old) devices (e.g. Vivoactive 3, Fenix 5s & Edge 520+), the menu does not update correctly to reflect changes in state effected by an external Home Assistant control. E.g. when the phone application changes the toggle status of a switch, the Garmin application does not reflect that change until the menu is touched or scrolled a little. This is a [known issue](https://forums.garmin.com/developer/connect-iq/i/bug-reports/menu2-doesn-t-allow-live-updates) already reported without a suggested software fix.
+
+2. Widgets have less memory than applications. With the new template based sensor display, widgets are more likely to run out of memory. E.g. a Vivoactive 3 device has a memory limit of 60 kB runtime memory for widgets (compare with 124 kB for applications) and is likely to be ~90% used. This makes it very likely that a larger menu will crash the application. We cannot predict what will take the application "over the edge", but we can provide this feedback to users to raise awareness.
diff --git a/images/GarminHomeAssistantSettings.png b/images/GarminHomeAssistantSettings.png
index a3bc656..d848b24 100644
Binary files a/images/GarminHomeAssistantSettings.png and b/images/GarminHomeAssistantSettings.png differ
diff --git a/resources-ara/strings/strings.xml b/resources-ara/strings/strings.xml
index 8d4d098..0447451 100644
--- a/resources-ara/strings/strings.xml
+++ b/resources-ara/strings/strings.xml
@@ -42,6 +42,7 @@
غير مهيأ
مخبأة
+ ذاكرة
يختار...
مفتاح API لـ HomeAssistant.
diff --git a/resources-bul/strings/strings.xml b/resources-bul/strings/strings.xml
index 920db6b..27a7cbc 100644
--- a/resources-bul/strings/strings.xml
+++ b/resources-bul/strings/strings.xml
@@ -42,6 +42,7 @@
Неконфигуриран
Кеширано
+ памет
Изберете...
API ключ за HomeAssistant.
@@ -58,7 +59,7 @@
Ляво (изключено) или дясно (включено) подравняване на менюто.
Отляво надясно
От дясно на ляво
- (Само за притурка) Автоматично стартирайте приложението от притурката
+ (Само за притурка) Автоматично стартиране на приложението от приспособлението
без да чакате кран.
Активирайте фоновата услуга, за да изпратите батерията на часовника
ниво до домашен асистент.
diff --git a/resources-ces/strings/strings.xml b/resources-ces/strings/strings.xml
index 3fe9ad2..e61ec52 100644
--- a/resources-ces/strings/strings.xml
+++ b/resources-ces/strings/strings.xml
@@ -29,7 +29,7 @@
V nastavení aplikace není žádná adresa URL API
V nastavení aplikace není žádná konfigurační URL
Příliš rychlá volání API. Zpomalte prosím své požadavky.
- Adresa URL nenalezena. Potenciální chyba URL API v nastavení.
+ Adresa URL nenalezena. Potenciální chyba adresy URL rozhraní API v nastavení.
Adresa URL nenalezena. Potenciální chyba konfigurační adresy URL v nastavení.
Z požadavku HTTP se nevrátil žádný JSON.
Požadavek HTTP vrátil kód chyby =
@@ -42,6 +42,7 @@
Nenakonfigurováno
Uloženo do mezipaměti
+ Paměť
Vybrat...
Klíč API pro HomeAssistant.
@@ -53,7 +54,7 @@
začal?
Časový limit v sekundách. Po uplynutí této doby aplikaci ukončete
nečinnosti, aby se šetřila baterie zařízení.
- Po uplynutí této doby (v sekundách) se zobrazí potvrzovací dialog
+ Po uplynutí této doby (v sekundách) se zobrazí potvrzovací dialog pro
akce se automaticky zavře a akce se zruší. Nastavením na 0 deaktivujete časový limit.
Zarovnání nabídky vlevo (vypnuto) nebo vpravo (zapnuto).
Zleva do prava
diff --git a/resources-dan/strings/strings.xml b/resources-dan/strings/strings.xml
index 57e238f..ff10225 100644
--- a/resources-dan/strings/strings.xml
+++ b/resources-dan/strings/strings.xml
@@ -42,6 +42,7 @@
Ukonfigureret
Cachelagret
+ Hukommelse
Vælg...
API-nøgle til HomeAssistant.
diff --git a/resources-deu/strings/strings.xml b/resources-deu/strings/strings.xml
index 0a9ebc8..3357eb6 100644
--- a/resources-deu/strings/strings.xml
+++ b/resources-deu/strings/strings.xml
@@ -42,6 +42,7 @@
Unkonfiguriert
Zwischengespeichert
+ Erinnerung
Wählen...
API-Schlüssel für HomeAssistant.
diff --git a/resources-dut/strings/strings.xml b/resources-dut/strings/strings.xml
index 3b0c8f4..0292158 100644
--- a/resources-dut/strings/strings.xml
+++ b/resources-dut/strings/strings.xml
@@ -42,7 +42,8 @@
Niet geconfigureerd
In cache opgeslagen
-
+ Geheugen
+
Selecteer...
API-sleutel voor HomeAssistant.
Toegangstoken met lange levensduur.
diff --git a/resources-est/strings/strings.xml b/resources-est/strings/strings.xml
index e6acb63..0c6ccd2 100644
--- a/resources-est/strings/strings.xml
+++ b/resources-est/strings/strings.xml
@@ -15,7 +15,7 @@
@@ -28,10 +28,10 @@
Rakenduse seadetes pole API-võtit
Rakenduse seadetes pole API URL-i
Rakenduse seadetes pole konfiguratsiooni URL-i
- API-kõned liiga kiired. Palun aeglustage oma taotlusi.
+ API-kutsed liiga kiired. Palun aeglustage oma taotlusi.
URL-i ei leitud. Võimalik API URL-i viga seadetes.
URL-i ei leitud. Võimalik konfiguratsiooni URL-i viga seadetes.
- HTTP päringust ei tagastatud ühtegi JSON-i.
+ HTTP-päringust ei tagastatud ühtegi JSON-i.
HTTP päring tagastas veakoodi =
API URL-i lõpus ei tohi olla kaldkriipsu „/”
Webhaoki registreerimine ebaõnnestus
@@ -42,6 +42,7 @@
Konfigureerimata
Vahemällu salvestatud
+ Mälu
Vali...
API-võti HomeAssistantile.
@@ -61,7 +62,7 @@
(Ainult vidin) Käivitage rakendus automaatselt vidinast
puudutust ootamata.
Kella aku saatmiseks lubage taustteenus
- Koduassistendi tasemele.
+ tasemel koduabilisele.
Värskendussagedus (minutites), mille juures taust
teenindus peaks aku taseme saatmist kordama.
(Ainult lugemiseks) Kella loodud veebihaagi ID aku taseme värskendamiseks.
diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml
index ed7b95a..8b3cb4b 100644
--- a/resources-fin/strings/strings.xml
+++ b/resources-fin/strings/strings.xml
@@ -25,7 +25,7 @@
Ei puhelinyhteyttä
Ei Internet-yhteyttä
Ei vastausta, tarkista Internet-yhteys
- Sovellusasetuksissa ei ole API-avainta
+ Sovelluksen asetuksissa ei ole API-avainta
Sovellusasetuksissa ei ole API URL-osoitetta
Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta
API-kutsut liian nopeita. Hidasta pyyntöjäsi.
@@ -42,6 +42,7 @@
Määrittämätön
Välimuistissa
+ Muisti
Valitse...
API-avain HomeAssistantille.
@@ -53,8 +54,8 @@
alkanut?
Aikakatkaisu sekunneissa. Poistu sovelluksesta tämän ajanjakson jälkeen
käyttämättömyys säästääksesi laitteen akkua.
- Tämän ajan kuluttua (sekunteina) vahvistusikkuna an
- toiminto suljetaan automaattisesti ja toiminto peruutetaan. Aseta arvoksi 0 poistaaksesi aikakatkaisun käytöstä.
+ Tämän ajan kuluttua (sekunneissa) vahvistusikkuna an
+ toiminto suljetaan automaattisesti ja toiminto peruutetaan. Aseta arvoksi 0, jos haluat poistaa aikakatkaisun käytöstä.
Vasen (pois) tai oikea (päällä) valikon kohdistus.
Vasemmalta oikealle
Oikealta vasemmalle
@@ -63,7 +64,7 @@
Ota taustapalvelu käyttöön kellon akun lähettämiseksi
tasolle Home Assistant.
Päivitystaajuus (minuutteina), jolla tausta
- palvelun tulee toistaa akun varaustason lähettäminen.
+ palvelun pitäisi toistaa akun varaustason lähettäminen.
(Vain luku) Kellon luoma Webhook-tunnus akun varaustason päivityksiä varten.
Saatat tarvita tätä virheenkorjaukseen.
diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml
index 3725782..8950f0c 100644
--- a/resources-fre/strings/strings.xml
+++ b/resources-fre/strings/strings.xml
@@ -42,6 +42,7 @@
Non configuré
En cache
+ Mémoire
Sélectionner...
Clé API pour HomeAssistant.
@@ -51,7 +52,7 @@
L'application doit-elle mettre en cache la configuration du menu ?
L'application devrait-elle vider le cache existant la prochaine fois
commencé?
- Délai d'expiration en secondes. Quittez l'application après cette période de
+ Délai d'attente en secondes. Quittez l'application après cette période de
inactivité pour économiser la batterie de l'appareil.
Passé ce délai (en secondes), une boîte de dialogue de confirmation pour un
l'action est automatiquement clôturée et l'action est annulée. Réglez sur 0 pour désactiver le délai d'attente.
diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml
index e559d3b..9ef27c4 100644
--- a/resources-gre/strings/strings.xml
+++ b/resources-gre/strings/strings.xml
@@ -42,6 +42,7 @@
Μη διαμορφωμένο
Αποθηκευμένο στην κρυφή μνήμη
+ Μνήμη
Επιλέγω...
Κλειδί API για το HomeAssistant.
diff --git a/resources-heb/strings/strings.xml b/resources-heb/strings/strings.xml
index 9aa8764..9427ad0 100644
--- a/resources-heb/strings/strings.xml
+++ b/resources-heb/strings/strings.xml
@@ -27,7 +27,7 @@
אין תגובה, בדוק חיבור לאינטרנט
אין מפתח API בהגדרות האפליקציה
אין כתובת API בהגדרות האפליקציה
- אין כתובת אתר תצורה בהגדרות האפליקציה
+ אין כתובת URL לתצורה בהגדרות האפליקציה
קריאות API מהירות מדי. נא להאט את הבקשות שלך.
כתובת האתר לא נמצאה. שגיאה פוטנציאלית של כתובת ה-API בהגדרות.
כתובת האתר לא נמצאה. שגיאת כתובת אתר פוטנציאלית של תצורה בהגדרות.
@@ -42,12 +42,13 @@
לא מוגדר
שמור במטמון
+ זיכרון
בחר...
מפתח API עבור HomeAssistant.
אסימון גישה ארוך-חיים.
כתובת URL עבור HomeAssistant API.
- כתובת URL לתצורת תפריט (JSON).
+ כתובת URL עבור תצורת תפריט (JSON).
האם האפליקציה צריכה לשמור את תצורת התפריט במטמון?
האם היישום צריך לנקות את המטמון הקיים בפעם הבאה שהוא
התחיל?
@@ -65,5 +66,5 @@
קצב הרענון (בדקות) שבו הרקע
השירות צריך לחזור על שליחת רמת הסוללה.
(לקריאה בלבד) מזהה ה-Webhook שנוצר על ידי השעון עבור עדכוני רמת הסוללה.
- ייתכן שתדרוש זאת לצורך איתור באגים.
+ ייתכן שתדרוש את זה בשביל איתור באגים.
diff --git a/resources-hrv/strings/strings.xml b/resources-hrv/strings/strings.xml
index 795a7f8..6d73255 100644
--- a/resources-hrv/strings/strings.xml
+++ b/resources-hrv/strings/strings.xml
@@ -42,6 +42,7 @@
Nekonfigurirano
Spremljeno u predmemoriju
+ Memorija
Izaberi...
API ključ za HomeAssistant.
@@ -52,7 +53,7 @@
Treba li aplikacija sljedeći put izbrisati postojeću predmemoriju
počeo?
Istek u sekundama. Izađite iz aplikacije nakon tog razdoblja od
- neaktivnost radi uštede baterije uređaja.
+ neaktivnosti radi uštede baterije uređaja.
Nakon tog vremena (u sekundama), dijaloški okvir potvrde za an
radnja se automatski zatvara i akcija se poništava. Postavite na 0 da onemogućite vremensko ograničenje.
Lijevo (isključeno) ili desno (uključeno) poravnanje izbornika.
@@ -64,6 +65,6 @@
razinu do kućnog pomoćnika.
Brzina osvježavanja (u minutama) pri kojoj pozadina
servis bi trebao ponoviti slanje razine baterije.
- (Samo za čitanje) Webhook ID koji je izradio sat za ažuriranje razine baterije.
+ (Samo za čitanje) Webhook ID koji je kreirao sat za ažuriranje razine baterije.
Ovo vam može trebati za otklanjanje pogrešaka.
diff --git a/resources-hun/strings/strings.xml b/resources-hun/strings/strings.xml
index a260a5c..f0352d9 100644
--- a/resources-hun/strings/strings.xml
+++ b/resources-hun/strings/strings.xml
@@ -42,19 +42,20 @@
Nincs konfigurálva
Gyorsítótárban
+ memória
Válasszon...
API-kulcs a HomeAssistant számára.
Hosszú életű hozzáférési token.
A HomeAssistant API URL-je.
URL a menükonfigurációhoz (JSON).
- Az alkalmazásnak gyorsítótárba kell helyeznie a menükonfigurációt?
+ Az alkalmazásnak gyorsítótárba kell helyeznie a menü konfigurációját?
Ha az alkalmazás legközelebb törli a meglévő gyorsítótárat
elkezdődött?
Időtúllépés másodpercben. Lépjen ki az alkalmazásból ezen időszak után
tétlenség, hogy kímélje a készülék akkumulátorát.
- Ezen idő elteltével (másodpercben), egy megerősítő párbeszédpanel egy
- A művelet 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) megjelenik egy megerősítő párbeszédpanel az an
+ A művelet automatikusan lezárul, és a művelet megszakad. Állítsa 0-ra az időtúllépés letiltásához.
Balra (ki) vagy Jobbra (be) Menüigazítás.
Balról jobbra
Jobbról balra
diff --git a/resources-ind/strings/strings.xml b/resources-ind/strings/strings.xml
index e3b2720..443a8d4 100644
--- a/resources-ind/strings/strings.xml
+++ b/resources-ind/strings/strings.xml
@@ -42,6 +42,7 @@
Tidak dikonfigurasi
Di-cache
+ Penyimpanan
Pilih...
Kunci API untuk HomeAssistant.
diff --git a/resources-ita/strings/strings.xml b/resources-ita/strings/strings.xml
index 9558162..81323ac 100644
--- a/resources-ita/strings/strings.xml
+++ b/resources-ita/strings/strings.xml
@@ -42,6 +42,7 @@
Non configurato
Memorizzato nella cache
+ Memoria
Selezionare...
Chiave API per HomeAssistant.
diff --git a/resources-jpn/strings/strings.xml b/resources-jpn/strings/strings.xml
index c5d726a..bac4b30 100644
--- a/resources-jpn/strings/strings.xml
+++ b/resources-jpn/strings/strings.xml
@@ -42,6 +42,7 @@
未構成
キャッシュされた
+ メモリ
選択する...
ホームアシスタントの API キー。
@@ -49,7 +50,7 @@
ホームアシスタント API の URL。
メニュー構成の URL (JSON)。
アプリケーションはメニュー構成をキャッシュする必要がありますか?
- アプリケーションは次回キャッシュを削除する必要がありますか?
+ 次回アプリケーションが既存のキャッシュをクリアする必要があるかどうか
始めましたか?
秒単位のタイムアウト。この期間が経過したらアプリケーションを終了してください
デバイスのバッテリーを節約するために非アクティブにします。
diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml
index 016b279..55cf5a8 100644
--- a/resources-kor/strings/strings.xml
+++ b/resources-kor/strings/strings.xml
@@ -33,7 +33,7 @@
URL을 찾을 수 없습니다. 설정에 잠재적인 구성 URL 오류가 있습니다.
HTTP 요청에서 JSON이 반환되지 않았습니다.
HTTP 요청이 오류 코드를 반환했습니다 =
- API URL에는 후행 슬래시 '/'가 없어야 합니다.
+ API URL에는 후행 슬래시 '/'가 있어서는 안 됩니다.
웹훅 등록 실패
템플릿을 렌더링하지 못했습니다.
사용 가능
@@ -42,6 +42,7 @@
구성되지 않음
캐시됨
+ 메모리
선택하다...
HomeAssistant용 API 키.
@@ -52,7 +53,7 @@
다음 번에 애플리케이션이 기존 캐시를 지워야 할까요?
시작됐나요?
시간 초과(초)입니다. 이 기간이 지나면 응용 프로그램을 종료하십시오.
- 장치 배터리를 절약하기 위해 비활성 상태입니다.
+ 장치 배터리를 절약하기 위해 활동하지 않습니다.
이 시간(초)이 지나면 확인 대화 상자가 나타납니다.
작업이 자동으로 닫히고 작업이 취소됩니다. 시간 초과를 비활성화하려면 0으로 설정합니다.
왼쪽(끄기) 또는 오른쪽(켜기) 메뉴 정렬.
diff --git a/resources-lav/strings/strings.xml b/resources-lav/strings/strings.xml
index d92e4ee..aa155de 100644
--- a/resources-lav/strings/strings.xml
+++ b/resources-lav/strings/strings.xml
@@ -42,6 +42,7 @@
Nav konfigurēts
Kešatmiņā saglabāts
+ Atmiņa
Izvēlieties...
API atslēga Home Assistant.
@@ -49,13 +50,13 @@
HomeAssistant API URL.
URL izvēlnes konfigurācijai (JSON).
Vai lietojumprogrammai vajadzētu saglabāt izvēlnes konfigurāciju kešatmiņā?
- Vai lietojumprogrammai nākamreiz vajadzētu notīrīt esošo kešatmiņu
+ Ja lietojumprogramma nākamreiz notīra esošo kešatmiņu
sākās?
Taimauts sekundēs. Izejiet no lietojumprogrammas pēc šī perioda
neaktivitāte, lai taupītu ierīces akumulatoru.
Pēc šī laika (sekundēs) tiek parādīts apstiprinājuma dialoglodziņš
darbība tiek automātiski aizvērta un darbība tiek atcelta. Iestatiet uz 0, lai atspējotu taimautu.
- Kreisā (izslēgta) vai labā (ieslēgta) izvēlnes līdzināšana.
+ Kreisā (izslēgta) vai labā (ieslēgta) izvēlnes izlīdzināšana.
No kreisās uz labo
No labās uz kreiso
(tikai logrīkam) Automātiski startējiet lietojumprogrammu no logrīka
diff --git a/resources-lit/strings/strings.xml b/resources-lit/strings/strings.xml
index 52ee45c..ca1d40a 100644
--- a/resources-lit/strings/strings.xml
+++ b/resources-lit/strings/strings.xml
@@ -42,24 +42,25 @@
Nesukonfigūruotas
Talpykloje
+ Atmintis
Pasirinkite...
- API raktas, skirtas HomeAssistant.
+ API raktas, skirtas „HomeAssistant“.
Ilgalaikis prieigos raktas.
„HomeAssistant“ API URL.
Meniu konfigūravimo URL (JSON).
- Ar programa turėtų išsaugoti meniu konfigūraciją talpykloje?
+ Ar programa turėtų talpykloje išsaugoti meniu konfigūraciją?
Ar programa kitą kartą išvalys esamą talpyklą
prasidėjo?
Skirtasis laikas sekundėmis. Išeikite iš programos pasibaigus šiam laikotarpiui
- neaktyvumas, kad būtų taupoma įrenginio baterija.
+ neaktyvumas, kad taupytų įrenginio akumuliatorių.
Po šio laiko (sekundėmis) atsiras patvirtinimo dialogo langas
veiksmas automatiškai uždaromas ir veiksmas atšaukiamas. Nustatykite 0, kad išjungtumėte skirtąjį laiką.
Kairysis (išjungtas) arba dešinysis (įjungtas) meniu lygiavimas.
Iš kairės į dešinę
Iš dešinės į kairę
(Tik valdiklis) Automatiškai paleiskite programą iš valdiklio
- nelaukdamas čiaupo.
+ nelaukdamas bakstelėjimo.
Įgalinkite foninę paslaugą, kad išsiųstumėte laikrodžio bateriją
lygiu iki namų asistento.
Fono atnaujinimo dažnis (minutėmis).
diff --git a/resources-nob/strings/strings.xml b/resources-nob/strings/strings.xml
index fb9bbbb..0064ce9 100644
--- a/resources-nob/strings/strings.xml
+++ b/resources-nob/strings/strings.xml
@@ -42,6 +42,7 @@
Ukonfigurert
Bufret
+ Hukommelse
Plukke ut...
API-nøkkel for HomeAssistant.
diff --git a/resources-pol/strings/strings.xml b/resources-pol/strings/strings.xml
index 1ac7a9a..4274588 100644
--- a/resources-pol/strings/strings.xml
+++ b/resources-pol/strings/strings.xml
@@ -42,6 +42,7 @@
Nieskonfigurowane
Buforowane
+ Pamięć
Wybierać...
Klucz API dla HomeAssistant.
diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml
index 6a856e7..522be53 100644
--- a/resources-por/strings/strings.xml
+++ b/resources-por/strings/strings.xml
@@ -42,6 +42,7 @@
Não configurado
Em cache
+ Memória
Selecione...
Chave de API para HomeAssistant.
diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml
index 43360e1..b44627e 100644
--- a/resources-ron/strings/strings.xml
+++ b/resources-ron/strings/strings.xml
@@ -28,10 +28,10 @@
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ă „/”
Nu s-a putut înregistra Webhook
@@ -42,6 +42,7 @@
Neconfigurat
În cache
+ Memorie
Selectați...
Cheie API pentru HomeAssistant.
diff --git a/resources-slo/strings/strings.xml b/resources-slo/strings/strings.xml
index 43ce094..98b9a81 100644
--- a/resources-slo/strings/strings.xml
+++ b/resources-slo/strings/strings.xml
@@ -42,10 +42,11 @@
Nekonfigurované
Vo vyrovnávacej pamäti
+ Pamäť
Vybrať...
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).
Má aplikácia uložiť do vyrovnávacej pamäte konfiguráciu ponuky?
diff --git a/resources-slv/strings/strings.xml b/resources-slv/strings/strings.xml
index 35f3ab9..94f1513 100644
--- a/resources-slv/strings/strings.xml
+++ b/resources-slv/strings/strings.xml
@@ -42,11 +42,12 @@
Nekonfigurirano
Predpomnjeno
+ Spomin
Izberite ...
API ključ za HomeAssistant.
Dolgoživ dostopni žeton.
- URL za HomeAssistant API.
+ URL za API HomeAssistant.
URL za konfiguracijo menija (JSON).
Ali naj aplikacija predpomni konfiguracijo menija?
Ali naj aplikacija naslednjič počisti obstoječi predpomnilnik
diff --git a/resources-spa/strings/strings.xml b/resources-spa/strings/strings.xml
index a0d985a..47718c9 100644
--- a/resources-spa/strings/strings.xml
+++ b/resources-spa/strings/strings.xml
@@ -42,6 +42,7 @@
Desconfigurado
En caché
+ Memoria
Seleccionar...
Clave API para HomeAssistant.
diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml
index 18f12e3..9033201 100644
--- a/resources-swe/strings/strings.xml
+++ b/resources-swe/strings/strings.xml
@@ -26,7 +26,7 @@
Ingen internetanslutning
Inget svar, kontrollera internetanslutningen
Ingen API-nyckel i applikationsinställningarna
- Ingen API-URL i applikationsinställningarna
+ Ingen API-URL i programinställningarna
Ingen konfigurations-URL i programinställningarna
API-anrop för snabba. Vänligen sakta ner dina förfrågningar.
Webbadressen hittades inte. Potentiellt API-URL-fel i inställningarna.
@@ -42,6 +42,7 @@
Okonfigurerad
Cachad
+ Minne
Välj...
API-nyckel för HomeAssistant.
diff --git a/resources-tha/strings/strings.xml b/resources-tha/strings/strings.xml
index 4958ffe..138d610 100644
--- a/resources-tha/strings/strings.xml
+++ b/resources-tha/strings/strings.xml
@@ -42,6 +42,7 @@
ไม่ได้กำหนดค่า
แคช
+ หน่วยความจำ
เลือก...
คีย์ API สำหรับ HomeAssistant
diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml
index 8068690..5964890 100644
--- a/resources-tur/strings/strings.xml
+++ b/resources-tur/strings/strings.xml
@@ -42,6 +42,7 @@
Yapılandırılmamış
Önbelleğe alındı
+ Hafıza
Seçme...
HomeAssistant için API Anahtarı.
diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml
index c8376a3..623c1b6 100644
--- a/resources-ukr/strings/strings.xml
+++ b/resources-ukr/strings/strings.xml
@@ -15,7 +15,7 @@
@@ -42,19 +42,20 @@
Неналаштований
Кешовано
+ Пам'ять
Виберіть...
Ключ API для HomeAssistant.
Довговічний маркер доступу.
URL для HomeAssistant API.
- URL-адреса для налаштування меню (JSON).
+ URL для налаштування меню (JSON).
Чи має програма кешувати конфігурацію меню?
Чи має програма очистити наявний кеш наступного разу
почав?
Час очікування в секундах. Вийдіть із програми після закінчення цього періоду
бездіяльність, щоб зберегти акумулятор пристрою.
- Після закінчення цього часу (у секундах) з’явиться діалогове вікно підтвердження для
- дія автоматично закривається і дія скасовується. Встановіть 0, щоб вимкнути тайм-аут.
+ Через цей час (у секундах) з’явиться діалогове вікно підтвердження для
+ дія автоматично закривається, а дія скасовується. Встановіть 0, щоб вимкнути тайм-аут.
Ліворуч (вимкнено) або праворуч (увімкнено) вирівнювання меню.
Зліва направо
Справа наліво
diff --git a/resources-vie/strings/strings.xml b/resources-vie/strings/strings.xml
index 78be452..b468c72 100644
--- a/resources-vie/strings/strings.xml
+++ b/resources-vie/strings/strings.xml
@@ -42,6 +42,7 @@
Chưa được định cấu hình
Đã lưu vào bộ nhớ đệm
+ Ký ức
Lựa chọn...
Khóa API cho HomeAssistant.
diff --git a/resources-zhs/strings/strings.xml b/resources-zhs/strings/strings.xml
index 2518843..37e4bdf 100644
--- a/resources-zhs/strings/strings.xml
+++ b/resources-zhs/strings/strings.xml
@@ -42,6 +42,7 @@
未配置
缓存
+ 记忆
选择...
HomeAssistant 的 API 密钥。
diff --git a/resources-zht/strings/strings.xml b/resources-zht/strings/strings.xml
index 01349a4..d840efb 100644
--- a/resources-zht/strings/strings.xml
+++ b/resources-zht/strings/strings.xml
@@ -42,6 +42,7 @@
未配置
快取
+ 記憶
選擇...
HomeAssistant 的 API 金鑰。
diff --git a/resources-zsm/strings/strings.xml b/resources-zsm/strings/strings.xml
index e0b639a..e7de3bf 100644
--- a/resources-zsm/strings/strings.xml
+++ b/resources-zsm/strings/strings.xml
@@ -42,6 +42,7 @@
Tidak dikonfigurasikan
Dicache
+ Ingatan
Pilih...
Kunci API untuk HomeAssistant.
diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml
index 34930e1..e696792 100644
--- a/resources/strings/strings.xml
+++ b/resources/strings/strings.xml
@@ -36,6 +36,7 @@
Unconfigured
Cached
+ Memory
Select...
diff --git a/source/Alert.mc b/source/Alert.mc
index 121d31e..51ca1dc 100644
--- a/source/Alert.mc
+++ b/source/Alert.mc
@@ -29,12 +29,13 @@ using Toybox.Timer;
class Alert extends WatchUi.View {
private static const bRadius = 10;
- 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;
+ 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;
+ private var mAntiAlias as Lang.Boolean = false;
function initialize(params as Lang.Dictionary) {
View.initialize();
@@ -64,6 +65,10 @@ class Alert extends WatchUi.View {
mTimeout = 2000;
}
+ if (Graphics.Dc has :setAntiAlias) {
+ mAntiAlias = true;
+ }
+
mTimer = new Timer.Timer();
}
@@ -75,7 +80,7 @@ class Alert extends WatchUi.View {
mTimer.stop();
}
- function onUpdate(dc) {
+ function onUpdate(dc as Graphics.Dc) {
var tWidth = dc.getTextWidthInPixels(mText, mFont);
var tHeight = dc.getFontHeight(mFont);
var bWidth = tWidth + 20;
@@ -83,7 +88,7 @@ class Alert extends WatchUi.View {
var bX = (dc.getWidth() - bWidth) / 2;
var bY = (dc.getHeight() - bHeight) / 2;
- if (dc has :setAntiAlias) {
+ if (mAntiAlias) {
dc.setAntiAlias(true);
}
diff --git a/source/ErrorView.mc b/source/ErrorView.mc
index 729851d..114a763 100644
--- a/source/ErrorView.mc
+++ b/source/ErrorView.mc
@@ -44,7 +44,8 @@ class ErrorView extends ScalableView {
// Vertical spacing between the top of the face and the error icon
private var mErrorIconMargin as Lang.Number;
private var mErrorIcon;
- private var mTextArea;
+ private var mTextArea as WatchUi.TextArea or Null;
+ private var mAntiAlias as Lang.Boolean = false;
private static var instance;
private static var mShown as Lang.Boolean = false;
@@ -55,6 +56,9 @@ class ErrorView extends ScalableView {
// Convert the settings from % of screen size to pixels
mErrorIconMargin = pixelsForScreen(cSettings.get(:errorIconMargin) as Lang.Float);
mErrorIcon = Application.loadResource(Rez.Drawables.ErrorIcon) as Graphics.BitmapResource;
+ if (Graphics.Dc has :setAntiAlias) {
+ mAntiAlias = true;
+ }
}
// Load your resources here
@@ -76,7 +80,7 @@ class ErrorView extends ScalableView {
// Update the view
function onUpdate(dc as Graphics.Dc) as Void {
var w = dc.getWidth();
- if(dc has :setAntiAlias) {
+ if (mAntiAlias) {
dc.setAntiAlias(true);
}
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_BLUE);
diff --git a/source/Globals.mc b/source/Globals.mc
index 8fbf034..a464a12 100644
--- a/source/Globals.mc
+++ b/source/Globals.mc
@@ -33,4 +33,6 @@ class Globals {
// Needs to be long enough to enable a "double ESC" to quit the application from
// an ErrorView.
static const scApiResume = 200; // ms
+ // Warn the user after fetching the menu if their watch is low on memory before the device crashes.
+ static const scLowMem = 0.95; // percent as a fraction.
}
diff --git a/source/HomeAssistantGlanceView.mc b/source/HomeAssistantGlanceView.mc
index 123228b..9479b8f 100644
--- a/source/HomeAssistantGlanceView.mc
+++ b/source/HomeAssistantGlanceView.mc
@@ -32,10 +32,14 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView {
private var mApiStatus as WatchUi.Text or Null;
private var mMenuText as WatchUi.Text or Null;
private var mMenuStatus as WatchUi.Text or Null;
+ private var mAntiAlias as Lang.Boolean = false;
function initialize(app as HomeAssistantApp) {
GlanceView.initialize();
mApp = app;
+ if (Graphics.Dc has :setAntiAlias) {
+ mAntiAlias = true;
+ }
}
function onLayout(dc as Graphics.Dc) as Void {
@@ -85,9 +89,9 @@ class HomeAssistantGlanceView extends WatchUi.GlanceView {
});
}
- function onUpdate(dc) as Void {
+ function onUpdate(dc as Graphics.Dc) as Void {
GlanceView.onUpdate(dc);
- if(dc has :setAntiAlias) {
+ if(mAntiAlias) {
dc.setAntiAlias(true);
}
dc.setColor(
diff --git a/source/HomeAssistantService.mc b/source/HomeAssistantService.mc
index 624ee5c..77b4996 100644
--- a/source/HomeAssistantService.mc
+++ b/source/HomeAssistantService.mc
@@ -24,6 +24,17 @@ using Toybox.Graphics;
using Toybox.Application.Properties;
class HomeAssistantService {
+ private var mHasToast as Lang.Boolean = false;
+ private var mHasVibrate as Lang.Boolean = false;
+
+ function initialise() {
+ if (WatchUi has :showToast) {
+ mHasToast = true;
+ }
+ if (Attention has :vibrate) {
+ mHasVibrate = true;
+ }
+ }
// Callback function after completing the POST request to call a service.
//
@@ -88,7 +99,7 @@ class HomeAssistantService {
toast = (d[i].get("attributes") as Lang.Dictionary).get("friendly_name") as Lang.String;
}
}
- if (WatchUi has :showToast) {
+ if (mHasToast) {
WatchUi.showToast(toast, null);
} else {
new Alert({
@@ -143,7 +154,7 @@ class HomeAssistantService {
},
method(:onReturnCall)
);
- if (Attention has :vibrate) {
+ if (mHasVibrate) {
Attention.vibrate([
new Attention.VibeProfile(50, 100), // On for 100ms
new Attention.VibeProfile( 0, 100), // Off for 100ms
diff --git a/source/HomeAssistantViewMenuItem.mc b/source/HomeAssistantViewMenuItem.mc
index 6b81c23..5a92d55 100644
--- a/source/HomeAssistantViewMenuItem.mc
+++ b/source/HomeAssistantViewMenuItem.mc
@@ -9,7 +9,7 @@
// 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 & Someone0nEarth, 16 November 2023
+// P A Abbey & J D Abbey & Someone0nEarth, 31 October 2023
//
//
// Description:
diff --git a/source/RezStrings.mc b/source/RezStrings.mc
index 3a03eaf..8405f68 100644
--- a/source/RezStrings.mc
+++ b/source/RezStrings.mc
@@ -59,6 +59,7 @@ class RezStrings {
private static var strCached as Lang.String or Null;
(:glance)
private static var strGlanceMenu as Lang.String or Null;
+ private static var strMemory as Lang.String or Null;
// Can't initialise a constant directly, have to be initialised via a function
// for 'WatchUi.loadResource' to be available.
@@ -103,6 +104,7 @@ class RezStrings {
strUnconfigured = WatchUi.loadResource($.Rez.Strings.Unconfigured);
strCached = WatchUi.loadResource($.Rez.Strings.Cached);
strGlanceMenu = WatchUi.loadResource($.Rez.Strings.GlanceMenu);
+ strMemory = WatchUi.loadResource($.Rez.Strings.Memory);
}
static function getAppName() as Lang.String {
@@ -197,4 +199,8 @@ class RezStrings {
return strGlanceMenu;
}
+ static function getMemory() as Lang.String {
+ return strMemory;
+ }
+
}
diff --git a/source/RootView.mc b/source/RootView.mc
index ac6b581..478c4fc 100644
--- a/source/RootView.mc
+++ b/source/RootView.mc
@@ -21,6 +21,7 @@
using Toybox.Graphics;
using Toybox.Lang;
using Toybox.WatchUi;
+using Toybox.System;
class RootView extends ScalableView {
@@ -44,10 +45,16 @@ class RootView extends ScalableView {
private var mApiStatus as WatchUi.Text or Null;
private var mMenuText as WatchUi.Text or Null;
private var mMenuStatus as WatchUi.Text or Null;
+ private var mMemText as WatchUi.Text or Null;
+ private var mMemStatus as WatchUi.Text or Null;
+ private var mAntiAlias as Lang.Boolean = false;
function initialize(app as HomeAssistantApp) {
ScalableView.initialize();
mApp = app;
+ if (Graphics.Dc has :setAntiAlias) {
+ mAntiAlias = true;
+ }
}
function onLayout(dc as Graphics.Dc) as Void {
@@ -84,9 +91,25 @@ class RootView extends ScalableView {
:font => Graphics.FONT_XTINY,
:justification => Graphics.TEXT_JUSTIFY_RIGHT | Graphics.TEXT_JUSTIFY_VCENTER,
:locX => w/2 - scMidSep/2,
- :locY => pixelsForScreen(70.0)
+ :locY => pixelsForScreen(60.0)
});
mMenuStatus = new WatchUi.Text({
+ :text => RezStrings.getChecking(),
+ :color => Graphics.COLOR_WHITE,
+ :font => Graphics.FONT_XTINY,
+ :justification => Graphics.TEXT_JUSTIFY_LEFT | Graphics.TEXT_JUSTIFY_VCENTER,
+ :locX => w/2 + scMidSep/2,
+ :locY => pixelsForScreen(60.0)
+ });
+ mMemText = new WatchUi.Text({
+ :text => RezStrings.getMemory() + ":",
+ :color => Graphics.COLOR_WHITE,
+ :font => Graphics.FONT_XTINY,
+ :justification => Graphics.TEXT_JUSTIFY_RIGHT | Graphics.TEXT_JUSTIFY_VCENTER,
+ :locX => w/2 - scMidSep/2,
+ :locY => pixelsForScreen(70.0)
+ });
+ mMemStatus = new WatchUi.Text({
:text => RezStrings.getChecking(),
:color => Graphics.COLOR_WHITE,
:font => Graphics.FONT_XTINY,
@@ -97,7 +120,7 @@ class RootView extends ScalableView {
}
function onUpdate(dc as Graphics.Dc) as Void {
- if (dc has :setAntiAlias) {
+ if (mAntiAlias) {
dc.setAntiAlias(true);
}
dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_BLACK);
@@ -114,6 +137,16 @@ class RootView extends ScalableView {
mMenuText.draw(dc);
mMenuStatus.setText(mApp.getMenuStatus());
mMenuStatus.draw(dc);
+ mMemText.draw(dc);
+ var stats = System.getSystemStats();
+ var memUsed = (100 * stats.usedMemory) / stats.totalMemory;
+ mMemStatus.setText(memUsed.format("%.1f") + "%");
+ if (stats.usedMemory > Globals.scLowMem * stats.totalMemory) {
+ mMemStatus.setColor(Graphics.COLOR_RED);
+ } else {
+ mMemStatus.setColor(Graphics.COLOR_WHITE);
+ }
+ mMemStatus.draw(dc);
}
function onShow() as Void {
diff --git a/source/Settings.mc b/source/Settings.mc
index d381660..b3f6727 100644
--- a/source/Settings.mc
+++ b/source/Settings.mc
@@ -41,6 +41,7 @@ class Settings {
private static var mIsBatteryLevelEnabled as Lang.Boolean = false;
private static var mBatteryRefreshRate as Lang.Number = 15; // minutes
private static var mIsApp as Lang.Boolean = false;
+ private static var mHasService as Lang.Boolean = false;
// Must keep the object so it doesn't get garbage collected.
private static var mWebhookManager as WebhookManager or Null;
@@ -61,6 +62,10 @@ class Settings {
mIsBatteryLevelEnabled = Properties.getValue("enable_battery_level");
mBatteryRefreshRate = Properties.getValue("battery_level_refresh_rate");
+ if (System has :ServiceDelegate) {
+ mHasService = true;
+ }
+
// Manage this inside the application or widget only (not a glance or background service process)
if (mIsApp) {
if (mIsBatteryLevelEnabled) {
@@ -68,14 +73,14 @@ class Settings {
mWebhookManager = new WebhookManager();
mWebhookManager.requestWebhookId();
} else if (
- (System has :ServiceDelegate) and
+ mHasService and
((Background.getTemporalEventRegisteredTime() == null) or
(Background.getTemporalEventRegisteredTime() != (mBatteryRefreshRate * 60)))) {
Background.registerForTemporalEvent(new Time.Duration(mBatteryRefreshRate * 60)); // Convert to seconds
}
} else {
// Explicitly disable the background event which persists when the application closes.
- if ((System has :ServiceDelegate) and (Background.getTemporalEventRegisteredTime() != null)) {
+ if (mHasService and (Background.getTemporalEventRegisteredTime() != null)) {
Background.deleteTemporalEvent();
}
unsetWebhookId();
@@ -149,7 +154,7 @@ class Settings {
static function unsetIsBatteryLevelEnabled() {
mIsBatteryLevelEnabled = false;
Properties.setValue("enable_battery_level", mIsBatteryLevelEnabled);
- if ((System has :ServiceDelegate) and (Background.getTemporalEventRegisteredTime() != null)) {
+ if (mHasService and (Background.getTemporalEventRegisteredTime() != null)) {
Background.deleteTemporalEvent();
}
}