From 1ad5c6b896275ef44939f45cef1ba81c4e55711f Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 29 Dec 2021 09:59:56 -0600 Subject: [PATCH 001/147] Restore x_times_per_y_days translations --- uhabits-android/src/main/res/values-ar-rSA/strings.xml | 1 + uhabits-android/src/main/res/values-bg-rBG/strings.xml | 1 + uhabits-android/src/main/res/values-ca-rES/strings.xml | 1 + uhabits-android/src/main/res/values-cs-rCZ/strings.xml | 1 + uhabits-android/src/main/res/values-da-rDK/strings.xml | 1 + uhabits-android/src/main/res/values-de-rDE/strings.xml | 1 + uhabits-android/src/main/res/values-el-rGR/strings.xml | 1 + uhabits-android/src/main/res/values-es-rES/strings.xml | 1 + uhabits-android/src/main/res/values-eu-rES/strings.xml | 1 + uhabits-android/src/main/res/values-fa-rIR/strings.xml | 1 + uhabits-android/src/main/res/values-fi-rFI/strings.xml | 1 + uhabits-android/src/main/res/values-fr-rFR/strings.xml | 1 + uhabits-android/src/main/res/values-hi-rIN/strings.xml | 1 + uhabits-android/src/main/res/values-hr-rHR/strings.xml | 1 + uhabits-android/src/main/res/values-hu-rHU/strings.xml | 1 + uhabits-android/src/main/res/values-in-rID/strings.xml | 1 + uhabits-android/src/main/res/values-it-rIT/strings.xml | 1 + uhabits-android/src/main/res/values-iw-rIL/strings.xml | 1 + uhabits-android/src/main/res/values-ja-rJP/strings.xml | 1 + uhabits-android/src/main/res/values-ko-rKR/strings.xml | 1 + uhabits-android/src/main/res/values-nl-rNL/strings.xml | 1 + uhabits-android/src/main/res/values-no-rNO/strings.xml | 1 + uhabits-android/src/main/res/values-pl-rPL/strings.xml | 1 + uhabits-android/src/main/res/values-pt-rBR/strings.xml | 1 + uhabits-android/src/main/res/values-pt-rPT/strings.xml | 1 + uhabits-android/src/main/res/values-ro-rRO/strings.xml | 1 + uhabits-android/src/main/res/values-ru-rRU/strings.xml | 1 + uhabits-android/src/main/res/values-sl-rSI/strings.xml | 1 + uhabits-android/src/main/res/values-sr-rSP/strings.xml | 1 + uhabits-android/src/main/res/values-sv-rSE/strings.xml | 1 + uhabits-android/src/main/res/values-ta-rIN/strings.xml | 1 + uhabits-android/src/main/res/values-tr-rTR/strings.xml | 1 + uhabits-android/src/main/res/values-uk-rUA/strings.xml | 1 + uhabits-android/src/main/res/values-vi-rVN/strings.xml | 1 + uhabits-android/src/main/res/values-zh-rCN/strings.xml | 1 + uhabits-android/src/main/res/values-zh-rTW/strings.xml | 1 + 36 files changed, 36 insertions(+) diff --git a/uhabits-android/src/main/res/values-ar-rSA/strings.xml b/uhabits-android/src/main/res/values-ar-rSA/strings.xml index 4542684b6..358a01aa2 100644 --- a/uhabits-android/src/main/res/values-ar-rSA/strings.xml +++ b/uhabits-android/src/main/res/values-ar-rSA/strings.xml @@ -188,4 +188,5 @@ لم يتم العثور على تطبيق لإتمام هذا الإجراء تمديد اليوم بضع ساعات بعد منتصف الليل انتظر حتى 3:00 صباحاً لعرض يوم جديد. مفيد إذا كنت عادة تذهب إلى السكون بعد منتصف الليل. يتطلب إعادة تشغيل التطبيق. + %d مرات في %d أيام diff --git a/uhabits-android/src/main/res/values-bg-rBG/strings.xml b/uhabits-android/src/main/res/values-bg-rBG/strings.xml index 50010bb83..208e3f386 100644 --- a/uhabits-android/src/main/res/values-bg-rBG/strings.xml +++ b/uhabits-android/src/main/res/values-bg-rBG/strings.xml @@ -133,4 +133,5 @@ По цвят По сила Експортиране + %d пъти в период от %d дни diff --git a/uhabits-android/src/main/res/values-ca-rES/strings.xml b/uhabits-android/src/main/res/values-ca-rES/strings.xml index cd5714e1a..12c3017bf 100644 --- a/uhabits-android/src/main/res/values-ca-rES/strings.xml +++ b/uhabits-android/src/main/res/values-ca-rES/strings.xml @@ -186,4 +186,5 @@ Cada mes No es pot deixar en blanc Avui + %d vegades en %d dies diff --git a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml index 0e02cfcfa..14353aaa5 100644 --- a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml +++ b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml @@ -173,4 +173,5 @@ Musíte vyplnit Dnes Nyní jste vývojář + %d krát za %d dní diff --git a/uhabits-android/src/main/res/values-da-rDK/strings.xml b/uhabits-android/src/main/res/values-da-rDK/strings.xml index 779054665..4ac0418d9 100644 --- a/uhabits-android/src/main/res/values-da-rDK/strings.xml +++ b/uhabits-android/src/main/res/values-da-rDK/strings.xml @@ -222,4 +222,5 @@ Ingen app fundet til at understøtte denne handling Forlæng dagen et par timer efter midnat Vent til 3:00 for at vise en ny dag. Nyttigt, hvis du typisk går i seng efter midnat. Kræver genstart af app. + %d gange på %d dage diff --git a/uhabits-android/src/main/res/values-de-rDE/strings.xml b/uhabits-android/src/main/res/values-de-rDE/strings.xml index aa21bfd11..e88a55d43 100644 --- a/uhabits-android/src/main/res/values-de-rDE/strings.xml +++ b/uhabits-android/src/main/res/values-de-rDE/strings.xml @@ -213,4 +213,5 @@ Für diese Aktion wurde keine App gefunden. Verlängere den Tag um ein paar Stunden nach Mitternacht Bis 3:00 Uhr warten, bevor ein neuer Tag angezeigt wird. Nützlich, wenn du normalerweise nach Mitternacht schlafen gehst. Benötigt einen Neustart der App. + %d Mal in %d Tagen diff --git a/uhabits-android/src/main/res/values-el-rGR/strings.xml b/uhabits-android/src/main/res/values-el-rGR/strings.xml index 8bd41559e..02976fe08 100644 --- a/uhabits-android/src/main/res/values-el-rGR/strings.xml +++ b/uhabits-android/src/main/res/values-el-rGR/strings.xml @@ -172,4 +172,5 @@ Κάθε μήνα Δεν μπορεί να είναι κενό Σήμερα + %d φορές την %d ημέρες diff --git a/uhabits-android/src/main/res/values-es-rES/strings.xml b/uhabits-android/src/main/res/values-es-rES/strings.xml index 30b4cc448..a114b5117 100644 --- a/uhabits-android/src/main/res/values-es-rES/strings.xml +++ b/uhabits-android/src/main/res/values-es-rES/strings.xml @@ -213,4 +213,5 @@ No se encontró ninguna aplicación que admita esta acción Ampliar día unas horas después de medianoche Esperar hasta las 3:00 AM para mostrar un nuevo día. Útil si normalmente vas a dormir después de medianoche. Requiere reiniciar la aplicación. + %d veces cada %d días diff --git a/uhabits-android/src/main/res/values-eu-rES/strings.xml b/uhabits-android/src/main/res/values-eu-rES/strings.xml index cdffcab40..e52cea7c5 100644 --- a/uhabits-android/src/main/res/values-eu-rES/strings.xml +++ b/uhabits-android/src/main/res/values-eu-rES/strings.xml @@ -172,4 +172,5 @@ Hilabetero Ezin da hutsik egon Gaur + %d aldiz %d egunetan diff --git a/uhabits-android/src/main/res/values-fa-rIR/strings.xml b/uhabits-android/src/main/res/values-fa-rIR/strings.xml index 98730e033..be4f29cf5 100644 --- a/uhabits-android/src/main/res/values-fa-rIR/strings.xml +++ b/uhabits-android/src/main/res/values-fa-rIR/strings.xml @@ -213,4 +213,5 @@ هیچ برنامه‌ای برای انجام این کار یافت نشد. تمدید کردن روز تا چند ساعت بعد از نیمه‌شب تا ساعت ۳ نیمه‌شب برای نمایش یک روز جدید صبر می‌کند. اگر معمولاً بعد از نیمه‌شب می‌خوابید، برای شما می‌تواند مفید باشد. نیازمند راه‌اندازی مجدد برنامه است. + %d بار در هر %d روز diff --git a/uhabits-android/src/main/res/values-fi-rFI/strings.xml b/uhabits-android/src/main/res/values-fi-rFI/strings.xml index ca001b0ad..7af22bb7f 100644 --- a/uhabits-android/src/main/res/values-fi-rFI/strings.xml +++ b/uhabits-android/src/main/res/values-fi-rFI/strings.xml @@ -213,4 +213,5 @@ Tälle toiminnolle ei löytynyt yhtään sovellusta Pidennä päivää muutama tunti keskiyön jälkeen Odota kello 3.00 asti ennen uuden päivän näyttämistä. Hyödyllinen jos menet nukkumaan yleensä keskiyön jälkeen. Vaatii sovelluksen uudelleenkäynnistyksen. + %d kertaa %d päivässä diff --git a/uhabits-android/src/main/res/values-fr-rFR/strings.xml b/uhabits-android/src/main/res/values-fr-rFR/strings.xml index 7f57fcc16..a5aa2b42b 100644 --- a/uhabits-android/src/main/res/values-fr-rFR/strings.xml +++ b/uhabits-android/src/main/res/values-fr-rFR/strings.xml @@ -214,4 +214,5 @@ Combien de pages avez-vous lu ? Aucune application trouvée pour faire cette action Prolonger les jours de quelques heures après minuit Attendre jusqu\'à trois heures du matin pour changer de jour. Très utile si vous avez l\'habitude d\'aller dormir après minuit. (Redémarrage nécessaire) + %d fois en %d jours diff --git a/uhabits-android/src/main/res/values-hi-rIN/strings.xml b/uhabits-android/src/main/res/values-hi-rIN/strings.xml index 2d107b1b3..ad5c412b2 100644 --- a/uhabits-android/src/main/res/values-hi-rIN/strings.xml +++ b/uhabits-android/src/main/res/values-hi-rIN/strings.xml @@ -242,4 +242,5 @@ इस कार्रवाई को संभालने के लिए कोई ऐप नहीं मिला मध्यरात्रि से कुछ घंटे बाद तक दिन बढ़ाएँ नया दिन दिखाने के लिए सुबह 3:00 बजे तक प्रतीक्षा करें। उपयोगी अगर आप आमतौर पर आधी रात के बाद सोने जाते हैं। ऐप पुनरारंभ की आवश्यकता होगी। + %d बार %d दिन diff --git a/uhabits-android/src/main/res/values-hr-rHR/strings.xml b/uhabits-android/src/main/res/values-hr-rHR/strings.xml index fab62ad07..2087e9384 100644 --- a/uhabits-android/src/main/res/values-hr-rHR/strings.xml +++ b/uhabits-android/src/main/res/values-hr-rHR/strings.xml @@ -133,4 +133,5 @@ Po boji Po rezultatu Izvezi + %d puta u %d dani diff --git a/uhabits-android/src/main/res/values-hu-rHU/strings.xml b/uhabits-android/src/main/res/values-hu-rHU/strings.xml index 7cba2c6ed..5d167a98e 100644 --- a/uhabits-android/src/main/res/values-hu-rHU/strings.xml +++ b/uhabits-android/src/main/res/values-hu-rHU/strings.xml @@ -177,4 +177,5 @@ Minden hónapban Nem lehet üres Ma + %d alk. / %d nap diff --git a/uhabits-android/src/main/res/values-in-rID/strings.xml b/uhabits-android/src/main/res/values-in-rID/strings.xml index 8a75b12ac..d31957099 100644 --- a/uhabits-android/src/main/res/values-in-rID/strings.xml +++ b/uhabits-android/src/main/res/values-in-rID/strings.xml @@ -216,4 +216,5 @@ Aplikasi untuk mendukung tindakan ini tidak ditemukan Perpanjang hari beberapa jam setelah tengah malam Tunggu sampai jam 3 pagi untuk menampilkan hari yang baru. Berguna jika kamu biasanya tidur setelah tengah malam. Aplikasi perlu dimulai ulang. + %d kali dalam %d hari diff --git a/uhabits-android/src/main/res/values-it-rIT/strings.xml b/uhabits-android/src/main/res/values-it-rIT/strings.xml index bf7a45773..bb754082d 100644 --- a/uhabits-android/src/main/res/values-it-rIT/strings.xml +++ b/uhabits-android/src/main/res/values-it-rIT/strings.xml @@ -212,4 +212,5 @@ Nessuna app disponibile per gestire questa azione Prolunga il giorno di alcune ore dopo la mezzanotte Attendere fino alle 3:00 per mostrare il nuovo giorno. Utile se solitamente vai a dormire dopo mezzanotte. È necessario riavviare l\'app. + %d volte in %d giorni diff --git a/uhabits-android/src/main/res/values-iw-rIL/strings.xml b/uhabits-android/src/main/res/values-iw-rIL/strings.xml index c81a2d15e..5f39b9417 100644 --- a/uhabits-android/src/main/res/values-iw-rIL/strings.xml +++ b/uhabits-android/src/main/res/values-iw-rIL/strings.xml @@ -225,4 +225,5 @@ לא נמצא יישום שתומך בפעולה זו הארכת היום בכמה שעות לאחר החצות לחכות עד 3:00 כדי להציג יום חדש. שימושי אם לרוב הולכים לישון לאחר החצות. דורש הפעלה מחדש של היישום. + %d פעמים ב- %d ימים diff --git a/uhabits-android/src/main/res/values-ja-rJP/strings.xml b/uhabits-android/src/main/res/values-ja-rJP/strings.xml index 2debaa378..a9f31d108 100644 --- a/uhabits-android/src/main/res/values-ja-rJP/strings.xml +++ b/uhabits-android/src/main/res/values-ja-rJP/strings.xml @@ -193,4 +193,5 @@ 入力 習慣が見つかりませんでした これで開発者になりました! + %d 回 %d 日 diff --git a/uhabits-android/src/main/res/values-ko-rKR/strings.xml b/uhabits-android/src/main/res/values-ko-rKR/strings.xml index 77a169a99..f29f7e366 100644 --- a/uhabits-android/src/main/res/values-ko-rKR/strings.xml +++ b/uhabits-android/src/main/res/values-ko-rKR/strings.xml @@ -160,4 +160,5 @@ 매월 오늘 + %d 번 %d 일 동안 diff --git a/uhabits-android/src/main/res/values-nl-rNL/strings.xml b/uhabits-android/src/main/res/values-nl-rNL/strings.xml index 7d2e8223f..5e1636a89 100644 --- a/uhabits-android/src/main/res/values-nl-rNL/strings.xml +++ b/uhabits-android/src/main/res/values-nl-rNL/strings.xml @@ -201,4 +201,5 @@ Er is geen app gevonden om deze actie uit te voeren. Verleng de dag tot een paar uur na middernacht Wacht tot 3:00 uur om een nieuwe dag te beginnen. Handig als je normaal gesproken na middernacht gaat slapen. Dit vereist het opnieuw opstarten van de app. + %d keer in %d dagen diff --git a/uhabits-android/src/main/res/values-no-rNO/strings.xml b/uhabits-android/src/main/res/values-no-rNO/strings.xml index 6ed9097fd..987260ab1 100644 --- a/uhabits-android/src/main/res/values-no-rNO/strings.xml +++ b/uhabits-android/src/main/res/values-no-rNO/strings.xml @@ -137,4 +137,5 @@ Eksportér Endre verdi Spørsmål + %d ganger på %d dager diff --git a/uhabits-android/src/main/res/values-pl-rPL/strings.xml b/uhabits-android/src/main/res/values-pl-rPL/strings.xml index 4768592d8..e4707582a 100644 --- a/uhabits-android/src/main/res/values-pl-rPL/strings.xml +++ b/uhabits-android/src/main/res/values-pl-rPL/strings.xml @@ -225,4 +225,5 @@ Nie znaleziono aplikacji obsługującej to działanie Przedłuż dzień o kilka godzin po północy Poczekaj do 3:00, aby pokazać nowy dzień. Przydatne, jeśli zwykle kładziesz się spać po północy. Wymaga ponownego uruchomienia aplikacji. + %d razy w %d dni diff --git a/uhabits-android/src/main/res/values-pt-rBR/strings.xml b/uhabits-android/src/main/res/values-pt-rBR/strings.xml index ae07c2e04..e415667cb 100644 --- a/uhabits-android/src/main/res/values-pt-rBR/strings.xml +++ b/uhabits-android/src/main/res/values-pt-rBR/strings.xml @@ -213,4 +213,5 @@ Nenhum app encontrado para executar esta ação Prolongar dia algumas horas depois da meia-noite Espere até às 3:00 para mostrar um novo dia. Útil se você costuma dormir depois da meia-noite. Requer reinicialização do aplicativo. + %d vezes em %d dias diff --git a/uhabits-android/src/main/res/values-pt-rPT/strings.xml b/uhabits-android/src/main/res/values-pt-rPT/strings.xml index 6d9b58162..72f5b153c 100644 --- a/uhabits-android/src/main/res/values-pt-rPT/strings.xml +++ b/uhabits-android/src/main/res/values-pt-rPT/strings.xml @@ -172,4 +172,5 @@ Todos os meses Não pode ficar em branco Hoje + %d vezes em %d dias diff --git a/uhabits-android/src/main/res/values-ro-rRO/strings.xml b/uhabits-android/src/main/res/values-ro-rRO/strings.xml index d4cc5a3f8..15160d59e 100644 --- a/uhabits-android/src/main/res/values-ro-rRO/strings.xml +++ b/uhabits-android/src/main/res/values-ro-rRO/strings.xml @@ -153,4 +153,5 @@ Consultați politica de confidențialitate Vizualizați toți colaboratorii… Bază de date + %d ori în %d zile diff --git a/uhabits-android/src/main/res/values-ru-rRU/strings.xml b/uhabits-android/src/main/res/values-ru-rRU/strings.xml index c5e0e3583..b27277c44 100644 --- a/uhabits-android/src/main/res/values-ru-rRU/strings.xml +++ b/uhabits-android/src/main/res/values-ru-rRU/strings.xml @@ -225,4 +225,5 @@ Не найдено приложения для обработки данного действия Продлить день на несколько часов после полуночи Подождать до 3:00 перед показом нового дня. Полезно, если вы обычно ложитесь спать после полуночи. Требуется перезапуск приложения. + %d раз в %d дней diff --git a/uhabits-android/src/main/res/values-sl-rSI/strings.xml b/uhabits-android/src/main/res/values-sl-rSI/strings.xml index 295c68c85..8c5267be2 100644 --- a/uhabits-android/src/main/res/values-sl-rSI/strings.xml +++ b/uhabits-android/src/main/res/values-sl-rSI/strings.xml @@ -133,4 +133,5 @@ Po barvi Po rezultatu Izvozi + %d krat v %d dni diff --git a/uhabits-android/src/main/res/values-sr-rSP/strings.xml b/uhabits-android/src/main/res/values-sr-rSP/strings.xml index 95e931888..d4a5d0b9d 100644 --- a/uhabits-android/src/main/res/values-sr-rSP/strings.xml +++ b/uhabits-android/src/main/res/values-sr-rSP/strings.xml @@ -219,4 +219,5 @@ Нема апликације која подржава ову радњу Продужите дан неколико сати иза поноћи Чека до 03:00 да покаже нови дан. Корисно ако обично идете на спавање после поноћи. Захтева поновно покретање. + %d пута у %d дана diff --git a/uhabits-android/src/main/res/values-sv-rSE/strings.xml b/uhabits-android/src/main/res/values-sv-rSE/strings.xml index e0586ca77..856c5a719 100644 --- a/uhabits-android/src/main/res/values-sv-rSE/strings.xml +++ b/uhabits-android/src/main/res/values-sv-rSE/strings.xml @@ -222,4 +222,5 @@ Ingen app som stödjer åtgärden hittades. Förläng dagen några timmar efter midnatt Vänta till 3:00 innan en ny dag visas. Användbart om du vanligtvis går och lägger dig efter midnatt. Kräver omstart av appen. + %d gånger i %d dagar diff --git a/uhabits-android/src/main/res/values-ta-rIN/strings.xml b/uhabits-android/src/main/res/values-ta-rIN/strings.xml index d8ecdd40c..2872e0d8a 100644 --- a/uhabits-android/src/main/res/values-ta-rIN/strings.xml +++ b/uhabits-android/src/main/res/values-ta-rIN/strings.xml @@ -135,4 +135,5 @@ நிறத்தின் மூலம் மதிப்பெண்களின் மூலம் ஏற்றுமதி + %d காலங்களில் %d நாட்கள் diff --git a/uhabits-android/src/main/res/values-tr-rTR/strings.xml b/uhabits-android/src/main/res/values-tr-rTR/strings.xml index cc63aeba7..a66809588 100644 --- a/uhabits-android/src/main/res/values-tr-rTR/strings.xml +++ b/uhabits-android/src/main/res/values-tr-rTR/strings.xml @@ -192,4 +192,5 @@ Her ay Boş bırakılamaz Bugün + %d defa / %d gün diff --git a/uhabits-android/src/main/res/values-uk-rUA/strings.xml b/uhabits-android/src/main/res/values-uk-rUA/strings.xml index e33911ce0..8cd03746f 100644 --- a/uhabits-android/src/main/res/values-uk-rUA/strings.xml +++ b/uhabits-android/src/main/res/values-uk-rUA/strings.xml @@ -234,4 +234,5 @@ Не знайдено програми для підтримки цієї дії Продовжити день на кілька годин після опівночі Почекати до 3:00 перед показом нового дня. Корисно, якщо ви зазвичай лягаєте спати після опівночі. Потрібно перезапустити програму. + %d разів за %d днів diff --git a/uhabits-android/src/main/res/values-vi-rVN/strings.xml b/uhabits-android/src/main/res/values-vi-rVN/strings.xml index 82006cd8f..102191cc3 100644 --- a/uhabits-android/src/main/res/values-vi-rVN/strings.xml +++ b/uhabits-android/src/main/res/values-vi-rVN/strings.xml @@ -207,4 +207,5 @@ Không tìm thấy ứng dụng nào để hỗ trợ hành động này Kéo dài ngày thêm một vài giờ sau nửa đêm Chờ đến 3:00 sáng để hiện một ngày mới. Rất hữu ích nếu bạn thường đi ngủ sau nửa đêm. Yêu cầu khởi động lại ứng dụng. + %d lần trong %d ngày diff --git a/uhabits-android/src/main/res/values-zh-rCN/strings.xml b/uhabits-android/src/main/res/values-zh-rCN/strings.xml index dd2e70d2c..0966975f8 100644 --- a/uhabits-android/src/main/res/values-zh-rCN/strings.xml +++ b/uhabits-android/src/main/res/values-zh-rCN/strings.xml @@ -208,4 +208,5 @@ 找不到支持此操作的应用 将一天延长到午夜后的几个小时 凌晨 3 点后再显示新的一天。如果你通常在午夜后入睡,这会很有用。重启应用后生效。 + %d 次每 %d 天 diff --git a/uhabits-android/src/main/res/values-zh-rTW/strings.xml b/uhabits-android/src/main/res/values-zh-rTW/strings.xml index 30f5bf5e4..f2e2d04c3 100644 --- a/uhabits-android/src/main/res/values-zh-rTW/strings.xml +++ b/uhabits-android/src/main/res/values-zh-rTW/strings.xml @@ -211,4 +211,5 @@ 找不到可以處理這個動作的應用程式。 將一天延長到午夜過後幾個小時 凌晨3點後再顯示新的一天。如果你通常在午夜以後才睡,這能幫上忙。重新啟動後才生效。 + %d 次每 %d 日 From feeb4f057d3c740d2adfa7794cef74120519a7be Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 29 Dec 2021 10:10:09 -0600 Subject: [PATCH 002/147] Update translations --- .../src/main/res/values-ar-rSA/strings.xml | 7 +- .../src/main/res/values-ca-rES/strings.xml | 21 ++++- .../src/main/res/values-cs-rCZ/strings.xml | 94 +++++++++++-------- .../src/main/res/values-hu-rHU/strings.xml | 41 ++++++++ .../src/main/res/values-hy-rAM/strings.xml | 85 +++++++++++++++++ .../src/main/res/values-iw-rIL/strings.xml | 4 +- .../src/main/res/values-ja-rJP/strings.xml | 5 + .../src/main/res/values-ko-rKR/strings.xml | 29 ++++++ .../src/main/res/values-sk-rSK/strings.xml | 25 ++++- .../src/main/res/values-te-rIN/strings.xml | 1 + .../src/main/res/values-tr-rTR/strings.xml | 85 ++++++++++------- .../src/main/res/values-zh-rCN/strings.xml | 28 +++--- 12 files changed, 332 insertions(+), 93 deletions(-) create mode 100644 uhabits-android/src/main/res/values-hy-rAM/strings.xml diff --git a/uhabits-android/src/main/res/values-ar-rSA/strings.xml b/uhabits-android/src/main/res/values-ar-rSA/strings.xml index 358a01aa2..8296066c4 100644 --- a/uhabits-android/src/main/res/values-ar-rSA/strings.xml +++ b/uhabits-android/src/main/res/values-ar-rSA/strings.xml @@ -23,7 +23,7 @@ إعدادات تعديل حذف - أرشفة + أرشيف إزالة من الأرشيف إضافة عادة تغيير اللون @@ -48,14 +48,14 @@ إنشاء بعض عادات جديدة كل يوم، بعد أداء عادتك، ضع علامة عليها في التطبيق. تتبع تقدمك - رسوم بيانية مفصلة تُريك كيف تحسنت عاداتك مع مرور الوقت. + رسوم بيانية مفصلة تُريك كيف تحسنت عاداتك مع مرور الوقت. 15 دقيقة 30 دقيقة ساعة واحدة ساعتان أربع ساعات 8 ساعات - ٢٤ ساعة + 24 ساعة اسأل دائماً مخصص... تبديل وضعية العادة بضغطة قصيرة @@ -184,6 +184,7 @@ تمكين أيام التخطي بدّل مرتين لإضافة تخطي بدلاً من علامة اختيار. التخطيات تحافظ على درجاتك دون تغيير أو خسارة سلسلة الانتصارات. إظهار علامات الاستفهام للبيانات المفقودة + التفريق بين الأيام التي لا تحتوي على بيانات من الهفوات الفعلية. للدخول في اللقطات المتتابعة ، قم بالتبديل مرتين. أنت الآن مطوَِر برمجيات! لم يتم العثور على تطبيق لإتمام هذا الإجراء تمديد اليوم بضع ساعات بعد منتصف الليل diff --git a/uhabits-android/src/main/res/values-ca-rES/strings.xml b/uhabits-android/src/main/res/values-ca-rES/strings.xml index 12c3017bf..0f3c94d7f 100644 --- a/uhabits-android/src/main/res/values-ca-rES/strings.xml +++ b/uhabits-android/src/main/res/values-ca-rES/strings.xml @@ -26,7 +26,7 @@ Arxivar Treure de l\'arxiu Afegir hàbit - Canviar color + Canviar el color Hàbit creat. Hàbit modificat. @@ -82,6 +82,10 @@ Esborrar hàbit Esborrar hàbit + + L\' hàbit serà esborrat permanentment. Aquesta acció no es pot desfer. + Els hàbits seran esborrats permanentment. Aquesta acció no es pot desfer. + Hàbit suprimit / no trobat Caps de setmana Dilluns a divendres @@ -175,6 +179,7 @@ Opcional Per exemple, us heu despertat aviat? Heu fet exercici? Heu jugat a escacs? Mesurable + p.e. Quants quilòmetres has fet hui? Quantes pàgines has llegit? %d vegades per setmana %d vegades al mes Ex. Exercici @@ -186,5 +191,19 @@ Cada mes No es pot deixar en blanc Avui + Introduïr + No s\'han trobat hàbits. + No s\'han trobat hàbits mesurables + No s\'han trobat hàbits de sí o no + Increment + Disminueix + Activa omitir dies + Toca dues vegades per a afegir una omissió en compte d\'una marca de verificació. Les omissions mantenen la teua puntuació sense canvis i no trenquen la ratxa. + Mostra signes d\'interrogació per a les dades que falten + Diferenciar els dies sense dades dels lapses reals. Per introduir un lapse, canvia dues vegades. + Ara eres un desenvolupador + No s\'ha trobat cap aplicació per a gestionar aquesta acció + Ampliar el dia unes hores després de la mitjanit + Esperar fins a les 3:00 per mostrar un nou dia. Útil si normalment vas a dormir després de la mitjanit. Requereix el reinici de l\'aplicació. %d vegades en %d dies diff --git a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml index 14353aaa5..3f8f9075d 100644 --- a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml +++ b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml @@ -35,7 +35,8 @@ Připomenutí Uložit Série - Nemáte žádné nedokončené zvyky + Nemáte zapsané žádné zvyky + Splnili jste vše pro dnešní den! Stiskni a drž pro označení Vyp. Vytvořit zvyk @@ -43,11 +44,11 @@ Hotovo Odložit Vítejte - Sledování zvyků ti pomůže vytvořit a dosáhnout dobrých návyků. + Sledování zvyků Vám pomůže vytvořit a dosáhnout dobrých návyků. Vytvoř si nové zvyky - Každý den po splnění zvyku, si ho v aplikaci zaškrtni. - Sleduj svůj postup - Detailní grafy ti ukážou, jak se tvé zvyky v průběhu času zlepšily. + Každý den po splnění zvyku si ho v aplikaci zaškrtněte. + Sledujte svůj pokrok + Detailní grafy Vám ukážou, jak se Vaše zvyky v průběhu času zlepšily. 15 minut 30 minut Hodina @@ -67,66 +68,66 @@ Nastavení Nastavit délku odložení Věděli jste? - Přeřazení záznamů proveď stisknutím a podržením názvu zvyku a poté přesunutím na správné místo. - Můžeš vidět více dnů otočením telefonu na šířku. + Přeřazení záznamů proveďte stisknutím a podržením názvu zvyku a poté přesunutím na správné místo. + Můžete vidět více dnů otočením telefonu na šířku. Zvyk smazán / nenalezen Víkendy Pondělí až pátek Jakýkoliv den v týdnu - Vyber dny + Vyberte dny Exportovat CSV Hotovo Smazat - Vyber hodiny - Vyber minuty + Vyberte hodiny + Vyberte minuty O nás Překladatelé Vývojáři Verze %s Frekvence - Zatržítko - Nejlepší serie + Fajfka + Nejlepší série Každý den Každý týden Pomoc a FAQ Export selhal. Import selhal. - Soubor netozpoznán. + Soubor nerozpoznán. Zvyky úspěšně importovány. Importovat Kompletní export - Podpora exportů z této aplikace, ale také souborů vygenerovaných aplikacemi od Tickmate, HabitBull nebo Rewire. Pro více info si prečti FAQ. - Generuje soubory, které můžeš otevřít v tabulkových editorech, jako jsou Microsoft Excel nebo OpenOffice Calc. Tyto soubory nelze importovat zpět. - Generuje soubor, který obsahuje všechna tvoje data. Tento soubor můžeš importovat zpět. + Podporuje exporty z této aplikace, ale také soubory vygenerované aplikacemi od Tickmate, HabitBull nebo Rewire. Pro více informací si prečtěte FAQ. + Generuje soubory, které mohou být otevřeny v tabulkových editorech jako jsou Microsoft Excel nebo OpenOffice Calc. Tyto soubory nelze importovat zpět. + Generuje soubor, který obsahuje všechna Vaše data. Tento soubor může být importován zpět. Generace výpisu chyb selhala. Generovat výpis chyb Řešení problémů Pomozte s překladem aplikace - Noční téma - Zobrazit čistě černou v nočním tématu - Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem. + Temný motiv + Zobrazit čistě černou v temném motivu + Nahrazuje v temném motivu šedé pozadí čistou černou. Snižuje spotřebu baterie v telefonech s AMOLED displejem. Rozhraní Otočit pořadí dnů - Zobrazí dny na úvodní stránce v obráceném pořadí + Zobrazit dny na úvodní stránce v obráceném pořadí. Den Týden Měsíc Čtvrtletí Rok Celkem - Ano, či Ne + Ano nebo Ne Každých %d dní Každých %d týdnů Skóre - Zvuk upomínky + Zvuk připomínky Žádný Filtr Skrýt dokončené Skrýt archivované - Připnout notifikaci - Zabraňuje notifikaci její odstranění odsunutím. - Světelná notifikace - Telefon zabliká při upozornění. Fungující pouze na telefonech s notifikační LED diodou. + Připnout upozornění + Zabraňuje odstranění upozornění přejetím. + Světelné upozornění + Blikání diody při upozornění. Funkční pouze na telefonech s notifikační LED diodou. Opravit databázi Databáze opravena. Odznačit @@ -138,40 +139,55 @@ Abecedně Podle barvy Podle skóre + Podle statusu Export - Stiskni a drž pro změnu hodnoty + Stiskněte a držte pro změnu hodnoty Změnit hodnotu Kalendář Jednotka - např. Cvičil jsi dnes? + Např. Cvičil jsi dnes? Otázka Cíl Ano Ne - Změnit zvuk, vibrace, světlo a další nastavení notifikací - Přizpůsobit oznámení + Změnit zvuk, vibrace, světlo a další nastavení upozornění + Přizpůsobit upozornění Zobrazit zásady ochrany osobních údajů Zobrazit všechny přispěvatele… Databáze - Neprůhlednost widgetu - Udělá widgety průhlednější nebo neprůhlednější na domovské obrazovce. + Průhlednost widgetu + Upravuje průhlednost pozadí widgetu na domovské obrazovce. První den v týdnu - Dokončili jste dnes tento návyk? + Dokončili jste dnes tento zvyk? Poznámky (nepovinné) - např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy? + Např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy? Měřitelný + Např. Kolik kilometrů jsi dnes uběhl? Kolik stránek jsi dnes přečetl? %d krát týdně %d krát za měsíc - např. Cvičení + Např. Cvičení Barva - např. 15 - např. Běh - Např. kolik mil jste dnes uběhl? - např. míle + Např. 15 + Např. Běh + Např. Kolik kilometrů jste dnes uběhl? + Např. Kilometry Každý měsíc Musíte vyplnit Dnes + Vyplnit + Nenalezeny žádné zvyky + Nenalezeny žádné měřitelné zvyky + Nenalezeny žádné \"ano/ne\" zvyky + Zvětšit + Zmenšit + Povolit přeskakování dnů + Klikněte dvakrát pro přidání pomlčky (přeskočení dne) místo fajfky. Pomlčka nezmění Vaše skóre, ani nepřeruší Vaši výzvu. + Při chybějícím údaji zobrazit otazník + Odlište dny bez údajů od nesplněného zvyku. Pro zadání \"nesplněno\" klikněte dvakrát. Nyní jste vývojář + Pro daný krok nebyla nalezena aplikace + Po půlnoci prodloužit den o několik hodin + Počkat do 3:00 ráno pro zobrazení nového dne. Užitečné, pokud chodíte spát po půlnoci. Vyžaduje restartování aplikace. %d krát za %d dní diff --git a/uhabits-android/src/main/res/values-hu-rHU/strings.xml b/uhabits-android/src/main/res/values-hu-rHU/strings.xml index 5d167a98e..ea34bb80c 100644 --- a/uhabits-android/src/main/res/values-hu-rHU/strings.xml +++ b/uhabits-android/src/main/res/values-hu-rHU/strings.xml @@ -28,6 +28,22 @@ Új szokás Szín módosítása Szokás létrehozva + + Szokás módosítva + Szokások módosítva + + + Szokás törölve + Szokások törölve + + + Szokás archiválva + Szokások archiválva + + + Szokás újraaktiválva + Szokások újraaktiválva + Áttekintés Szokás erőssége Napló @@ -36,6 +52,7 @@ Mentés Szériák Nincs aktív szokásod + Mára minden kész! Tartsd lenyomva a bejelöléshez, vagy a jelölés törléséhez Kikapcsolva Szokás rögzítése @@ -69,6 +86,14 @@ Tudtad? Az elemek újrarendezéséhez a koppints a szokás nevére, majd húzd a megfelelő helyre. Több nap válik láthatóvá, ha fekvő módba állítod a telefonod kijelzőjét. + + Törli a szokást? + Törli a szokásokat? + + + A szokás véglegesen törölve lesz. A műveletet nem lehet visszavonni. + A szokások véglegesen törölve lesznek. A műveletet nem lehet visszavonni. + Szokás törölve / nem található Hétvégente Hétfőtől péntekig @@ -143,6 +168,7 @@ Megnevezés szerint Színek szerint Pont szerint + Állapot szerint Exportálás Az érték módosításához tartsd lenyomva Érték módosítása @@ -166,6 +192,7 @@ (opcionális) pl. Korán keltél ma fel? Edzettél? Sakkoztál? Mérhető + pl. Hány kilométert futottál ma? Hány oldalt olvastál el? Heti %d alkalommal Havi %d alkalommal pl. Edzés @@ -177,5 +204,19 @@ Minden hónapban Nem lehet üres Ma + Bevitel + Nem találhatók szokások + Nem található mérhető szokás + Nem található igen-vagy-nem szokás + Növelés + Csökkentés + Napok kihagyásának engedélyezése + Váltás kétszer, ha kihagyást szeretne hozzáadni a pipa helyett. A kihagyások változatlanul tartják a pontszámot, és nem szakítják meg a sorozatot. + Kérdőjelek megjelenítése a hiányzó adatoknál + Az adatok nélküli napok megkülönböztetése a tényleges kihagyásoktól. Kihagyás megadásához váltson kétszer. + Ön mostantól már fejlesztő! + Ezen művelet elvégzéséhez nem található alkalmazás. + A nap meghosszabbítása éjfél után néhány órával + Várjon hajnali 3 -ig, hogy új napot mutasson. Hasznos, ha általában éjfél után fekszik le. Az alkalmazás újraindítását igényli. %d alk. / %d nap diff --git a/uhabits-android/src/main/res/values-hy-rAM/strings.xml b/uhabits-android/src/main/res/values-hy-rAM/strings.xml new file mode 100644 index 000000000..1b8fab4ed --- /dev/null +++ b/uhabits-android/src/main/res/values-hy-rAM/strings.xml @@ -0,0 +1,85 @@ + + + + Loop Habit Tracker + Սովորություններ + Կարգավորումներ + Փոփոխել + Ջնջել + Արխիվ + Անարխիվ + Ավելացնել սովորություն + Փոխել գույնը + Սովորությունը ստեղծեց + Պատմություն + Մաքրել + Հիշեցում + Պահել + Անջ. + Ստեղծել սովորությունը + Փոփոխել սովորությունը + Հետո + Բարի գալուստ + 15 րոպե + 30 րոպե + 1 ժամ + 2 ժամ + 4 ժամ + 8 ժամ + 24 ժամ + Միշտ հարցնել + Հղումներ + Անուն + Կարգավորումներ + Գիտե՞ք + Հանգստյան օրեր + Նշել օրեր + Պատրաստ է + Մաքրել + Մասին + Թարգմանիչներ + Տարբերակ %s + Հաճախություն + Ամեն օր + Ամեն շաբաթ + Մուգ տեսք + Օր + Շաբաթ + Ամիս + Տարի + Այո կամ ոչ + Ամեն %d օրը մեկ + Ամեն %d շաբաթը մեկ + Զտել + Սովորություն + Ձեռքով + Անունով + Գույնով + Օրացույց + Միավոր + Հարց + Այո + Ոչ + Չափելի + Շաբաթական %d անգամ + Ամսական %d անգամ + Գույն + Այսօր + diff --git a/uhabits-android/src/main/res/values-iw-rIL/strings.xml b/uhabits-android/src/main/res/values-iw-rIL/strings.xml index 5f39b9417..411ac876a 100644 --- a/uhabits-android/src/main/res/values-iw-rIL/strings.xml +++ b/uhabits-android/src/main/res/values-iw-rIL/strings.xml @@ -70,7 +70,7 @@ ברוך בואך ‏„Loop למעקב אחר ההרגלים” מסייע לך ביצירה ובשימור הרגלים טובים. יצירת הרגלים חדשים - בכל יום, לאחר שביצעת את ההרגל, יש לסמן זאת ביישום. + בכל יום, לאחר ביצוע ההרגל, יש לסמן זאת ביישום. מעקב אחר ההתקדמות גרפים מפורטים מציגים כיצד ההרגלים שלך השתפרו לאורך זמן. 15 דקות @@ -108,7 +108,7 @@ ההרגל נמחק / לא נמצא סופי שבוע - ימי חול + שני עד שישי כל ימות השבוע בחירת ימים ייצוא כקובץ CSV diff --git a/uhabits-android/src/main/res/values-ja-rJP/strings.xml b/uhabits-android/src/main/res/values-ja-rJP/strings.xml index a9f31d108..a54c6f9f9 100644 --- a/uhabits-android/src/main/res/values-ja-rJP/strings.xml +++ b/uhabits-android/src/main/res/values-ja-rJP/strings.xml @@ -37,6 +37,9 @@ 習慣をアーカイブしました + + 習慣のアーカイブを解除しました + 概要 習慣の強さ 履歴 @@ -192,6 +195,8 @@ 今日 入力 習慣が見つかりませんでした + スキップ日を有効にする これで開発者になりました! + この操作を行うアプリが見つかりませんでした。 %d 回 %d 日 diff --git a/uhabits-android/src/main/res/values-ko-rKR/strings.xml b/uhabits-android/src/main/res/values-ko-rKR/strings.xml index f29f7e366..b81b7b556 100644 --- a/uhabits-android/src/main/res/values-ko-rKR/strings.xml +++ b/uhabits-android/src/main/res/values-ko-rKR/strings.xml @@ -28,6 +28,18 @@ 습관 추가하기 색상 변경 습관이 생성되었습니다. + + 습관이 변경되었습니다 + + + 습관이 삭제되었습니다 + + + 습관이 보관 되었습니다 + + + 습관 보관이 취소되었습니다 + 한눈에 보기 습관 강도 이력 @@ -36,6 +48,7 @@ 저장 연속 활성화된 습관이 없습니다. + 오늘 할 일을 모두 마쳤습니다 체크하거나 해제하려면 길게 누르세요. 습관 만들기 @@ -69,6 +82,12 @@ 아시나요? 목록의 순서를 재배치하려면, 습관의 제목을 길게 누르고 다른 위치로 드래그하면 됩니다. 가로 모드에서는 더 많은 날짜를 볼 수 있습니다. + + 습관을 삭제하시겠습니까? + + + 습관을 영구적으로 삭제합니다. 삭제 후 취소할 수 없습니다. + 습관 삭제 / 찾을 수 없음 주말 주중 @@ -138,6 +157,7 @@ 이름 순으로 색상 순으로 점수 순으로 + 상태별로 내보내기 길게 누르면 값이 변경됩니다. 값 변경 @@ -153,11 +173,20 @@ 개인 정보 취급 방침 보기 모든 기여자보기… 데이터베이스 + 위젯 투명도 + 위젯을 홈 화면에서 더 투명하게 또는 더 불투명하게 합니다. 첫번째 요일 오늘 습관을 지키셨나요? 메모 (선택사항) + 예) 오늘 일찍 일어났나요? 운동 하셨나요? 체스를 하셨나요? + 측정 가능한 + 예) 오늘 몇 마일을 달렸습니까? 몇 페이지를 읽었습니까? + 일주일에 몇 번 + 한 달에 몇 번 + 예) 운동 + 예) 15 매월 오늘 %d 번 %d 일 동안 diff --git a/uhabits-android/src/main/res/values-sk-rSK/strings.xml b/uhabits-android/src/main/res/values-sk-rSK/strings.xml index 6bf7b0e50..83f5bff3f 100644 --- a/uhabits-android/src/main/res/values-sk-rSK/strings.xml +++ b/uhabits-android/src/main/res/values-sk-rSK/strings.xml @@ -28,6 +28,12 @@ Pridaj návyk Zmeniť farbu Návyk vytvorený + + Návyk zmenený + Návyky zmenené + Návykov zmenených + Návykov zmenených + Prehľad Sila návyku História @@ -36,6 +42,7 @@ Uložiť Série Nemáte žiadne aktívne návyky + Na dnes máte všetko hotové! Stlačením a podržaním začiarknite alebo zrušte začiarknutie políčka Vypnuté Vytvoriť návyk @@ -138,6 +145,7 @@ Podľa názvu Podľa farby Podľa skóre + Podľa stavu Exportovať Stlačením a podržaním zmeníte hodnotu Zmeniť hodnotu @@ -161,15 +169,28 @@ (voliteľné) napr. Zobudili ste sa dnes skoro? Cvičili ste? Hrali ste šach? Merateľné + napr. Koľko kilometrov ste dnes nabehali? Koľko strán ste prečítali? %d krát týždenne %d krát za mesiac napr. Cvičenie Farba napr. 15 napr. Beh - napr. Koľko míľ ste dnes prešli? - napr. míle + napr. Koľko kilometrov ste dnes prešli? + napr. kilometre Každý mesiac Nemôže byť prázdne Dnes + Zadať + Nenašli sa žiadne návyky + Nenašli sa žiadne merateľné návyky + Nenašli sa žiadne áno-alebo-nie návyky + Povoliť preskočenie dní + Dvojitým prepnutím pridáte namiesto začiarknutia preskočenie. Preskočenia udržia vaše skóre nezmenené a neprerušia vašu sériu. + Zobraziť otázniky pre chýbajúce údaje + Odlíšte dni bez údajov od skutočných prerušení. Ak chcete zadať prerušenie, dvakrát prepnite. + Teraz ste vývojár + Nenašla sa žiadna aplikácia podporujúca túto akciu + Predĺžte deň o niekoľko hodín po polnoci + Na zobrazenie nového dňa počkajte do 3:00. Užitočné, ak zvyčajne chodíte spať po polnoci. Vyžaduje reštart aplikácie. diff --git a/uhabits-android/src/main/res/values-te-rIN/strings.xml b/uhabits-android/src/main/res/values-te-rIN/strings.xml index 60fab75e4..5784d3bf7 100644 --- a/uhabits-android/src/main/res/values-te-rIN/strings.xml +++ b/uhabits-android/src/main/res/values-te-rIN/strings.xml @@ -18,6 +18,7 @@ ~ with this program. If not, see . --> + Loop Habit Tracker అలవాట్లు సెట్టింగులు మార్చు diff --git a/uhabits-android/src/main/res/values-tr-rTR/strings.xml b/uhabits-android/src/main/res/values-tr-rTR/strings.xml index a66809588..5e46fa24d 100644 --- a/uhabits-android/src/main/res/values-tr-rTR/strings.xml +++ b/uhabits-android/src/main/res/values-tr-rTR/strings.xml @@ -18,7 +18,7 @@ ~ with this program. If not, see . --> - Loop Alışkanlık Takibi + Loop - Alışkanlık Takip Uygulaması Alışkanlıklar Ayarlar Düzenle @@ -52,18 +52,19 @@ Kaydet Seriler Etkin alışkanlığın yok + Bugünlük bu kadar! İşaretlemek veya işareti kaldırmak için basılı tut Kapalı Alışkanlık oluştur - Alışkanlık düzenle + Alışkanlığı düzenle İşaretle Sonra Hoşgeldin Loop Alışkanlık Takibi, iyi alışkanlıklar edinmene ve sürdürmene yardımcı olur. - Yeni alışkanlıklar oluşturun - Alışkanlığınızı gerçekleştirdikten sonra her gün uygulamada yapıldı işareti koyun. - Gelişimini izle - Detaylı grafiklerle, zaman içinde alışkanlıklarının nasıl geliştiğini gör. + Yeni alışkanlıklar oluştur + Alışkanlığın gerçekleştiği günleri işaretle. + Gelişimini takip et + Ayrıntılı tablolarla katettiğin ilerlemeyi gör. 15 dakika 30 dakika 1 saat @@ -73,29 +74,33 @@ 24 saat Her zaman sor Özel... - Tek dokunuşla işaretle veya işareti kaldır - Alışkanlıklarınızı, uzun dokunuş yerine tek dokunuşla işaretlemenizi sağlar. Kullanımı daha kolaydır ancak hatalı olarak işaretleme yapılmasına neden olabilir. + Tek dokunuşla işaretle + Alışkanlıkları tek bir dokunuşla işaretle. Basılı tutarak işaretlmekten daha kolaydır ancak alışkanlıkların yanlışlıkla işaretlenmesine yol açabilir. Google Play\'de uygulamayı oyla Geliştiriciye geri bildirim gönder - Github\'da kaynak kodunu gör + Github\'da kaynak kodunu görüntüle Bağlantılar - Ad + Alışkanlık ismi Ayarlar Erteleme süresini ayarla Biliyor muydun? Girdileri sıralamak için, alışkanlık adının üstüne basılı tut ve doğru yere sürükle. - Cihazınızı yatay tutarak daha fazla gün görüntüleyebilirsiniz. + Daha fazla gün görüntülemek için cihazını yatay tut. Alışkanlık silinsin mi? Alışkanlıklar silinsin mi? + + Alışkanlık kalıcı olarak silinecek. Bu işlem geri alınamaz. + Alışkanlıklar kalıcı olarak silinecek. Bu işlem geri alınamaz. + Alışkanlık silinmiş ya da bulunamadı Hafta sonları Pazartesinden Cumaya Haftanın herhangi bir günü Günleri seç CSV olarak dışa aktar - Tamam + Seç Temizle Saat seç Dakika seç @@ -115,13 +120,13 @@ Alışkanlıklar başarıyla içeri aktarıldı. İçeri veri aktar Tüm yedeği dışarı aktar - Hem bu uygulama tarafından dışarı aktarılmış tam yedekleri, hem de Tickmate, HabitBull veya Rewire tarafından üretilmiş dosyaları destekler. Daha fazla bilgi için SSS\'a başvurun. - Üretilen dosyalar, Microsoft Excel veya OpenOffice Calc. gibi hesap taplosu uygulamaları ile açılabilir. Bu dosya yeniden içeri aktarılamaz. - Tüm verilerini içeren bir dosya üretir. Bu dosya yeniden içeri aktarılabilir. + Loop tarafından oluşturulan yedeklemelerin yanı sıra Tickmate, HabitBull veya Rewire tarafından oluşturulan yedeklemeler da desteklenir. Detaylı bilgi için SSS bölümüne bak. + Microsoft Excel veya OpenOffice Calc. tarafından açılabilen bir dosya oluşturur. Bu dosya tekrar içeri aktarılamaz. + Tüm verilerini içeren bir dosya oluştur. Bu dosya tekrar içeri aktarılabilir. Hata raporu oluşturulamadı. Hata raporu oluştur Sorun Giderme - Bu uygulamanın çevirisine yardım et + Bu uygulamanın çevirisinde yardım et Gece modu Gece modunda saf siyah kullan Gece modunda gri arkaplanı saf siyah ile değiştirir. AMOLED ekranlı cihazlarda pil kullanımını azaltır. @@ -144,9 +149,9 @@ Tamamlananları gizle Arşivlenenleri gizle Bildirimleri kalıcı yap - Bildirimlerin kaydırılarak temizlenmesini engelle. + Bildirimlerin kaydırılmasını engeller. Bildirim ışığı - Hatırlatıcılar için yanıp sönen bir ışık gösterir. Yalnızca LED bildirim ışıklarına sahip telefonlarda mevcuttur. + Hatırlatıcılar için yanıp sönen bir ışık gösterir. Yalnızca LED bildirim ışığı olan telefonlarda kullanılabilir. Veritabanını onar Veritabanı onarıldı. İşareti kaldır @@ -158,39 +163,55 @@ Ada göre Renge göre Puana göre + Duruma göre Dışarı aktar - Değeri değiştirmek için basılı tutun + Değeri değiştirmek için basılı tut Değeri değiştir Takvim Birim - Örneğin, Bugün spor yaptım mı? + örn: Bugün egzersiz yaptın mı? Soru Hedef Evet Hayır - Ses, titreşim, ışık ve diğer bildirim ayarlarını değiştirin + Ses, titreşim, ışık ve diğer bildirim ayarlarını değiştir Bildirimleri özelleştir - Gizlilik politikasını görüntüleyin - Tüm katkıda bulunanları görüntüle… + Gizlilik politikasını görüntüle + Katkıda bulunanları görüntüle… Veritabanı Widget saydamlığı - Ana ekranınızda widget\'ları daha saydam veya daha opak hale getirir. + Ana ekrandaki widget\'ları daha saydam veya daha opak hâle getir. Haftanın ilk günü - Bu alışkanlığı bugün tamamladın mı? + Bugün bu alışkanlığı tamamladın mı? Notlar - (Tercihe bağlı) - Örneğin, Bugün erken uyandın mı? Spor yaptın mı? Satranç oynadın mı? + (isteğe bağlı) + örn: Bugün erken kalktın mı? Egzersiz yaptın mı? Satranç oynadın mı? Ölçülebilir + örn: Bugün kaç km koştun? Bugün kaç sayfa kitap okudun? Haftada %d kez Ayda %d kez - Örneğin, Spor + örn: Egzersiz Renk - Ör. 15 - Örneğin, Koşu - Örneğin, Bugün kaç km. koştunuz? - Örneğin, Km. + örn: 15 + örn: Kitap + örn: Bugün kaç sayfa kitap okudun? + örn: Sayfa Her ay Boş bırakılamaz Bugün + Değer gir + Alışkanlık bulunamadı + Ölçülebilir alışkanlık bulunamadı + İşaretlemeli alışkanlık bulunamadı + Artış + Azalma + Gün atlama özelliğini etkinleştir + Gün atlamak için ikinci kez işaretleme yapın. Atlanmış günler puanınızı etkilemez ve serinizi bozmaz. + Eksik verileri soru işaretiyle göster + Eksik verilerle boş günleri ayırt etmenizde yardımcı olur. Boş gün girmek için iki kere işaretleme yapın. + Artık bir geliştiricisin + Bu işlemi gerçekleştirebilecek bir uygulama bulunamadı. + Yeni günü gece yarısından birkaç saat sonra başlat + Yeni gün saat 03:00\'ten sonra başlar. Geç saatlerde uyuyanlar için kullanışlıdır. Uygulamanın yeniden başlatılmasını gerektirir. %d defa / %d gün diff --git a/uhabits-android/src/main/res/values-zh-rCN/strings.xml b/uhabits-android/src/main/res/values-zh-rCN/strings.xml index 0966975f8..589587d72 100644 --- a/uhabits-android/src/main/res/values-zh-rCN/strings.xml +++ b/uhabits-android/src/main/res/values-zh-rCN/strings.xml @@ -72,7 +72,7 @@ 自定义 短按切换 更加方便,但有可能造成意外记录 - 去 Play 商店评价这个应用 + 去 Play 商店评价此应用 发送反馈给开发者 在 GitHub 上查看源代码 链接 @@ -120,14 +120,14 @@ 错误报告生成失败 生成错误报告 故障排除 - 帮助翻译这个应用 + 帮助翻译本应用 深色主题 在深色主题中使用纯黑色 以纯黑色背景代替深色主题中的灰色背景。 这可以降低 AMOLED 屏幕手机的耗电量。 界面 - 反向顺序的日子 - 在主界面显示反向顺序的日子 + 逆序显示日子 + 在主界面以相反的顺序显示日子 @@ -138,15 +138,15 @@ 每 %d 天 每 %d 周 成绩 - 提醒声音 + 提醒提示音 筛选 隐藏已完成 隐藏已存档 - 使提醒持久 - 防止提醒被滑掉 - 通知指示灯 - 通过闪烁指示灯来提醒。仅限于有 LED 通知指示灯的手机。 + 使通知持久 + 防止通知被滑掉。 + 呼吸灯 + 有提醒时,呼吸灯会闪烁提示。仅限于有 LED 通知呼吸灯的手机。 修复数据库 数据库已修复 取消选中 @@ -169,20 +169,20 @@ 目标 - 更改声音、振动、灯光和其他通知设置 + 更改声音、振动、指示灯(呼吸灯)和其他通知设置 自定义通知 查看隐私政策 查看所有贡献者 数据库 微件不透明度 - 调整主屏幕上微件的不透明度 + 调整主屏幕上微件的不透明度。 一周的第一天 你今天完成这个习惯了吗? 备注 (选填) 例如:你今天早起了吗?你锻炼了吗?你下棋了吗? 可量化的 - 例如:今天你跑了几公里?你阅读了几页书? + 例如:今天你跑了几公里?你读了几页书? 每周 %d 次 每月 %d 次 例如:锻炼 @@ -198,8 +198,8 @@ 找不到习惯 找不到可量化的习惯 找不到“是或不是”类的习惯 - 增量 - 减量 + 增加(+1) + 减少(-1) 启用跳过天数 切换两次以添加跳过而不是复选标记。跳过将保持您的得分不变,且不会打破你的连续纪录 对丢失的数据显示问号 From d875af8a8eb1db7af80a993a338be75a040d20c0 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 06:30:57 -0600 Subject: [PATCH 003/147] CheckmarkDialog: Format date using current locale --- .../activities/common/dialogs/CheckmarkDialog.kt | 11 +++++++---- .../activities/habits/list/ListHabitsScreen.kt | 8 +++++--- .../activities/habits/show/ShowHabitActivity.kt | 9 +++++---- .../java/org/isoron/platform/time/JavaDates.kt | 7 +++++++ .../core/ui/screens/habits/list/ListHabitsBehavior.kt | 5 ++++- .../core/ui/screens/habits/show/views/HistoryCard.kt | 6 +++--- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt index c80759bae..4e62b614b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt @@ -8,6 +8,8 @@ import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE import android.widget.Button import androidx.appcompat.app.AlertDialog import org.isoron.platform.gui.toInt +import org.isoron.platform.time.JavaLocalDateFormatter +import org.isoron.platform.time.LocalDate import org.isoron.uhabits.R import org.isoron.uhabits.core.models.Entry.Companion.NO import org.isoron.uhabits.core.models.Entry.Companion.SKIP @@ -22,6 +24,7 @@ import org.isoron.uhabits.databinding.CheckmarkDialogBinding import org.isoron.uhabits.inject.ActivityContext import org.isoron.uhabits.utils.InterfaceUtils import org.isoron.uhabits.utils.StyledResources +import java.util.Locale import javax.inject.Inject class CheckmarkDialog @@ -36,9 +39,9 @@ class CheckmarkDialog private var selectedButton: Button? = null fun create( - value: Int, + selectedValue: Int, notes: String, - dateString: String, + date: LocalDate, paletteColor: PaletteColor, callback: ListHabitsBehavior.CheckMarkDialogCallback, theme: Theme, @@ -46,11 +49,11 @@ class CheckmarkDialog binding = CheckmarkDialogBinding.inflate(LayoutInflater.from(context)) fontAwesome = InterfaceUtils.getFontAwesome(context)!! binding.etNotes.append(notes) - setUpButtons(value, theme.color(paletteColor).toInt()) + setUpButtons(selectedValue, theme.color(paletteColor).toInt()) val dialog = AlertDialog.Builder(context) .setView(binding.root) - .setTitle(dateString) + .setTitle(JavaLocalDateFormatter(Locale.getDefault()).longFormat(date)) .setPositiveButton(R.string.save) { _, _ -> val newValue = when (selectedButton?.id) { R.id.yesBtn -> YES_MANUAL diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt index e3be88a0d..774e5345f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt @@ -24,6 +24,7 @@ import android.content.Context import android.content.Intent import androidx.appcompat.app.AppCompatActivity import dagger.Lazy +import org.isoron.platform.time.LocalDate import org.isoron.uhabits.R import org.isoron.uhabits.activities.common.dialogs.CheckmarkDialog import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialogFactory @@ -235,16 +236,17 @@ class ListHabitsScreen } override fun showCheckmarkDialog( - value: Int, + selectedValue: Int, notes: String, + date: LocalDate, dateString: String, color: PaletteColor, callback: ListHabitsBehavior.CheckMarkDialogCallback ) { checkMarkDialog.create( - value, + selectedValue, notes, - dateString, + date, color, callback, themeSwitcher.currentTheme!!, diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index a53ff6bfd..0b696ad4e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -27,6 +27,7 @@ import androidx.appcompat.app.AppCompatActivity import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import org.isoron.platform.time.LocalDate import org.isoron.uhabits.AndroidDirFinder import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R @@ -174,17 +175,17 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { } override fun showCheckmarkDialog( - value: Int, + selectedValue: Int, notes: String, - dateString: String, + date: LocalDate, preferences: Preferences, color: PaletteColor, callback: ListHabitsBehavior.CheckMarkDialogCallback ) { CheckmarkDialog(this@ShowHabitActivity, preferences).create( - value, + selectedValue, notes, - dateString, + date, color, callback, themeSwitcher.currentTheme!!, diff --git a/uhabits-core/src/jvmMain/java/org/isoron/platform/time/JavaDates.kt b/uhabits-core/src/jvmMain/java/org/isoron/platform/time/JavaDates.kt index b922b88fe..32c75eb8c 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/platform/time/JavaDates.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/platform/time/JavaDates.kt @@ -19,6 +19,7 @@ package org.isoron.platform.time +import java.text.DateFormat import java.util.Calendar.DAY_OF_MONTH import java.util.Calendar.DAY_OF_WEEK import java.util.Calendar.HOUR_OF_DAY @@ -66,4 +67,10 @@ class JavaLocalDateFormatter(private val locale: Locale) : LocalDateFormatter { val cal = date.toGregorianCalendar() return cal.getDisplayName(DAY_OF_WEEK, SHORT, locale) } + + fun longFormat(date: LocalDate): String { + val df = DateFormat.getDateInstance(DateFormat.LONG, locale) + df.timeZone = TimeZone.getTimeZone("UTC") + return df.format(date.toGregorianCalendar().time) + } } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt index acf1cde73..d39227927 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt @@ -18,6 +18,7 @@ */ package org.isoron.uhabits.core.ui.screens.habits.list +import org.isoron.platform.time.LocalDate import org.isoron.uhabits.core.commands.CommandRunner import org.isoron.uhabits.core.commands.CreateRepetitionCommand import org.isoron.uhabits.core.models.Habit @@ -65,6 +66,7 @@ open class ListHabitsBehavior @Inject constructor( screen.showCheckmarkDialog( entry.value, entry.notes, + timestamp.toLocalDate(), timestamp.toDialogDateString(), habit.color, ) { newValue, newNotes -> @@ -168,8 +170,9 @@ open class ListHabitsBehavior @Inject constructor( callback: NumberPickerCallback ) fun showCheckmarkDialog( - value: Int, + selectedValue: Int, notes: String, + date: LocalDate, dateString: String, color: PaletteColor, callback: CheckMarkDialogCallback diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt index 95eebbec6..bc60ec398 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt @@ -93,7 +93,7 @@ class HistoryCardPresenter( screen.showCheckmarkDialog( entry.value, entry.notes, - timestamp.toDialogDateString(), + timestamp.toLocalDate(), preferences, habit.color, ) { newValue, newNotes -> @@ -206,9 +206,9 @@ class HistoryCardPresenter( callback: ListHabitsBehavior.NumberPickerCallback, ) fun showCheckmarkDialog( - value: Int, + selectedValue: Int, notes: String, - dateString: String, + date: LocalDate, preferences: Preferences, color: PaletteColor, callback: ListHabitsBehavior.CheckMarkDialogCallback, From 56d2307b7550112352bb21100d531663f83be87c Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 06:40:28 -0600 Subject: [PATCH 004/147] Habit notes: left align --- uhabits-android/src/main/res/layout/show_habit_notes.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/uhabits-android/src/main/res/layout/show_habit_notes.xml b/uhabits-android/src/main/res/layout/show_habit_notes.xml index 52c9627d7..d645f4001 100644 --- a/uhabits-android/src/main/res/layout/show_habit_notes.xml +++ b/uhabits-android/src/main/res/layout/show_habit_notes.xml @@ -28,7 +28,6 @@ android:id="@+id/habitNotes" android:layout_width="match_parent" android:layout_height="wrap_content" - android:gravity="center" android:textColor="?attr/contrast100" tools:text="This is some example text for the notes" /> \ No newline at end of file From 642e45af89631877d2d0460a0e5da43b2f9b537b Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 07:21:29 -0600 Subject: [PATCH 005/147] NumberPicker: Replace "5" by "50" instead of "05" on decimal picker --- .../common/dialogs/NumberPickerFactory.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index 404c18e9c..74d77c47b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -25,6 +25,7 @@ import android.content.DialogInterface import android.text.InputFilter import android.text.Spanned import android.view.LayoutInflater +import android.view.View import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE import android.view.inputmethod.EditorInfo import android.widget.EditText @@ -44,6 +45,7 @@ class NumberPickerFactory @ActivityContext private val context: Context ) { + @SuppressLint("SetTextI18n") fun create( value: Double, unit: String, @@ -58,11 +60,19 @@ class NumberPickerFactory val picker2 = view.findViewById(R.id.picker2) val etNotes = view.findViewById(R.id.etNotes) + // Install filter to intercept decimal separator before it is parsed val watcherFilter: InputFilter = SeparatorWatcherInputFilter(picker2) - val numberPickerInputText = getNumberPickerInputText(picker) - - // watch the unfiltered input before the filters remove a possible separator from it - numberPickerInputText.filters = arrayOf(watcherFilter).plus(numberPickerInputText.filters) + val pickerInputText = getNumberPickerInputText(picker) + pickerInputText.filters = arrayOf(watcherFilter).plus(pickerInputText.filters) + + // Install custom focus listener to replace "5" by "50" instead of "05" + val picker2InputText = getNumberPickerInputText(picker2) + val prevFocusChangeListener = picker2InputText.onFocusChangeListener + picker2InputText.onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus -> + val str = picker2InputText.text.toString() + if(str.length == 1) picker2InputText.setText("${str}0") + prevFocusChangeListener.onFocusChange(v, hasFocus) + } view.findViewById(R.id.tvUnit).text = unit view.findViewById(R.id.tvSeparator).text = From 535bc03b70877468dd5fe9940c731d295ff3593f Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 07:22:26 -0600 Subject: [PATCH 006/147] NumberPicker: Clear focus of both pickers --- .../uhabits/activities/common/dialogs/NumberPickerFactory.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index 74d77c47b..ec843d42c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -96,6 +96,7 @@ class NumberPickerFactory .setTitle(dateString) .setPositiveButton(R.string.save) { _, _ -> picker.clearFocus() + picker2.clearFocus() val v = picker.value + 0.01 * picker2.value val note = etNotes.text.toString() callback.onNumberPicked(v, note) From 9770ce187ad365365d63abfb0a799d0bbddf3416 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 07:28:40 -0600 Subject: [PATCH 007/147] NumberPicker: Fix formatting --- .../uhabits/activities/common/dialogs/NumberPickerFactory.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index ec843d42c..c11dff227 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -70,7 +70,7 @@ class NumberPickerFactory val prevFocusChangeListener = picker2InputText.onFocusChangeListener picker2InputText.onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus -> val str = picker2InputText.text.toString() - if(str.length == 1) picker2InputText.setText("${str}0") + if (str.length == 1) picker2InputText.setText("${str}0") prevFocusChangeListener.onFocusChange(v, hasFocus) } From 308d5583473f5bdca920822f4ee4de3147991336 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 07:36:40 -0600 Subject: [PATCH 008/147] NumberPicker: Show keyboard more reliably --- .../activities/common/dialogs/NumberPickerFactory.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index c11dff227..0845999c2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -28,6 +28,7 @@ import android.view.LayoutInflater import android.view.View import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE import android.view.inputmethod.EditorInfo +import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.NumberPicker import android.widget.TextView @@ -110,8 +111,7 @@ class NumberPickerFactory .create() dialog.setOnShowListener { - picker.getChildAt(0)?.requestFocus() - dialog.window?.setSoftInputMode(SOFT_INPUT_STATE_ALWAYS_VISIBLE) + showSoftInput(dialog, pickerInputText) } InterfaceUtils.setupEditorAction( @@ -141,6 +141,13 @@ class NumberPickerFactory f.isAccessible = true return f.get(picker) as EditText } + + private fun showSoftInput(dialog: AlertDialog, v: View) { + dialog.window?.setSoftInputMode(SOFT_INPUT_STATE_ALWAYS_VISIBLE) + v.requestFocus() + val inputMethodManager = context.getSystemService(InputMethodManager::class.java) + inputMethodManager?.showSoftInput(v, 0) + } } class SeparatorWatcherInputFilter(private val nextPicker: NumberPicker) : InputFilter { From d40a5a89cd27921085de858ad683349be5d7a44a Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 1 Jan 2022 08:06:45 -0600 Subject: [PATCH 009/147] Notes: Update test screenshots --- .../views/habits/show/NotesCard/render.png | Bin 5842 -> 5857 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/uhabits-android/src/androidTest/assets/views/habits/show/NotesCard/render.png b/uhabits-android/src/androidTest/assets/views/habits/show/NotesCard/render.png index dafb53f4f48c0a3a3b3055ffaf1ab7b0f2c82b03..f1cfd067655374f83faa26ce786a7691c9a25636 100644 GIT binary patch literal 5857 zcmeHLX&{vA+n?$blBHCN(BiZZQkJrxKF{s%! zI|yXgad7>Q@E-76GU#v%)2dLv;rAt52TASlS!xF1GN|Gl^)wBrwO5vTr#q~N|?(nzozF^22_ z%gufNKKwTc|DT=EZ6#$SBO{ZZlT$V{g%KGNmi|-%%xQKZuXEE1j#a zmX?-szDb}Y=gN-kpX z>*MWhgFqCB%j=aaEcin0?Ces1^%kP%2a6-%+jS(w;0KGWP&PG!eq)kzy?8bp>lVdY z?0>LJXnmza!6NnK$&(tMT?apW_;BveKii5q*{ZNqGMOCu^Pl}V_C%DDs%j=RAWQL; zthTj;{(7=}%(|_~wQK9%?qg$PWu>J-*sswuue58U*a6T1q8g#%_3I-I{=UAx>r2?> zg}%4OphfJ=%$~O=94&e#k2Le~@!2aO!FJA6^Y70^hRyQWlcXgo*3r)H(B4bqU*hBAgKumv441>J zZ#_};>3?SupO7#Vh+31)H;93M`}U2~qQHMsQgRkuIF?9JbH}^Beft(kuWSgNZWYng z(o)jXbM5TxgnzpEAT=$G+QpiU4r3dhf;u`nl5tTDi3)}Ryh+MkEvsBDtF>P}gU|P$ z((xax=EDp&--83q3`T(N{@r7B)ToO{WG>e9F09TH1C|S~g#3-hbIMc^O(h_h+yEkf zt#G@fqQX){L?oZ(bmK;O76J*CR&~7>H5t%Q{^pI*?%lfuQCz%u5$S3=I9pd+>)n&1 zsT2Iutk@HjMoC3wc#_Z3#&H(P^)W_j;I{3hGgE_Sf38tp&jhr@jKBpwC;BrN*}$f^TU*hU2priz;YrJsO;Av^;{4YKyL9gVe#0z}?a)0wVNfI2 zuno>tLEtmd0gUnS@rvf=tA`FB_T5~auX zaH0Z((cvvc5C#{=Y7R+DlZtr$c!8kY5S)0n{>S#QnE0|0xR`Cbh6I@JZ4OsWVFY`fe{?y!cFED4jn)#9~k?bv?5Kow0VFI(6lW3ruh2@c}8RFy?||{^g*nlzM-A6O$*`E8!mi1eGo~hDdbtxNN_^ zH-F_^x|0|{;Dv)~qa%Fu#u@?(+Y{x=*VjX1K)+>ys@dA6AYyr8ZeM~;2wSsinmz-H zR1}wy8qGZxHVZNcuk+2wvo02V%afRS?%X-3zrVlIxpVz=G@)vBHMr9Ci=C|2-M+@4 z8NH=5+S(-aq#OkDrY1LdpP7S0Itsi-SyR(dE4ODsYYnu&x$m<5Hb^hsFAa(Km?h`~eyU)CBN2x#muiqR+R7y9J~?Ju`FY z*s+Sn#>*;h7>7$<-N}k_2GNZ~QNOH>jr(JFwLsnA%VM%xmRh-1;N^_za4IIuHy|Lh z$ICuEy#6$-pyK&+;kMRR@9%k6%we#G#9}~0|1Cw6kH7zLy+1_}T4b7Z9efx7|B#ea z(c{N|^yKS0p>ZsD7WZOgw;lHm5&Iq$zc67p+(zTe!!qDJ+%g@r}f z`kZYNGci7XfWxHM-5tBwlXt~FNpJOeb8|Ds|5BE^N4qx&i!+dge?L0vET&-KTI1DY z2X?Fb{ykr}lElC44$=)Lpm3lDeRVtve{E6k!?eXCTtS-pn2pte;1YG{;(b9y3eJY5iMyHvJ zmg&+54!p}yc2ZJSwg5+3YfPj|(=sy;4-XGB-~B4c$jpSVY3nhE?Bx}5^Kx>0-G0jJ zhIb<;Ln+uiy-2&dy1LZ&n`^YFinYfgQlTWbh{$mR$&M``aV4KW+u3pDRACV+AFXmf zQUb6&@X0iE48zad(sI4A;>@q^?3tDOX{o6d9C>}DgA*FT2s^3`G-c#V2u%?>KR+*X z@wQoU*ewr_y4#%xpbToMD~BtFGzC^1!_B2gYRCF*uVq(7TyBcmi)quBd54x;- zCKx8Yj2GU!cNKFNoCqK{9k>yY5+2K&@$TJ8D1+ufuJu8XqJBIOszvdTez_u2r$gZ# zg#x&It;xL@w|)(#@C+EJvSkz-3&$br0Ix8cMb*x#tJ?zHVb;FuX5{59W_3zhrPD%n z!nQVo3McPSrU^3cXz9efD9RzUe2O32nl(n(jsEmw^QowoGaE9Ie`;GFbjsK{?Yt2?x zR(91l0mtF#>FMI;c=hU4u-#3!gIZcz;YgVj!)VTYaVoh`V`$}joHnV-Erd%6rC5B% z2t_XJ9F}@;*^6Wl5dCh%Xh6Mtb4~RjeKabV?e$OciL#0c2M>>;$u1zR_!DvKHbCzY z(JLnUYu%T0!WPnj<~uk$m&C{KWl*tBLK5;0*4BybNeYHPy8HmNyE2rSz}G0Ns#^Ez zv-6g4Y(zuQPSYg$;WEeaEjxCiD>Yq!wOL|T1QuVcdf_8wf~kz`=%8^VU`YkOKVOyBM^Ihvh1t^Q zenN`3Q0{TjIu(KPW?HK3TB3xXunPkeA5N{YAGu`?kl^mPTVy=7u z$NeyqpB}q4qhJuI@Z2L@%puU%_jB{dGlBTck0VuXe)^eX?`JxaZlF67<>(DO%$^zw zgQZI00wT}StbRv72Ih=4;p5b^Kw@(P@udt(!;K^_T#8>`;JtgFt{QX0?Mn^2=#Ae2 zKy+0aC=4VmKLY7EnVc+159@HLar{jq<{Y^Ilxk+v*T<)SId(e=%80PUZ?vg#96$+wE9^AW_Ug&`@afZqEBV&I z;J^XK>N39+DAfrpEMx8bdL7*&Hl0*W90nW{%35>*p96ku?q_FOS9fck{5ydQbpZ`78g7SH}v@o0j zbV-07yC`-YaFwNaJi?Bf|4zbS!^n`ol7vfa5N=gBy>`uee&9pu`&~lf-oO9^g!t#_ zMp&bpR^zMO2~~4*0&iGO37>lfJf7c7`>PS7=u)1Dn~RIf2sP)4sB}2FN{yy`{=6m3 zkXNfX57G$7hF4NtwFK$v?Cd9O^8%p*gD^wJ;rrl!3N8sd=AZU>4NAmr7z4$bTc009 z@;7M$Sp@GI9vX7ql`%6tot~1Sew@f1rx_H3($X0XlOy0=>sxER${HFDm6eqvI>67> z|4N+`B&P{t%-GN&y{5a{FZBm+(fP@+0Nk}B|u0zcG14bN?EX<>Gr zDRh4H43wi%NdEp;Fdw9W`JlQ(zGe?<89<%OV%WR7=E=y)dNxqPh$;=d}l;-jm;&TB+(++&P?v3II+t#0lpu`OC} zm4bN#Rv1C^i>>oleI61(lX3-&Zfc%*Dr9JrSWf;qiMQedU#HP9C+>_ zE-pTjgjzo(*e)_MQsA~7y=-if@xT+(ON$GFbCX&o51)5_^Vg$2=Kyy67yH5B#(WhR zZJeafdQI}@2IJqe?ge$oMVtla1@lP2EFfG2$jC70t*9UepmK!|fg#RzBnpX%i2+j$ zhDImgV*+r@5!Ev&S?^ikQXL%}N~)`ETb_yy&h-~z^Kh7AK?RhR9o^m0U~UA?4$TF9 zGz`f3(7}TO*VNY5#w-!X`G~qN%)SC!0xJwiL*rJfuwT;yHB0%LA=DJY(eVQq3!XfA z;xklY%hNJ7Gd6xCAG;L<9RO2)ac!*zX#4r;wwIXT*?8b5G?D9b^1~DbnuRanB`s(1 zf`I|viM9^{S(n%;9A~g{&iDg5ulf0OWk?1W9j^L&H^$pKR6Qi|9Kw*k$M0(H+723WzkUK zPUKykOFsGc6whC6+pD{$=$@sL%i|Y=LXyu#^fTOs9fd9`k9xdc)7FoED5j(&Gj}s> z=*;rXy!t}Kfrn{O*4=>a6Z7rI6&)`riQ5PS-nb-Sok`=MdnUfVrWqLo9NOS*VZUvj zoz2I8Ya$Y6#}5sRkB^@OQ-Ww6ADEQnpDga&fe3)H?TEmB{NQ0m974BM_i_< zP}f_2z-N2AX9J%IF_Yf4J2hu!#-BVq%!x<&Y{@Xf&vK^H6|6Gt3XExNo@m4JUdJm} zo-MDeD8a9k*^ysr`)+v^$K1hQH6x!-@y8qbP)Iu>kQI>$H*cRH>RGG zC?}u+zY-1O^+UAK5P`Pd#i@3^XoeHI`}UnN;+Z#Z-n3Lts{wEd7VzxWUFz)x^j$nU zyT6jyy-y3Ny&HWJ!TtF#X!t*=#v5}d;Erx? zFH7wUs)vW2l$4dZ70IRD&)zmP=*yjpG-ngI`41mH{1Z2(1V5x~H_YQs)}+fPT)KY! zI*jV-;*u2<6f~}(HJP|#%c5efGdbTMX{th@R7B3}*D{371w0fv_ZJ|@;lqdDE=_kb zw>R0YK|vK4%*I3=1%@RiwqS99~bV;ip3UV~jP)Rf?lq|_bb;u@1z zF+TI0d6JNb$S^yZYiMC^9>?p68BhNFP*O-tY-B8qSOq@kU2UyHQBjeVmDSLvG~pM| zpZ{=)3F~u>-OihJx zA*-gL!9}xW@wSz{ZDoa=`m_hfRaI53q*PT^g?5AFT76cqWiBczI)V~QZ&%#}-0bS= zVjv^N#~S7kgys(*>saGWBo@IsTSLXbz}51}u|ZLT@d5f;>6517Jj2+am6_hW2~9OM zQchTFc}t5?m3v(WA|tJR>av5wQ^onVTY`L^tzuF-4UbP4*U8~_rWJPHfu-pWWdY5q zynS0h^6=rC0O*b7Y+{Hyvv-}rNV%B#M8TxGva-@H*4wM-&&k##kETe!vc-|wZDsrX z;pS*2a_PGTF1q=D;Dn*pPN}L|O|JLFBF7Lo6_B4678ca{z-J5wgOfA4buntT&p9L{ z1iglfn7;TTD@#>T(Y)ViC1atPsgahRj%jJ}@@xnh+^3LOI6m%0i|kf6o-Z~&Ku3%< z^a?3hXPq7#Z;FyUbf~zw8OoyJUB_@?l=YQatY5bjY-ekQwxDTf=n0UmsIGRoc=6ub zH6J3oWyKC289X*LEt@8g^4tQ&u)M!|0SPUyNrb|KG`!q~l$|K|w?LFq9%(SXyKF`{zfJ($ZyZ zZRbCCbOg;0mAuvq&QhEQY=+5%9gvn*&gm_E`SJ*p@brXbmw(+?|GFmc@zynJFj$YQ zUjHkgE|uEml)itjWnpO$m)}WUZeA-lK@!SK8BKW19zce){yO3@o7@Xik;zR%WJz z94ukjmvG{bKR6rAn&59A{9eOQ4f2VLrfGNYBFFqSraRFTOigQrX5y6a!v_xr-#HZP z2J{{C^Y`~){v54sPhdS-;lo|P`xy`k&6Cmb&lsup#(?tVeemGHhZz}8k&z#O00EMo zNN+D%Wl~VIY)zseL_~h~0f^v2ZKpixvBAXXJP#T0x`$D5j(dSHWIoYB$2f=Y&FHYP`e1_nAH5D0~!1%8RqOKHDi52G*Degy(Q zVzE%`+gZuA#Syx{K2xsJcYA;BRwvXR$S95$lheuKMf9+VJFTi}YD(D2sbwVPMn}fc z=K0c`%2n8Umuu^ryLWe^yAy5z{N>RG+S-E^?7?EoXnNNRjf%$C)YCLND*Mfxx79Nd_Ph*fphcm zv2%{AtE<%3Bzy;2q2}+u&2iC*>o*5(ozgsgx^hgI^8_)|tt`#su~TqYQTS`<`}YUl z!k;;Lc~$BJ^trKfLQ&aIq|3Mys2a*@3lGXh`^MPzNlQq)@eCu7gY$giruHN)e^r(_ z7x}i6p06>1I&u7X8}q}rx&TaJ;d!xiv)TRv?zdvBu&^+&2mtRaRX zbmEtP*fD=C;|1IPF@@~XI>q5cy!-g^BEGP z5IgfwaanyE2M33wiHRTDDO*dOnQy@hV!rux>8*WI2+_}3ZJyTVW(OZYUAS-|+de|p zII$6^k+ZvdAU4T|LwD$cY(0VqT>H{An~$mwB%LJi*2bvB6e7?NCl{AeAP=g#x=!Lo zi>XrT9&Z~P8%;g0Mn_`-p`sVY&%s&JogjrqEUx?d`j(X)T>qq8koZSA4{j#M7Kw`j zh6_goWKzVS{wmYB313+HbPck{>^FG!GhWm6n#Kdg|0=3yZY11sdkgK5wynjFNx<}*0iFU+!*7>MjmB{sFKfdFHB~&~$ zD5XwB2Ye)3RFyr`Y32vD?*J;3MVkNV`bw~*w6r6Eg%GjwX`In5fA?-~c{C>{rwX5# ze^POGI8P>V@;+oB%`9DP9#|)AWKTw zwan%fSO?1dgmLRIatx1bdA1DdZ!u+T6GRpy1Fu&3e*P;UU`aG{#2xLY{~z1K{O!=m zUm?Wmk3VDZgzmL%5X{fEat>+<*)}-k;zXn|vExI8pBH|Ptz7xt3 zGmn>}oJ-kGEThNZy@9z~xRP||_U%fFTtIIO+|I6{Ln&me!4_B?d2ZCgc$1yK&$#mP^1&x^hR?IJXR&rXx;kWdWCRG5 zy(4P#$r0^Oi1?KL?BE-1xw*&CvzU?+3nGsd1}c;G`qr$;B<2i61OaNMSy%44sKXKx zf0U8RK@QIS{8l$|hH|AOhDB8>Ps&f*j!8Ote;FFni6uq+TD%VYz(<+;npl$}H60yNv**gFFFKl9 zZ8EC{ypX*KuU>H;VCaDh%>$;Xl8(ha^_~FEmlNo@yx0kcz`*kS zq&4?F`}Se5Sh7a|uxBG)5`2u5&zx~2mDy8(bYN3aiACK!^NcjGDN~)_c806nla|#f25z@bx8+ zj-JBPs%1kPO%I*4S)|gwDs<+)eqHhA%^z}5{XEPH-Wl>*5t!NskyoN9KddQ z{z%3XpijjF6qiBZPLLWSra{;0?BH-+-G?u1O%5BVR{y@-a$xNcldazS#EuPoytA(g zF5TVTU8Qjk7-lkzJ3jr$Y>(DmKK;+t`S&_{dF292ChMb{`z0uNL&~SzF7%70^S8W%$G*6gY~bh5r)H^pmIjha12@-L(Ab6CE-(-JZ@>MP04lp4YAvLo!6J5*VHF$4`KyevO52i;ELcOTc=@2My&cOrfc-amMPL#|17<}U#Su^H9+b}c-jTOD^wS=ka8 zrck>5Yh5@W74KLYIlWjwYj}^Yfq~8)@zmcjpdkgC1?KV)NG{)?(Ekp*Q)L7!%)^I5 zdiwf7KfXMbF$nd_u5;x+C(S$g`IRu3Oi4L8^_Uqzp3VBX|(46 z Date: Sun, 2 Jan 2022 11:06:37 -0600 Subject: [PATCH 010/147] HistoryCard: Make colors more consistent for AT_MOST habits --- .../habits/list/views/NumberButtonView.kt | 23 ++++------ .../screens/habits/show/views/HistoryCard.kt | 43 ++++++++----------- .../uhabits/core/ui/views/HistoryChart.kt | 6 ++- 3 files changed, 31 insertions(+), 41 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt index b958dae8b..d0d705fb3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt @@ -29,7 +29,8 @@ import android.view.View import android.view.View.OnClickListener import android.view.View.OnLongClickListener import org.isoron.uhabits.R -import org.isoron.uhabits.core.models.NumericalHabitType +import org.isoron.uhabits.core.models.NumericalHabitType.AT_LEAST +import org.isoron.uhabits.core.models.NumericalHabitType.AT_MOST import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.inject.ActivityContext import org.isoron.uhabits.utils.InterfaceUtils.getDimension @@ -37,7 +38,6 @@ import org.isoron.uhabits.utils.dim import org.isoron.uhabits.utils.drawNotesIndicator import org.isoron.uhabits.utils.getFontAwesome import org.isoron.uhabits.utils.sres -import java.lang.Double.max import java.text.DecimalFormat import javax.inject.Inject @@ -90,7 +90,7 @@ class NumberButtonView( invalidate() } - var targetType = NumericalHabitType.AT_LEAST + var targetType = AT_LEAST set(value) { field = value invalidate() @@ -164,18 +164,11 @@ class NumberButtonView( } fun draw(canvas: Canvas) { - var activeColor = if (targetType == NumericalHabitType.AT_LEAST) { - when { - value < 0.0 && preferences.areQuestionMarksEnabled -> lowContrast - max(0.0, value) >= threshold -> color - else -> mediumContrast - } - } else { - when { - value < 0.0 && preferences.areQuestionMarksEnabled -> lowContrast - value <= threshold -> color - else -> mediumContrast - } + val activeColor = when { + value < 0.0 -> lowContrast + (targetType == AT_LEAST) && (value >= threshold) -> color + (targetType == AT_MOST) && (value <= threshold) -> color + else -> mediumContrast } val label: String diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt index bc60ec398..de1820bbd 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt @@ -29,16 +29,21 @@ import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.HabitList -import org.isoron.uhabits.core.models.NumericalHabitType +import org.isoron.uhabits.core.models.NumericalHabitType.AT_LEAST +import org.isoron.uhabits.core.models.NumericalHabitType.AT_MOST import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.models.Timestamp import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior import org.isoron.uhabits.core.ui.views.HistoryChart +import org.isoron.uhabits.core.ui.views.HistoryChart.Square.DIMMED +import org.isoron.uhabits.core.ui.views.HistoryChart.Square.GREY +import org.isoron.uhabits.core.ui.views.HistoryChart.Square.HATCHED +import org.isoron.uhabits.core.ui.views.HistoryChart.Square.OFF +import org.isoron.uhabits.core.ui.views.HistoryChart.Square.ON import org.isoron.uhabits.core.ui.views.OnDateClickedListener import org.isoron.uhabits.core.ui.views.Theme import org.isoron.uhabits.core.utils.DateUtils -import kotlin.math.max import kotlin.math.roundToInt data class HistoryCardState( @@ -146,36 +151,24 @@ class HistoryCardPresenter( val oldest = habit.computedEntries.getKnown().lastOrNull()?.timestamp ?: today val entries = habit.computedEntries.getByInterval(oldest, today) val series = if (habit.isNumerical) { - if (habit.targetType == NumericalHabitType.AT_LEAST) { - entries.map { - when (max(0, it.value)) { - 0 -> HistoryChart.Square.OFF - else -> HistoryChart.Square.ON - } - } - } else { - entries.map { - when { - max(0.0, it.value / 1000.0) <= habit.targetValue -> HistoryChart.Square.ON - else -> HistoryChart.Square.OFF - } + entries.map { + when { + it.value == Entry.UNKNOWN -> OFF + (habit.targetType == AT_MOST) && (it.value / 1000.0 <= habit.targetValue) -> ON + (habit.targetType == AT_LEAST) && (it.value / 1000.0 >= habit.targetValue) -> ON + else -> GREY } } } else { entries.map { when (it.value) { - YES_MANUAL -> HistoryChart.Square.ON - YES_AUTO -> HistoryChart.Square.DIMMED - SKIP -> HistoryChart.Square.HATCHED - else -> HistoryChart.Square.OFF + YES_MANUAL -> ON + YES_AUTO -> DIMMED + SKIP -> HATCHED + else -> OFF } } } - val defaultSquare = if (habit.isNumerical && habit.targetType == NumericalHabitType.AT_MOST) - HistoryChart.Square.ON - else - HistoryChart.Square.OFF - val notesIndicators = entries.map { when (it.notes) { "" -> false @@ -189,7 +182,7 @@ class HistoryCardPresenter( today = today.toLocalDate(), theme = theme, series = series, - defaultSquare = defaultSquare, + defaultSquare = OFF, notesIndicators = notesIndicators, ) } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt index afdc5d3b0..efd7737c5 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt @@ -53,6 +53,7 @@ class HistoryChart( enum class Square { ON, OFF, + GREY, DIMMED, HATCHED, } @@ -216,6 +217,9 @@ class HistoryChart( Square.OFF -> { theme.lowContrastTextColor } + Square.GREY -> { + theme.mediumContrastTextColor + } Square.DIMMED, Square.HATCHED -> { color.blendWith(theme.cardBackgroundColor, 0.5) } @@ -254,7 +258,7 @@ class HistoryChart( if (hasNotes) { circleColor = when (value) { - Square.ON -> theme.lowContrastTextColor + Square.ON, Square.GREY -> theme.lowContrastTextColor else -> color } canvas.setColor(circleColor) From 7ba9a7e4e74a728675f95e6e379f9669780a10f4 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 2 Jan 2022 11:16:21 -0600 Subject: [PATCH 011/147] Update translations --- .../src/main/res/values-ar-rSA/strings.xml | 16 ++++++++++------ .../src/main/res/values-bg-rBG/strings.xml | 3 +-- .../src/main/res/values-ca-rES/strings.xml | 6 ++---- .../src/main/res/values-cs-rCZ/strings.xml | 6 ++---- .../src/main/res/values-da-rDK/strings.xml | 6 ++---- .../src/main/res/values-de-rDE/strings.xml | 6 ++---- .../src/main/res/values-el-rGR/strings.xml | 6 ++---- .../src/main/res/values-eo-rUY/strings.xml | 4 +--- .../src/main/res/values-es-rES/strings.xml | 12 ++++++++---- .../src/main/res/values-eu-rES/strings.xml | 18 ++++++++++++++---- .../src/main/res/values-fa-rIR/strings.xml | 12 ++++++++---- .../src/main/res/values-fi-rFI/strings.xml | 12 ++++++++---- .../src/main/res/values-fr-rFR/strings.xml | 12 ++++++++---- .../src/main/res/values-hi-rIN/strings.xml | 7 ++----- .../src/main/res/values-hr-rHR/strings.xml | 3 +-- .../src/main/res/values-hu-rHU/strings.xml | 6 ++---- .../src/main/res/values-hy-rAM/strings.xml | 2 +- .../src/main/res/values-in-rID/strings.xml | 7 +++---- .../src/main/res/values-it-rIT/strings.xml | 12 ++++++++---- .../src/main/res/values-iw-rIL/strings.xml | 6 ++---- .../src/main/res/values-ja-rJP/strings.xml | 6 ++---- .../src/main/res/values-ko-rKR/strings.xml | 6 ++---- .../src/main/res/values-nl-rNL/strings.xml | 9 +++++---- .../src/main/res/values-no-rNO/strings.xml | 4 +--- .../src/main/res/values-pl-rPL/strings.xml | 12 ++++++++---- .../src/main/res/values-pt-rBR/strings.xml | 6 ++---- .../src/main/res/values-pt-rPT/strings.xml | 6 ++---- .../src/main/res/values-ro-rRO/strings.xml | 4 +--- .../src/main/res/values-ru-rRU/strings.xml | 12 ++++++++---- .../src/main/res/values-sk-rSK/strings.xml | 4 +--- .../src/main/res/values-sl-rSI/strings.xml | 3 +-- .../src/main/res/values-sr-rCS/strings.xml | 4 +--- .../src/main/res/values-sr-rSP/strings.xml | 6 ++---- .../src/main/res/values-sv-rSE/strings.xml | 6 ++---- .../src/main/res/values-ta-rIN/strings.xml | 3 +-- .../src/main/res/values-te-rIN/strings.xml | 2 +- .../src/main/res/values-tr-rTR/strings.xml | 6 ++---- .../src/main/res/values-uk-rUA/strings.xml | 7 +++---- .../src/main/res/values-vi-rVN/strings.xml | 12 ++++++++---- .../src/main/res/values-zh-rCN/strings.xml | 14 +++++++++----- .../src/main/res/values-zh-rTW/strings.xml | 6 ++---- 41 files changed, 151 insertions(+), 149 deletions(-) diff --git a/uhabits-android/src/main/res/values-ar-rSA/strings.xml b/uhabits-android/src/main/res/values-ar-rSA/strings.xml index 8296066c4..ae82ed8f9 100644 --- a/uhabits-android/src/main/res/values-ar-rSA/strings.xml +++ b/uhabits-android/src/main/res/values-ar-rSA/strings.xml @@ -59,11 +59,11 @@ اسأل دائماً مخصص... تبديل وضعية العادة بضغطة قصيرة - وضع علامات الاختيار الموجودة بنقرة واحدة بدلاً من الصحافة وعقد. أكثر ملاءمة، ولكن قد يتسبب في تبديل عرضي. + ضع علامات اختيار بنقرة واحدة بدلاً من الضغط مع الاستمرار. تقييم هذا التطبيق على جوجل بلاي أرسل الملاحظات إلى المطور إفحص التعليمات البرمجية على GitHub - روابط + روابط اسم إعدادات حدد تأخير الغفوة @@ -103,7 +103,7 @@ توليد تقرير الاعطال. استكشاف الأخطاء وإصلاحها. المساعدة في ترجمة هذا البرنامج. - الوضع الليلي. + الوضع الليلي. استخدام أسود نقي في الوضع الليلي. يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED. . السطح البيني. @@ -113,7 +113,7 @@ أسبوع. شهر. ربع سنه. - عام. + عام المجموع. نعم أو لا كل %d أيام @@ -123,6 +123,7 @@ صامت تصنيف إخفاء المكتملة + إخفاء المُدخل إخفاء المؤرشفة جعل الإشعارات ثابتة منع الإشعارات من تمريرها بعيداً. @@ -142,9 +143,12 @@ حسب الحالة استخراج اضغط مع الاستمرار لتغيرالقيمه - تغيير القيمة + القيمة التقويم الوحدة + نوع الهدف + على الأقل + على الأكثر على سبيل المثال هل تمرنت اليوم؟ السؤال الهدف @@ -166,6 +170,7 @@ مثال، كم ميلاً قطعته اليوم؟ كم عدد الصفحات التي قرأتها؟ %d مرة في الأسبوع %d مرة في الشهر + %d مرات في %d أيام مثال: التمرين اللون مثال: 15 @@ -189,5 +194,4 @@ لم يتم العثور على تطبيق لإتمام هذا الإجراء تمديد اليوم بضع ساعات بعد منتصف الليل انتظر حتى 3:00 صباحاً لعرض يوم جديد. مفيد إذا كنت عادة تذهب إلى السكون بعد منتصف الليل. يتطلب إعادة تشغيل التطبيق. - %d مرات في %d أيام diff --git a/uhabits-android/src/main/res/values-bg-rBG/strings.xml b/uhabits-android/src/main/res/values-bg-rBG/strings.xml index 208e3f386..e68ce594b 100644 --- a/uhabits-android/src/main/res/values-bg-rBG/strings.xml +++ b/uhabits-android/src/main/res/values-bg-rBG/strings.xml @@ -56,7 +56,6 @@ 8 часа 24 часа Маркиране с кратко натискане - Поставяне на отметки с кратко натискане вместо с натискане и задържане. По-удобно, но може да доведе до неволно маркиране. Оценяване на това приложение в Google Play Изпращане на отзиви към разработчика Преглед на програмния код в GitHub @@ -99,7 +98,7 @@ Генериране на доклад за грешки Отстраняване на проблеми Помагане за превода на това приложение - Нощен режим + Нощен режим Използване на чисто черно при нощен режим Заменя сивите фонове с чисто черни при нощен режим. Намаля разхода на батерията при телефони с AMOLED дисплеи. Интерфейс diff --git a/uhabits-android/src/main/res/values-ca-rES/strings.xml b/uhabits-android/src/main/res/values-ca-rES/strings.xml index 0f3c94d7f..ec2979478 100644 --- a/uhabits-android/src/main/res/values-ca-rES/strings.xml +++ b/uhabits-android/src/main/res/values-ca-rES/strings.xml @@ -67,7 +67,6 @@ Pregunta sempre Personalitza... Activar/desactivar repeticions prement curt - Posar les marques de verificació amb un sol toc enlloc de prémer i mantenir. Més adequat, però pot causar activacions accidentals. Valora aquesta app a Google Play Enviar resposta al desenvolupador Veure codi font a Github @@ -119,7 +118,7 @@ Generar informe d\'error Resolució de problemes Ajuda a traduïr aquesta app - Mode nocturn + Mode nocturn Utilitzar negre pur en el mode nocturn Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED. Interfície @@ -158,7 +157,6 @@ Per estat Exportar Prémer i mantenir per a canviar el valor - Canviar el valor Calendari Unitat p.e. Has fet exercici avui? @@ -182,6 +180,7 @@ p.e. Quants quilòmetres has fet hui? Quantes pàgines has llegit? %d vegades per setmana %d vegades al mes + %d vegades en %d dies Ex. Exercici Color ex. 15 @@ -205,5 +204,4 @@ No s\'ha trobat cap aplicació per a gestionar aquesta acció Ampliar el dia unes hores després de la mitjanit Esperar fins a les 3:00 per mostrar un nou dia. Útil si normalment vas a dormir després de la mitjanit. Requereix el reinici de l\'aplicació. - %d vegades en %d dies diff --git a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml index 3f8f9075d..222fd3c2a 100644 --- a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml +++ b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml @@ -59,7 +59,6 @@ Vždy se ptát Vlastní... Označte opakování krátkým stisknutím - Praktičtější, ale může způsobit nechtěné označení. Ohodnoťte nás v Google Play Zpětná vazba vývojáři Zobrazit zdroj. kód na GitHub @@ -103,7 +102,7 @@ Generovat výpis chyb Řešení problémů Pomozte s překladem aplikace - Temný motiv + Temný motiv Zobrazit čistě černou v temném motivu Nahrazuje v temném motivu šedé pozadí čistou černou. Snižuje spotřebu baterie v telefonech s AMOLED displejem. Rozhraní @@ -142,7 +141,6 @@ Podle statusu Export Stiskněte a držte pro změnu hodnoty - Změnit hodnotu Kalendář Jednotka Např. Cvičil jsi dnes? @@ -166,6 +164,7 @@ Např. Kolik kilometrů jsi dnes uběhl? Kolik stránek jsi dnes přečetl? %d krát týdně %d krát za měsíc + %d krát za %d dní Např. Cvičení Barva Např. 15 @@ -189,5 +188,4 @@ Pro daný krok nebyla nalezena aplikace Po půlnoci prodloužit den o několik hodin Počkat do 3:00 ráno pro zobrazení nového dne. Užitečné, pokud chodíte spát po půlnoci. Vyžaduje restartování aplikace. - %d krát za %d dní diff --git a/uhabits-android/src/main/res/values-da-rDK/strings.xml b/uhabits-android/src/main/res/values-da-rDK/strings.xml index 4ac0418d9..fdf19c6a8 100644 --- a/uhabits-android/src/main/res/values-da-rDK/strings.xml +++ b/uhabits-android/src/main/res/values-da-rDK/strings.xml @@ -75,7 +75,6 @@ Spørg altid Brugerdefineret... Tjek vaner med kort tryk - Sæt tjekmærker med et enkelt tryk i stedet for tryk-og-hold. Mere bekvemmeligt, men kan forårsage uhensigtede tryk. Bedøm denne app på Google Play Send feedback til udvikleren Se kildekoden på GitHub @@ -136,7 +135,7 @@ Generer fejlrapport Fejlfinding Hjælpe med at oversætte denne app - Nat-tilstand + Nat-tilstand Brug ren sort i nat-tilstand Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm. Grænseflade @@ -175,7 +174,6 @@ Efter status Eksporter Tryk-og-hold for at ændre værdien - Skift værdi Kalender Enhed f.eks. Har du trænet i dag? @@ -199,6 +197,7 @@ f.eks Hvor mange kilometer kørte du i dag? Hvor mange sider læste du? %d gange om ugen %d gange om måneden + %d gange på %d dage f.eks. Motion Farve f.eks. 15 @@ -222,5 +221,4 @@ Ingen app fundet til at understøtte denne handling Forlæng dagen et par timer efter midnat Vent til 3:00 for at vise en ny dag. Nyttigt, hvis du typisk går i seng efter midnat. Kræver genstart af app. - %d gange på %d dage diff --git a/uhabits-android/src/main/res/values-de-rDE/strings.xml b/uhabits-android/src/main/res/values-de-rDE/strings.xml index e88a55d43..c4d852e5c 100644 --- a/uhabits-android/src/main/res/values-de-rDE/strings.xml +++ b/uhabits-android/src/main/res/values-de-rDE/strings.xml @@ -75,7 +75,6 @@ Immer fragen Benutzerdefiniert... Markierung durch kurzes Tippen ändern - Abhaken durch einfaches Tippen, anstatt durch Tippen und Halten. Bequemer, kann aber eine falsche Auswahl verursachen. Bewerte diese App auf Google Play Sende dem Entwickler Feedback Zeige den Quellcode auf GitHub @@ -127,7 +126,7 @@ Erstelle einen Fehlerbericht Fehlerbehebung Hilf mit, diese App zu übersetzen - Nachtmodus + Nachtmodus Verwende reines Schwarz im Nachtmodus Ersetzt im Nachtmodus das Grau des Hintergrunds durch Schwarz. Reduziert den Stromverbrauch von Smartphones mit AMOLED Displays. Oberfläche @@ -166,7 +165,6 @@ Nach Zustand Exportieren Gedrückt halten, um den Wert zu ändern - Wert ändern Kalender Einheit z.B. Hast du heute trainiert? @@ -190,6 +188,7 @@ z.B. Wie viele Kilometer bist du heute gelaufen? Wie viele Seiten hast du gelesen? %d mal pro Woche %d mal pro Monat + %d Mal in %d Tagen z.B. Übung Farbe z.B. 15 @@ -213,5 +212,4 @@ Für diese Aktion wurde keine App gefunden. Verlängere den Tag um ein paar Stunden nach Mitternacht Bis 3:00 Uhr warten, bevor ein neuer Tag angezeigt wird. Nützlich, wenn du normalerweise nach Mitternacht schlafen gehst. Benötigt einen Neustart der App. - %d Mal in %d Tagen diff --git a/uhabits-android/src/main/res/values-el-rGR/strings.xml b/uhabits-android/src/main/res/values-el-rGR/strings.xml index 02976fe08..3457ddac7 100644 --- a/uhabits-android/src/main/res/values-el-rGR/strings.xml +++ b/uhabits-android/src/main/res/values-el-rGR/strings.xml @@ -58,7 +58,6 @@ Να ερωτούμαι πάντα Προσαρμογή Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα - Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές. Βαθμολογήστε αυτή την εφαρμογή στο Google Play Στείλετε σχόλια Δείτε τον πηγαίο κώδικα στο GitHub @@ -102,7 +101,7 @@ Παραγωγή αναφοράς bug. Αντιμετ.Προβλημάτων Βοηθήστε στην μετάφραση - Νυχτ.Λειτ. + Νυχτ.Λειτ. Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED. Διεπιφάνεια @@ -140,7 +139,6 @@ Με σκορ Εξαγωγή Πατήστε και κρατήστε πατημένο για να αλλάξετε την τιμή - Αλλαγή τιμής Ημερολόγιο Μονάδα π.χ. Ασκήθηκες σήμερα; @@ -163,6 +161,7 @@ Μετρήσιμο %d φορές την εβδομάδα %d φορές το μήνα + %d φορές την %d ημέρες π.χ. Σωματική άσκηση Χρώμα π.χ. 15 @@ -172,5 +171,4 @@ Κάθε μήνα Δεν μπορεί να είναι κενό Σήμερα - %d φορές την %d ημέρες diff --git a/uhabits-android/src/main/res/values-eo-rUY/strings.xml b/uhabits-android/src/main/res/values-eo-rUY/strings.xml index 780529432..cfbf83e9b 100644 --- a/uhabits-android/src/main/res/values-eo-rUY/strings.xml +++ b/uhabits-android/src/main/res/values-eo-rUY/strings.xml @@ -58,7 +58,6 @@ Ĉiam demandu Kutimo Ŝalti per mallonga gazetaro - Metu markilojn per sola frapeto anstataŭ premi kaj teni. Pli oportune, sed eble kaŭzas hazardajn ŝanĝojn. Taksu ĉi tiun aplikaĵon en Google Play Sendu reagojn al programisto Vidu fontkodon ĉe GitHub @@ -102,7 +101,7 @@ Generu raporton pri eraroj Problemserĉado Helpu traduki ĉi tiun aplikon - Nokta reĝimo + Nokta reĝimo Uzu puran nigron en malhela temo Anstataŭigas grizajn fonojn per pura nigra en malhela temo. Reduktas baterian uzon en telefonoj kun AMOLED-ekrano. Intervizago @@ -140,7 +139,6 @@ Laŭ poentaro Eksporti Premu kaj tenu por ŝanĝi la valoron - Ŝanĝi valoron Kalendaro: Unueco ekz. Ĉu vi ekzercis hodiaŭ? diff --git a/uhabits-android/src/main/res/values-es-rES/strings.xml b/uhabits-android/src/main/res/values-es-rES/strings.xml index a114b5117..47bbd9fb4 100644 --- a/uhabits-android/src/main/res/values-es-rES/strings.xml +++ b/uhabits-android/src/main/res/values-es-rES/strings.xml @@ -75,7 +75,7 @@ Preguntar siempre Personalizar... Marca las repeticiones con una pulsación corta - Más cómodo, pero puede causar marcas accidentales. + Ponga marcas de verificación con un solo toque en lugar de mantener presionado. Valora esta aplicación en Google Play Enviar sugerencias al desarrollador Ver código fuente en GitHub @@ -127,7 +127,7 @@ Generar reporte de errores Solución de problemas Ayuda a traducir esta app - Modo nocturno + Modo nocturno Utilizar color negro en modo nocturno Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED. Interfície @@ -147,6 +147,7 @@ Ninguno Filtrar Ocultar completos + Ocultar ingresado Ocultar archivados Hacer notificaciones fijas Evita que las notificaciones sean descartadas. @@ -166,9 +167,12 @@ Por estado Exportar Mantenga presionado para cambiar el valor - Cambiar valor + Valor Calendario Unidad + Tipo de objetivo + Al menos + Como máximo ej. ¿Has ejercitado hoy? Pregunta Objetivo @@ -190,6 +194,7 @@ ej. ¿Cuántas millas ha corrido hoy? ¿Cuántas páginas ha leído? %d veces por semana %d veces al mes + %d veces en %d días ej. Ejercicio Color ej. 15 @@ -213,5 +218,4 @@ No se encontró ninguna aplicación que admita esta acción Ampliar día unas horas después de medianoche Esperar hasta las 3:00 AM para mostrar un nuevo día. Útil si normalmente vas a dormir después de medianoche. Requiere reiniciar la aplicación. - %d veces cada %d días diff --git a/uhabits-android/src/main/res/values-eu-rES/strings.xml b/uhabits-android/src/main/res/values-eu-rES/strings.xml index e52cea7c5..68a984267 100644 --- a/uhabits-android/src/main/res/values-eu-rES/strings.xml +++ b/uhabits-android/src/main/res/values-eu-rES/strings.xml @@ -36,6 +36,7 @@ Gorde Boladak Ez duzu ohitura aktiborik + Gaurkoz amaitu duzu! Sakatu eta mantendu markatu edo desmarkatzeko Itzalita Ohitura sortu @@ -58,7 +59,6 @@ Galdetu beti Pertsonalizatua... Ukitze laburrarekin markatu - Ukitze bakar batekin marka jartzen du ukitu eta mantendu egin beharrean. Erosoagoa, baina nahi gabeko markak ekar litzake. Aplikazio hau Google Playen puntuatu Zure iritzia garatzaileari bidali Iturburu kodea GitHuben ikusi @@ -69,6 +69,10 @@ Ba al zenekien? Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera. Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz. + + Ohiturak ezabatu + Ohiturak ezabatu + Ohitura ezabatua / ez aurkitua Asteburuak Astelehenetik ostiralera @@ -102,7 +106,7 @@ Akats txostena sortu Arazoen konponketa Lagundu aplikazio hau itzultzen - Azal iluna + Azal iluna erabili beltz hutsa azal ilunean Atzeko plano grisak beltz hutsez aldatzen ditu azal ilunean. Bateriaren erabilera gutxitzen du AMOLED duten gailuetan. Interfazea @@ -138,11 +142,13 @@ Izenaren arabera Kolorearen arabera Puntuen arabera + Egoeraren arabera Esportatu Sakatu luze balioa aldatzeko - Aldatu balioa + Balioa Egutegia Unitatea + Gehienez adib. ariketa egin al duzu gaur? Galdera Helburua @@ -163,6 +169,7 @@ Neurgarria Astean %d aldiz Hilean %d aldiz + %d aldiz %d egunetan adib. Ariketa Kolorea adib. 15 @@ -172,5 +179,8 @@ Hilabetero Ezin da hutsik egon Gaur - %d aldiz %d egunetan + Ez da ohiturarik aurkitu + Adierazi galdera ikurra falta diren datuetan + Garatzailea zara! + Ez da aurkitu akzio hau gauzatu dezakeen aplikaziorik diff --git a/uhabits-android/src/main/res/values-fa-rIR/strings.xml b/uhabits-android/src/main/res/values-fa-rIR/strings.xml index be4f29cf5..ae6c915cf 100644 --- a/uhabits-android/src/main/res/values-fa-rIR/strings.xml +++ b/uhabits-android/src/main/res/values-fa-rIR/strings.xml @@ -75,7 +75,7 @@ همیشه پرسیده شود سفارشی‌سازی با اشاره‌ی کوتاه‌مدت وضعیت عادت را تغییر بده - تیک زدن با تک‌ضربه در مقابل ضربه‌زدن و نگه‌داشتن راحت‌تر است ولی ممکن است باعث شود اشتباهی عادتی را تیک بزنید. + به جای فشار دادن و نگه‌داشتن، با یک ضربه تیک بزنید. به این برنامه در گوگل‌پلی امتیاز بدهید ارسال بازخورد به توسعه‌دهنده دیدن منبع برنامه در گیت‌هاب @@ -127,7 +127,7 @@ ایجاد گزارش مشکلات ایرادیابی کمک برای ترجمه این برنامه - حالت تیره + حالت تیره استفاده از رنگ سیاه خالص در حالت تیره جایگزینی پس‌زمینه خاکستری با سیاه خالص در حالت تیره. استفاده از باتری را در گوشی‌های با صفحه نمایش AMOLED کاهش می‌دهد. رابط کاربری @@ -147,6 +147,7 @@ هیچ‌کدام فیلتر مخفی کردن کامل‌شده‌ها + پنهان کردن مقادیر مخفی کردن بایگانی‌شده‌ها چسبناک کردن اعلان‌ها از رد کردن اعلان با کشیدن جلوگیری می‌کند. @@ -166,9 +167,12 @@ براساس وضعیت خروجی گرفتن فشار دهید و نگه دارید تا مقدار را تغییر دهید - تغییر مقدار + مقدار تقویم واحد + نوع داده هدف + حداقل + حداکثر مثلا آیا امروز ورزش کردید؟ سوال هدف @@ -190,6 +194,7 @@ مثلاً امروز چند کیلومتر دویدید؟ چند صفحه مطالعه کردید؟ %d بار در هفته %d بار در ماه + %d بار در هر %d روز مثلاً ورزش کنید رنگ مثلاً 15 @@ -213,5 +218,4 @@ هیچ برنامه‌ای برای انجام این کار یافت نشد. تمدید کردن روز تا چند ساعت بعد از نیمه‌شب تا ساعت ۳ نیمه‌شب برای نمایش یک روز جدید صبر می‌کند. اگر معمولاً بعد از نیمه‌شب می‌خوابید، برای شما می‌تواند مفید باشد. نیازمند راه‌اندازی مجدد برنامه است. - %d بار در هر %d روز diff --git a/uhabits-android/src/main/res/values-fi-rFI/strings.xml b/uhabits-android/src/main/res/values-fi-rFI/strings.xml index 7af22bb7f..867aec122 100644 --- a/uhabits-android/src/main/res/values-fi-rFI/strings.xml +++ b/uhabits-android/src/main/res/values-fi-rFI/strings.xml @@ -75,7 +75,7 @@ Kysy aina Muu Vaihda merkintää lyhyellä painalluksella - Tee merkit yhdellä painalluksella pitkän painalluksen sijaan. Kätevämpi, mutta saattaa aiheuttaa vahingossa painamista. + Lisää valinnat yhdellä napautuksella pitkään painettuna pitämisen sijaan. Arvostele Google Playssä Lähetä palautetta kehittäjälle Katso lähdekoodi GitHubissa @@ -127,7 +127,7 @@ Luo virheraportti Apua Auta kääntämään tämä sovellus - Yötila + Yötila Käytä puhdasta mustaa yötilassa Korvaa harmaat taustat puhtaalla mustalla tummalla teemalla. Vähentää akun käyttöä puhelimissa AMOLED-näytöllä. Käyttöliittymä @@ -147,6 +147,7 @@ Ei mitään Suodata Piilota suoritetut + Piilota syötetty Piilota arkistoidut Tee ilmoituksesta kiinnitettyjä Estää ilmoitusten pois pyyhkäisemisen. @@ -166,9 +167,12 @@ Tilan mukaan Vie Pidä painettuna muuttaaksesi arvoa - Muuta arvo + Arvo Kalenteri Yksikkö + Kohdetyyppi + Vähintään + Enintään esim. Harrastitko tänään liikuntaa? Kysymys Tavoite @@ -190,6 +194,7 @@ esim. Montako kilometriä juoksit tänään? Montako sivua luit? %d kertaa viikossa %d kertaa kuukaudessa + %d kertaa %d päivässä Esim. kuntoilu Väri Esim. 15 @@ -213,5 +218,4 @@ Tälle toiminnolle ei löytynyt yhtään sovellusta Pidennä päivää muutama tunti keskiyön jälkeen Odota kello 3.00 asti ennen uuden päivän näyttämistä. Hyödyllinen jos menet nukkumaan yleensä keskiyön jälkeen. Vaatii sovelluksen uudelleenkäynnistyksen. - %d kertaa %d päivässä diff --git a/uhabits-android/src/main/res/values-fr-rFR/strings.xml b/uhabits-android/src/main/res/values-fr-rFR/strings.xml index a5aa2b42b..69672682b 100644 --- a/uhabits-android/src/main/res/values-fr-rFR/strings.xml +++ b/uhabits-android/src/main/res/values-fr-rFR/strings.xml @@ -75,7 +75,7 @@ Toujours demander Personnaliser... Valider l\'habitude avec un appui court - Valide l\'habitude avec un appui court plutôt qu\'un appuie long. Plus pratique, mais peut causer des activations accidentelles. + Cochez les cases d\'un simple appuie au lieu de les maintenir Notez cette app sur le Google Play Store Envoyez un avis au développeur Voir le code source sur GitHub @@ -127,7 +127,7 @@ Générer un rapport de bug. Résolution de problèmes Aider à traduire cette application - Mode Nuit + Mode Nuit Utiliser un noir pur dans le mode nuit Remplace le fond gris par un noir pur dans le mode nuit ; cela réduit l’usage de la batterie des appareils ayant un écran AMOLED. Interface @@ -147,6 +147,7 @@ Aucun Filtre Cacher les habitudes complétées + Cacher les entrées Cacher les habitudes archivées Rendre les notifications persistantes Évite que les notifications ne soient enlevées. @@ -166,9 +167,12 @@ Par statut Exporter Appuyez et maintenez pour changer la valeur - Modifier la valeur + Valeur Calendrier Unité + Type d\'objectif + Au moins + Au plus Par ex., avez-vous fait de l\'exercice aujourd\'hui? Question Cible @@ -191,6 +195,7 @@ Combien de pages avez-vous lu ? %d fois par semaine %d fois par mois + %d fois en %d jours Par ex, Entrainement Couleur Par ex, 15 @@ -214,5 +219,4 @@ Combien de pages avez-vous lu ? Aucune application trouvée pour faire cette action Prolonger les jours de quelques heures après minuit Attendre jusqu\'à trois heures du matin pour changer de jour. Très utile si vous avez l\'habitude d\'aller dormir après minuit. (Redémarrage nécessaire) - %d fois en %d jours diff --git a/uhabits-android/src/main/res/values-hi-rIN/strings.xml b/uhabits-android/src/main/res/values-hi-rIN/strings.xml index ad5c412b2..916cf90d0 100644 --- a/uhabits-android/src/main/res/values-hi-rIN/strings.xml +++ b/uhabits-android/src/main/res/values-hi-rIN/strings.xml @@ -75,8 +75,6 @@ हमेशा पूछें अपने तरीके से बनाएं टॉगल पुनरावृत्ति हल्का दबाने से - \" -अधिक सुविधाजनक है, लेकिन आकस्मिक टॉगल हो सकता है ।\" \" गूगले प्ले पर इस ऐप्लिकेशन को रेट करें\" डेवेलपर को प्रतिक्रिया भेजें @@ -149,7 +147,7 @@ समस्या निवारण\" \" इस एप्लिकेशन का अनुवाद करने में मदद करें\" - नाइट मोड + नाइट मोड नाइट मोड मे पूरा काला यूज़ करें \" रात मोड में शुद्ध काले रंग के साथ ग्रे पृष्ठभूमि में बदलें. अमोलेड प्रदर्शन के साथ फोन में बैटरी उपयोग कम कर देता है ।\" @@ -193,7 +191,6 @@ स्थिति से एक्सपोर्ट करे बदलने के लिए दबाकर रखें - वैल्यू बदलें कैलेंडर इकाई जैसे आपने आज व्यायाम किया? @@ -219,6 +216,7 @@ प्रति सप्ताह %d बार\" \" प्रति माह %d बार\" + %d बार %d दिन जैसे व्यायाम रंग जैसे १५ @@ -242,5 +240,4 @@ इस कार्रवाई को संभालने के लिए कोई ऐप नहीं मिला मध्यरात्रि से कुछ घंटे बाद तक दिन बढ़ाएँ नया दिन दिखाने के लिए सुबह 3:00 बजे तक प्रतीक्षा करें। उपयोगी अगर आप आमतौर पर आधी रात के बाद सोने जाते हैं। ऐप पुनरारंभ की आवश्यकता होगी। - %d बार %d दिन diff --git a/uhabits-android/src/main/res/values-hr-rHR/strings.xml b/uhabits-android/src/main/res/values-hr-rHR/strings.xml index 2087e9384..950eb1b46 100644 --- a/uhabits-android/src/main/res/values-hr-rHR/strings.xml +++ b/uhabits-android/src/main/res/values-hr-rHR/strings.xml @@ -56,7 +56,6 @@ 8 sati 24 sata Označi ponavljanja sa kratkim pritisk. - Zgodnije je, no može uzrokovati slučajna označavanja. Ocijeni ovu aplikaciju na Google Playu Pošalji povratne informacije raz. programeru Pogledaj izvorni kod na GitHubu @@ -99,7 +98,7 @@ Generiraj izvješće o pogreški Rješavanje problema Pomozi prevesti ovu aplikaciju - Noćni način + Noćni način Koristi crnu boju za noćni način Zamjenjuje sivu pozadinu sa crnom u noćnom načinu. To smanjuje potrošnju bateriju na uređajima s AMOLED zaslonima. Sučelje diff --git a/uhabits-android/src/main/res/values-hu-rHU/strings.xml b/uhabits-android/src/main/res/values-hu-rHU/strings.xml index ea34bb80c..ec0953246 100644 --- a/uhabits-android/src/main/res/values-hu-rHU/strings.xml +++ b/uhabits-android/src/main/res/values-hu-rHU/strings.xml @@ -75,7 +75,6 @@ Mindig rákérdez Egyedi... Bejelölés rövid koppintással - Bejelölés koppintással nyomva tartás helyett. Kényelmesebb, de véletlen bejelöléseket okozhat. Értékeld az alkalmazást a Google Play-en Visszajelzés küldése a fejlesztőnek Forráskód megtekintése a GitHub-on @@ -132,7 +131,7 @@ Hibabejelentés generálása Hibaelhárítás Segíts lefordítani ezt az alkalmazást - Éjszakai mód + Éjszakai mód Fekete használata éjszakai módban A szürke hátteret tiszta feketére cseréli éjszakai módban. Csökkenti az energiafelhasználást AMOLED kijelzős telefonokon. Kezelőfelület @@ -171,7 +170,6 @@ Állapot szerint Exportálás Az érték módosításához tartsd lenyomva - Érték módosítása Naptár Egység pl. Edzettél ma? @@ -195,6 +193,7 @@ pl. Hány kilométert futottál ma? Hány oldalt olvastál el? Heti %d alkalommal Havi %d alkalommal + %d alk. / %d nap pl. Edzés Szín pl. 15 @@ -218,5 +217,4 @@ Ezen művelet elvégzéséhez nem található alkalmazás. A nap meghosszabbítása éjfél után néhány órával Várjon hajnali 3 -ig, hogy új napot mutasson. Hasznos, ha általában éjfél után fekszik le. Az alkalmazás újraindítását igényli. - %d alk. / %d nap diff --git a/uhabits-android/src/main/res/values-hy-rAM/strings.xml b/uhabits-android/src/main/res/values-hy-rAM/strings.xml index 1b8fab4ed..dc98ed87d 100644 --- a/uhabits-android/src/main/res/values-hy-rAM/strings.xml +++ b/uhabits-android/src/main/res/values-hy-rAM/strings.xml @@ -59,7 +59,7 @@ Հաճախություն Ամեն օր Ամեն շաբաթ - Մուգ տեսք + Մուգ տեսք Օր Շաբաթ Ամիս diff --git a/uhabits-android/src/main/res/values-in-rID/strings.xml b/uhabits-android/src/main/res/values-in-rID/strings.xml index d31957099..fc5d023b6 100644 --- a/uhabits-android/src/main/res/values-in-rID/strings.xml +++ b/uhabits-android/src/main/res/values-in-rID/strings.xml @@ -71,7 +71,7 @@ Selalu bertanya Kustom... Tandai dengan cepat - Beri tanda centang dengan sekali ketuk bukan tekan-dan-tahan. Lebih nyaman, tapi dapat menyebabkan kesalahan penandaan. + Beri tanda centang dengan satu ketukan alih-alih tekan dan tahan. Berikan rating aplikasi ini di Google Play Kirimkan umpan balik kepada Developer Lihat kode program di GitHub @@ -130,7 +130,7 @@ Membuat laporan masalah Troubleshoot Bantu menerjemahkan aplikasi ini - Mode malam + Mode malam Gunakan warna hitam pekat pada mode malam Ganti warna latar abu-abu dengan warna hitam pada mode malam. Mengurangi penggunaan baterai pada layar AMOLED. Antarmuka @@ -169,7 +169,6 @@ Berdasarkan status Ekspor Tekan-dan-tahan untuk mengubah nilai - Ubah nilai (value) Kalender Unit mis. Apakah kamu sudah berolahraga hari ini? @@ -193,6 +192,7 @@ mis. Berapa km kamu berlari hari ini? Berapa lembar yang sudah kamu baca? %d kali per minggu %d kali per bulan + %d kali dalam %d hari mis. Olahraga Warna mis. 15 @@ -216,5 +216,4 @@ Aplikasi untuk mendukung tindakan ini tidak ditemukan Perpanjang hari beberapa jam setelah tengah malam Tunggu sampai jam 3 pagi untuk menampilkan hari yang baru. Berguna jika kamu biasanya tidur setelah tengah malam. Aplikasi perlu dimulai ulang. - %d kali dalam %d hari diff --git a/uhabits-android/src/main/res/values-it-rIT/strings.xml b/uhabits-android/src/main/res/values-it-rIT/strings.xml index bb754082d..bc1dd2885 100644 --- a/uhabits-android/src/main/res/values-it-rIT/strings.xml +++ b/uhabits-android/src/main/res/values-it-rIT/strings.xml @@ -75,7 +75,7 @@ Chiedi sempre Personalizza... Spunta le ripetizioni velocemente - Metti le spunte con un tocco singolo invece che tenendo premuto. Più comodo, ma potrebbe causare delle spunte accidentali. + Metti i segni di spunta con un tocco rapido invece di tenere premuto. Valuta quest\'app su Google Play Manda un feedback allo sviluppatore Vedi il codice sorgente su GitHub @@ -127,7 +127,7 @@ Genera bug report Risoluzione dei problemi Aiuta a tradurre questa app - Modalità notte + Modalità notte Usa nero puro nella modalità notte Sostituisce gli sfondi grigi con sfondi neri nella modalità notte. Riduce il consumo di batteria nei dispositivi con schermo AMOLED. Interfaccia @@ -147,6 +147,7 @@ Nessuno Filtra Nascondi completati + Nascondi inserito Nascondi archiviati Notifiche non rimuovibili Impedisce di poter rimuovere le notifiche. @@ -166,9 +167,12 @@ Per stato Esporta Tieni premuto per cambiare il valore - Cambia valore + Valore Calendario Unità + Tipo di destinazione + Almeno + Al massimo ad es. Ti sei allenato oggi? Domanda Obiettivo @@ -190,6 +194,7 @@ es. Quanti chilometri hai percorso oggi? Quante pagine hai letto? %d volte a settimana %d volte al mese + %d volte in %d giorni ad es. Esercizio Colore ad es. 15 @@ -212,5 +217,4 @@ Nessuna app disponibile per gestire questa azione Prolunga il giorno di alcune ore dopo la mezzanotte Attendere fino alle 3:00 per mostrare il nuovo giorno. Utile se solitamente vai a dormire dopo mezzanotte. È necessario riavviare l\'app. - %d volte in %d giorni diff --git a/uhabits-android/src/main/res/values-iw-rIL/strings.xml b/uhabits-android/src/main/res/values-iw-rIL/strings.xml index 411ac876a..ccc172e07 100644 --- a/uhabits-android/src/main/res/values-iw-rIL/strings.xml +++ b/uhabits-android/src/main/res/values-iw-rIL/strings.xml @@ -83,7 +83,6 @@ תמיד לשאול התאמה אישית... סימון הרגלים בלחיצה קצרה - סימון יעדים בהקשה קצרה במקום בלחיצה ממושכת. זה נוח יותר, אך יכול להוביל לסימוני הרגלים בטעות. דירוג היישום ב־Google Play שליחת משוב למפתחים צפייה בקוד המקור ב־GitHub @@ -139,7 +138,7 @@ יצירת דו״ח תקלה פתרון תקלות עזרה בתרגום היישום - ערכת נושא כהה + ערכת נושא כהה רקע שחור מוחלט בערכת הנושא הכהה להחלפת הרקע האפור בערכת הנושא הכהה לשחור מוחלט. זה מפחית את צריכת הסוללה במכשירים עם תצוגת AMOLED. ממשק @@ -178,7 +177,6 @@ לפי מצב ייצוא לחיצה והחזקה ישנו את הערך - שינוי ערך לוח שנה יחידה למשל: האם התעמלת היום? @@ -202,6 +200,7 @@ למשל: כמה קילומטרים רצת היום? כמה עמודים קראת? %d פעמים בשבוע %d פעמים בחודש + %d פעמים ב- %d ימים למשל: התעמלות צבע למשל: 15 @@ -225,5 +224,4 @@ לא נמצא יישום שתומך בפעולה זו הארכת היום בכמה שעות לאחר החצות לחכות עד 3:00 כדי להציג יום חדש. שימושי אם לרוב הולכים לישון לאחר החצות. דורש הפעלה מחדש של היישום. - %d פעמים ב- %d ימים diff --git a/uhabits-android/src/main/res/values-ja-rJP/strings.xml b/uhabits-android/src/main/res/values-ja-rJP/strings.xml index a54c6f9f9..c016c08d6 100644 --- a/uhabits-android/src/main/res/values-ja-rJP/strings.xml +++ b/uhabits-android/src/main/res/values-ja-rJP/strings.xml @@ -71,7 +71,6 @@ 毎回選択する カスタム... タップでチェックをON/OFF - 長押しではなくシングルタップでチェックを付けます。より便利ですが、誤って切り替えが起こる可能性があります。 Google Play でこのアプリを評価 開発者にフィードバックを送信 GitHub でソースコードを参照 @@ -121,7 +120,7 @@ バグレポートの作成 トラブルシューティング このアプリの翻訳を支援する - ダークテーマ + ダークテーマ ダークテーマで完全な黒を使用する 夜間モードで灰色の背景を完全な黒で置き換えます。AMOLED ディスプレイの電話でバッテリー使用量を抑えます。 インターフェース @@ -160,7 +159,6 @@ ステータス順 エクスポート 長押しすると値を変更できます - 値を変更する カレンダー 単位 例:今日は運動しましたか? @@ -184,6 +182,7 @@ 例:今日は何キロ走ったの?何ページ読んだの? 1 週間に %d 回 1 か月に %d 回 + %d 回 %d 日 例:運動 例:15 @@ -198,5 +197,4 @@ スキップ日を有効にする これで開発者になりました! この操作を行うアプリが見つかりませんでした。 - %d 回 %d 日 diff --git a/uhabits-android/src/main/res/values-ko-rKR/strings.xml b/uhabits-android/src/main/res/values-ko-rKR/strings.xml index b81b7b556..5394968e1 100644 --- a/uhabits-android/src/main/res/values-ko-rKR/strings.xml +++ b/uhabits-android/src/main/res/values-ko-rKR/strings.xml @@ -71,7 +71,6 @@ 항상 묻기 사용자 지정. 짧게 눌러서 전환하기 - 길게 누르고 있는 대신에 짧은 탭 한 번으로 체크합니다. 더 편리하지만, 실수로 전환될 수도 있습니다. Google Play에서 평가 개발자에게 피드백 보내기 Github에서 소스보기 @@ -121,7 +120,7 @@ 오류보고서 작성하기 문제 해결 이 앱의 번역을 도와주세요 - 야간 모드 + 야간 모드 야간 모드에서 검정색 사용하기 야간 모드의 회색 배경을 검정색으로 대체합니다. AMOLED 디스플레이를 사용하는 기기에서 배터리 사용량을 감소시킵니다. 인터페이스 @@ -160,7 +159,6 @@ 상태별로 내보내기 길게 누르면 값이 변경됩니다. - 값 변경 캘린더 단위 예 : 오늘 운동을 했습니까? @@ -184,10 +182,10 @@ 예) 오늘 몇 마일을 달렸습니까? 몇 페이지를 읽었습니까? 일주일에 몇 번 한 달에 몇 번 + %d 번 %d 일 동안 예) 운동 예) 15 매월 오늘 - %d 번 %d 일 동안 diff --git a/uhabits-android/src/main/res/values-nl-rNL/strings.xml b/uhabits-android/src/main/res/values-nl-rNL/strings.xml index 5e1636a89..c7314dcf7 100644 --- a/uhabits-android/src/main/res/values-nl-rNL/strings.xml +++ b/uhabits-android/src/main/res/values-nl-rNL/strings.xml @@ -71,7 +71,6 @@ Altijd vragen Aangepast... Wijzig herhalingen door kort indrukken - Zet vinkjes met een enkel tikje in plaats van ingedrukt houden. Handiger, maar kan onbedoelde wijzigingen veroorzaken. Beoordeel deze app in Google Play Stuur feedback aan de ontwikkelaar Bekijk de broncode op GitHub @@ -115,7 +114,7 @@ Genereer foutenrapport Probleemoplossing Help deze app te vertalen - Nachtmodus + Nachtmodus Gebruik puur zwart bij het donkere thema Vervangt grijze achtergronden door puur zwart in het donkere thema. Vermindert batterijgebruik bij telefoons met AMOLED scherm. Interface @@ -154,9 +153,11 @@ Per status Exporteren Ingedrukt houden om de waarde te wijzigen - Waarde wijzigen + Waarde Kalender Eenheid + Minimaal + Maximaal bijv. Heb je vandaag gesport? Vraag Doel @@ -178,6 +179,7 @@ bijv. Hoeveel kilometer heb je vandaag gelopen? Hoeveel pagina\'s heb je gelezen? %d keer per week %d keer per maand + %d keer in %d dagen bijv. Sporten Kleur bijv. 15 @@ -201,5 +203,4 @@ Er is geen app gevonden om deze actie uit te voeren. Verleng de dag tot een paar uur na middernacht Wacht tot 3:00 uur om een nieuwe dag te beginnen. Handig als je normaal gesproken na middernacht gaat slapen. Dit vereist het opnieuw opstarten van de app. - %d keer in %d dagen diff --git a/uhabits-android/src/main/res/values-no-rNO/strings.xml b/uhabits-android/src/main/res/values-no-rNO/strings.xml index 987260ab1..16d054db8 100644 --- a/uhabits-android/src/main/res/values-no-rNO/strings.xml +++ b/uhabits-android/src/main/res/values-no-rNO/strings.xml @@ -57,7 +57,6 @@ 1 døgn Egendefinert... Veksl med enkelttrykk - Sett på haker med et enkelttrykk i stedet for å tykke og holde. Mer praktisk, men kan forårsake utilsiktede vekslinger. Vurdér denne appen på Google Play Send tilbakemelding til utviklerne Vis kildekode på GitHub @@ -100,7 +99,7 @@ Generér feilrapport Feilsøkning Hjelp med å oversette denne appen - Nattmodus + Nattmodus Bruk batterisparing i nattmodus Bytter ut grå bakgunner med helt svarte i nattmodus. Reduserer betteribruk hos telefoner med AMOLED-skjerm. Grensesnitt @@ -135,7 +134,6 @@ Etter farge Etter poengsum Eksportér - Endre verdi Spørsmål %d ganger på %d dager diff --git a/uhabits-android/src/main/res/values-pl-rPL/strings.xml b/uhabits-android/src/main/res/values-pl-rPL/strings.xml index e4707582a..f658155cf 100644 --- a/uhabits-android/src/main/res/values-pl-rPL/strings.xml +++ b/uhabits-android/src/main/res/values-pl-rPL/strings.xml @@ -83,7 +83,7 @@ Zawsze pytaj Własne ustawienia... Przełącz powtarzanie krótkim naciśnięciem - Wygodniejsze, ale może spowodować przypadkowe przełączenia. + Umieść znaczniki wyboru jednym dotknięciem zamiast naciśnięcia i przytrzymania. Oceń tę aplikację w Google Play Prześlij uwagi do programisty Zobacz kod źródłowy na GitHub\'ie @@ -139,7 +139,7 @@ Wygeneruj raport o błędach Rozwiązywanie problemów Pomóż w tłumaczeniu tej aplikacji - Tryb nocny + Tryb nocny Używaj pełnej czerni w trybie nocnym Zamienia szare tła na pełną czerń w trybie nocnym. Zmniejsza zużycie baterii w telefonach z ekranem AMOLED. Interfejs @@ -159,6 +159,7 @@ Brak Filtruj Ukryj zakończone + Ukryj wprowadzone Ukryj archiwizowane Przypinaj powiadomienia Zapobiega usunięciu powiadomień. @@ -178,9 +179,12 @@ Według statusu Eksportuj Naciśnij i przytrzymaj, aby zmienić wartość - Zmień wartość + Wartość Kalendarz Jednostka + Rodzaj celu: + Co najmniej + Maksymalnie np. Czy ćwiczyłeś dzisiaj? Pytanie Cel @@ -202,6 +206,7 @@ np. Ile mil przejechałeś dzisiaj? Ile stron przeczytałeś? %d razy w tygodniu %d razy w miesiącu + %d razy w ciągu %d dni np. ćwiczenia Kolor np. 15 @@ -225,5 +230,4 @@ Nie znaleziono aplikacji obsługującej to działanie Przedłuż dzień o kilka godzin po północy Poczekaj do 3:00, aby pokazać nowy dzień. Przydatne, jeśli zwykle kładziesz się spać po północy. Wymaga ponownego uruchomienia aplikacji. - %d razy w %d dni diff --git a/uhabits-android/src/main/res/values-pt-rBR/strings.xml b/uhabits-android/src/main/res/values-pt-rBR/strings.xml index e415667cb..6d3f95856 100644 --- a/uhabits-android/src/main/res/values-pt-rBR/strings.xml +++ b/uhabits-android/src/main/res/values-pt-rBR/strings.xml @@ -75,7 +75,6 @@ Perguntar sempre Personalizar... Marcar repetições com um toque curto - Mais conveniente, mas pode causar marcações acidentais Avaliar esse app no Google Play Mandar sugestões para o desenvolvedor Ver código-fonte no GitHub @@ -127,7 +126,7 @@ Gerar relatório de erros. Solução de problemas Ajude a traduzir este app - Modo noturno + Modo noturno Usar preto em modo noturno Substitui os tons de cinza por preto puro em modo noturno. Economiza bateria em telefones com tela AMOLED. Interface @@ -166,7 +165,6 @@ Por status Exportar Pressione e segure para alterar o valor - Alterar valor Calendário Unidade ex.: Você se exercitou hoje? @@ -190,6 +188,7 @@ ex.: Quantos km você correu hoje? Quantas páginas você leu? %d vezes por semana %d vezes por mês + %d vezes em %d dias ex: Exercício Cor Ex: 15 @@ -213,5 +212,4 @@ Nenhum app encontrado para executar esta ação Prolongar dia algumas horas depois da meia-noite Espere até às 3:00 para mostrar um novo dia. Útil se você costuma dormir depois da meia-noite. Requer reinicialização do aplicativo. - %d vezes em %d dias diff --git a/uhabits-android/src/main/res/values-pt-rPT/strings.xml b/uhabits-android/src/main/res/values-pt-rPT/strings.xml index 72f5b153c..374fded4c 100644 --- a/uhabits-android/src/main/res/values-pt-rPT/strings.xml +++ b/uhabits-android/src/main/res/values-pt-rPT/strings.xml @@ -58,7 +58,6 @@ Perguntar sempre Personalizar... Toque para alternar entre repetições - Mais conveniente, mas pode causar toques acidentais Avaliar a app no Google Play Enviar feedback ao programador Ver código-fonte no GitHub @@ -102,7 +101,7 @@ Gerar relatório de erros Resolução de problemas Ajude a traduzir esta aplicação - Modo noturno + Modo noturno Usar preto puro no modo noturno Substitui os fundos cinzentos por pretos puros no modo noturno. Reduz a utilização da bateria em telemóveis com ecrã AMOLED. Interface @@ -140,7 +139,6 @@ Por pontuação Exportar Pressione e segure para alterar o valor - Alterar o valor Calendário Unidade ex.: Você se exercitou hoje? @@ -163,6 +161,7 @@ Mensurável %d vezes por semana %d vezes por mês + %d vezes em %d dias ex. Exercício Cor ex. 15 @@ -172,5 +171,4 @@ Todos os meses Não pode ficar em branco Hoje - %d vezes em %d dias diff --git a/uhabits-android/src/main/res/values-ro-rRO/strings.xml b/uhabits-android/src/main/res/values-ro-rRO/strings.xml index 15160d59e..0062c1147 100644 --- a/uhabits-android/src/main/res/values-ro-rRO/strings.xml +++ b/uhabits-android/src/main/res/values-ro-rRO/strings.xml @@ -58,7 +58,6 @@ Intreaba mereu Diferit... Comută repetițiile printr-o apăsare scurtă - Mai convenabil, dar poate cauza comutări accidentale. Evaluează aplicația pe Magazin Play Trimite păreri dezvoltatorului Vezi codul sursă pe GitHub @@ -102,7 +101,7 @@ Generează raport de erori Depanare Ajută la traducerea aplicației - Mod întunecat + Mod întunecat Utilizează modul întunecat Înlocuiește fundalurile gri cu negru pur în modul întunecat. Reduce utilizarea bateriei la telefoanele cu ecran AMOLED. Interfață @@ -140,7 +139,6 @@ După scor Exportă Ține apăsat pentru a modifica valoarea - Modifică valoarea Calendar Unități ex.: Ai îndeplinit exerciții fizice azi? diff --git a/uhabits-android/src/main/res/values-ru-rRU/strings.xml b/uhabits-android/src/main/res/values-ru-rRU/strings.xml index b27277c44..1916cb0a1 100644 --- a/uhabits-android/src/main/res/values-ru-rRU/strings.xml +++ b/uhabits-android/src/main/res/values-ru-rRU/strings.xml @@ -83,7 +83,7 @@ Всегда спрашивать Настроить... Отмечать коротким нажатием - Ставить галочки коротким нажатием вместо удержания. Удобнее, но может стать причиной случайных отметок. + Ставить галочки одним касанием вместо нажатия и удерживания. Оценить приложение в Google Play Отправить сообщение разработчику Посмотреть исходный код на GitHub @@ -139,7 +139,7 @@ Сгенерировать отчёт об ошибке Устранение неполадок Помогите перевести это приложение - Ночной режим + Ночной режим Использовать подлинный чёрный в ночном режиме Заменяет серый фон на подлинный чёрный в ночном режиме. Сокращает расход батареи в телефонах с дисплеем AMOLED. Интерфейс @@ -159,6 +159,7 @@ Без звука Фильтр Скрыть завершённые + Скрыть введённые Скрыть архивированные Сделать уведомления \"липкими\" Предотвращает смахивание уведомлений. @@ -178,9 +179,12 @@ По статусу Экспортировать Нажмите и удерживайте, чтобы изменить значение - Изменить значение + Значение Календарь Ед. изм. + Тип цели + Не меньше + Не больше напр.: Вы упражнялись сегодня? Вопрос Цель @@ -202,6 +206,7 @@ напр.: Сколько км вы пробежали сегодня? Сколько страниц прочитали? %d раз в неделю %d раз в месяц + %d раз в %d дней напр.: Поупражняться Цвет напр.: 15 @@ -225,5 +230,4 @@ Не найдено приложения для обработки данного действия Продлить день на несколько часов после полуночи Подождать до 3:00 перед показом нового дня. Полезно, если вы обычно ложитесь спать после полуночи. Требуется перезапуск приложения. - %d раз в %d дней diff --git a/uhabits-android/src/main/res/values-sk-rSK/strings.xml b/uhabits-android/src/main/res/values-sk-rSK/strings.xml index 83f5bff3f..6838ff94d 100644 --- a/uhabits-android/src/main/res/values-sk-rSK/strings.xml +++ b/uhabits-android/src/main/res/values-sk-rSK/strings.xml @@ -65,7 +65,6 @@ Vždy sa spýtať Vlastné ... Prepnúť krátkym stlačením - Pridajte začiarknutie jediným klepnutím namiesto stlačenia a podržania. Je to pohodlnejšie, ale môže dôjsť k náhodným prepnutiam. Ohodnoťte túto aplikáciu na Google Play Odošlite spätnú väzbu vývojárovi Zobraziť zdrojový kód na stránke GitHub @@ -109,7 +108,7 @@ Vygenerujte hlásenie o chybe Riešenie problémov Pomôžte preložiť túto aplikáciu - Tmavá téma + Tmavá téma Použite čisto čiernu farbu v tmavej téme Nahrádza sivé pozadie čisto čiernym v tmavej téme. Znižuje spotrebu batérie v telefónoch s displejom AMOLED. Rozhranie @@ -148,7 +147,6 @@ Podľa stavu Exportovať Stlačením a podržaním zmeníte hodnotu - Zmeniť hodnotu Kalendár Jednotka napr. Cvičili ste dnes? diff --git a/uhabits-android/src/main/res/values-sl-rSI/strings.xml b/uhabits-android/src/main/res/values-sl-rSI/strings.xml index 8c5267be2..6e1f450d5 100644 --- a/uhabits-android/src/main/res/values-sl-rSI/strings.xml +++ b/uhabits-android/src/main/res/values-sl-rSI/strings.xml @@ -56,7 +56,6 @@ 8 ur 24 ur Preklopi ponovitve s kratkim pritiskom - Bolj priročno ampak lahko povzroči nenamerne preklapljanje. Oceni to aplikacijo na Google Play Pošlji povratne informacije razvijalcem Poglej izvorno kodo na GitHub @@ -99,7 +98,7 @@ Ustvari poročilo o napakah Odpravljanje napak Pomagajte prevesti to aplikacijo - Nočni način + Nočni način Uporabite popolno črnino v nočnem načinu Zamenja siva ozadja s popolno črnino v nočnem načinu. Zmanjša porabo baterije na telefonih z AMOLED zasloni. Vmesnik diff --git a/uhabits-android/src/main/res/values-sr-rCS/strings.xml b/uhabits-android/src/main/res/values-sr-rCS/strings.xml index 0c6758362..fd7a8fcbf 100644 --- a/uhabits-android/src/main/res/values-sr-rCS/strings.xml +++ b/uhabits-android/src/main/res/values-sr-rCS/strings.xml @@ -79,7 +79,6 @@ Uvek pitaj Prilagođeno... Menjaj stanje dodirom - Stavlja kvačice dodirom umesto dugog pritiska. Zgodnije, ali može slučajno doći do prebacivanja. Oceni aplikaciju Povratne informacije Izvorni kôd na Githabu @@ -133,7 +132,7 @@ Napravi izveštaj o grešci Rešavanje problema Pomozite prevođenje - Tamna tema + Tamna tema Čista crna u tamnoj temi Menja sivu pozadinu sa čistom crnom u tamnoj temi. Smanjuje potrošnju baterije kod telefona sa AMOLED ekranom. Sučelje @@ -172,7 +171,6 @@ po stanju Izvoz Dug pritisak za promenu vrednosti - Izmeni vrednost Kalendar Jedinica npr. Da li ste vežbali danas? diff --git a/uhabits-android/src/main/res/values-sr-rSP/strings.xml b/uhabits-android/src/main/res/values-sr-rSP/strings.xml index d4a5d0b9d..cb73a795e 100644 --- a/uhabits-android/src/main/res/values-sr-rSP/strings.xml +++ b/uhabits-android/src/main/res/values-sr-rSP/strings.xml @@ -79,7 +79,6 @@ Увек питај Прилагођено... Мењај стање додиром - Ставља квачице додиром уместо дугог притиска. Згодније, али може случајно доћи до пребацивања. Оцени апликацију Повратне информације Изворни кôд на Гитхабу @@ -133,7 +132,7 @@ Направи извештај о грешци Решавање проблема Помозите превођење - Тамна тема + Тамна тема Чиста црна у тамној теми Мења сиву позадину са чистом црном у тамној теми. Смањује потрошњу батерије код телефона са АМОЛЕД екраном. Сучеље @@ -172,7 +171,6 @@ по стању Извоз Дуг притисак за промену вредности - Измени вредност Календар Јединица нпр. Да ли сте вежбали данас? @@ -196,6 +194,7 @@ нпр. Колико сте километара претрчали данас? Колико сте страница прочитали? %d пута недељно %d пута месечно + %d пута у %d дана нпр. вежбање Боја нпр. 15 @@ -219,5 +218,4 @@ Нема апликације која подржава ову радњу Продужите дан неколико сати иза поноћи Чека до 03:00 да покаже нови дан. Корисно ако обично идете на спавање после поноћи. Захтева поновно покретање. - %d пута у %d дана diff --git a/uhabits-android/src/main/res/values-sv-rSE/strings.xml b/uhabits-android/src/main/res/values-sv-rSE/strings.xml index 856c5a719..26fb08024 100644 --- a/uhabits-android/src/main/res/values-sv-rSE/strings.xml +++ b/uhabits-android/src/main/res/values-sv-rSE/strings.xml @@ -75,7 +75,6 @@ Fråga alltid Anpassad... Växla med snabb tryckning - Markera genom att trycka snabbt istället för att hålla ner. Mer bekvämt, men kan orsaka oavsiktliga aktiveringar. Betygsätt oss på Google Play Skicka feedback till utvecklarna Visa källkod på GitHub @@ -136,7 +135,7 @@ Generera felrapport Felsökning Hjälp till att översätta appen - Nattläge + Nattläge Använd svart färg i nattläge Ersätter gråa bakgrunder med svart färg i nattläge. Reducerar batterianvändningen för telefoner med AMOLED-skärm. Gränssnitt @@ -175,7 +174,6 @@ Efter status Exportera Tryck och håll ned för att ändra värdet - Ändra värde Kalender Enhet t.ex. Tränade du idag? @@ -199,6 +197,7 @@ t.ex. Hur många kilometer sprang du idag? Hur många sidor läste du? %d gånger per vecka %d gånger per månad + %d gånger i %d dagar t.ex. Träna Färg t.ex. 15 @@ -222,5 +221,4 @@ Ingen app som stödjer åtgärden hittades. Förläng dagen några timmar efter midnatt Vänta till 3:00 innan en ny dag visas. Användbart om du vanligtvis går och lägger dig efter midnatt. Kräver omstart av appen. - %d gånger i %d dagar diff --git a/uhabits-android/src/main/res/values-ta-rIN/strings.xml b/uhabits-android/src/main/res/values-ta-rIN/strings.xml index 2872e0d8a..3b1c16a18 100644 --- a/uhabits-android/src/main/res/values-ta-rIN/strings.xml +++ b/uhabits-android/src/main/res/values-ta-rIN/strings.xml @@ -57,7 +57,6 @@ 24 மணி நேரம் எப்போதும் கேள் சிறிய அழுத்தலின் மூலம் தாவு - சரிப் பார்ப்பு குறி யை இட அழுத்தி பிடிப்பதற்கு பதில் ஒரு முறை தட்டலாம். இது முன்னதை விட எளிமையானது. ஆனால் இது தற்செயலான தாவல்களுக்கு வழி வகுக்கும். Google Play-ல் இந்த செயலியை மதிப்பிட இந்த செயலியை மேம்படுத்த உங்கள் கருத்துகளை பகிர இந்த செயலியின் மூல நிரலை GitHub வலைதளத்தில் பார்க்கவும் @@ -100,7 +99,7 @@ பிழை அறிக்கை உருவாக்கு பழுது இடமறிதல் இந்த செயலியை மற்ற மொழிகளில் மொழிபெயர்க்க உதவி செய்யவும் - இருள் வண்ண பாங்கு + இருள் வண்ண பாங்கு இருள் பாங்கில் முழு கருப்பு நிறத்தை பயண்படுத்து இதன் மூலம் செயலியில் உள்ள பழுப்பு பின்புலங்கள் நீக்கப்பட்டு முழுவதும் கருப்பு நிற பின்புலங்களாக மாற்றப்படும். இது AMOLED திரை கொண்ட கைப்பேசிகளில் மின்கல பயன்பாட்டை குறைக்கும். இடைமுகம் diff --git a/uhabits-android/src/main/res/values-te-rIN/strings.xml b/uhabits-android/src/main/res/values-te-rIN/strings.xml index 5784d3bf7..56acf23a0 100644 --- a/uhabits-android/src/main/res/values-te-rIN/strings.xml +++ b/uhabits-android/src/main/res/values-te-rIN/strings.xml @@ -18,7 +18,7 @@ ~ with this program. If not, see . --> - Loop Habit Tracker + Datasheet అలవాట్లు సెట్టింగులు మార్చు diff --git a/uhabits-android/src/main/res/values-tr-rTR/strings.xml b/uhabits-android/src/main/res/values-tr-rTR/strings.xml index 5e46fa24d..ac985b368 100644 --- a/uhabits-android/src/main/res/values-tr-rTR/strings.xml +++ b/uhabits-android/src/main/res/values-tr-rTR/strings.xml @@ -75,7 +75,6 @@ Her zaman sor Özel... Tek dokunuşla işaretle - Alışkanlıkları tek bir dokunuşla işaretle. Basılı tutarak işaretlmekten daha kolaydır ancak alışkanlıkların yanlışlıkla işaretlenmesine yol açabilir. Google Play\'de uygulamayı oyla Geliştiriciye geri bildirim gönder Github\'da kaynak kodunu görüntüle @@ -127,7 +126,7 @@ Hata raporu oluştur Sorun Giderme Bu uygulamanın çevirisinde yardım et - Gece modu + Gece modu Gece modunda saf siyah kullan Gece modunda gri arkaplanı saf siyah ile değiştirir. AMOLED ekranlı cihazlarda pil kullanımını azaltır. Arayüz @@ -166,7 +165,6 @@ Duruma göre Dışarı aktar Değeri değiştirmek için basılı tut - Değeri değiştir Takvim Birim örn: Bugün egzersiz yaptın mı? @@ -190,6 +188,7 @@ örn: Bugün kaç km koştun? Bugün kaç sayfa kitap okudun? Haftada %d kez Ayda %d kez + %d defa / %d gün örn: Egzersiz Renk örn: 15 @@ -213,5 +212,4 @@ Bu işlemi gerçekleştirebilecek bir uygulama bulunamadı. Yeni günü gece yarısından birkaç saat sonra başlat Yeni gün saat 03:00\'ten sonra başlar. Geç saatlerde uyuyanlar için kullanışlıdır. Uygulamanın yeniden başlatılmasını gerektirir. - %d defa / %d gün diff --git a/uhabits-android/src/main/res/values-uk-rUA/strings.xml b/uhabits-android/src/main/res/values-uk-rUA/strings.xml index 8cd03746f..0b5865660 100644 --- a/uhabits-android/src/main/res/values-uk-rUA/strings.xml +++ b/uhabits-android/src/main/res/values-uk-rUA/strings.xml @@ -83,7 +83,6 @@ Завжди запитувати Налаштувати... Відзначати коротким натисканням - Ставити пташки коротким натисканням, замість утримування. Дещо зручніше, але може стати причиною випадкових натискань. Оцінити цю програму в Google Play Надіслати відгук розробникові Подивитися вихідний код на GitHub @@ -148,7 +147,7 @@ Створити звіт про помилку Усунення несправностей Допоможіть перекласти цю програму - Нічний режим + Нічний режим Користати цілком чорне тло у нічному режимі Замінює сіре тло на цілком чорне у нічному режимі. Зменшує використання батареї в телефонах із дисплеєм AMOLED. Оболонка @@ -187,7 +186,7 @@ За станом Експортувати Натисніть і утримуйте, аби змінити значення - Змінити значення + Значення Календар Одиниця напр.: Ви робили сьогодні вправи? @@ -211,6 +210,7 @@ напр.: Скільки кілометрів ви сьогодні пробігли? Скільки сторінок прочитали? %d разів на тиждень %d разів на місяць + %d разів за %d днів напр., вправа Колір напр., 15 @@ -234,5 +234,4 @@ Не знайдено програми для підтримки цієї дії Продовжити день на кілька годин після опівночі Почекати до 3:00 перед показом нового дня. Корисно, якщо ви зазвичай лягаєте спати після опівночі. Потрібно перезапустити програму. - %d разів за %d днів diff --git a/uhabits-android/src/main/res/values-vi-rVN/strings.xml b/uhabits-android/src/main/res/values-vi-rVN/strings.xml index 102191cc3..98d03b750 100644 --- a/uhabits-android/src/main/res/values-vi-rVN/strings.xml +++ b/uhabits-android/src/main/res/values-vi-rVN/strings.xml @@ -71,7 +71,7 @@ Luôn hỏi Tùy chỉnh... Bấm nhanh để chuyển trạng thái - Chỉ cần chạm một lần để đánh dấu thay cho việc nhấn giữ. Tiện lợi hơn nhưng có thể đánh dấu sai. + Đặt dấu kiểm bằng một lần nhấn thay vì nhấn và giữ. Đánh giá ứng dụng trên Google Play Gửi phản hồi cho nhà phát triển Xem mã nguồn trên Github @@ -121,7 +121,7 @@ Tạo báo cáo lỗi Xử lí sự cố Giúp dịch ứng dụng - Chế độ ban đêm + Chế độ ban đêm Sử dụng màu đen thuần trong chế độ ban đêm Thay thế nền màu xám bởi màu đen thuần trong chế độ ban đêm. Giảm thiểu việc sử dụng pin của điện thoại có màn hình AMOLED. Giao diện @@ -141,6 +141,7 @@ Không có Lọc Ẩn mục đã hoàn thành + Ẩn đã nhập Ẩn mục đã lưu trữ Gửi thông báo cố định Không cho các thông báo bị vuốt ngang mất. @@ -160,9 +161,12 @@ Theo trạng thái Xuất dữ liệu ra Nhấn và giữ để thay đổi giá trị - Thay đổi giá trị + Giá trị Lịch Đơn vị + Loại mục tiêu + Ít nhất + Nhiều nhất v.d. Hôm nay bạn đã tập thể dục chưa? Câu hỏi Mục tiêu @@ -184,6 +188,7 @@ Ví dụ: Hôm nay bạn đã chạy bao nhiêu dặm? Bạn đã đọc bao nhiêu trang? %d lần mỗi tuần %d lần mỗi tháng + %d lần trong %d ngày Ví dụ: Tập thể dục Màu sắc Ví dụ: 15 @@ -207,5 +212,4 @@ Không tìm thấy ứng dụng nào để hỗ trợ hành động này Kéo dài ngày thêm một vài giờ sau nửa đêm Chờ đến 3:00 sáng để hiện một ngày mới. Rất hữu ích nếu bạn thường đi ngủ sau nửa đêm. Yêu cầu khởi động lại ứng dụng. - %d lần trong %d ngày diff --git a/uhabits-android/src/main/res/values-zh-rCN/strings.xml b/uhabits-android/src/main/res/values-zh-rCN/strings.xml index 589587d72..ec3ff280c 100644 --- a/uhabits-android/src/main/res/values-zh-rCN/strings.xml +++ b/uhabits-android/src/main/res/values-zh-rCN/strings.xml @@ -71,7 +71,7 @@ 总是询问 自定义 短按切换 - 更加方便,但有可能造成意外记录 + 只需轻按一下即可放置复选标记,而不是按住。 去 Play 商店评价此应用 发送反馈给开发者 在 GitHub 上查看源代码 @@ -121,7 +121,7 @@ 生成错误报告 故障排除 帮助翻译本应用 - 深色主题 + 深色主题 在深色主题中使用纯黑色 以纯黑色背景代替深色主题中的灰色背景。 这可以降低 AMOLED 屏幕手机的耗电量。 @@ -142,6 +142,7 @@ 筛选 隐藏已完成 + 隐藏已输入 隐藏已存档 使通知持久 防止通知被滑掉。 @@ -160,10 +161,13 @@ 按分数 按状态 导出 - 长按可更改值 - 更改值 + 长按即可更改值 + 日历 单位 + 目标类型 + 至少 + 至多 例如:你今天锻炼了吗? 问题 目标 @@ -185,6 +189,7 @@ 例如:今天你跑了几公里?你读了几页书? 每周 %d 次 每月 %d 次 + 每 %d 天 %d 次 例如:锻炼 颜色 例如:15 @@ -208,5 +213,4 @@ 找不到支持此操作的应用 将一天延长到午夜后的几个小时 凌晨 3 点后再显示新的一天。如果你通常在午夜后入睡,这会很有用。重启应用后生效。 - %d 次每 %d 天 diff --git a/uhabits-android/src/main/res/values-zh-rTW/strings.xml b/uhabits-android/src/main/res/values-zh-rTW/strings.xml index f2e2d04c3..2d425ec82 100644 --- a/uhabits-android/src/main/res/values-zh-rTW/strings.xml +++ b/uhabits-android/src/main/res/values-zh-rTW/strings.xml @@ -71,7 +71,6 @@ 每次都詢問 自訂 換成輕碰來記錄習慣 - 雖然更方便,但有可能變成不小心就點到 在 Google Play 上評價這個 App 傳送改進意見給開發者 在 GitHub 上查看原始碼 @@ -125,7 +124,7 @@ 製作錯誤報告 問題排除 協助翻譯本程式 - 夜間模式 + 夜間模式 在夜間模式中使用深色設定 在夜間模式中,使用黑色背景取代灰色背景。這樣可以減少 AMOLED 螢幕手機的電量消耗。 介面 @@ -164,7 +163,6 @@ 依據狀態 匯出 持續按住來改換數值 - 更改數值 日曆 單位 例如:你今天運動了嗎? @@ -188,6 +186,7 @@ 例如:今天你跑了幾英哩?你讀了幾頁書? 每周 %d 次 每月 %d 次 + %d 次每 %d 日 例如:運動 顏色 例如:15 @@ -211,5 +210,4 @@ 找不到可以處理這個動作的應用程式。 將一天延長到午夜過後幾個小時 凌晨3點後再顯示新的一天。如果你通常在午夜以後才睡,這能幫上忙。重新啟動後才生效。 - %d 次每 %d 日 From 18e267053d9b64ab05861fd31b9dbb33c8d4644c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jan 2022 03:02:11 +0000 Subject: [PATCH 012/147] Bump simpleclient from 0.12.0 to 0.14.1 Bumps [simpleclient](https://github.com/prometheus/client_java) from 0.12.0 to 0.14.1. - [Release notes](https://github.com/prometheus/client_java/releases) - [Commits](https://github.com/prometheus/client_java/compare/parent-0.12.0...parent-0.14.1) --- updated-dependencies: - dependency-name: io.prometheus:simpleclient dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 197fd4c30..cdd9ca8b2 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -43,7 +43,7 @@ dependencies { implementation("io.ktor:ktor-html-builder:$ktorVersion") implementation("io.ktor:ktor-jackson:$ktorVersion") implementation("org.jetbrains:kotlin-css-jvm:1.0.0-pre.148-kotlin-1.4.30") - implementation("io.prometheus:simpleclient:0.12.0") + implementation("io.prometheus:simpleclient:0.14.1") implementation("io.prometheus:simpleclient_httpserver:0.12.0") implementation("io.prometheus:simpleclient_hotspot:0.12.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") From d5d6e4616edda0ebf757274f0a9eaf56b9c2859e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jan 2022 03:02:15 +0000 Subject: [PATCH 013/147] Bump logback-classic from 1.2.7 to 1.2.10 Bumps logback-classic from 1.2.7 to 1.2.10. --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index cdd9ca8b2..ac644c407 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -35,7 +35,7 @@ application { dependencies { val ktorVersion = "1.6.6" val kotlinVersion = "1.6.0" - val logbackVersion = "1.2.7" + val logbackVersion = "1.2.10" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") implementation("ch.qos.logback:logback-classic:$logbackVersion") From 3f4780c9fb8f2d1ef5fd57f1301e6e4f95552933 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jan 2022 03:01:50 +0000 Subject: [PATCH 014/147] Bump ktorVersion from 1.6.6 to 1.6.7 Bumps `ktorVersion` from 1.6.6 to 1.6.7. Updates `ktor-client-mock` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-jackson` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-client-android` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-client-core` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-client-jackson` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-client-json` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-server-netty` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-server-core` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-html-builder` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) Updates `ktor-server-tests` from 1.6.6 to 1.6.7 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7) --- updated-dependencies: - dependency-name: io.ktor:ktor-client-mock dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-jackson dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-jackson dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-json dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-server-netty dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-server-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-html-builder dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-server-tests dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 8e7103475..c58606d71 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -89,7 +89,7 @@ dependencies { val daggerVersion = "2.40.3" val kotlinVersion = "1.6.0" val kxCoroutinesVersion = "1.5.2" - val ktorVersion = "1.6.6" + val ktorVersion = "1.6.7" val espressoVersion = "3.4.0" androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion") diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index ac644c407..279dcc8fe 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -33,7 +33,7 @@ application { } dependencies { - val ktorVersion = "1.6.6" + val ktorVersion = "1.6.7" val kotlinVersion = "1.6.0" val logbackVersion = "1.2.10" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") From 1860abf532e86d1efd744890daacbd8f6fc9b9ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jan 2022 03:01:07 +0000 Subject: [PATCH 015/147] Bump kotlinx-coroutines-core-jvm from 1.5.2 to 1.6.0 Bumps [kotlinx-coroutines-core-jvm](https://github.com/Kotlin/kotlinx.coroutines) from 1.5.2 to 1.6.0. - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 6002df223..7dd2d438e 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -46,7 +46,7 @@ kotlin { compileOnly("com.google.dagger:dagger:2.40.3") implementation("com.google.guava:guava:31.0.1-android") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.2") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") implementation("androidx.annotation:annotation:1.3.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.5.2") From 92fb9dbdb6268fc71020c387f781cd3326293060 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Jan 2022 20:43:14 +0000 Subject: [PATCH 016/147] Bump simpleclient_httpserver from 0.12.0 to 0.14.1 Bumps [simpleclient_httpserver](https://github.com/prometheus/client_java) from 0.12.0 to 0.14.1. - [Release notes](https://github.com/prometheus/client_java/releases) - [Commits](https://github.com/prometheus/client_java/compare/parent-0.12.0...parent-0.14.1) --- updated-dependencies: - dependency-name: io.prometheus:simpleclient_httpserver dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 279dcc8fe..61b36e881 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -44,7 +44,7 @@ dependencies { implementation("io.ktor:ktor-jackson:$ktorVersion") implementation("org.jetbrains:kotlin-css-jvm:1.0.0-pre.148-kotlin-1.4.30") implementation("io.prometheus:simpleclient:0.14.1") - implementation("io.prometheus:simpleclient_httpserver:0.12.0") + implementation("io.prometheus:simpleclient_httpserver:0.14.1") implementation("io.prometheus:simpleclient_hotspot:0.12.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") From 0b5894ee6d0aefb4f3ab65306540da17acdae974 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Jan 2022 20:42:42 +0000 Subject: [PATCH 017/147] Bump daggerVersion from 2.40.3 to 2.40.5 Bumps `daggerVersion` from 2.40.3 to 2.40.5. Updates `dagger` from 2.40.3 to 2.40.5 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.3...dagger-2.40.5) Updates `dagger-compiler` from 2.40.3 to 2.40.5 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.3...dagger-2.40.5) --- updated-dependencies: - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index c58606d71..8f88dc9ee 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -86,7 +86,7 @@ android { } dependencies { - val daggerVersion = "2.40.3" + val daggerVersion = "2.40.5" val kotlinVersion = "1.6.0" val kxCoroutinesVersion = "1.5.2" val ktorVersion = "1.6.7" diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 7dd2d438e..513c297f0 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -43,7 +43,7 @@ kotlin { val jvmMain by getting { dependencies { implementation(kotlin("stdlib-jdk8")) - compileOnly("com.google.dagger:dagger:2.40.3") + compileOnly("com.google.dagger:dagger:2.40.5") implementation("com.google.guava:guava:31.0.1-android") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") From 075542d605e28c90e467121f095f27a030eedc6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:50:22 +0000 Subject: [PATCH 018/147] Bump org.jlleitschuh.gradle.ktlint from 10.2.0 to 10.2.1 Bumps org.jlleitschuh.gradle.ktlint from 10.2.0 to 10.2.1. --- updated-dependencies: - dependency-name: org.jlleitschuh.gradle.ktlint dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index a96be9f96..102ed1278 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) id("org.jetbrains.kotlin.android.extensions") version kotlinVersion apply (false) id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false) - id("org.jlleitschuh.gradle.ktlint") version "10.2.0" + id("org.jlleitschuh.gradle.ktlint") version "10.2.1" } apply { From 1902b8821e9fbc1783cc8059da29f7efcdd60ef4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:49:59 +0000 Subject: [PATCH 019/147] Bump kxCoroutinesVersion from 1.5.2 to 1.6.0 Bumps `kxCoroutinesVersion` from 1.5.2 to 1.6.0. Updates `kotlinx-coroutines-android` from 1.5.2 to 1.6.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) Updates `kotlinx-coroutines-core` from 1.5.2 to 1.6.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 8f88dc9ee..0d2e2b92c 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -88,7 +88,7 @@ android { dependencies { val daggerVersion = "2.40.5" val kotlinVersion = "1.6.0" - val kxCoroutinesVersion = "1.5.2" + val kxCoroutinesVersion = "1.6.0" val ktorVersion = "1.6.7" val espressoVersion = "3.4.0" From 79d40d1d7992bf14e822bcd73289fac5871fd6a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:50:00 +0000 Subject: [PATCH 020/147] Bump simpleclient_hotspot from 0.12.0 to 0.14.1 Bumps [simpleclient_hotspot](https://github.com/prometheus/client_java) from 0.12.0 to 0.14.1. - [Release notes](https://github.com/prometheus/client_java/releases) - [Commits](https://github.com/prometheus/client_java/compare/parent-0.12.0...parent-0.14.1) --- updated-dependencies: - dependency-name: io.prometheus:simpleclient_hotspot dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 61b36e881..25b2549eb 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -45,7 +45,7 @@ dependencies { implementation("org.jetbrains:kotlin-css-jvm:1.0.0-pre.148-kotlin-1.4.30") implementation("io.prometheus:simpleclient:0.14.1") implementation("io.prometheus:simpleclient_httpserver:0.14.1") - implementation("io.prometheus:simpleclient_hotspot:0.12.0") + implementation("io.prometheus:simpleclient_hotspot:0.14.1") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") testImplementation(kotlin("test")) From 4ae85f1ec0c7819390c33f00ff376e8605cff390 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 18:05:28 +0000 Subject: [PATCH 021/147] Bump kotlin-stdlib from 1.6.0 to 1.6.10 Bumps [kotlin-stdlib](https://github.com/JetBrains/kotlin) from 1.6.0 to 1.6.10. - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.0...v1.6.10) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 513c297f0..0eba74a2a 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -45,7 +45,7 @@ kotlin { implementation(kotlin("stdlib-jdk8")) compileOnly("com.google.dagger:dagger:2.40.5") implementation("com.google.guava:guava:31.0.1-android") - implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0") + implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.10") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") implementation("androidx.annotation:annotation:1.3.0") implementation("com.google.code.findbugs:jsr305:3.0.2") From d84abc3a6a2e8e35bb3ae0cf49838bb73b204489 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 18:04:56 +0000 Subject: [PATCH 022/147] Bump com.github.johnrengelman.shadow from 7.1.0 to 7.1.2 Bumps com.github.johnrengelman.shadow from 7.1.0 to 7.1.2. --- updated-dependencies: - dependency-name: com.github.johnrengelman.shadow dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 25b2549eb..4f89050f6 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -22,7 +22,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { application id("kotlin") - id("com.github.johnrengelman.shadow") version "7.1.0" + id("com.github.johnrengelman.shadow") version "7.1.2" } From c47bd4c328358bf50a3c14930080ecbc553f21dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jan 2022 18:04:44 +0000 Subject: [PATCH 023/147] Bump kotlin-stdlib-jdk8 from 1.6.0 to 1.6.10 Bumps [kotlin-stdlib-jdk8](https://github.com/JetBrains/kotlin) from 1.6.0 to 1.6.10. - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.0...v1.6.10) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-stdlib-jdk8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 0d2e2b92c..6d1d07c66 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -87,7 +87,7 @@ android { dependencies { val daggerVersion = "2.40.5" - val kotlinVersion = "1.6.0" + val kotlinVersion = "1.6.10" val kxCoroutinesVersion = "1.6.0" val ktorVersion = "1.6.7" val espressoVersion = "3.4.0" diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 4f89050f6..7f92dd77f 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -34,7 +34,7 @@ application { dependencies { val ktorVersion = "1.6.7" - val kotlinVersion = "1.6.0" + val kotlinVersion = "1.6.10" val logbackVersion = "1.2.10" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") From 743b8d26adb8b723ea8de6cb28202b6bea55c8f1 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Sat, 8 Jan 2022 22:49:40 +0100 Subject: [PATCH 024/147] gradle.properties: remove deprecated MaxPermSize parameter --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a1f977f3b..b54c6c097 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ org.gradle.parallel=false org.gradle.daemon=true -org.gradle.jvmargs=-Xms2048m -Xmx2048m -XX:MaxPermSize=2048m +org.gradle.jvmargs=-Xms2048m -Xmx2048m android.useAndroidX=true android.enableJetifier=true From 8ccb9bbab13f8ce15ef42ced3420e610959eedf4 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Sat, 8 Jan 2022 22:50:27 +0100 Subject: [PATCH 025/147] Bumps appcompat from 1.3.1 to 1.4.0. --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 6d1d07c66..ac80a0157 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -116,7 +116,7 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kxCoroutinesVersion") - implementation("androidx.appcompat:appcompat:1.3.1") + implementation("androidx.appcompat:appcompat:1.4.0") implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("com.google.android.material:material:1.4.0") From a07a50e635dce1eecda035c6fd5fca137f48e767 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Thu, 20 Jan 2022 21:16:08 +0100 Subject: [PATCH 026/147] Handle numerical habits from HabitBull Fixes #1265. --- uhabits-core/assets/test/habitbull3.csv | 11 +++++++ .../uhabits/core/io/HabitBullCSVImporter.kt | 17 +++++++--- .../org/isoron/uhabits/core/io/ImportTest.kt | 31 ++++++++++++++++++- 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 uhabits-core/assets/test/habitbull3.csv diff --git a/uhabits-core/assets/test/habitbull3.csv b/uhabits-core/assets/test/habitbull3.csv new file mode 100644 index 000000000..65b7bbbab --- /dev/null +++ b/uhabits-core/assets/test/habitbull3.csv @@ -0,0 +1,11 @@ +HabitName,HabitDescription,HabitCategory,CalendarDate,Value,CommentText +Pushups,,Fitness,2021-09-01,30, +Pushups,,Fitness,2022-01-08,100, +Pushups,,Fitness,2022-01-09,100, +Pushups,,Fitness,2022-01-10,100, +Pushups,,Fitness,2022-01-11,100, +Pushups,,Fitness,2022-01-12,100, +Pushups,,Fitness,2022-01-13,100, +run,,Fitness,2022-01-03,1, +run,,Fitness,2022-01-18,1, +run,,Fitness,2022-01-19,1, diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.kt index 140122db7..4d47ca8c2 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.kt @@ -23,6 +23,7 @@ import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.HabitList +import org.isoron.uhabits.core.models.HabitType import org.isoron.uhabits.core.models.ModelFactory import org.isoron.uhabits.core.models.Timestamp import java.io.BufferedReader @@ -50,7 +51,7 @@ class HabitBullCSVImporter logging: Logging, ) : AbstractImporter() { - val logger = logging.getLogger("HabitBullCSVImporter") + private val logger = logging.getLogger("HabitBullCSVImporter") override fun canHandle(file: File): Boolean { val reader = BufferedReader(FileReader(file)) @@ -77,10 +78,16 @@ class HabitBullCSVImporter logger.info("Creating habit: $name") } val notes = cols[5] ?: "" - if (parseInt(cols[4]) == 1) { - h.originalEntries.add(Entry(timestamp, Entry.YES_MANUAL, notes)) - } else { - h.originalEntries.add(Entry(timestamp, Entry.NO, notes)) + when (val value = parseInt(cols[4])) { + 0 -> h.originalEntries.add(Entry(timestamp, Entry.NO, notes)) + 1 -> h.originalEntries.add(Entry(timestamp, Entry.YES_MANUAL, notes)) + else -> { + if (value > 1 && h.type != HabitType.NUMERICAL) { + logger.info("Found a value of $value, considering this habit as numerical.") + h.type = HabitType.NUMERICAL + } + h.originalEntries.add(Entry(timestamp, value, notes)) + } } } } diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/io/ImportTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/io/ImportTest.kt index daad1784e..b8949d4b0 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/io/ImportTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/io/ImportTest.kt @@ -26,6 +26,7 @@ import org.isoron.uhabits.core.BaseUnitTest import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit +import org.isoron.uhabits.core.models.HabitType import org.isoron.uhabits.core.models.Timestamp import org.isoron.uhabits.core.utils.DateUtils.Companion.getStartOfTodayCalendar import org.isoron.uhabits.core.utils.DateUtils.Companion.setFixedLocalTime @@ -73,6 +74,30 @@ class ImportTest : BaseUnitTest() { assertTrue(isNotesEqual(habit, 2019, 6, 14, "Habit 3 notes")) } + @Test + @Throws(IOException::class) + fun testHabitBullCSV3() { + importFromFile("habitbull3.csv") + assertThat(habitList.size(), equalTo(2)) + + val habit = habitList.getByPosition(0) + assertThat(habit.name, equalTo("Pushups")) + assertThat(habit.type, equalTo(HabitType.NUMERICAL)) + assertThat(habit.description, equalTo("")) + assertThat(habit.frequency, equalTo(Frequency.DAILY)) + assertThat(getValue(habit, 2021, 9, 1), equalTo(30)) + assertThat(getValue(habit, 2022, 1, 8), equalTo(100)) + + val habit2 = habitList.getByPosition(1) + assertThat(habit2.name, equalTo("run")) + assertThat(habit2.type, equalTo(HabitType.YES_NO)) + assertThat(habit2.description, equalTo("")) + assertThat(habit2.frequency, equalTo(Frequency.DAILY)) + assertTrue(isChecked(habit2, 2022, 1, 3)) + assertTrue(isChecked(habit2, 2022, 1, 18)) + assertTrue(isChecked(habit2, 2022, 1, 19)) + } + @Test @Throws(IOException::class) fun testLoopDB() { @@ -124,10 +149,14 @@ class ImportTest : BaseUnitTest() { } private fun isChecked(h: Habit, year: Int, month: Int, day: Int): Boolean { + return getValue(h, year, month, day) == Entry.YES_MANUAL + } + + private fun getValue(h: Habit, year: Int, month: Int, day: Int): Int { val date = getStartOfTodayCalendar() date.set(year, month - 1, day) val timestamp = Timestamp(date) - return h.originalEntries.get(timestamp).value == Entry.YES_MANUAL + return h.originalEntries.get(timestamp).value } private fun isNotesEqual(h: Habit, year: Int, month: Int, day: Int, notes: String): Boolean { From 1943fac6102187426f6e6c90a39f959bed185096 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 03:01:22 +0000 Subject: [PATCH 027/147] Bump AppIntro from 6.1.0 to 6.2.0 Bumps [AppIntro](https://github.com/AppIntro/AppIntro) from 6.1.0 to 6.2.0. - [Release notes](https://github.com/AppIntro/AppIntro/releases) - [Changelog](https://github.com/AppIntro/AppIntro/blob/main/CHANGELOG.md) - [Commits](https://github.com/AppIntro/AppIntro/compare/6.1.0...6.2.0) --- updated-dependencies: - dependency-name: com.github.AppIntro:AppIntro dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index ac80a0157..25622fcb7 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -105,7 +105,7 @@ dependencies { androidTestImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") compileOnly("javax.annotation:jsr250-api:1.0") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") - implementation("com.github.AppIntro:AppIntro:6.1.0") + implementation("com.github.AppIntro:AppIntro:6.2.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.dagger:dagger:$daggerVersion") implementation("com.google.guava:guava:31.0.1-android") From 20ae9d247e05b8c2356c6da973cbe50d8e9d658f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 03:01:37 +0000 Subject: [PATCH 028/147] Bump material from 1.4.0 to 1.5.0 Bumps [material](https://github.com/material-components/material-components-android) from 1.4.0 to 1.5.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.4.0...1.5.0) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 25622fcb7..81cd474b0 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -119,7 +119,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.4.0") implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") - implementation("com.google.android.material:material:1.4.0") + implementation("com.google.android.material:material:1.5.0") implementation("com.opencsv:opencsv:5.5.2") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") From 694446b7e34c0ed59515ce6fe4ecb0c239a36dd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 09:40:27 +0000 Subject: [PATCH 029/147] Bump appcompat from 1.4.0 to 1.4.1 Bumps appcompat from 1.4.0 to 1.4.1. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 81cd474b0..919e50578 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -116,7 +116,7 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kxCoroutinesVersion") - implementation("androidx.appcompat:appcompat:1.4.0") + implementation("androidx.appcompat:appcompat:1.4.1") implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("com.google.android.material:material:1.5.0") From 22820f4f24c8b57e2600d842259fb1fa9a01eeca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 03:01:57 +0000 Subject: [PATCH 030/147] Bump simpleclient_hotspot from 0.14.1 to 0.15.0 Bumps [simpleclient_hotspot](https://github.com/prometheus/client_java) from 0.14.1 to 0.15.0. - [Release notes](https://github.com/prometheus/client_java/releases) - [Commits](https://github.com/prometheus/client_java/compare/parent-0.14.1...parent-0.15.0) --- updated-dependencies: - dependency-name: io.prometheus:simpleclient_hotspot dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 7f92dd77f..1447ebaa9 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -45,7 +45,7 @@ dependencies { implementation("org.jetbrains:kotlin-css-jvm:1.0.0-pre.148-kotlin-1.4.30") implementation("io.prometheus:simpleclient:0.14.1") implementation("io.prometheus:simpleclient_httpserver:0.14.1") - implementation("io.prometheus:simpleclient_hotspot:0.14.1") + implementation("io.prometheus:simpleclient_hotspot:0.15.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") testImplementation(kotlin("test")) From 5d7677b35447afde5156bfb6be81890a7a1ee5eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 03:02:19 +0000 Subject: [PATCH 031/147] Bump guava from 31.0.1-android to 31.1-android Bumps [guava](https://github.com/google/guava) from 31.0.1-android to 31.1-android. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 919e50578..34daf8a21 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -108,7 +108,7 @@ dependencies { implementation("com.github.AppIntro:AppIntro:6.2.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.dagger:dagger:$daggerVersion") - implementation("com.google.guava:guava:31.0.1-android") + implementation("com.google.guava:guava:31.1-android") implementation("io.ktor:ktor-client-android:$ktorVersion") implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-jackson:$ktorVersion") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 0eba74a2a..00125a06a 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -44,7 +44,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) compileOnly("com.google.dagger:dagger:2.40.5") - implementation("com.google.guava:guava:31.0.1-android") + implementation("com.google.guava:guava:31.1-android") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.10") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") implementation("androidx.annotation:annotation:1.3.0") From 6c631b1cf61043c2a2ab0afb77f08ebcf2b8d262 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 03:02:00 +0000 Subject: [PATCH 032/147] Bump opencsv from 5.5.2 to 5.6 Bumps opencsv from 5.5.2 to 5.6. --- updated-dependencies: - dependency-name: com.opencsv:opencsv dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 34daf8a21..0511e9ad9 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -120,7 +120,7 @@ dependencies { implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("com.google.android.material:material:1.5.0") - implementation("com.opencsv:opencsv:5.5.2") + implementation("com.opencsv:opencsv:5.6") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 00125a06a..ab208d6d3 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -49,7 +49,7 @@ kotlin { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") implementation("androidx.annotation:annotation:1.3.0") implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.opencsv:opencsv:5.5.2") + implementation("com.opencsv:opencsv:5.6") implementation("commons-codec:commons-codec:1.15") implementation("org.apache.commons:commons-lang3:3.12.0") } From 24a99d57911cc9cd20dd79baba9f64aeaa395949 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 09:05:49 +0000 Subject: [PATCH 033/147] Bump simpleclient_httpserver from 0.14.1 to 0.15.0 Bumps [simpleclient_httpserver](https://github.com/prometheus/client_java) from 0.14.1 to 0.15.0. - [Release notes](https://github.com/prometheus/client_java/releases) - [Commits](https://github.com/prometheus/client_java/compare/parent-0.14.1...parent-0.15.0) --- updated-dependencies: - dependency-name: io.prometheus:simpleclient_httpserver dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 1447ebaa9..990cf05c6 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -44,7 +44,7 @@ dependencies { implementation("io.ktor:ktor-jackson:$ktorVersion") implementation("org.jetbrains:kotlin-css-jvm:1.0.0-pre.148-kotlin-1.4.30") implementation("io.prometheus:simpleclient:0.14.1") - implementation("io.prometheus:simpleclient_httpserver:0.14.1") + implementation("io.prometheus:simpleclient_httpserver:0.15.0") implementation("io.prometheus:simpleclient_hotspot:0.15.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") From 6d3791de311a9adb9f508acd07826cab2f431c71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 09:12:04 +0000 Subject: [PATCH 034/147] Bump daggerVersion from 2.40.5 to 2.41 Bumps `daggerVersion` from 2.40.5 to 2.41. Updates `dagger` from 2.40.5 to 2.41 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.5...dagger-2.41) Updates `dagger-compiler` from 2.40.5 to 2.41 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.5...dagger-2.41) --- updated-dependencies: - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 0511e9ad9..b4ef2d919 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -86,7 +86,7 @@ android { } dependencies { - val daggerVersion = "2.40.5" + val daggerVersion = "2.41" val kotlinVersion = "1.6.10" val kxCoroutinesVersion = "1.6.0" val ktorVersion = "1.6.7" diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index ab208d6d3..df0308761 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -43,7 +43,7 @@ kotlin { val jvmMain by getting { dependencies { implementation(kotlin("stdlib-jdk8")) - compileOnly("com.google.dagger:dagger:2.40.5") + compileOnly("com.google.dagger:dagger:2.41") implementation("com.google.guava:guava:31.1-android") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.10") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") From 472092d1bf808ff49132731739ac54126f5056cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 17:18:25 +0000 Subject: [PATCH 035/147] Bump simpleclient from 0.14.1 to 0.15.0 Bumps [simpleclient](https://github.com/prometheus/client_java) from 0.14.1 to 0.15.0. - [Release notes](https://github.com/prometheus/client_java/releases) - [Commits](https://github.com/prometheus/client_java/compare/parent-0.14.1...parent-0.15.0) --- updated-dependencies: - dependency-name: io.prometheus:simpleclient dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 990cf05c6..0a6ff1514 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -43,7 +43,7 @@ dependencies { implementation("io.ktor:ktor-html-builder:$ktorVersion") implementation("io.ktor:ktor-jackson:$ktorVersion") implementation("org.jetbrains:kotlin-css-jvm:1.0.0-pre.148-kotlin-1.4.30") - implementation("io.prometheus:simpleclient:0.14.1") + implementation("io.prometheus:simpleclient:0.15.0") implementation("io.prometheus:simpleclient_httpserver:0.15.0") implementation("io.prometheus:simpleclient_hotspot:0.15.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") From 090216ccb7795060038e2bfb2f27c426334ab914 Mon Sep 17 00:00:00 2001 From: Jakub Kalinowski Date: Sat, 5 Mar 2022 19:54:48 +0100 Subject: [PATCH 036/147] Fixed edit history calendar bug --- .../java/org/isoron/uhabits/core/ui/views/HistoryChart.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt index 699cc2ee6..daf4219ee 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt @@ -75,7 +75,7 @@ class HistoryChart( val col = ((x - padding) / squareSize).toInt() val row = ((y - padding) / squareSize).toInt() val offset = col * 7 + (row - 1) - if (row == 0 || col == nColumns) return + if (x - padding < 0 || row == 0 || row > 7 || col == nColumns) return val clickedDate = topLeftDate.plus(offset) if (clickedDate.isNewerThan(today)) return onDateClickedListener.onDateClicked(clickedDate) From 609886fd097f06c311033cd81715d3c616ed3986 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 20 Mar 2022 11:14:53 -0500 Subject: [PATCH 037/147] Fix iOS build scripts --- uhabits-core-legacy/settings.gradle | 2 -- uhabits-ios/uhabits.xcodeproj/project.pbxproj | 14 +++++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/uhabits-core-legacy/settings.gradle b/uhabits-core-legacy/settings.gradle index 80e2d76a1..20ee303a3 100644 --- a/uhabits-core-legacy/settings.gradle +++ b/uhabits-core-legacy/settings.gradle @@ -7,5 +7,3 @@ pluginManagement { } } } - -enableFeaturePreview("GRADLE_METADATA") \ No newline at end of file diff --git a/uhabits-ios/uhabits.xcodeproj/project.pbxproj b/uhabits-ios/uhabits.xcodeproj/project.pbxproj index a475d6f0c..75fc10fc7 100644 --- a/uhabits-ios/uhabits.xcodeproj/project.pbxproj +++ b/uhabits-ios/uhabits.xcodeproj/project.pbxproj @@ -61,7 +61,7 @@ 00C0C6BA22465F65003D8AF0 /* fonts */ = {isa = PBXFileReference; lastKnownFileType = folder; path = fonts; sourceTree = ""; }; 00C0C6BB22465F65003D8AF0 /* databases */ = {isa = PBXFileReference; lastKnownFileType = folder; path = databases; sourceTree = ""; }; 00C0C6BC22465F65003D8AF0 /* migrations */ = {isa = PBXFileReference; lastKnownFileType = folder; path = migrations; sourceTree = ""; }; - 00C0C6C92246E543003D8AF0 /* LoopHabitTracker.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LoopHabitTracker.framework; path = ../core/build/bin/ios/debugFramework/LoopHabitTracker.framework; sourceTree = ""; }; + 00C0C6C92246E543003D8AF0 /* LoopHabitTracker.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LoopHabitTracker.framework; path = "../uhabits-core-legacy/build/bin/ios/debugFramework/LoopHabitTracker.framework"; sourceTree = ""; }; 00C0C6D022470705003D8AF0 /* ComponentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentView.swift; sourceTree = ""; }; 00C0C6DE224A35FC003D8AF0 /* DetailScreenController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailScreenController.swift; sourceTree = ""; }; 00D48BD02200A31300CC4527 /* Launch.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Launch.storyboard; sourceTree = ""; }; @@ -157,7 +157,7 @@ 00C0C6BC22465F65003D8AF0 /* migrations */, ); name = Assets; - path = ../core/assets/main; + path = "../uhabits-core-legacy/assets/main"; sourceTree = ""; }; 00C0C6D622471BA3003D8AF0 /* Platform */ = { @@ -285,7 +285,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "cd ../core\n./gradlew linkDebugFrameworkIos\n"; + shellScript = "cd ../uhabits-core-legacy\n../gradlew linkDebugFrameworkIos\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -451,10 +451,10 @@ DEVELOPMENT_TEAM = R5YTHGE3PS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( - "$(PROJECT_DIR)/../core/build/bin/ios/debugFramework/", + "$(PROJECT_DIR)/../uhabits-core-legacy/build/bin/ios/debugFramework/", "$(PROJECT_DIR)", ); - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../core/build/bin/ios/debugFramework/LoopHabitTracker.framework/Headers/"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../uhabits-core-legacy/build/bin/ios/debugFramework/LoopHabitTracker.framework/Headers/"; INFOPLIST_FILE = Application/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -479,10 +479,10 @@ DEVELOPMENT_TEAM = R5YTHGE3PS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( - "$(PROJECT_DIR)/../core/build/bin/ios/debugFramework/", + "$(PROJECT_DIR)/../uhabits-core-legacy/build/bin/ios/debugFramework/", "$(PROJECT_DIR)", ); - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../core/build/bin/ios/debugFramework/LoopHabitTracker.framework/Headers/"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../uhabits-core-legacy/build/bin/ios/debugFramework/LoopHabitTracker.framework/Headers/"; INFOPLIST_FILE = Application/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", From 88b86634841e074a195bbf92134a9f66df5454ef Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 2 Jan 2022 11:28:27 -0600 Subject: [PATCH 038/147] Remove pref_led_notifications --- .../uhabits/notifications/AndroidNotificationTray.kt | 4 ---- .../uhabits/preferences/SharedPreferencesStorage.kt | 2 -- uhabits-android/src/main/res/xml/preferences.xml | 7 ------- .../org/isoron/uhabits/core/preferences/Preferences.kt | 9 --------- .../isoron/uhabits/core/preferences/PreferencesTest.kt | 3 --- 5 files changed, 25 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index 3721f04d5..07b215440 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -25,7 +25,6 @@ import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.graphics.BitmapFactory.decodeResource -import android.graphics.Color import android.os.Build import android.os.Build.VERSION.SDK_INT import android.util.Log @@ -150,9 +149,6 @@ class AndroidNotificationTray if (!disableSound) builder.setSound(ringtoneManager.getURI()) - if (preferences.shouldMakeNotificationsLed()) - builder.setLights(Color.RED, 1000, 1000) - if (SDK_INT < Build.VERSION_CODES.S) { val snoozeAction = Action( R.drawable.ic_action_snooze, diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt index ec78e5d6b..0e019be0c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt @@ -90,8 +90,6 @@ class SharedPreferencesStorage preferences.isMidnightDelayEnabled = getBoolean(key, false) "pref_sticky_notifications" -> preferences.setNotificationsSticky(getBoolean(key, false)) - "pref_led_notifications" -> - preferences.setNotificationsLed(getBoolean(key, false)) "pref_unknown_enabled" -> { preferences.areQuestionMarksEnabled = getBoolean(key, false) } diff --git a/uhabits-android/src/main/res/xml/preferences.xml b/uhabits-android/src/main/res/xml/preferences.xml index 89ab445f9..5da126053 100644 --- a/uhabits-android/src/main/res/xml/preferences.xml +++ b/uhabits-android/src/main/res/xml/preferences.xml @@ -99,13 +99,6 @@ android:title="@string/sticky_notifications" app:iconSpaceReserved="false" /> - - Date: Sun, 2 Jan 2022 11:37:06 -0600 Subject: [PATCH 039/147] Remove leading/trailing whitespace from notes --- .../uhabits/activities/common/dialogs/NumberPickerFactory.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index 0845999c2..de2401c46 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -99,7 +99,7 @@ class NumberPickerFactory picker.clearFocus() picker2.clearFocus() val v = picker.value + 0.01 * picker2.value - val note = etNotes.text.toString() + val note = etNotes.text.toString().trim() callback.onNumberPicked(v, note) } .setNegativeButton(android.R.string.cancel) { _, _ -> From 2f13aba22c2f81caf7ca19eaae6773450822f9ed Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 2 Jan 2022 11:52:51 -0600 Subject: [PATCH 040/147] CheckmarkButtonView: Make focusable --- .../uhabits/activities/habits/list/views/CheckmarkButtonView.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index 9108e5123..a142e3044 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -83,7 +83,6 @@ class CheckmarkButtonView( private var drawer = Drawer() init { - isFocusable = false setOnClickListener(this) setOnLongClickListener(this) } From ca4618579e3912f0d8d0a162f23866882dafc705 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 2 Jan 2022 11:53:04 -0600 Subject: [PATCH 041/147] Reduce toggle delay --- .../uhabits/activities/habits/list/views/HabitCardView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index 551cb73c3..4024fbfe0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -306,7 +306,7 @@ class HabitCardView( } companion object { - const val TOGGLE_DELAY_MILLIS = 2000L + const val TOGGLE_DELAY_MILLIS = 1000L fun (() -> Unit).delay(delayInMillis: Long) { Handler(Looper.getMainLooper()).postDelayed(this, delayInMillis) From 3b12ec4bfe08824e3561f709ee290c81ebc65478 Mon Sep 17 00:00:00 2001 From: Jakub Kalinowski Date: Thu, 24 Mar 2022 12:08:31 +0100 Subject: [PATCH 042/147] Issue 1316: Skip measurable habit (#1319) Co-authored-by: Jakub Kalinowski --- .../common/dialogs/NumberPickerFactory.kt | 25 +++++++- .../activities/common/views/FrequencyChart.kt | 8 ++- .../habits/list/ListHabitsScreen.kt | 4 +- .../habits/list/views/NumberButtonView.kt | 12 ++++ .../habits/show/ShowHabitActivity.kt | 6 +- .../NumericalCheckmarkWidgetActivity.kt | 1 + .../src/main/res/values/strings.xml | 1 + .../isoron/uhabits/core/models/EntryList.kt | 34 ++++++++++- .../isoron/uhabits/core/models/ScoreList.kt | 27 ++++---- .../screens/habits/list/ListHabitsBehavior.kt | 3 + .../screens/habits/show/views/HistoryCard.kt | 7 ++- .../screens/habits/show/views/TargetCard.kt | 33 ++++++++-- .../uhabits/core/models/ScoreListTest.kt | 61 +++++++++++++++++++ .../habits/list/ListHabitsBehaviorTest.kt | 10 ++- 14 files changed, 205 insertions(+), 27 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index de2401c46..8c62e337a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -22,6 +22,7 @@ package org.isoron.uhabits.activities.common.dialogs import android.annotation.SuppressLint import android.content.Context import android.content.DialogInterface +import android.content.DialogInterface.BUTTON_NEGATIVE import android.text.InputFilter import android.text.Spanned import android.view.LayoutInflater @@ -33,7 +34,11 @@ import android.widget.EditText import android.widget.NumberPicker import android.widget.TextView import androidx.appcompat.app.AlertDialog +import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R +import org.isoron.uhabits.core.models.Entry +import org.isoron.uhabits.core.models.Frequency +import org.isoron.uhabits.core.models.Frequency.Companion.DAILY import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior import org.isoron.uhabits.inject.ActivityContext import org.isoron.uhabits.utils.InterfaceUtils @@ -52,6 +57,7 @@ class NumberPickerFactory unit: String, notes: String, dateString: String, + frequency: Frequency, callback: ListHabitsBehavior.NumberPickerCallback ): AlertDialog { val inflater = LayoutInflater.from(context) @@ -92,7 +98,7 @@ class NumberPickerFactory picker2.value = intValue % 100 etNotes.setText(notes) - val dialog = AlertDialog.Builder(context) + val dialogBuilder = AlertDialog.Builder(context) .setView(view) .setTitle(dateString) .setPositiveButton(R.string.save) { _, _ -> @@ -108,9 +114,24 @@ class NumberPickerFactory .setOnDismissListener { callback.onNumberPickerDismissed() } - .create() + + if (frequency == DAILY) { + dialogBuilder.setNegativeButton(R.string.skip_day) { _, _ -> + picker.clearFocus() + val v = Entry.SKIP.toDouble() / 1000 + val note = etNotes.text.toString() + callback.onNumberPicked(v, note) + } + } + + val dialog = dialogBuilder.create() dialog.setOnShowListener { + val preferences = + (context.applicationContext as HabitsApplication).component.preferences + if (!preferences.isSkipEnabled) { + dialog.getButton(BUTTON_NEGATIVE).visibility = View.GONE + } showSoftInput(dialog, pickerInputText) } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.kt index c4bad1a96..93a97dc41 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.kt @@ -173,7 +173,8 @@ class FrequencyChart : ScrollableChart { rect[0f, 0f, baseSize.toFloat()] = baseSize.toFloat() rect.offset(prevRect!!.left, prevRect!!.top + baseSize * j) val i = localeWeekdayList[j] % 7 - if (values != null) drawMarker(canvas, rect, values[i]) + if (values != null) + drawMarker(canvas, rect, values[i]) rect.offset(0f, rowHeight) } drawFooter(canvas, rect, date) @@ -222,11 +223,14 @@ class FrequencyChart : ScrollableChart { } private fun drawMarker(canvas: Canvas, rect: RectF?, value: Int?) { + // value can be negative when the entry is skipped + val valueCopy = value?.let { max(0, it) } + val padding = rect!!.height() * 0.2f // maximal allowed mark radius val maxRadius = (rect.height() - 2 * padding) / 2.0f // the real mark radius is scaled down by a factor depending on the maximal frequency - val scale = 1.0f / maxFreq * value!! + val scale = 1.0f / maxFreq * valueCopy!! val radius = maxRadius * scale val colorIndex = min((colors.size - 1), ((colors.size - 1) * scale).roundToInt()) pGraph!!.color = colors[colorIndex] diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt index 774e5345f..4ec28f9f3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt @@ -40,6 +40,7 @@ import org.isoron.uhabits.core.commands.CreateHabitCommand import org.isoron.uhabits.core.commands.DeleteHabitsCommand import org.isoron.uhabits.core.commands.EditHabitCommand import org.isoron.uhabits.core.commands.UnarchiveHabitsCommand +import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.tasks.TaskRunner @@ -230,9 +231,10 @@ class ListHabitsScreen unit: String, notes: String, dateString: String, + frequency: Frequency, callback: ListHabitsBehavior.NumberPickerCallback ) { - numberPickerFactory.create(value, unit, notes, dateString, callback).show() + numberPickerFactory.create(value, unit, notes, dateString, frequency, callback).show() } override fun showCheckmarkDialog( diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt index d0d705fb3..ed00049ee 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt @@ -29,6 +29,7 @@ import android.view.View import android.view.View.OnClickListener import android.view.View.OnLongClickListener import org.isoron.uhabits.R +import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.NumericalHabitType.AT_LEAST import org.isoron.uhabits.core.models.NumericalHabitType.AT_MOST import org.isoron.uhabits.core.preferences.Preferences @@ -143,6 +144,12 @@ class NumberButtonView( private val lowContrast: Int private val mediumContrast: Int + private val paint = TextPaint().apply { + typeface = getFontAwesome() + isAntiAlias = true + textAlign = Paint.Align.CENTER + } + private val pUnit: TextPaint = TextPaint().apply { textSize = getDimension(context, R.dimen.smallerTextSize) typeface = NORMAL_TYPEFACE @@ -176,6 +183,11 @@ class NumberButtonView( val textSize: Float when { + value == Entry.SKIP.toDouble() / 1000 -> { + label = resources.getString(R.string.fa_skipped) + textSize = dim(R.dimen.smallTextSize) + typeface = getFontAwesome() + } value >= 0 -> { label = value.toShortString() typeface = BOLD_TYPEFACE diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index 0b696ad4e..4af6948ad 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -39,6 +39,7 @@ import org.isoron.uhabits.activities.common.dialogs.HistoryEditorDialog import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory import org.isoron.uhabits.core.commands.Command import org.isoron.uhabits.core.commands.CommandRunner +import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.preferences.Preferences @@ -169,9 +170,10 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { unit: String, notes: String, dateString: String, - callback: ListHabitsBehavior.NumberPickerCallback, + frequency: Frequency, + callback: ListHabitsBehavior.NumberPickerCallback ) { - NumberPickerFactory(this@ShowHabitActivity).create(value, unit, notes, dateString, callback).show() + NumberPickerFactory(this@ShowHabitActivity).create(value, unit, notes, dateString, frequency, callback).show() } override fun showCheckmarkDialog( diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt index c557ed942..b7bc7f229 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/NumericalCheckmarkWidgetActivity.kt @@ -81,6 +81,7 @@ class NumericalCheckmarkWidgetActivity : Activity(), ListHabitsBehavior.NumberPi data.habit.unit, entry.notes, today.toDialogDateString(), + data.habit.frequency, this ).show() } diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml index 75d7d88a7..9fec1cbca 100644 --- a/uhabits-android/src/main/res/values/strings.xml +++ b/uhabits-android/src/main/res/values/strings.xml @@ -225,6 +225,7 @@ Increment Decrement Enable skip days + Skip Toggle twice to add a skip instead of a checkmark. Skips keep your score unchanged and don\'t break your streak. Show question marks for missing data Differentiate days without data from actual lapses. To enter a lapse, toggle twice. diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt index 5212923b1..2d9662b21 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/EntryList.kt @@ -276,6 +276,8 @@ open class EntryList { * For numerical habits, non-positive entry values are converted to zero. For boolean habits, each * YES_MANUAL value is converted to 1000 and all other values are converted to zero. * + * SKIP values are converted to zero (if they weren't, each SKIP day would count as 0.003). + * * The returned list is sorted by timestamp, with the newest entry coming first and the oldest entry * coming last. If the original list has gaps in it (for example, weeks or months without any * entries), then the list produced by this method will also have gaps. @@ -289,7 +291,10 @@ fun List.groupedSum( ): List { return this.map { (timestamp, value) -> if (isNumerical) { - Entry(timestamp, max(0, value)) + if (value == SKIP) + Entry(timestamp, 0) + else + Entry(timestamp, max(0, value)) } else { Entry(timestamp, if (value == YES_MANUAL) 1000 else 0) } @@ -301,6 +306,31 @@ fun List.groupedSum( }.entries.map { (timestamp, entries) -> Entry(timestamp, entries.sumOf { it.value }) }.sortedBy { (timestamp, _) -> - - timestamp.unixTime + -timestamp.unixTime + } +} + +/** + * Counts the number of days with vaLue SKIP in the given period. + */ +fun List.countSkippedDays( + truncateField: DateUtils.TruncateField, + firstWeekday: Int = Calendar.SATURDAY +): List { + return this.map { (timestamp, value) -> + if (value == SKIP) { + Entry(timestamp, 1) + } else { + Entry(timestamp, 0) + } + }.groupBy { entry -> + entry.timestamp.truncate( + truncateField, + firstWeekday, + ) + }.entries.map { (timestamp, entries) -> + Entry(timestamp, entries.sumOf { it.value }) + }.sortedBy { (timestamp, _) -> + -timestamp.unixTime } } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt index 23bd88fd1..385ee0f0c 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/ScoreList.kt @@ -100,20 +100,25 @@ class ScoreList { } val normalizedRollingSum = rollingSum / 1000 - val percentageCompleted = if (!isAtMost) { - if (targetValue > 0) - min(1.0, normalizedRollingSum / targetValue) - else - 1.0 - } else { - if (targetValue > 0) { - (1 - ((normalizedRollingSum - targetValue) / targetValue)).coerceIn(0.0, 1.0) + if (values[offset] != Entry.SKIP) { + val percentageCompleted = if (!isAtMost) { + if (targetValue > 0) + min(1.0, normalizedRollingSum / targetValue) + else + 1.0 } else { - if (normalizedRollingSum > 0) 0.0 else 1.0 + if (targetValue > 0) { + (1 - ((normalizedRollingSum - targetValue) / targetValue)).coerceIn( + 0.0, + 1.0 + ) + } else { + if (normalizedRollingSum > 0) 0.0 else 1.0 + } } - } - previousValue = compute(freq, previousValue, percentageCompleted) + previousValue = compute(freq, previousValue, percentageCompleted) + } } else { if (values[offset] == Entry.YES_MANUAL) { rollingSum += 1.0 diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt index d39227927..278d904db 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt @@ -21,6 +21,7 @@ package org.isoron.uhabits.core.ui.screens.habits.list import org.isoron.platform.time.LocalDate import org.isoron.uhabits.core.commands.CommandRunner import org.isoron.uhabits.core.commands.CreateRepetitionCommand +import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.HabitList import org.isoron.uhabits.core.models.HabitType @@ -58,6 +59,7 @@ open class ListHabitsBehavior @Inject constructor( habit.unit, entry.notes, timestamp.toDialogDateString(), + habit.frequency ) { newValue: Double, newNotes: String, -> val value = (newValue * 1000).roundToInt() commandRunner.run(CreateRepetitionCommand(habitList, habit, timestamp, value, newNotes)) @@ -167,6 +169,7 @@ open class ListHabitsBehavior @Inject constructor( unit: String, notes: String, dateString: String, + frequency: Frequency, callback: NumberPickerCallback ) fun showCheckmarkDialog( diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt index de1820bbd..97d149906 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt @@ -27,6 +27,7 @@ import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Entry.Companion.SKIP import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL +import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.HabitList import org.isoron.uhabits.core.models.NumericalHabitType.AT_LEAST @@ -123,6 +124,7 @@ class HistoryCardPresenter( habit.unit, entry.notes, timestamp.toDialogDateString(), + frequency = habit.frequency ) { newValue: Double, newNotes: String -> val thousands = (newValue * 1000).roundToInt() commandRunner.run( @@ -154,6 +156,7 @@ class HistoryCardPresenter( entries.map { when { it.value == Entry.UNKNOWN -> OFF + it.value == SKIP -> HATCHED (habit.targetType == AT_MOST) && (it.value / 1000.0 <= habit.targetValue) -> ON (habit.targetType == AT_LEAST) && (it.value / 1000.0 >= habit.targetValue) -> ON else -> GREY @@ -196,8 +199,10 @@ class HistoryCardPresenter( unit: String, notes: String, dateString: String, - callback: ListHabitsBehavior.NumberPickerCallback, + frequency: Frequency, + callback: ListHabitsBehavior.NumberPickerCallback ) + fun showCheckmarkDialog( selectedValue: Int, notes: String, diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/TargetCard.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/TargetCard.kt index 15d500def..9b8add0dc 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/TargetCard.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/TargetCard.kt @@ -21,6 +21,7 @@ package org.isoron.uhabits.core.ui.screens.habits.show.views import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.PaletteColor +import org.isoron.uhabits.core.models.countSkippedDays import org.isoron.uhabits.core.models.groupedSum import org.isoron.uhabits.core.ui.views.Theme import org.isoron.uhabits.core.utils.DateUtils @@ -51,37 +52,59 @@ class TargetCardPresenter { isNumerical = habit.isNumerical ).firstOrNull()?.value ?: 0 + val skippedDayToday = entries.countSkippedDays( + truncateField = DateUtils.TruncateField.DAY + ).firstOrNull()?.value ?: 0 + val valueThisWeek = entries.groupedSum( truncateField = DateUtils.TruncateField.WEEK_NUMBER, firstWeekday = firstWeekday, isNumerical = habit.isNumerical ).firstOrNull()?.value ?: 0 + val skippedDaysThisWeek = entries.countSkippedDays( + truncateField = DateUtils.TruncateField.WEEK_NUMBER, + firstWeekday = firstWeekday + ).firstOrNull()?.value ?: 0 + val valueThisMonth = entries.groupedSum( truncateField = DateUtils.TruncateField.MONTH, isNumerical = habit.isNumerical ).firstOrNull()?.value ?: 0 + val skippedDaysThisMonth = entries.countSkippedDays( + truncateField = DateUtils.TruncateField.MONTH, + ).firstOrNull()?.value ?: 0 + val valueThisQuarter = entries.groupedSum( truncateField = DateUtils.TruncateField.QUARTER, isNumerical = habit.isNumerical ).firstOrNull()?.value ?: 0 + val skippedDaysThisQuarter = entries.countSkippedDays( + truncateField = DateUtils.TruncateField.QUARTER + ).firstOrNull()?.value ?: 0 + val valueThisYear = entries.groupedSum( truncateField = DateUtils.TruncateField.YEAR, isNumerical = habit.isNumerical ).firstOrNull()?.value ?: 0 + val skippedDaysThisYear = entries.countSkippedDays( + truncateField = DateUtils.TruncateField.YEAR + ).firstOrNull()?.value ?: 0 + val cal = DateUtils.getStartOfTodayCalendarWithOffset() val daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH) val daysInQuarter = 91 val daysInYear = cal.getActualMaximum(Calendar.DAY_OF_YEAR) - val targetToday = habit.targetValue / habit.frequency.denominator - val targetThisWeek = targetToday * 7 - val targetThisMonth = targetToday * daysInMonth - val targetThisQuarter = targetToday * daysInQuarter - val targetThisYear = targetToday * daysInYear + val dailyTarget = habit.targetValue / habit.frequency.denominator + val targetToday = dailyTarget * (1 - skippedDayToday) + val targetThisWeek = dailyTarget * (7 - skippedDaysThisWeek) + val targetThisMonth = dailyTarget * (daysInMonth - skippedDaysThisMonth) + val targetThisQuarter = dailyTarget * (daysInQuarter - skippedDaysThisQuarter) + val targetThisYear = dailyTarget * (daysInYear - skippedDaysThisYear) val values = ArrayList() if (habit.frequency.denominator <= 1) values.add(valueToday / 1e3) diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/models/ScoreListTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/models/ScoreListTest.kt index 6ca3e2806..a152bdfe0 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/models/ScoreListTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/models/ScoreListTest.kt @@ -23,6 +23,7 @@ import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.number.IsCloseTo import org.hamcrest.number.OrderingComparison import org.isoron.uhabits.core.BaseUnitTest +import org.isoron.uhabits.core.models.Entry.Companion.SKIP import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday import org.junit.Before import org.junit.Test @@ -381,6 +382,66 @@ class NumericalAtLeastScoreListTest : NumericalScoreListTest() { } } +class NumericalAtLeastScoreListWithSkipTest : NumericalScoreListTest() { + @Before + @Throws(Exception::class) + override fun setUp() { + super.setUp() + habit = fixtures.createEmptyNumericalHabit(NumericalHabitType.AT_LEAST) + } + + @Test + fun test_getValue() { + addEntries(0, 10, 2000) + addEntries(10, 11, SKIP) + addEntries(11, 15, 2000) + addEntries(15, 16, SKIP) + addEntries(16, 20, 2000) + val expectedValues = doubleArrayOf( + 0.617008, + 0.596033, + 0.573910, + 0.550574, + 0.525961, + 0.500000, + 0.472617, + 0.443734, + 0.413270, + 0.381137, + 0.347244, // skipped day should have the same score as the previous day + 0.347244, + 0.311495, + 0.273788, + 0.234017, + 0.192067, // skipped day should have the same score as the previous day + 0.192067, + 0.147820, + 0.101149, + 0.051922, + 0.000000, + 0.000000, + 0.000000 + ) + checkScoreValues(expectedValues) + } + + @Test + fun skipsShouldNotAffectScore() { + addEntries(0, 500, 1000) + val initialScore = habit.scores[today].value + + addEntries(500, 1000, SKIP) + assertThat(habit.scores[today].value, IsCloseTo.closeTo(initialScore, E)) + + addEntries(0, 300, 1000) + addEntries(300, 500, SKIP) + addEntries(500, 700, 1000) + + // skipped days should be treated as if they never existed + assertThat(habit.scores[today].value, IsCloseTo.closeTo(initialScore, E)) + } +} + class NumericalAtMostScoreListTest : NumericalScoreListTest() { @Before @Throws(Exception::class) diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt index 8192583ad..4df4a28f3 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt @@ -33,6 +33,7 @@ import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.core.IsEqual.equalTo import org.isoron.uhabits.core.BaseUnitTest import org.isoron.uhabits.core.models.Entry +import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday @@ -79,7 +80,14 @@ class ListHabitsBehaviorTest : BaseUnitTest() { @Test fun testOnEdit() { behavior.onEdit(habit2, getToday()) - verify(screen).showNumberPicker(eq(0.1), eq("miles"), eq(""), eq("Jan 25, 2015"), picker.capture()) + verify(screen).showNumberPicker( + eq(0.1), + eq("miles"), + eq(""), + eq("Jan 25, 2015"), + eq(Frequency.DAILY), + picker.capture() + ) picker.lastValue.onNumberPicked(100.0, "") val today = getTodayWithOffset() assertThat(habit2.computedEntries.get(today).value, equalTo(100000)) From bdeddb149eb26a232d7c689bfe1e4296d7413dd6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Apr 2022 03:01:34 +0000 Subject: [PATCH 043/147] Bump ktorVersion from 1.6.7 to 1.6.8 Bumps `ktorVersion` from 1.6.7 to 1.6.8. Updates `ktor-client-mock` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-jackson` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-client-android` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-client-core` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-client-jackson` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-client-json` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-server-netty` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-server-core` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-html-builder` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) Updates `ktor-server-tests` from 1.6.7 to 1.6.8 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8) --- updated-dependencies: - dependency-name: io.ktor:ktor-client-mock dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-jackson dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-jackson dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-client-json dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-server-netty dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-server-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-html-builder dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.ktor:ktor-server-tests dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index b4ef2d919..cef316a10 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -89,7 +89,7 @@ dependencies { val daggerVersion = "2.41" val kotlinVersion = "1.6.10" val kxCoroutinesVersion = "1.6.0" - val ktorVersion = "1.6.7" + val ktorVersion = "1.6.8" val espressoVersion = "3.4.0" androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion") diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 0a6ff1514..b1a9661c0 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -33,7 +33,7 @@ application { } dependencies { - val ktorVersion = "1.6.7" + val ktorVersion = "1.6.8" val kotlinVersion = "1.6.10" val logbackVersion = "1.2.10" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") From 4469f86e46c6e69ae916424fa4d78413ee834f79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Apr 2022 03:01:36 +0000 Subject: [PATCH 044/147] Bump logback-classic from 1.2.10 to 1.2.11 Bumps logback-classic from 1.2.10 to 1.2.11. --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index b1a9661c0..19834ad81 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -35,7 +35,7 @@ application { dependencies { val ktorVersion = "1.6.8" val kotlinVersion = "1.6.10" - val logbackVersion = "1.2.10" + val logbackVersion = "1.2.11" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") implementation("ch.qos.logback:logback-classic:$logbackVersion") From b79f7850ed3213efd0f4c66911e3c3c04c2a0653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=BCr=C5=9Fad=20Bumin=20Giray=20Saka?= Date: Tue, 12 Apr 2022 04:50:44 +0300 Subject: [PATCH 045/147] Add archive actions if there are archived habits (#1345) --- .../Frontend/MainScreenController.swift | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/uhabits-ios/Application/Frontend/MainScreenController.swift b/uhabits-ios/Application/Frontend/MainScreenController.swift index e50974aaf..7c4d9136d 100644 --- a/uhabits-ios/Application/Frontend/MainScreenController.swift +++ b/uhabits-ios/Application/Frontend/MainScreenController.swift @@ -190,18 +190,20 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener @objc func onMoreActionsClicked() { let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - if preferences.showArchived { - alert.addAction(UIAlertAction(title: strings.hide_archived, style: .default) { - (action: UIAlertAction) -> Void in - self.preferences.showArchived = false - self.dataSource.requestData() - }) - } else { - alert.addAction(UIAlertAction(title: strings.show_archived, style: .default) { - (action: UIAlertAction) -> Void in - self.preferences.showArchived = true - self.dataSource.requestData() - }) + if isThereAnyArchivedHabit() { + if preferences.showArchived { + alert.addAction(UIAlertAction(title: strings.hide_archived, style: .default) { + (action: UIAlertAction) -> Void in + self.preferences.showArchived = false + self.dataSource.requestData() + }) + } else { + alert.addAction(UIAlertAction(title: strings.show_archived, style: .default) { + (action: UIAlertAction) -> Void in + self.preferences.showArchived = true + self.dataSource.requestData() + }) + } } if preferences.showCompleted { @@ -262,4 +264,8 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener let sections = NSIndexSet(indexesIn: NSMakeRange(0, self.tableView.numberOfSections)) tableView.reloadSections(sections as IndexSet, with: .automatic) } + + func isThereAnyArchivedHabit() -> Bool { + return data!.habits.filter({ $0.isArchived }).count > 0 + } } From 2245347e28a218fd5b8cc3a618437276897f0e3e Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Fri, 15 Apr 2022 16:34:43 +0200 Subject: [PATCH 046/147] Clean up SDK_INT branches (#1348) Fixes #1347. --- .../uhabits/acceptance/steps/CommonSteps.kt | 5 +-- .../uhabits/acceptance/steps/WidgetSteps.kt | 36 ++++++++----------- .../habits/list/views/HabitCardView.kt | 6 ++-- .../activities/settings/SettingsFragment.kt | 6 ++-- .../org/isoron/uhabits/utils/SystemUtils.kt | 5 ++- 5 files changed, 26 insertions(+), 32 deletions(-) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt index cc871d23c..79863428a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt @@ -18,7 +18,8 @@ */ package org.isoron.uhabits.acceptance.steps -import android.os.Build.VERSION +import android.os.Build +import android.os.Build.VERSION.SDK_INT import androidx.annotation.StringRes import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.Espresso @@ -133,7 +134,7 @@ object CommonSteps : BaseUserInterfaceTest() { @Throws(Exception::class) fun verifyOpensWebsite(url: String?) { var browserPkg = "org.chromium.webview_shell" - if (VERSION.SDK_INT <= 23) { + if (SDK_INT <= Build.VERSION_CODES.M) { browserPkg = "com.android.browser" } assertTrue(device.wait(Until.hasObject(By.pkg(browserPkg)), 5000)) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.kt index 303f0c24c..46efe525a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.kt @@ -18,7 +18,7 @@ */ package org.isoron.uhabits.acceptance.steps -import android.os.Build.VERSION +import android.os.Build.VERSION.SDK_INT import androidx.test.uiautomator.UiScrollable import androidx.test.uiautomator.UiSelector import junit.framework.Assert.assertFalse @@ -50,29 +50,21 @@ object WidgetSteps { private fun openWidgetScreen() { val h = BaseUserInterfaceTest.device.displayHeight val w = BaseUserInterfaceTest.device.displayWidth - if (VERSION.SDK_INT <= 21) { - BaseUserInterfaceTest.device.pressHome() - BaseUserInterfaceTest.device.waitForIdle() - BaseUserInterfaceTest.device.findObject(UiSelector().description("Apps")).click() - BaseUserInterfaceTest.device.findObject(UiSelector().description("Apps")).click() - BaseUserInterfaceTest.device.findObject(UiSelector().description("Widgets")).click() - } else { - val listId = "com.android.launcher3:id/widgets_list_view" - BaseUserInterfaceTest.device.pressHome() - BaseUserInterfaceTest.device.waitForIdle() - BaseUserInterfaceTest.device.drag(w / 2, h / 2, w / 2, h / 2, 8) - var button = BaseUserInterfaceTest.device.findObject(UiSelector().text("WIDGETS")) - if (!button.waitForExists(1000)) { - button = BaseUserInterfaceTest.device.findObject(UiSelector().text("Widgets")) - } - button.click() - if (VERSION.SDK_INT >= 28) { - UiScrollable(UiSelector().resourceId(listId)) - .scrollForward() - } + val listId = "com.android.launcher3:id/widgets_list_view" + BaseUserInterfaceTest.device.pressHome() + BaseUserInterfaceTest.device.waitForIdle() + BaseUserInterfaceTest.device.drag(w / 2, h / 2, w / 2, h / 2, 8) + var button = BaseUserInterfaceTest.device.findObject(UiSelector().text("WIDGETS")) + if (!button.waitForExists(1000)) { + button = BaseUserInterfaceTest.device.findObject(UiSelector().text("Widgets")) + } + button.click() + if (SDK_INT >= 28) { UiScrollable(UiSelector().resourceId(listId)) - .scrollIntoView(UiSelector().text("Checkmark")) + .scrollForward() } + UiScrollable(UiSelector().resourceId(listId)) + .scrollIntoView(UiSelector().text("Checkmark")) } @Throws(Exception::class) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index 4024fbfe0..c901dc92f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.habits.list.views import android.content.Context import android.graphics.text.LineBreaker.BREAK_STRATEGY_BALANCED +import android.os.Build import android.os.Build.VERSION.SDK_INT -import android.os.Build.VERSION_CODES.M import android.os.Handler import android.os.Looper import android.text.TextUtils @@ -153,7 +153,9 @@ class HabitCardView( maxLines = 2 ellipsize = TextUtils.TruncateAt.END layoutParams = LinearLayout.LayoutParams(0, WRAP_CONTENT, 1f) - if (SDK_INT >= M) breakStrategy = BREAK_STRATEGY_BALANCED + if (SDK_INT >= Build.VERSION_CODES.Q) { + breakStrategy = BREAK_STRATEGY_BALANCED + } } checkmarkPanel = checkmarkPanelFactory.create().apply { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt index cc8bcecfe..9f22409c5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt @@ -23,7 +23,7 @@ import android.content.Intent import android.content.SharedPreferences import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.os.Build -import android.os.Build.VERSION +import android.os.Build.VERSION.SDK_INT import android.os.Bundle import android.provider.Settings import android.util.Log @@ -90,7 +90,7 @@ class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeLis showRingtonePicker() return true } else if (key == "reminderCustomize") { - if (VERSION.SDK_INT < Build.VERSION_CODES.O) return true + if (SDK_INT < Build.VERSION_CODES.O) return true createAndroidNotificationChannel(context!!) val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) intent.putExtra(Settings.EXTRA_APP_PACKAGE, context!!.packageName) @@ -112,7 +112,7 @@ class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeLis } updateWeekdayPreference() - if (VERSION.SDK_INT < Build.VERSION_CODES.O) + if (SDK_INT < Build.VERSION_CODES.O) findPreference("reminderCustomize").isVisible = false else { findPreference("reminderSound").isVisible = false diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/SystemUtils.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/SystemUtils.kt index a7d805103..8fe759169 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/SystemUtils.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/SystemUtils.kt @@ -22,14 +22,13 @@ import android.app.Activity import android.app.KeyguardManager import android.content.Context import android.os.Build +import android.os.Build.VERSION.SDK_INT import android.view.WindowManager object SystemUtils { - val isAndroidOOrLater: Boolean - get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O fun unlockScreen(activity: Activity) { - if (isAndroidOOrLater) { + if (SDK_INT >= Build.VERSION_CODES.O) { val km = activity.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager km.requestDismissKeyguard(activity, null) } else { From 999057300b32948e3641b2e948f65d0bb9d72537 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Fri, 15 Apr 2022 22:40:36 +0200 Subject: [PATCH 047/147] Bump kotlin from 1.5.0 to 1.6.10 (#1349) --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 102ed1278..ce0129a2f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - val kotlinVersion = "1.5.0" + val kotlinVersion = "1.6.10" id("com.android.application") version ("7.0.3") apply (false) id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) From c453810785ccd63ccaf7d0a453be03208b5c7db1 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Thu, 21 Apr 2022 18:29:42 +0200 Subject: [PATCH 048/147] Resort habit list after habit edit (#1350) * Add regression test for #1131 * Resort habit list after habit edit Fixes #1131. --- .../uhabits/acceptance/steps/CommonSteps.kt | 16 ++++++++ .../acceptance/steps/EditHabitSteps.kt | 18 +++++++++ .../acceptance/steps/ListHabitsSteps.kt | 6 +++ .../regression/ListHabitsRegressionTest.kt | 39 +++++++++++++++++++ .../uhabits/core/commands/EditHabitCommand.kt | 1 + 5 files changed, 80 insertions(+) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt index 79863428a..83e0a8610 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.kt @@ -179,6 +179,22 @@ object CommonSteps : BaseUserInterfaceTest() { EditHabitSteps.clickSave() } + fun changeFrequencyToDaily(habitName: String) { + clickText(habitName) + Espresso.onView(ViewMatchers.withId(R.id.action_edit_habit)).perform(ViewActions.click()) + EditHabitSteps.pickDailyFrequency() + EditHabitSteps.clickSave() + pressBack() + } + + fun changeFrequencyToMonthly(habitName: String) { + clickText(habitName) + Espresso.onView(ViewMatchers.withId(R.id.action_edit_habit)).perform(ViewActions.click()) + EditHabitSteps.pickMonthFrequency() + EditHabitSteps.clickSave() + pressBack() + } + enum class Screen { LIST_HABITS, SHOW_HABIT, EDIT_HABIT, SELECT_HABIT_TYPE } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.kt index 05dfc586e..11c8cadf8 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.kt @@ -36,6 +36,24 @@ object EditHabitSteps { Espresso.onView(ViewMatchers.withText("SAVE")).perform(ViewActions.click()) } + fun pickMonthFrequency() { + Espresso.onView(ViewMatchers.withId(R.id.boolean_frequency_picker)) + .perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.xTimesPerMonthRadioButton)) + .perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.xTimesPerMonthTextView)) + .perform(ViewActions.replaceText("1")) + Espresso.onView(ViewMatchers.withText("SAVE")).perform(ViewActions.click()) + } + + fun pickDailyFrequency() { + Espresso.onView(ViewMatchers.withId(R.id.boolean_frequency_picker)) + .perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withId(R.id.everyDayRadioButton)) + .perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withText("SAVE")).perform(ViewActions.click()) + } + fun pickColor(color: Int) { Espresso.onView(ViewMatchers.withId(R.id.colorButton)).perform(ViewActions.click()) BaseUserInterfaceTest.device.findObject(By.descStartsWith(String.format("Color %d", color))) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.kt index 6c83d2d07..217eaa6be 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.kt @@ -120,6 +120,12 @@ object ListHabitsSteps { BaseUserInterfaceTest.device.waitForIdle() } + fun changeSort(sortText: String) { + clickViewWithId(R.id.action_filter) + Espresso.onView(ViewMatchers.withText("Sort")).perform(ViewActions.click()) + Espresso.onView(ViewMatchers.withText(sortText)).perform(ViewActions.click()) + } + enum class MenuItem { ABOUT, HELP, SETTINGS, EDIT, DELETE, ARCHIVE, TOGGLE_ARCHIVED, UNARCHIVE, TOGGLE_COMPLETED, ADD } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt index e1fc6d5cc..551c76c17 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/ListHabitsRegressionTest.kt @@ -21,9 +21,12 @@ package org.isoron.uhabits.regression import androidx.test.filters.LargeTest import org.isoron.uhabits.BaseUserInterfaceTest +import org.isoron.uhabits.acceptance.steps.CommonSteps import org.isoron.uhabits.acceptance.steps.CommonSteps.Screen.EDIT_HABIT import org.isoron.uhabits.acceptance.steps.CommonSteps.Screen.LIST_HABITS import org.isoron.uhabits.acceptance.steps.CommonSteps.Screen.SELECT_HABIT_TYPE +import org.isoron.uhabits.acceptance.steps.CommonSteps.changeFrequencyToDaily +import org.isoron.uhabits.acceptance.steps.CommonSteps.changeFrequencyToMonthly import org.isoron.uhabits.acceptance.steps.CommonSteps.clickText import org.isoron.uhabits.acceptance.steps.CommonSteps.createHabit import org.isoron.uhabits.acceptance.steps.CommonSteps.launchApp @@ -37,9 +40,12 @@ import org.isoron.uhabits.acceptance.steps.EditHabitSteps.clickSave import org.isoron.uhabits.acceptance.steps.EditHabitSteps.typeName import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.ADD import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.DELETE +import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.changeSort import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.clickMenu import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.longPressCheckmarks +import org.isoron.uhabits.core.models.Entry.Companion.NO import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN +import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL import org.junit.Test @@ -83,4 +89,37 @@ class ListHabitsRegressionTest : BaseUserInterfaceTest() { offsetHeaders() verifyDisplaysCheckmarks("Wake up early", listOf(UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN)) } + + /** + * https://github.com/iSoron/uhabits/issues/1131 + */ + @Test + @Throws(Exception::class) + fun should_refresh_sort_after_habit_edit() { + launchApp() + verifyShowsScreen(LIST_HABITS) + changeSort("By score") + changeSort("By status") + longPressCheckmarks("Meditate", count = 1) + changeFrequencyToMonthly("Read books") + longPressCheckmarks("Read books", count = 2) + longPressCheckmarks("Read books", count = 1) + verifyDisplaysCheckmarks("Meditate", listOf(YES_AUTO, YES_MANUAL, YES_AUTO, YES_MANUAL)) + CommonSteps.verifyDisplaysTextInSequence( + "Wake up early", + "Read books", + "Meditate", + "Track time" + ) + + changeFrequencyToDaily("Meditate") + + verifyDisplaysCheckmarks("Meditate", listOf(NO, YES_MANUAL, UNKNOWN, YES_MANUAL)) + CommonSteps.verifyDisplaysTextInSequence( + "Wake up early", + "Meditate", + "Read books", + "Track time", + ) + } } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/EditHabitCommand.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/EditHabitCommand.kt index d8a19010b..1fe966f46 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/EditHabitCommand.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/commands/EditHabitCommand.kt @@ -33,5 +33,6 @@ data class EditHabitCommand( habitList.update(habit) habit.observable.notifyListeners() habit.recompute() + habitList.resort() } } From d53312d261f9b331bb8b9cfc636dca757730b0fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 May 2022 03:04:58 +0000 Subject: [PATCH 049/147] Bump kotlin-stdlib from 1.6.10 to 1.6.21 Bumps [kotlin-stdlib](https://github.com/JetBrains/kotlin) from 1.6.10 to 1.6.21. - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.6.21/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.10...v1.6.21) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index df0308761..ba4e0f3f7 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -45,7 +45,7 @@ kotlin { implementation(kotlin("stdlib-jdk8")) compileOnly("com.google.dagger:dagger:2.41") implementation("com.google.guava:guava:31.1-android") - implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.10") + implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") implementation("androidx.annotation:annotation:1.3.0") implementation("com.google.code.findbugs:jsr305:3.0.2") From 45c62b4ab23c720fa18b0de28a9f7ddc29be552b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 May 2022 03:01:19 +0000 Subject: [PATCH 050/147] Bump kxCoroutinesVersion from 1.6.0 to 1.6.1 Bumps `kxCoroutinesVersion` from 1.6.0 to 1.6.1. Updates `kotlinx-coroutines-android` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) Updates `kotlinx-coroutines-core` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index cef316a10..0251a8351 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -88,7 +88,7 @@ android { dependencies { val daggerVersion = "2.41" val kotlinVersion = "1.6.10" - val kxCoroutinesVersion = "1.6.0" + val kxCoroutinesVersion = "1.6.1" val ktorVersion = "1.6.8" val espressoVersion = "3.4.0" From a6cbd44e422254776158a5336dc86a949e51b156 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 May 2022 17:44:41 +0000 Subject: [PATCH 051/147] Bump kotlinx-coroutines-core-jvm from 1.6.0 to 1.6.1 Bumps [kotlinx-coroutines-core-jvm](https://github.com/Kotlin/kotlinx.coroutines) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index ba4e0f3f7..d7335a596 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -46,7 +46,7 @@ kotlin { compileOnly("com.google.dagger:dagger:2.41") implementation("com.google.guava:guava:31.1-android") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1") implementation("androidx.annotation:annotation:1.3.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.6") From d82a3c145dd998d009b600e4a40088be1c29a908 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 May 2022 17:44:40 +0000 Subject: [PATCH 052/147] Bump kotlin-stdlib-jdk8 from 1.6.10 to 1.6.21 Bumps [kotlin-stdlib-jdk8](https://github.com/JetBrains/kotlin) from 1.6.10 to 1.6.21. - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.6.21/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.10...v1.6.21) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-stdlib-jdk8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 0251a8351..2849d9df7 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -87,7 +87,7 @@ android { dependencies { val daggerVersion = "2.41" - val kotlinVersion = "1.6.10" + val kotlinVersion = "1.6.21" val kxCoroutinesVersion = "1.6.1" val ktorVersion = "1.6.8" val espressoVersion = "3.4.0" diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 19834ad81..c41221430 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -34,7 +34,7 @@ application { dependencies { val ktorVersion = "1.6.8" - val kotlinVersion = "1.6.10" + val kotlinVersion = "1.6.21" val logbackVersion = "1.2.11" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") From 9d4161a25558c89609d010fc81887dcf057dbd89 Mon Sep 17 00:00:00 2001 From: Jakub Kalinowski Date: Mon, 2 May 2022 01:01:13 +0000 Subject: [PATCH 053/147] Issue 1332: Multiple numeric dialogs appearing (#1356) Co-authored-by: Jakub Kalinowski --- .../common/dialogs/NumberPickerFactory.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt index 8c62e337a..0ee4dad34 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt @@ -50,7 +50,6 @@ class NumberPickerFactory @Inject constructor( @ActivityContext private val context: Context ) { - @SuppressLint("SetTextI18n") fun create( value: Double, @@ -60,6 +59,8 @@ class NumberPickerFactory frequency: Frequency, callback: ListHabitsBehavior.NumberPickerCallback ): AlertDialog { + clearCurrentDialog() + val inflater = LayoutInflater.from(context) val view = inflater.inflate(R.layout.number_picker_dialog, null) @@ -113,6 +114,7 @@ class NumberPickerFactory } .setOnDismissListener { callback.onNumberPickerDismissed() + currentDialog = null } if (frequency == DAILY) { @@ -153,6 +155,7 @@ class NumberPickerFactory false } + currentDialog = dialog return dialog } @@ -169,6 +172,14 @@ class NumberPickerFactory val inputMethodManager = context.getSystemService(InputMethodManager::class.java) inputMethodManager?.showSoftInput(v, 0) } + + companion object { + private var currentDialog: AlertDialog? = null + fun clearCurrentDialog() { + currentDialog?.dismiss() + currentDialog = null + } + } } class SeparatorWatcherInputFilter(private val nextPicker: NumberPicker) : InputFilter { From 7187214282835bca5fbc3ba9c9cf9f4ee00be9c1 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 12 Apr 2022 15:01:12 -0500 Subject: [PATCH 054/147] Replace notesIndicator by notes --- .../habits/list/views/CheckmarkButtonView.kt | 4 +-- .../habits/list/views/CheckmarkPanelView.kt | 8 ++--- .../habits/list/views/HabitCardListAdapter.kt | 4 +-- .../habits/list/views/HabitCardListView.kt | 4 +-- .../habits/list/views/HabitCardView.kt | 8 ++--- .../habits/list/views/NumberButtonView.kt | 4 +-- .../habits/list/views/NumberPanelView.kt | 8 ++--- .../isoron/uhabits/utils/ViewExtensions.kt | 4 +-- .../screens/habits/list/HabitCardListCache.kt | 30 +++++++++---------- 9 files changed, 37 insertions(+), 37 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index a142e3044..604c5720b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -71,7 +71,7 @@ class CheckmarkButtonView( invalidate() } - var hasNotes = false + var notes = "" set(value) { field = value invalidate() @@ -179,7 +179,7 @@ class CheckmarkButtonView( canvas.drawText(label, rect.centerX(), rect.centerY(), paint) } - drawNotesIndicator(canvas, color, em, hasNotes) + drawNotesIndicator(canvas, color, em, notes) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt index 859cf734d..76df675ec 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt @@ -54,7 +54,7 @@ class CheckmarkPanelView( setupButtons() } - var notesIndicators = BooleanArray(0) + var notes = arrayOf() set(values) { field = values setupButtons() @@ -84,9 +84,9 @@ class CheckmarkPanelView( index + dataOffset < values.size -> values[index + dataOffset] else -> UNKNOWN } - button.hasNotes = when { - index + dataOffset < notesIndicators.size -> notesIndicators[index + dataOffset] - else -> false + button.notes = when { + index + dataOffset < notes.size -> notes[index + dataOffset] + else -> "" } button.color = color button.onToggle = { value -> onToggle(timestamp, value) } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt index b8770d0cb..06412103b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt @@ -124,9 +124,9 @@ class HabitCardListAdapter @Inject constructor( val habit = cache.getHabitByPosition(position) val score = cache.getScore(habit!!.id!!) val checkmarks = cache.getCheckmarks(habit.id!!) - val notesIndicators = cache.getNoteIndicators(habit.id!!) + val notes = cache.getNotes(habit.id!!) val selected = selected.contains(habit) - listView!!.bindCardView(holder, habit, score, checkmarks, notesIndicators, selected) + listView!!.bindCardView(holder, habit, score, checkmarks, notes, selected) } override fun onViewAttachedToWindow(holder: HabitCardViewHolder) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt index 8ce805098..fd6df425f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt @@ -87,7 +87,7 @@ class HabitCardListView( habit: Habit, score: Double, checkmarks: IntArray, - notesIndicators: BooleanArray, + notes: Array, selected: Boolean ): View { val cardView = holder.itemView as HabitCardView @@ -99,7 +99,7 @@ class HabitCardListView( cardView.score = score cardView.unit = habit.unit cardView.threshold = habit.targetValue / habit.frequency.denominator - cardView.notesIndicators = notesIndicators + cardView.notes = notes val detector = GestureDetector(context, CardViewGestureDetector(holder)) cardView.setOnTouchListener { _, ev -> diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index c901dc92f..040e36b68 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -121,11 +121,11 @@ class HabitCardView( numberPanel.threshold = value } - var notesIndicators - get() = checkmarkPanel.notesIndicators + var notes + get() = checkmarkPanel.notes set(values) { - checkmarkPanel.notesIndicators = values - numberPanel.notesIndicators = values + checkmarkPanel.notes = values + numberPanel.notes = values } var checkmarkPanel: CheckmarkPanelView diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt index ed00049ee..4d8bdda05 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt @@ -102,7 +102,7 @@ class NumberButtonView( field = value invalidate() } - var hasNotes = false + var notes = "" set(value) { field = value invalidate() @@ -221,7 +221,7 @@ class NumberButtonView( canvas.drawText(units, rect.centerX(), rect.centerY(), pUnit) } - drawNotesIndicator(canvas, color, em, hasNotes) + drawNotesIndicator(canvas, color, em, notes) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt index 520401f65..b9be8c820 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt @@ -72,7 +72,7 @@ class NumberPanelView( setupButtons() } - var notesIndicators = BooleanArray(0) + var notes = arrayOf() set(values) { field = values setupButtons() @@ -96,9 +96,9 @@ class NumberPanelView( index + dataOffset < values.size -> values[index + dataOffset] else -> 0.0 } - button.hasNotes = when { - index + dataOffset < notesIndicators.size -> notesIndicators[index + dataOffset] - else -> false + button.notes = when { + index + dataOffset < notes.size -> notes[index + dataOffset] + else -> "" } button.color = color button.targetType = targetType diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt index b6903b3b0..f406635cd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt @@ -202,10 +202,10 @@ fun View.sp(value: Float) = InterfaceUtils.spToPixels(context, value) fun View.dp(value: Float) = InterfaceUtils.dpToPixels(context, value) fun View.str(id: Int) = resources.getString(id) -fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, hasNotes: Boolean) { +fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, notes: String) { val pNotesIndicator = Paint() pNotesIndicator.color = color - if (hasNotes) { + if (notes.isNotBlank()) { val cy = 0.8f * size canvas.drawCircle(width.toFloat() - cy, cy, 8f, pNotesIndicator) } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt index f1e306758..606f1cb09 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt @@ -79,8 +79,8 @@ class HabitCardListCache @Inject constructor( } @Synchronized - fun getNoteIndicators(habitId: Long): BooleanArray { - return data.notesIndicators[habitId]!! + fun getNotes(habitId: Long): Array { + return data.notes[habitId]!! } @Synchronized @@ -168,7 +168,7 @@ class HabitCardListCache @Inject constructor( data.habits.removeAt(position) data.idToHabit.remove(id) data.checkmarks.remove(id) - data.notesIndicators.remove(id) + data.notes.remove(id) data.scores.remove(id) listener.onItemRemoved(position) } @@ -213,7 +213,7 @@ class HabitCardListCache @Inject constructor( val habits: MutableList val checkmarks: HashMap val scores: HashMap - val notesIndicators: HashMap + val notes: HashMap> @Synchronized fun copyCheckmarksFrom(oldData: CacheData) { @@ -226,10 +226,10 @@ class HabitCardListCache @Inject constructor( @Synchronized fun copyNoteIndicatorsFrom(oldData: CacheData) { - val empty = BooleanArray(checkmarkCount) + val empty = (0..checkmarkCount).map { "" }.toTypedArray() for (id in idToHabit.keys) { - if (oldData.notesIndicators.containsKey(id)) notesIndicators[id] = - oldData.notesIndicators[id]!! else notesIndicators[id] = empty + if (oldData.notes.containsKey(id)) notes[id] = + oldData.notes[id]!! else notes[id] = empty } } @@ -257,7 +257,7 @@ class HabitCardListCache @Inject constructor( habits = LinkedList() checkmarks = HashMap() scores = HashMap() - notesIndicators = HashMap() + notes = HashMap() } } @@ -298,14 +298,14 @@ class HabitCardListCache @Inject constructor( if (targetId != null && targetId != habit.id) continue newData.scores[habit.id] = habit.scores[today].value val list: MutableList = ArrayList() - val notesIndicators: MutableList = ArrayList() + val notes: MutableList = ArrayList() for ((_, value, note) in habit.computedEntries.getByInterval(dateFrom, today)) { list.add(value) - notesIndicators.add(note.isNotEmpty()) + notes.add(note) } val entries = list.toTypedArray() newData.checkmarks[habit.id] = ArrayUtils.toPrimitive(entries) - newData.notesIndicators[habit.id] = notesIndicators.toBooleanArray() + newData.notes[habit.id] = notes.toTypedArray() runner!!.publishProgress(this, position) } } @@ -333,7 +333,7 @@ class HabitCardListCache @Inject constructor( data.idToHabit[id] = habit data.scores[id] = newData.scores[id]!! data.checkmarks[id] = newData.checkmarks[id]!! - data.notesIndicators[id] = newData.notesIndicators[id]!! + data.notes[id] = newData.notes[id]!! listener.onItemInserted(position) } @@ -361,10 +361,10 @@ class HabitCardListCache @Inject constructor( private fun performUpdate(id: Long, position: Int) { val oldScore = data.scores[id]!! val oldCheckmarks = data.checkmarks[id] - val oldNoteIndicators = data.notesIndicators[id] + val oldNoteIndicators = data.notes[id] val newScore = newData.scores[id]!! val newCheckmarks = newData.checkmarks[id]!! - val newNoteIndicators = newData.notesIndicators[id]!! + val newNoteIndicators = newData.notes[id]!! var unchanged = true if (oldScore != newScore) unchanged = false if (!Arrays.equals(oldCheckmarks, newCheckmarks)) unchanged = false @@ -372,7 +372,7 @@ class HabitCardListCache @Inject constructor( if (unchanged) return data.scores[id] = newScore data.checkmarks[id] = newCheckmarks - data.notesIndicators[id] = newNoteIndicators + data.notes[id] = newNoteIndicators listener.onItemChanged(position) } From 0de6896691dea9afa74cd12e19cb90e02bb5d911 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 12 Apr 2022 15:22:28 -0500 Subject: [PATCH 055/147] Add notes to DelayedToggle, make delay skipable --- .../habits/list/views/EntryButtonViewTest.kt | 2 +- .../habits/list/views/EntryPanelViewTest.kt | 4 ++-- .../habits/list/views/CheckmarkButtonView.kt | 12 ++++++----- .../habits/list/views/CheckmarkPanelView.kt | 4 ++-- .../habits/list/views/HabitCardView.kt | 20 +++++++++---------- .../screens/habits/list/ListHabitsBehavior.kt | 3 +-- .../habits/list/ListHabitsBehaviorTest.kt | 7 ++++++- 7 files changed, 29 insertions(+), 23 deletions(-) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt index 6184b44a9..e45569d99 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt @@ -43,7 +43,7 @@ class EntryButtonViewTest : BaseViewTest() { view = component.getEntryButtonViewFactory().create().apply { value = Entry.NO color = PaletteUtils.getAndroidTestColor(5) - onToggle = { toggled = true } + onToggle = { _, _, _ -> toggled = true } } measureView(view, dpToPixels(48), dpToPixels(48)) } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt index 7aff33f0a..f09c48dba 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt @@ -77,7 +77,7 @@ class EntryPanelViewTest : BaseViewTest() { @Test fun testToggle() { val timestamps = mutableListOf() - view.onToggle = { t, _ -> timestamps.add(t) } + view.onToggle = { t, _, _, _ -> timestamps.add(t) } view.buttons[0].performLongClick() view.buttons[2].performLongClick() view.buttons[3].performLongClick() @@ -88,7 +88,7 @@ class EntryPanelViewTest : BaseViewTest() { fun testToggle_withOffset() { val timestamps = mutableListOf() view.dataOffset = 3 - view.onToggle = { t, _ -> timestamps += t } + view.onToggle = { t, _, _, _ -> timestamps += t } view.buttons[0].performLongClick() view.buttons[2].performLongClick() view.buttons[3].performLongClick() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index 604c5720b..b50d3ab44 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -44,6 +44,8 @@ import org.isoron.uhabits.utils.sres import org.isoron.uhabits.utils.toMeasureSpec import javax.inject.Inject +const val TOGGLE_DELAY_MILLIS = 2000L + class CheckmarkButtonViewFactory @Inject constructor( @ActivityContext val context: Context, @@ -77,7 +79,7 @@ class CheckmarkButtonView( invalidate() } - var onToggle: (Int) -> Unit = {} + var onToggle: (Int, String, Long) -> Unit = { _, _, _ -> } var onEdit: () -> Unit = {} private var drawer = Drawer() @@ -87,25 +89,25 @@ class CheckmarkButtonView( setOnLongClickListener(this) } - fun performToggle() { + fun performToggle(delay: Long) { value = Entry.nextToggleValue( value = value, isSkipEnabled = preferences.isSkipEnabled, areQuestionMarksEnabled = preferences.areQuestionMarksEnabled ) - onToggle(value) + onToggle(value, notes, delay) performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) invalidate() } override fun onClick(v: View) { - if (preferences.isShortToggleEnabled) performToggle() + if (preferences.isShortToggleEnabled) performToggle(TOGGLE_DELAY_MILLIS) else onEdit() } override fun onLongClick(v: View): Boolean { if (preferences.isShortToggleEnabled) onEdit() - else performToggle() + else performToggle(TOGGLE_DELAY_MILLIS) return true } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt index 76df675ec..9a44fde10 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt @@ -60,7 +60,7 @@ class CheckmarkPanelView( setupButtons() } - var onToggle: (Timestamp, Int) -> Unit = { _, _ -> } + var onToggle: (Timestamp, Int, String, Long) -> Unit = { _, _, _, _ -> } set(value) { field = value setupButtons() @@ -89,7 +89,7 @@ class CheckmarkPanelView( else -> "" } button.color = color - button.onToggle = { value -> onToggle(timestamp, value) } + button.onToggle = { value, notes, delay -> onToggle(timestamp, value, notes, delay) } button.onEdit = { onEdit(timestamp) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index 040e36b68..424aae50b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -60,7 +60,8 @@ class HabitCardViewFactory data class DelayedToggle( var habit: Habit, var timestamp: Timestamp, - var value: Int + var value: Int, + var notes: String ) class HabitCardView( @@ -159,11 +160,11 @@ class HabitCardView( } checkmarkPanel = checkmarkPanelFactory.create().apply { - onToggle = { timestamp, value -> - triggerRipple(timestamp) + onToggle = { timestamp, value, notes, delay -> + if (delay > 0) triggerRipple(timestamp) habit?.let { - val taskId = queueToggle(it, timestamp, value); - { runPendingToggles(taskId) }.delay(TOGGLE_DELAY_MILLIS) + val taskId = queueToggle(it, timestamp, value, notes); + { runPendingToggles(taskId) }.delay(delay) } } onEdit = { timestamp -> @@ -207,7 +208,7 @@ class HabitCardView( @Synchronized private fun runPendingToggles(id: Int) { if (currentToggleTaskId != id) return - for ((h, t, v) in queuedToggles) behavior.onToggle(h, t, v) + for ((h, t, v, n) in queuedToggles) behavior.onToggle(h, t, v, n) queuedToggles.clear() } @@ -215,10 +216,11 @@ class HabitCardView( private fun queueToggle( it: Habit, timestamp: Timestamp, - value: Int + value: Int, + notes: String, ): Int { currentToggleTaskId += 1 - queuedToggles.add(DelayedToggle(it, timestamp, value)) + queuedToggles.add(DelayedToggle(it, timestamp, value, notes)) return currentToggleTaskId } @@ -308,8 +310,6 @@ class HabitCardView( } companion object { - const val TOGGLE_DELAY_MILLIS = 1000L - fun (() -> Unit).delay(delayInMillis: Long) { Handler(Looper.getMainLooper()).postDelayed(this, delayInMillis) } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt index 278d904db..d4aa170cf 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt @@ -123,8 +123,7 @@ open class ListHabitsBehavior @Inject constructor( if (prefs.isFirstRun) onFirstRun() } - fun onToggle(habit: Habit, timestamp: Timestamp?, value: Int) { - val notes = habit.computedEntries.get(timestamp!!).notes + fun onToggle(habit: Habit, timestamp: Timestamp, value: Int, notes: String) { commandRunner.run( CreateRepetitionCommand(habitList, habit, timestamp, value, notes) ) diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt index 4df4a28f3..02637192a 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt @@ -168,7 +168,12 @@ class ListHabitsBehaviorTest : BaseUnitTest() { @Test fun testOnToggle() { assertTrue(habit1.isCompletedToday()) - behavior.onToggle(habit1, getToday(), Entry.NO) + behavior.onToggle( + habit = habit1, + timestamp = getToday(), + value = Entry.NO, + notes = "" + ) assertFalse(habit1.isCompletedToday()) } } From 825a5f2cb9cf16f806ac8a89f9c6052dd0044e24 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Fri, 15 Apr 2022 08:34:03 -0500 Subject: [PATCH 056/147] Implement CheckmarkPopup --- .../habits/list/views/EntryButtonViewTest.kt | 18 ++- .../habits/list/views/NumberPanelViewTest.kt | 4 +- .../common/dialogs/CheckmarkPopup.kt | 127 ++++++++++++++++++ .../common/dialogs/HistoryEditorDialog.kt | 2 +- .../habits/list/ListHabitsScreen.kt | 36 ++++- .../habits/list/views/CheckmarkButtonView.kt | 9 +- .../habits/list/views/CheckmarkPanelView.kt | 5 +- .../habits/list/views/HabitCardView.kt | 8 +- .../habits/list/views/NumberPanelView.kt | 6 +- .../habits/show/ShowHabitActivity.kt | 46 ++++++- .../isoron/uhabits/utils/ViewExtensions.kt | 43 ++++++ .../main/res/drawable/checkmark_dialog_bg.xml | 27 ++++ .../res/drawable/checkmark_dialog_divider.xml | 25 ++++ .../src/main/res/layout/checkmark_popup.xml | 72 ++++++++++ .../src/main/res/values/styles.xml | 11 ++ .../kotlin/org/isoron/platform/gui/Canvas.kt | 5 + .../screens/habits/list/ListHabitsBehavior.kt | 15 ++- .../screens/habits/show/views/HistoryCard.kt | 86 +++++++----- .../uhabits/core/ui/views/HistoryChart.kt | 10 +- .../habits/list/ListHabitsBehaviorTest.kt | 3 +- .../uhabits/core/ui/views/HistoryChartTest.kt | 44 ++++-- 21 files changed, 530 insertions(+), 72 deletions(-) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt create mode 100644 uhabits-android/src/main/res/drawable/checkmark_dialog_bg.xml create mode 100644 uhabits-android/src/main/res/drawable/checkmark_dialog_divider.xml create mode 100644 uhabits-android/src/main/res/layout/checkmark_popup.xml diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt index e45569d99..9b807c764 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt @@ -36,6 +36,7 @@ class EntryButtonViewTest : BaseViewTest() { lateinit var view: CheckmarkButtonView var toggled = false + var edited = false @Before override fun setUp() { @@ -44,6 +45,7 @@ class EntryButtonViewTest : BaseViewTest() { value = Entry.NO color = PaletteUtils.getAndroidTestColor(5) onToggle = { _, _, _ -> toggled = true } + onEdit = { _ -> edited = true } } measureView(view, dpToPixels(48), dpToPixels(48)) } @@ -70,20 +72,28 @@ class EntryButtonViewTest : BaseViewTest() { fun testClick_withShortToggleDisabled() { prefs.isShortToggleEnabled = false view.performClick() - assertFalse(toggled) + assertTrue(!toggled and edited) } @Test fun testClick_withShortToggleEnabled() { prefs.isShortToggleEnabled = true view.performClick() - assertTrue(toggled) + assertTrue(toggled and !edited) } @Test - fun testLongClick() { + fun testLongClick_withShortToggleDisabled() { + prefs.isShortToggleEnabled = false + view.performLongClick() + assertTrue(toggled and !edited) + } + + @Test + fun testLongClick_withShortToggleEnabled() { + prefs.isShortToggleEnabled = true view.performLongClick() - assertTrue(toggled) + assertTrue(!toggled and edited) } private fun assertRendersCheckedExplicitly() { diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt index da0a2eb8a..fb816f4d4 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt @@ -76,7 +76,7 @@ class NumberPanelViewTest : BaseViewTest() { @Test fun testEdit() { val timestamps = mutableListOf() - view.onEdit = { timestamps.plusAssign(it) } + view.onEdit = { _, t -> timestamps.plusAssign(t) } view.buttons[0].performLongClick() view.buttons[2].performLongClick() view.buttons[3].performLongClick() @@ -87,7 +87,7 @@ class NumberPanelViewTest : BaseViewTest() { fun testEdit_withOffset() { val timestamps = mutableListOf() view.dataOffset = 3 - view.onEdit = { timestamps += it } + view.onEdit = { _, t -> timestamps += t } view.buttons[0].performLongClick() view.buttons[2].performLongClick() view.buttons[3].performLongClick() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt new file mode 100644 index 000000000..85d7fdfc1 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkPopup.kt @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2016-2021 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.activities.common.dialogs + +import android.content.Context +import android.graphics.drawable.ColorDrawable +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.widget.PopupWindow +import org.isoron.platform.gui.ScreenLocation +import org.isoron.uhabits.R +import org.isoron.uhabits.core.models.Entry.Companion.NO +import org.isoron.uhabits.core.models.Entry.Companion.SKIP +import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN +import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO +import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL +import org.isoron.uhabits.core.preferences.Preferences +import org.isoron.uhabits.databinding.CheckmarkPopupBinding +import org.isoron.uhabits.utils.InterfaceUtils.getFontAwesome +import org.isoron.uhabits.utils.dimBehind +import org.isoron.uhabits.utils.dp +import org.isoron.uhabits.utils.sres + +const val POPUP_WIDTH = 4 * 48f + 16f +const val POPUP_HEIGHT = 48f * 2.5f + 8f + +class CheckmarkPopup( + private val context: Context, + private val color: Int, + private var notes: String, + private var value: Int, + private val prefs: Preferences, + private val anchor: View, +) { + var onToggle: (Int, String) -> Unit = { _, _ -> } + + private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply { + // Required for round corners + container.clipToOutline = true + } + + init { + initColors() + initTypefaces() + hideDisabledButtons() + populate() + } + + private fun initColors() { + arrayOf(view.yesBtn, view.skipBtn).forEach { + it.setTextColor(color) + } + arrayOf(view.noBtn, view.unknownBtn).forEach { + it.setTextColor(view.root.sres.getColor(R.attr.contrast60)) + } + } + + private fun initTypefaces() { + arrayOf(view.yesBtn, view.noBtn, view.skipBtn, view.unknownBtn).forEach { + it.typeface = getFontAwesome(context) + } + } + + private fun hideDisabledButtons() { + if (!prefs.isSkipEnabled) view.skipBtn.visibility = GONE + if (!prefs.areQuestionMarksEnabled) view.unknownBtn.visibility = GONE + } + + private fun populate() { + val selectedBtn = when (value) { + YES_MANUAL -> view.yesBtn + YES_AUTO -> view.noBtn + NO -> view.noBtn + UNKNOWN -> if (prefs.areQuestionMarksEnabled) view.unknownBtn else view.noBtn + SKIP -> if (prefs.isSkipEnabled) view.skipBtn else view.noBtn + else -> null + } + selectedBtn?.background = ColorDrawable(view.root.sres.getColor(R.attr.contrast40)) + view.notes.setText(notes) + } + + fun show(location: ScreenLocation) { + val popup = PopupWindow() + popup.contentView = view.root + popup.width = view.root.dp(POPUP_WIDTH).toInt() + popup.height = view.root.dp(POPUP_HEIGHT).toInt() + popup.isFocusable = true + popup.elevation = view.root.dp(24f) + fun onClick(v: Int) { + this.value = v + popup.dismiss() + } + view.yesBtn.setOnClickListener { onClick(YES_MANUAL) } + view.noBtn.setOnClickListener { onClick(NO) } + view.skipBtn.setOnClickListener { onClick(SKIP) } + view.unknownBtn.setOnClickListener { onClick(UNKNOWN) } + popup.setOnDismissListener { + onToggle(value, view.notes.text.toString()) + } + popup.showAtLocation( + anchor, + Gravity.NO_GRAVITY, + view.root.dp(location.x.toFloat()).toInt(), + view.root.dp(location.y.toFloat()).toInt(), + ) + popup.dimBehind() + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt index 21999d4e1..5cfe90ea6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.kt @@ -43,7 +43,7 @@ class HistoryEditorDialog : AppCompatDialogFragment(), CommandRunner.Listener { private lateinit var commandRunner: CommandRunner private lateinit var habit: Habit private lateinit var preferences: Preferences - private lateinit var dataView: AndroidDataView + lateinit var dataView: AndroidDataView private var chart: HistoryChart? = null private var onDateClickedListener: OnDateClickedListener? = null diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt index 4ec28f9f3..baec44b2f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt @@ -24,12 +24,16 @@ import android.content.Context import android.content.Intent import androidx.appcompat.app.AppCompatActivity import dagger.Lazy +import org.isoron.platform.gui.ScreenLocation +import org.isoron.platform.gui.toInt import org.isoron.platform.time.LocalDate import org.isoron.uhabits.R import org.isoron.uhabits.activities.common.dialogs.CheckmarkDialog +import org.isoron.uhabits.activities.common.dialogs.CheckmarkPopup import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialogFactory import org.isoron.uhabits.activities.common.dialogs.ConfirmDeleteDialog import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory +import org.isoron.uhabits.activities.common.dialogs.POPUP_WIDTH import org.isoron.uhabits.activities.habits.edit.HabitTypeDialog import org.isoron.uhabits.activities.habits.list.views.HabitCardListAdapter import org.isoron.uhabits.core.commands.ArchiveHabitsCommand @@ -43,6 +47,7 @@ import org.isoron.uhabits.core.commands.UnarchiveHabitsCommand import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.PaletteColor +import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.core.tasks.TaskRunner import org.isoron.uhabits.core.ui.ThemeSwitcher import org.isoron.uhabits.core.ui.callbacks.OnColorPickedCallback @@ -63,6 +68,7 @@ import org.isoron.uhabits.tasks.ExportDBTaskFactory import org.isoron.uhabits.tasks.ImportDataTask import org.isoron.uhabits.tasks.ImportDataTaskFactory import org.isoron.uhabits.utils.copyTo +import org.isoron.uhabits.utils.currentTheme import org.isoron.uhabits.utils.restartWithFade import org.isoron.uhabits.utils.showMessage import org.isoron.uhabits.utils.showSendEmailScreen @@ -93,7 +99,9 @@ class ListHabitsScreen private val colorPickerFactory: ColorPickerDialogFactory, private val numberPickerFactory: NumberPickerFactory, private val checkMarkDialog: CheckmarkDialog, - private val behavior: Lazy + private val behavior: Lazy, + private val preferences: Preferences, + private val rootView: Lazy, ) : CommandRunner.Listener, ListHabitsBehavior.Screen, ListHabitsMenuBehavior.Screen, @@ -237,6 +245,32 @@ class ListHabitsScreen numberPickerFactory.create(value, unit, notes, dateString, frequency, callback).show() } + override fun showCheckmarkPopup( + selectedValue: Int, + notes: String, + color: PaletteColor, + location: ScreenLocation, + callback: ListHabitsBehavior.CheckMarkDialogCallback + ) { + val view = rootView.get() + CheckmarkPopup( + context = context, + prefs = preferences, + anchor = view, + color = view.currentTheme().color(color).toInt(), + notes = notes, + value = selectedValue, + ).apply { + onToggle = { value, notes -> callback.onNotesSaved(value, notes) } + show( + ScreenLocation( + x = location.x - POPUP_WIDTH / 2, + y = location.y + ) + ) + } + } + override fun showCheckmarkDialog( selectedValue: Int, notes: String, diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index b50d3ab44..a408f92ee 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -28,6 +28,7 @@ import android.text.TextPaint import android.view.HapticFeedbackConstants import android.view.View import android.view.View.MeasureSpec.EXACTLY +import org.isoron.platform.gui.ScreenLocation import org.isoron.uhabits.R import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Entry.Companion.NO @@ -38,6 +39,7 @@ import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.inject.ActivityContext import org.isoron.uhabits.utils.drawNotesIndicator +import org.isoron.uhabits.utils.getCenter import org.isoron.uhabits.utils.getFontAwesome import org.isoron.uhabits.utils.sp import org.isoron.uhabits.utils.sres @@ -81,7 +83,8 @@ class CheckmarkButtonView( var onToggle: (Int, String, Long) -> Unit = { _, _, _ -> } - var onEdit: () -> Unit = {} + var onEdit: (ScreenLocation) -> Unit = { _ -> } + private var drawer = Drawer() init { @@ -102,11 +105,11 @@ class CheckmarkButtonView( override fun onClick(v: View) { if (preferences.isShortToggleEnabled) performToggle(TOGGLE_DELAY_MILLIS) - else onEdit() + else onEdit(getCenter()) } override fun onLongClick(v: View): Boolean { - if (preferences.isShortToggleEnabled) onEdit() + if (preferences.isShortToggleEnabled) onEdit(getCenter()) else performToggle(TOGGLE_DELAY_MILLIS) return true } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt index 9a44fde10..62fb3e436 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt @@ -20,6 +20,7 @@ package org.isoron.uhabits.activities.habits.list.views import android.content.Context +import org.isoron.platform.gui.ScreenLocation import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN import org.isoron.uhabits.core.models.Timestamp import org.isoron.uhabits.core.preferences.Preferences @@ -66,7 +67,7 @@ class CheckmarkPanelView( setupButtons() } - var onEdit: (Timestamp) -> Unit = {} + var onEdit: (ScreenLocation, Timestamp) -> Unit = { _, _ -> } set(value) { field = value setupButtons() @@ -90,7 +91,7 @@ class CheckmarkPanelView( } button.color = color button.onToggle = { value, notes, delay -> onToggle(timestamp, value, notes, delay) } - button.onEdit = { onEdit(timestamp) } + button.onEdit = { location -> onEdit(location, timestamp) } } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index 424aae50b..7296575e7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -167,17 +167,17 @@ class HabitCardView( { runPendingToggles(taskId) }.delay(delay) } } - onEdit = { timestamp -> + onEdit = { location, timestamp -> triggerRipple(timestamp) - habit?.let { behavior.onEdit(it, timestamp) } + habit?.let { behavior.onEdit(location, it, timestamp) } } } numberPanel = numberPanelFactory.create().apply { visibility = GONE - onEdit = { timestamp -> + onEdit = { location, timestamp -> triggerRipple(timestamp) - habit?.let { behavior.onEdit(it, timestamp) } + habit?.let { behavior.onEdit(location, it, timestamp) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt index b9be8c820..dc49b557b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt @@ -20,11 +20,13 @@ package org.isoron.uhabits.activities.habits.list.views import android.content.Context +import org.isoron.platform.gui.ScreenLocation import org.isoron.uhabits.core.models.NumericalHabitType import org.isoron.uhabits.core.models.Timestamp import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.core.utils.DateUtils import org.isoron.uhabits.inject.ActivityContext +import org.isoron.uhabits.utils.getCenter import javax.inject.Inject class NumberPanelViewFactory @@ -78,7 +80,7 @@ class NumberPanelView( setupButtons() } - var onEdit: (Timestamp) -> Unit = {} + var onEdit: (ScreenLocation, Timestamp) -> Unit = { _, _ -> } set(value) { field = value setupButtons() @@ -104,7 +106,7 @@ class NumberPanelView( button.targetType = targetType button.threshold = threshold button.units = units - button.onEdit = { onEdit(timestamp) } + button.onEdit = { onEdit(getCenter(), timestamp) } } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index 4af6948ad..95c6bdbbf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -27,6 +27,8 @@ import androidx.appcompat.app.AppCompatActivity import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import org.isoron.platform.gui.ScreenLocation +import org.isoron.platform.gui.toInt import org.isoron.platform.time.LocalDate import org.isoron.uhabits.AndroidDirFinder import org.isoron.uhabits.HabitsApplication @@ -34,9 +36,11 @@ import org.isoron.uhabits.R import org.isoron.uhabits.activities.AndroidThemeSwitcher import org.isoron.uhabits.activities.HabitsDirFinder import org.isoron.uhabits.activities.common.dialogs.CheckmarkDialog +import org.isoron.uhabits.activities.common.dialogs.CheckmarkPopup import org.isoron.uhabits.activities.common.dialogs.ConfirmDeleteDialog import org.isoron.uhabits.activities.common.dialogs.HistoryEditorDialog import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory +import org.isoron.uhabits.activities.common.dialogs.POPUP_WIDTH import org.isoron.uhabits.core.commands.Command import org.isoron.uhabits.core.commands.CommandRunner import org.isoron.uhabits.core.models.Frequency @@ -49,6 +53,8 @@ import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitMenuPresenter import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitPresenter import org.isoron.uhabits.core.ui.views.OnDateClickedListener import org.isoron.uhabits.intents.IntentFactory +import org.isoron.uhabits.utils.currentTheme +import org.isoron.uhabits.utils.getTopLeftCorner import org.isoron.uhabits.utils.showMessage import org.isoron.uhabits.utils.showSendFileScreen import org.isoron.uhabits.widgets.WidgetUpdater @@ -173,7 +179,14 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { frequency: Frequency, callback: ListHabitsBehavior.NumberPickerCallback ) { - NumberPickerFactory(this@ShowHabitActivity).create(value, unit, notes, dateString, frequency, callback).show() + NumberPickerFactory(this@ShowHabitActivity).create( + value, + unit, + notes, + dateString, + frequency, + callback + ).show() } override fun showCheckmarkDialog( @@ -194,6 +207,37 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener { ).show() } + override fun showCheckmarkPopup( + selectedValue: Int, + notes: String, + preferences: Preferences, + color: PaletteColor, + location: ScreenLocation, + callback: ListHabitsBehavior.CheckMarkDialogCallback + ) { + val dialog = + supportFragmentManager.findFragmentByTag("historyEditor") as HistoryEditorDialog? + ?: return + val view = dialog.dataView + val corner = view.getTopLeftCorner() + CheckmarkPopup( + context = this@ShowHabitActivity, + prefs = preferences, + notes = notes, + color = view.currentTheme().color(color).toInt(), + anchor = view, + value = selectedValue, + ).apply { + onToggle = { v, n -> callback.onNotesSaved(v, n) } + show( + ScreenLocation( + x = corner.x + location.x - POPUP_WIDTH / 2, + y = corner.y + location.y, + ) + ) + } + } + override fun showEditHabitScreen(habit: Habit) { startActivity(IntentFactory().startEditActivity(this@ShowHabitActivity, habit)) } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt index f406635cd..df140aa79 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt @@ -21,6 +21,7 @@ package org.isoron.uhabits.utils import android.app.Activity import android.content.ActivityNotFoundException +import android.content.Context import android.content.Intent import android.graphics.Canvas import android.graphics.Color @@ -32,6 +33,8 @@ import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT +import android.view.WindowManager +import android.widget.PopupWindow import android.widget.RelativeLayout import android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM import android.widget.RelativeLayout.ALIGN_PARENT_TOP @@ -42,6 +45,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.core.content.FileProvider import com.google.android.material.snackbar.Snackbar +import org.isoron.platform.gui.ScreenLocation import org.isoron.platform.gui.toInt import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R @@ -213,3 +217,42 @@ fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, notes: Stri val View.sres: StyledResources get() = StyledResources(context) + +fun PopupWindow.dimBehind() { + // https://stackoverflow.com/questions/35874001/dim-the-background-using-popupwindow-in-android + val container = contentView.rootView + val context = contentView.context + val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + val p = container.layoutParams as WindowManager.LayoutParams + p.flags = p.flags or WindowManager.LayoutParams.FLAG_DIM_BEHIND + p.dimAmount = 0.5f + wm.updateViewLayout(container, p) +} + +/** + * Returns the absolute screen coordinates for the center of this view (in density-independent + * pixels). + */ +fun View.getCenter(): ScreenLocation { + val density = resources.displayMetrics.density + val loc = IntArray(2) + this.getLocationInWindow(loc) + return ScreenLocation( + x = ((loc[0] + width / 2) / density).toDouble(), + y = ((loc[1] + height / 2) / density).toDouble(), + ) +} + +/** + * Returns the absolute screen coordinates for the top left corner of this view (in + * density-independent pixels). + */ +fun View.getTopLeftCorner(): ScreenLocation { + val density = resources.displayMetrics.density + val loc = IntArray(2) + this.getLocationInWindow(loc) + return ScreenLocation( + x = (loc[0] / density).toDouble(), + y = (loc[1] / density).toDouble(), + ) +} diff --git a/uhabits-android/src/main/res/drawable/checkmark_dialog_bg.xml b/uhabits-android/src/main/res/drawable/checkmark_dialog_bg.xml new file mode 100644 index 000000000..cea93a111 --- /dev/null +++ b/uhabits-android/src/main/res/drawable/checkmark_dialog_bg.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/uhabits-android/src/main/res/drawable/checkmark_dialog_divider.xml b/uhabits-android/src/main/res/drawable/checkmark_dialog_divider.xml new file mode 100644 index 000000000..ef44b9f19 --- /dev/null +++ b/uhabits-android/src/main/res/drawable/checkmark_dialog_divider.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/uhabits-android/src/main/res/layout/checkmark_popup.xml b/uhabits-android/src/main/res/layout/checkmark_popup.xml new file mode 100644 index 000000000..f1aa569a6 --- /dev/null +++ b/uhabits-android/src/main/res/layout/checkmark_popup.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + diff --git a/uhabits-android/src/main/res/values/styles.xml b/uhabits-android/src/main/res/values/styles.xml index 147d05d24..474d62d16 100644 --- a/uhabits-android/src/main/res/values/styles.xml +++ b/uhabits-android/src/main/res/values/styles.xml @@ -399,4 +399,15 @@ true + + diff --git a/uhabits-core/src/commonMain/kotlin/org/isoron/platform/gui/Canvas.kt b/uhabits-core/src/commonMain/kotlin/org/isoron/platform/gui/Canvas.kt index faab51b87..1459956ce 100644 --- a/uhabits-core/src/commonMain/kotlin/org/isoron/platform/gui/Canvas.kt +++ b/uhabits-core/src/commonMain/kotlin/org/isoron/platform/gui/Canvas.kt @@ -29,6 +29,11 @@ enum class Font { FONT_AWESOME } +data class ScreenLocation( + val x: Double, + val y: Double, +) + interface Canvas { fun setColor(color: Color) fun drawLine(x1: Double, y1: Double, x2: Double, y2: Double) diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt index d4aa170cf..14fa256e9 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt @@ -18,6 +18,7 @@ */ package org.isoron.uhabits.core.ui.screens.habits.list +import org.isoron.platform.gui.ScreenLocation import org.isoron.platform.time.LocalDate import org.isoron.uhabits.core.commands.CommandRunner import org.isoron.uhabits.core.commands.CreateRepetitionCommand @@ -50,7 +51,7 @@ open class ListHabitsBehavior @Inject constructor( screen.showHabitScreen(h) } - fun onEdit(habit: Habit, timestamp: Timestamp?) { + fun onEdit(location: ScreenLocation, habit: Habit, timestamp: Timestamp?) { val entry = habit.computedEntries.get(timestamp!!) if (habit.type == HabitType.NUMERICAL) { val oldValue = entry.value.toDouble() @@ -65,12 +66,11 @@ open class ListHabitsBehavior @Inject constructor( commandRunner.run(CreateRepetitionCommand(habitList, habit, timestamp, value, newNotes)) } } else { - screen.showCheckmarkDialog( + screen.showCheckmarkPopup( entry.value, entry.notes, - timestamp.toLocalDate(), - timestamp.toDialogDateString(), habit.color, + location, ) { newValue, newNotes -> commandRunner.run(CreateRepetitionCommand(habitList, habit, timestamp, newValue, newNotes)) } @@ -171,6 +171,13 @@ open class ListHabitsBehavior @Inject constructor( frequency: Frequency, callback: NumberPickerCallback ) + fun showCheckmarkPopup( + selectedValue: Int, + notes: String, + color: PaletteColor, + location: ScreenLocation, + callback: CheckMarkDialogCallback + ) fun showCheckmarkDialog( selectedValue: Int, notes: String, diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt index 97d149906..7c932fb42 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/show/views/HistoryCard.kt @@ -19,6 +19,7 @@ package org.isoron.uhabits.core.ui.screens.habits.show.views +import org.isoron.platform.gui.ScreenLocation import org.isoron.platform.time.DayOfWeek import org.isoron.platform.time.LocalDate import org.isoron.uhabits.core.commands.CommandRunner @@ -65,55 +66,65 @@ class HistoryCardPresenter( val screen: Screen, ) : OnDateClickedListener { - override fun onDateLongPress(date: LocalDate) { + override fun onDateLongPress(location: ScreenLocation, date: LocalDate) { val timestamp = Timestamp.fromLocalDate(date) screen.showFeedback() if (habit.isNumerical) { showNumberPicker(timestamp) } else { - val entry = habit.computedEntries.get(timestamp) - val nextValue = Entry.nextToggleValue( - value = entry.value, - isSkipEnabled = preferences.isSkipEnabled, - areQuestionMarksEnabled = preferences.areQuestionMarksEnabled - ) + if (preferences.isShortToggleEnabled) showCheckmarkPopup(location, timestamp) + else toggle(timestamp) + } + } + + override fun onDateShortPress(location: ScreenLocation, date: LocalDate) { + val timestamp = Timestamp.fromLocalDate(date) + screen.showFeedback() + if (habit.isNumerical) { + showNumberPicker(timestamp) + } else { + if (preferences.isShortToggleEnabled) toggle(timestamp) + else showCheckmarkPopup(location, timestamp) + } + } + + private fun showCheckmarkPopup(location: ScreenLocation, timestamp: Timestamp) { + val entry = habit.computedEntries.get(timestamp) + screen.showCheckmarkPopup( + entry.value, + entry.notes, + preferences, + habit.color, + location, + ) { newValue, newNotes -> commandRunner.run( CreateRepetitionCommand( habitList, habit, timestamp, - nextValue, - entry.notes, + newValue, + newNotes, ), ) } } - override fun onDateShortPress(date: LocalDate) { - val timestamp = Timestamp.fromLocalDate(date) - screen.showFeedback() - if (habit.isNumerical) { - showNumberPicker(timestamp) - } else { - val entry = habit.computedEntries.get(timestamp) - screen.showCheckmarkDialog( - entry.value, + private fun toggle(timestamp: Timestamp) { + val entry = habit.computedEntries.get(timestamp) + val nextValue = Entry.nextToggleValue( + value = entry.value, + isSkipEnabled = preferences.isSkipEnabled, + areQuestionMarksEnabled = preferences.areQuestionMarksEnabled + ) + commandRunner.run( + CreateRepetitionCommand( + habitList, + habit, + timestamp, + nextValue, entry.notes, - timestamp.toLocalDate(), - preferences, - habit.color, - ) { newValue, newNotes -> - commandRunner.run( - CreateRepetitionCommand( - habitList, - habit, - timestamp, - newValue, - newNotes, - ), - ) - } - } + ), + ) } private fun showNumberPicker(timestamp: Timestamp) { @@ -211,5 +222,14 @@ class HistoryCardPresenter( color: PaletteColor, callback: ListHabitsBehavior.CheckMarkDialogCallback, ) + + fun showCheckmarkPopup( + selectedValue: Int, + notes: String, + preferences: Preferences, + color: PaletteColor, + location: ScreenLocation, + callback: ListHabitsBehavior.CheckMarkDialogCallback, + ) } } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt index a752e271c..8d7435540 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/HistoryChart.kt @@ -22,6 +22,7 @@ package org.isoron.uhabits.core.ui.views import org.isoron.platform.gui.Canvas import org.isoron.platform.gui.Color import org.isoron.platform.gui.DataView +import org.isoron.platform.gui.ScreenLocation import org.isoron.platform.gui.TextAlign import org.isoron.platform.time.DayOfWeek import org.isoron.platform.time.LocalDate @@ -33,8 +34,8 @@ import kotlin.math.min import kotlin.math.round interface OnDateClickedListener { - fun onDateShortPress(date: LocalDate) {} - fun onDateLongPress(date: LocalDate) {} + fun onDateShortPress(location: ScreenLocation, date: LocalDate) {} + fun onDateLongPress(location: ScreenLocation, date: LocalDate) {} } class HistoryChart( @@ -90,10 +91,11 @@ class HistoryChart( if (x - padding < 0 || row == 0 || row > 7 || col == nColumns) return val clickedDate = topLeftDate.plus(offset) if (clickedDate.isNewerThan(today)) return + val location = ScreenLocation(x, y) if (isLongClick) { - onDateClickedListener.onDateLongPress(clickedDate) + onDateClickedListener.onDateLongPress(location, clickedDate) } else { - onDateClickedListener.onDateShortPress(clickedDate) + onDateClickedListener.onDateShortPress(location, clickedDate) } } diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt index 02637192a..c147fa524 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt @@ -31,6 +31,7 @@ import junit.framework.Assert.assertTrue import org.apache.commons.io.FileUtils import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.core.IsEqual.equalTo +import org.isoron.platform.gui.ScreenLocation import org.isoron.uhabits.core.BaseUnitTest import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Frequency @@ -79,7 +80,7 @@ class ListHabitsBehaviorTest : BaseUnitTest() { @Test fun testOnEdit() { - behavior.onEdit(habit2, getToday()) + behavior.onEdit(ScreenLocation(0.0, 0.0), habit2, getToday()) verify(screen).showNumberPicker( eq(0.1), eq("miles"), diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt index 8a9d523ab..8373805b7 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/views/HistoryChartTest.kt @@ -24,6 +24,7 @@ import com.nhaarman.mockitokotlin2.reset import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions import kotlinx.coroutines.runBlocking +import org.isoron.platform.gui.ScreenLocation import org.isoron.platform.gui.assertRenders import org.isoron.platform.time.DayOfWeek import org.isoron.platform.time.DayOfWeek.SUNDAY @@ -73,8 +74,7 @@ class HistoryChartTest { else -> OFF } }, - notesIndicators = MutableList(85) { - index: Int -> + notesIndicators = MutableList(85) { index: Int -> index % 3 == 0 } ) @@ -90,20 +90,32 @@ class HistoryChartTest { // Click top left date view.onClick(20.0, 46.0) - verify(dateClickedListener).onDateShortPress(LocalDate(2014, 10, 26)) + verify(dateClickedListener).onDateShortPress( + ScreenLocation(20.0, 46.0), + LocalDate(2014, 10, 26) + ) reset(dateClickedListener) view.onClick(2.0, 28.0) - verify(dateClickedListener).onDateShortPress(LocalDate(2014, 10, 26)) + verify(dateClickedListener).onDateShortPress( + ScreenLocation(2.0, 28.0), + LocalDate(2014, 10, 26) + ) reset(dateClickedListener) // Click date in the middle view.onClick(163.0, 113.0) - verify(dateClickedListener).onDateShortPress(LocalDate(2014, 12, 10)) + verify(dateClickedListener).onDateShortPress( + ScreenLocation(163.0, 113.0), + LocalDate(2014, 12, 10) + ) reset(dateClickedListener) // Click today view.onClick(336.0, 37.0) - verify(dateClickedListener).onDateShortPress(LocalDate(2015, 1, 25)) + verify(dateClickedListener).onDateShortPress( + ScreenLocation(336.0, 37.0), + LocalDate(2015, 1, 25) + ) reset(dateClickedListener) // Click header @@ -121,20 +133,32 @@ class HistoryChartTest { // Click top left date view.onLongClick(20.0, 46.0) - verify(dateClickedListener).onDateLongPress(LocalDate(2014, 10, 26)) + verify(dateClickedListener).onDateLongPress( + ScreenLocation(20.0, 46.0), + LocalDate(2014, 10, 26) + ) reset(dateClickedListener) view.onLongClick(2.0, 28.0) - verify(dateClickedListener).onDateLongPress(LocalDate(2014, 10, 26)) + verify(dateClickedListener).onDateLongPress( + ScreenLocation(2.0, 28.0), + LocalDate(2014, 10, 26) + ) reset(dateClickedListener) // Click date in the middle view.onLongClick(163.0, 113.0) - verify(dateClickedListener).onDateLongPress(LocalDate(2014, 12, 10)) + verify(dateClickedListener).onDateLongPress( + ScreenLocation(163.0, 113.0), + LocalDate(2014, 12, 10) + ) reset(dateClickedListener) // Click today view.onLongClick(336.0, 37.0) - verify(dateClickedListener).onDateLongPress(LocalDate(2015, 1, 25)) + verify(dateClickedListener).onDateLongPress( + ScreenLocation(336.0, 37.0), + LocalDate(2015, 1, 25) + ) reset(dateClickedListener) // Click header From f04e37e9050cf918f9b7643814ec893c61ba3992 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Fri, 15 Apr 2022 08:38:13 -0500 Subject: [PATCH 057/147] Remove CheckmarkDialog --- .../common/dialogs/CheckmarkDialog.kt | 119 ------------------ .../habits/list/ListHabitsScreen.kt | 21 ---- .../habits/show/ShowHabitActivity.kt | 20 --- .../src/main/res/layout/checkmark_dialog.xml | 95 -------------- .../src/main/res/values/styles.xml | 12 -- .../screens/habits/list/ListHabitsBehavior.kt | 10 -- .../screens/habits/show/views/HistoryCard.kt | 9 -- 7 files changed, 286 deletions(-) delete mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt delete mode 100644 uhabits-android/src/main/res/layout/checkmark_dialog.xml diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt deleted file mode 100644 index 4e62b614b..000000000 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/CheckmarkDialog.kt +++ /dev/null @@ -1,119 +0,0 @@ -package org.isoron.uhabits.activities.common.dialogs - -import android.content.Context -import android.graphics.Typeface -import android.view.LayoutInflater -import android.view.View -import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE -import android.widget.Button -import androidx.appcompat.app.AlertDialog -import org.isoron.platform.gui.toInt -import org.isoron.platform.time.JavaLocalDateFormatter -import org.isoron.platform.time.LocalDate -import org.isoron.uhabits.R -import org.isoron.uhabits.core.models.Entry.Companion.NO -import org.isoron.uhabits.core.models.Entry.Companion.SKIP -import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN -import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO -import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL -import org.isoron.uhabits.core.models.PaletteColor -import org.isoron.uhabits.core.preferences.Preferences -import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior -import org.isoron.uhabits.core.ui.views.Theme -import org.isoron.uhabits.databinding.CheckmarkDialogBinding -import org.isoron.uhabits.inject.ActivityContext -import org.isoron.uhabits.utils.InterfaceUtils -import org.isoron.uhabits.utils.StyledResources -import java.util.Locale -import javax.inject.Inject - -class CheckmarkDialog -@Inject constructor( - @ActivityContext private val context: Context, - private val preferences: Preferences, -) : View.OnClickListener { - - private lateinit var binding: CheckmarkDialogBinding - private lateinit var fontAwesome: Typeface - private val allButtons = mutableListOf