From 9a72377aaf5f85d16d8e34a7cc8525498192d1f6 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:01:36 +0300 Subject: [PATCH 001/150] Create strings.xml --- app/src/main/res/values-he/strings.xml | 131 +++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 app/src/main/res/values-he/strings.xml diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml new file mode 100644 index 000000000..c757c7ce0 --- /dev/null +++ b/app/src/main/res/values-he/strings.xml @@ -0,0 +1,131 @@ + + Olauncher + Github + lock layout description to be used a unique id to lock screen + Olauncher PRO + Buy me a coffee! + %s, %d%% + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + + App + Set as default launcher + Text color + Double tap to lock + Olauncher promises to use lock screen permission responsibly. Olauncher does not collect or share any data. + About + Off + On + Black + White + Change default launcher + Privacy + Share + Rate + Follow + Email + Donate + 1. Swipe up for all apps\n2. Long press anywhere for settings + Apps on home screen + Daily new wallpaper + Left + Right + Center + App alignment + Swipe left app + Swipe right app + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Tip: Start typing an app name to auto-launch it + Okay + Cool! + Auto show keyboard + Hide + Show status bar + Rename + Show date time + Appearance + Gestures + Theme mode + System + Dark + Light + Our About page on the bottom has answers to all your questions. Don\'t forget. :) + \n\nThank you. + Hi, you won\'t see this message again. + \n\nIf you like Olauncher, could you please give us a 5-star rating? It helps us improve our ranking and makes us very happy. Thank you! + Hi, we have a big request! We want to hit a million downloads before 2023 ends, and we need your help. + \n\nCould you share Olauncher with your friends, please? That would be really helpful. Thank you! + Hi, keyboard is the fastest way to find and launch apps in Olauncher. Can we request you to keep this On for a few more days and then decide? + \n\nThe choice is always yours. + The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. + Support Olauncher for free by using our Amazon affiliate link. + Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! + Open link + Copy + Close + Not now + Olauncher public roadmap + Instagram + Developer + Roadmap + Date + Date only + Bottom: On + Bottom: Off + Please set Olauncher as your default launcher first + Affiliate + Tip: Start typing for app RENAME option + Note: Tap on \'Olauncher\' at the top of this Settings page to find your hidden apps.\n\nMore details available in our About page below. + Swipe down for + Search + Notifications + Please turn on or off Olauncher\'s accessibility service in your device\'s settings to enable or disable this feature. + \n\nPlease note that this service is only used to let you turn off your device\'s screen using the double tap gesture. Our accessibility service does not collect or share any data. + Accept + Permission + Double tap to lock + Enable + Disable + Not working? + Info + Delete + Text size + Enabled + Disabled + Please turn on double tap to lock + Olauncher failed to lock device.\nPlease check your app settings. + Long press to select app + Unable to open app info + Copied + System app, cannot delete + Type a new app name first + App not found + Unable to launch app + Search for Launcher or Home app + Swipe left app enabled + Swipe right app enabled + Swipe left app disabled + Swipe right app disabled + Your wallpaper will update shortly + Olauncher is not default.\nDaily wallpaper update may fail. + Long press to enable + No hidden apps + Show + Hide + Are you using your phone, or is your phone using you? + From 841a9e380cf244e19a49ee8ad3e181986d198401 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:08:54 +0300 Subject: [PATCH 002/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index c757c7ce0..c578d25c3 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1,20 +1,4 @@ - Olauncher - Github - lock layout description to be used a unique id to lock screen - Olauncher PRO - Buy me a coffee! - %s, %d%% - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - App Set as default launcher Text color From 0c8906da64c066318c060d63825740cdfeb35ee5 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:11:20 +0300 Subject: [PATCH 003/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index c578d25c3..03f435d6f 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1,10 +1,10 @@ - App + יישום Set as default launcher - Text color + צבע הטקסט Double tap to lock Olauncher promises to use lock screen permission responsibly. Olauncher does not collect or share any data. - About + מידע כללי Off On Black @@ -19,9 +19,9 @@ 1. Swipe up for all apps\n2. Long press anywhere for settings Apps on home screen Daily new wallpaper - Left - Right - Center + ימין + שמאל + מרכז App alignment Swipe left app Swipe right app @@ -38,9 +38,9 @@ Okay Cool! Auto show keyboard - Hide + הסתרה Show status bar - Rename + שינוי שם Show date time Appearance Gestures @@ -76,7 +76,7 @@ Tip: Start typing for app RENAME option Note: Tap on \'Olauncher\' at the top of this Settings page to find your hidden apps.\n\nMore details available in our About page below. Swipe down for - Search + חיפוש Notifications Please turn on or off Olauncher\'s accessibility service in your device\'s settings to enable or disable this feature. \n\nPlease note that this service is only used to let you turn off your device\'s screen using the double tap gesture. Our accessibility service does not collect or share any data. From b5bb73da4d15046dcecace084f7e38e8b5c4d96c Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:20:41 +0300 Subject: [PATCH 004/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 72 +++++++++++++------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 03f435d6f..4396defaa 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -2,29 +2,29 @@ יישום Set as default launcher צבע הטקסט - Double tap to lock + לחיצה כפולה לנעילת המסך Olauncher promises to use lock screen permission responsibly. Olauncher does not collect or share any data. מידע כללי - Off - On - Black - White + כבוי + מופעל + שחור + לבן Change default launcher - Privacy - Share - Rate - Follow - Email - Donate + פרטיות + שיתוף + דירוג + עקבו אחריי + דואר אלקטרוני + תרומה 1. Swipe up for all apps\n2. Long press anywhere for settings - Apps on home screen - Daily new wallpaper + יישומים במסך הבית + רקע חדש בכל יום ימין שמאל מרכז App alignment - Swipe left app - Swipe right app + יישום לפתיחה בהחלקה שמאלה + יישום לפתיחה בהחלקה ימינה 0 1 2 @@ -35,19 +35,19 @@ 7 8 Tip: Start typing an app name to auto-launch it - Okay - Cool! + אישור + מגניב! Auto show keyboard הסתרה - Show status bar + הצגת שורת המצב שינוי שם Show date time - Appearance - Gestures - Theme mode - System - Dark - Light + מראה + מחוות + ערכת נושא + מערכת + כהה + בהירה Our About page on the bottom has answers to all your questions. Don\'t forget. :) \n\nThank you. Hi, you won\'t see this message again. @@ -64,11 +64,11 @@ Close Not now Olauncher public roadmap - Instagram - Developer + אינסטגרם + המפתח Roadmap - Date - Date only + תאריך + תאריך בלבד Bottom: On Bottom: Off Please set Olauncher as your default launcher first @@ -77,18 +77,18 @@ Note: Tap on \'Olauncher\' at the top of this Settings page to find your hidden apps.\n\nMore details available in our About page below. Swipe down for חיפוש - Notifications + התראות Please turn on or off Olauncher\'s accessibility service in your device\'s settings to enable or disable this feature. \n\nPlease note that this service is only used to let you turn off your device\'s screen using the double tap gesture. Our accessibility service does not collect or share any data. Accept - Permission - Double tap to lock + הרשאה + לחיצה כפולה לנעילת המסך Enable Disable Not working? Info - Delete - Text size + מחיקה + גודל הטקסט Enabled Disabled Please turn on double tap to lock @@ -105,11 +105,11 @@ Swipe right app enabled Swipe left app disabled Swipe right app disabled - Your wallpaper will update shortly + הרקע שלך תכף יתעדכן Olauncher is not default.\nDaily wallpaper update may fail. Long press to enable - No hidden apps - Show + אין יישומים מוסתרים + הצגה Hide Are you using your phone, or is your phone using you? From 4c559240ade123581e192803b7933767b6b8d6d4 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:33:21 +0300 Subject: [PATCH 005/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 4396defaa..57b0dcd9c 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1,6 +1,6 @@ יישום - Set as default launcher + הגדרה בתור משגר ברירת המחדל צבע הטקסט לחיצה כפולה לנעילת המסך Olauncher promises to use lock screen permission responsibly. Olauncher does not collect or share any data. @@ -9,7 +9,7 @@ מופעל שחור לבן - Change default launcher + שינוי משגר ברירת המחדל פרטיות שיתוף דירוג @@ -69,8 +69,8 @@ Roadmap תאריך תאריך בלבד - Bottom: On - Bottom: Off + הצגה למטה: מופעל + הצגה למטה: כבוי Please set Olauncher as your default launcher first Affiliate Tip: Start typing for app RENAME option @@ -98,18 +98,18 @@ Copied System app, cannot delete Type a new app name first - App not found - Unable to launch app - Search for Launcher or Home app - Swipe left app enabled - Swipe right app enabled - Swipe left app disabled - Swipe right app disabled + היישום לא נמצא + אין אפשרות להפעיל את היישום + חיפוש יישום מסך בית או משגר + פתיחת היישום בהחלקה שמאלה מופעלת + פתיחת היישום בהחלקה ימינה מופעלת + פתיחת היישום בהחלקה שמאלה כבויה + פתיחת היישום בהחלקה ימינה כבויה הרקע שלך תכף יתעדכן - Olauncher is not default.\nDaily wallpaper update may fail. - Long press to enable + יישום Olauncher לא מוגדר בתור ברירת מחדל.\nייתכן שעדכון הרקע היומי לא יצליח. + לחיצה ארוכה להפעלה אין יישומים מוסתרים הצגה - Hide - Are you using your phone, or is your phone using you? + הסתרה + האם אתם משתמשים בטלפון, או שהוא משתמש בכם? From ba82ff416b07caa0753019c879f97d5f64845a20 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Wed, 30 Aug 2023 16:42:52 +0300 Subject: [PATCH 006/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 57b0dcd9c..bb9aa3d4c 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -3,7 +3,7 @@ הגדרה בתור משגר ברירת המחדל צבע הטקסט לחיצה כפולה לנעילת המסך - Olauncher promises to use lock screen permission responsibly. Olauncher does not collect or share any data. + יישום Olauncher ישתמש בהרשאה של נעילת המסך באופן מתון. יישום Olauncher אינו אוסף או משתף נתונים כלל. מידע כללי כבוי מופעל @@ -34,10 +34,10 @@ 6 7 8 - Tip: Start typing an app name to auto-launch it + עצה: אפשר להתחיל להקליד שם של יישום מסוים ואז הוא ייפתח אוטומטית אישור מגניב! - Auto show keyboard + הצגת המקלדת באופן אוטומטי הסתרה הצגת שורת המצב שינוי שם From 93594cb3265bc9d8c86326d6a5a9e958be6e27b3 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:54:52 +0300 Subject: [PATCH 007/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 42 +++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index bb9aa3d4c..39e6328bd 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -16,13 +16,13 @@ עקבו אחריי דואר אלקטרוני תרומה - 1. Swipe up for all apps\n2. Long press anywhere for settings + 1. החלקה כלפי מעלה תפתח את הרשימה של כל היישומים\n2. לפתיחת הגדרות מסך הבית יש ללחוץ לחיצה ארוכה מכל מקום על גבי המסך. יישומים במסך הבית רקע חדש בכל יום ימין שמאל מרכז - App alignment + יישור היישומים יישום לפתיחה בהחלקה שמאלה יישום לפתיחה בהחלקה ימינה 0 @@ -50,19 +50,19 @@ בהירה Our About page on the bottom has answers to all your questions. Don\'t forget. :) \n\nThank you. - Hi, you won\'t see this message again. - \n\nIf you like Olauncher, could you please give us a 5-star rating? It helps us improve our ranking and makes us very happy. Thank you! - Hi, we have a big request! We want to hit a million downloads before 2023 ends, and we need your help. - \n\nCould you share Olauncher with your friends, please? That would be really helpful. Thank you! - Hi, keyboard is the fastest way to find and launch apps in Olauncher. Can we request you to keep this On for a few more days and then decide? + היי, לא נציג לך הודעה זו בשנית. + \n\nאם כיף לך להשתמש ב־Olauncher, האם נוכל בבקשה לקבל ממך דירוג של 5 כוכבים? זה יעזור לנו להתקדם בדירוג ויעשה לנו טוב על הלב. תודה מראש! + שלום, יש לנו משימה ענקית! אנחנו רוצים להגיע למיליון הורדות לפני סוף שנת 2023, ואנו זקוקים לעזרתך. + \n\nהיית רוצה אולי לספר לחברים שלך על Olauncher? זה יכול לסייע לנו מאוד. תודה רבה! + היי, יותר מהיר למצוא ולפתוח יישומים ב־Olauncher בעזרת ההקלדה. אולי בכל זאת היית רוצה להשאיר את ההגדרה הזאת ולתת לה עוד הזדמנות? \n\nThe choice is always yours. The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. Support Olauncher for free by using our Amazon affiliate link. Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! - Open link - Copy - Close - Not now + פתיחת קישור + העתקה + סגירה + לא כעת Olauncher public roadmap אינסטגרם המפתח @@ -80,24 +80,24 @@ התראות Please turn on or off Olauncher\'s accessibility service in your device\'s settings to enable or disable this feature. \n\nPlease note that this service is only used to let you turn off your device\'s screen using the double tap gesture. Our accessibility service does not collect or share any data. - Accept + הסכמה הרשאה לחיצה כפולה לנעילת המסך - Enable - Disable - Not working? - Info + הפעלה + השבתהe + לא עובד? + מידע מחיקה גודל הטקסט Enabled Disabled Please turn on double tap to lock Olauncher failed to lock device.\nPlease check your app settings. - Long press to select app - Unable to open app info - Copied - System app, cannot delete - Type a new app name first + לבחירת יישום יש ללחוץ לחיצה ארוכה + אין אפשרות לפתוח את המידע על היישום + הועתק ללוח + יישום מערכת, ולכן אי אפשר למחוק אותו + נא לתת שם חדש ליישום תחילה היישום לא נמצא אין אפשרות להפעיל את היישום חיפוש יישום מסך בית או משגר From cb029e02802918a9535d4ec0b7f89dea47111da9 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Mon, 23 Oct 2023 12:05:02 +0300 Subject: [PATCH 008/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 39e6328bd..470dc8cd4 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -48,7 +48,7 @@ מערכת כהה בהירה - Our About page on the bottom has answers to all your questions. Don\'t forget. :) + למטה מופיע קישור לעמוד ה"מידע כללי", ובו אפשר למצוא תשובות לכל השאלות. לא לשכוח :) \n\nThank you. היי, לא נציג לך הודעה זו בשנית. \n\nאם כיף לך להשתמש ב־Olauncher, האם נוכל בבקשה לקבל ממך דירוג של 5 כוכבים? זה יעזור לנו להתקדם בדירוג ויעשה לנו טוב על הלב. תודה מראש! @@ -57,8 +57,8 @@ היי, יותר מהיר למצוא ולפתוח יישומים ב־Olauncher בעזרת ההקלדה. אולי בכל זאת היית רוצה להשאיר את ההגדרה הזאת ולתת לה עוד הזדמנות? \n\nThe choice is always yours. The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. - Support Olauncher for free by using our Amazon affiliate link. - Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! + אפשר לתמוך ב־Olauncher מבלי לשלם שקל, בעזרת שימוש בקישור ה־Amazon affiliate שלנו. + על כל רכישה שתבוצע דרך הקישור שלנו אנחנו נקבל עמלה קטנה. נשמח אם תשמרו את הקישור ותשתמשו בו בקניות מהאינטרנט.\nתודה רבה! פתיחת קישור העתקה סגירה @@ -89,8 +89,8 @@ מידע מחיקה גודל הטקסט - Enabled - Disabled + מופעל + מושבת Please turn on double tap to lock Olauncher failed to lock device.\nPlease check your app settings. לבחירת יישום יש ללחוץ לחיצה ארוכה From 2ede966eb52f3c9a392629f91e6852aa4bac0306 Mon Sep 17 00:00:00 2001 From: "Omer I.S" <137101815+omeritzics@users.noreply.github.com> Date: Mon, 23 Oct 2023 12:10:32 +0300 Subject: [PATCH 009/150] Update strings.xml --- app/src/main/res/values-he/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 470dc8cd4..38f9a20bc 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -2,7 +2,7 @@ יישום הגדרה בתור משגר ברירת המחדל צבע הטקסט - לחיצה כפולה לנעילת המסך + נעילת המסך בהקשה כפולה יישום Olauncher ישתמש בהרשאה של נעילת המסך באופן מתון. יישום Olauncher אינו אוסף או משתף נתונים כלל. מידע כללי כבוי @@ -56,7 +56,7 @@ \n\nהיית רוצה אולי לספר לחברים שלך על Olauncher? זה יכול לסייע לנו מאוד. תודה רבה! היי, יותר מהיר למצוא ולפתוח יישומים ב־Olauncher בעזרת ההקלדה. אולי בכל זאת היית רוצה להשאיר את ההגדרה הזאת ולתת לה עוד הזדמנות? \n\nThe choice is always yours. - The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. + הרשאת הנגישות נחוצה להפעלת הנעילה בהקשה כפולה. כל הנתונים שייאספו על ידי Olauncher דרך השירות הזה לא יועברו הלאה ממכשירך. אפשר לתמוך ב־Olauncher מבלי לשלם שקל, בעזרת שימוש בקישור ה־Amazon affiliate שלנו. על כל רכישה שתבוצע דרך הקישור שלנו אנחנו נקבל עמלה קטנה. נשמח אם תשמרו את הקישור ותשתמשו בו בקניות מהאינטרנט.\nתודה רבה! פתיחת קישור @@ -71,10 +71,10 @@ תאריך בלבד הצגה למטה: מופעל הצגה למטה: כבוי - Please set Olauncher as your default launcher first + ראשית, נא להגדיר את Olauncher בתור ברירת המחדל למסך בית. Affiliate Tip: Start typing for app RENAME option - Note: Tap on \'Olauncher\' at the top of this Settings page to find your hidden apps.\n\nMore details available in our About page below. + הערה: בשביל להגיע ליישומים המוסתרים, יש ללחוץ על הכיתוב \'Olauncher\' שנמצא בראש עמוד ההגדרות.\n\nפרטים נוספים אפשר למצוא בעמוד ה"מידע כללי" שלנו למטה. Swipe down for חיפוש התראות From ba86c21a2d7460688f587c5217154249c3b89d79 Mon Sep 17 00:00:00 2001 From: George Sanger Date: Thu, 22 Feb 2024 23:21:14 +0000 Subject: [PATCH 010/150] Added updating filter on appList observer --- app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 24743c585..7bad9223b 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -175,7 +175,10 @@ class AppDrawerFragment : Fragment() { } else viewModel.appList.observe(viewLifecycleOwner) { - it?.let { adapter.setAppList(it.toMutableList()) } + it?.let { + adapter.setAppList(it.toMutableList()) + adapter.filter.filter(binding.search.query) + } } } From 30834c7dc2e92e16cb1c7afe77a82ce073992f2b Mon Sep 17 00:00:00 2001 From: George Sanger Date: Fri, 23 Feb 2024 00:05:35 +0000 Subject: [PATCH 011/150] Remove '!' from web search shortcut. --- app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 7bad9223b..9c0087358 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -75,7 +75,9 @@ class AppDrawerFragment : Fragment() { binding.search.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { if (query?.startsWith("!") == true) - requireContext().openUrl(Constants.URL_DUCK_SEARCH + query.replace(" ", "%20")) + requireContext().openUrl(Constants.URL_DUCK_SEARCH + query + .removePrefix("!") + .replace(" ", "%20")) else if (adapter.itemCount == 0 && requireContext().searchOnPlayStore(query?.trim()).not()) requireContext().openSearch(query?.trim()) else From d9b29259106b3c68738d7f47bf0238593d26bcc9 Mon Sep 17 00:00:00 2001 From: George Sanger Date: Mon, 29 Apr 2024 13:34:38 +0100 Subject: [PATCH 012/150] Revert "Remove '!' from web search shortcut." This reverts commit 30834c7dc2e92e16cb1c7afe77a82ce073992f2b. --- app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 9c0087358..7bad9223b 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -75,9 +75,7 @@ class AppDrawerFragment : Fragment() { binding.search.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { if (query?.startsWith("!") == true) - requireContext().openUrl(Constants.URL_DUCK_SEARCH + query - .removePrefix("!") - .replace(" ", "%20")) + requireContext().openUrl(Constants.URL_DUCK_SEARCH + query.replace(" ", "%20")) else if (adapter.itemCount == 0 && requireContext().searchOnPlayStore(query?.trim()).not()) requireContext().openSearch(query?.trim()) else From f40dfeaad24d45914aecda148ad835ea682a03ea Mon Sep 17 00:00:00 2001 From: Tamas Balog Date: Mon, 15 Jul 2024 07:47:37 +0200 Subject: [PATCH 013/150] Apply various fixes in the Hungarian translation --- app/src/main/res/values-hu/strings.xml | 28 +++++++++++++++----------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index bc227121e..aa2e2fa90 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,6 +1,6 @@ Alkalmazás - Beállítás alapértelmezett indítóként + Beállítás alapért. indítóként Beállítás alapértelmezett indítóként Szövegszín Dupla koppintás a képernyő lezárásához @@ -37,10 +37,10 @@ 6 7 8 - Tipp: Kezdje el begépelni egy alkalmazás nevét az automatikus indításához + Tipp: Kezdje el begépelni egy alkalmazás nevét annak automatikus indításához Rendben Szuper! - Billentyűzet automatikus megjelenítlse + Billentyűzet auto. megjelenítése Elrejtés Állapotsor megjelenítése fent Átnevezés @@ -55,13 +55,15 @@ \n\nKöszönjük! Üdv, ezt az üzenetet nem fogja újra látni. \n\nHa tetszik az Olauncher, kérjük, adjon nekünk 5 csillagos értékelést! Ez segít javítani a helyezésünket, és nagyon boldoggá tesz minket. Köszönjük! - Sziasztok, segítségre van szükségünk! Tavaly átléptük az egymillió letöltést. Idén egy millióval többet szeretnénk elérni, de egyedül nem tudjuk megtenni. - \n\nLenne szíves megosztani az Olaunchert a barátaival, kérem? Köszönöm és további szép napot! - Üdv, a billentyűzet a leggyorsabb módja a alkalmazások megtalálásához és elindításához az Olauncherben. Kérhetjük, hogy hagyja bekapcsolva még néhány napig, és utána döntsön. + + + Az Ön havi emlékeztetője - használja Ön a telefonját, és ne a telefonja Önt! Csak így tovább! Nagyszerűen csinálja! + \n\nHa van egy kis ideje, kérjük, ossza meg másokkal is az Olauncher-t. Az Olauncher-nek szüksége van emberekre. De ami még fontosabb, az embereknek szüksége van az Olauncher-re.. + Üdv, a billentyűzet a leggyorsabb módja az alkalmazások megtalálásához és elindításához az Olauncherben. Megkérhetjük, hogy hagyja bekapcsolva még néhány napig, és utána döntsön? \n\nA választás mindig az Öné. Ha időkorlátokat szeretne beállítani bizonyos alkalmazásokhoz, az Android Digital Wellbeing funkciója segíthet ebben. \n\nKeresse meg a Digitális jólét elemet a telefon beállításai között, és engedélyezze. - A dupla koppintás zárolásához szükséges a hozzáférhetőségi engedély. Az Olauncher által ezen a szolgáltatáson keresztül megszerzett adatok nem hagyják el a készüléket. + A hozzáférhetőségi engedély szükséges a dupla koppintás általi zároláshoz. Az Olauncher által ezen a szolgáltatáson keresztül megszerzett adatok nem hagyják el a készüléket. Támogasson minket ingyenesen az Amazon affiliate linkünk használatával. Minden alkalommal, amikor vásárol valamit a linkünket használva, egy kis jutalékot kapunk. Kérjük, mentse el a linket, és használja fel, amikor csak online vásárol. \n\nKöszönjük! @@ -77,7 +79,7 @@ Csak dátum Alsó: Be Alsó: Ki - Kérjük állítsa be az Olauncher alkalmazást alapértelmezett indítóként + Kérjük, állítsa be az Olauncher-t alapértelmezett indítóként Affiliate Tipp: Kezdjen el gépelni az alkalmazás ÁTNEVEZÉSE opcióhoz Megjegyzés: A rejtett alkalmazások megtalálásához érintse meg az "Olauncher" elemet ennek a beállítás oldalnak a tetején. @@ -119,11 +121,13 @@ Rejtett alkalmazások Mutasd! Rejtsd el! - Ön használja a telefonját, vagy a telefona használja Önt? + Ön használja a telefonját, vagy a telefonja használja Önt? Az Olauncher-ről - Tudj meg többet - Tudtad? + Digitális jóllét + Tudjon meg többet + Tudta? Hagyjon véleményt Az Olauncher teljesen ingyenes és mindig is ingyenes lesz. Nincsenek hirdetései. Nem gyűjt adatokat. A legfontosabb, hogy segít csökkenteni a képernyő előtt töltött időt és egészségesebb digitális életet élni. - \n\nÚgy gondoljuk, hogy a minimális indítóra váltás kiváló döntés. Bár nyilvánvalóan elfogultak vagyunk, reméljük, hogy élvezni fogja az élményt. Nyugodtan oszd meg velünk gondolataidat! + \n\nÚgy gondoljuk, hogy a minimális indítóra váltás kiváló döntés. Bár nyilvánvalóan elfogultak vagyunk, reméljük, hogy élvezni fogja az élményt. Nyugodtan ossza meg velünk gondolatait! + Az igazítás megváltozott ✅ \ No newline at end of file From d974234ec04f4b5c4219c9154d43b6dca12d83c4 Mon Sep 17 00:00:00 2001 From: J-cart Date: Wed, 17 Jul 2024 12:46:13 +0100 Subject: [PATCH 014/150] (feat) app drawer character list --- .../main/java/app/olauncher/MainViewModel.kt | 18 +++ .../olauncher/data/DrawerCharacterModel.kt | 7 + .../app/olauncher/helper/AppFilterHelper.kt | 7 + .../java/app/olauncher/ui/AppDrawerAdapter.kt | 6 +- .../app/olauncher/ui/AppDrawerFragment.kt | 127 ++++++++++++++++-- .../olauncher/ui/DrawerCharacterAdapter.kt | 69 ++++++++++ .../res/layout-land/fragment_app_drawer.xml | 17 +++ app/src/main/res/layout/drawer_alphabet.xml | 24 ++++ .../main/res/layout/fragment_app_drawer.xml | 16 +++ 9 files changed, 282 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt create mode 100644 app/src/main/java/app/olauncher/helper/AppFilterHelper.kt create mode 100644 app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt create mode 100644 app/src/main/res/layout/drawer_alphabet.xml diff --git a/app/src/main/java/app/olauncher/MainViewModel.kt b/app/src/main/java/app/olauncher/MainViewModel.kt index a06a35e5d..4c5fafe81 100644 --- a/app/src/main/java/app/olauncher/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/MainViewModel.kt @@ -16,6 +16,7 @@ import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import app.olauncher.data.AppModel import app.olauncher.data.Constants +import app.olauncher.data.DrawerCharacterModel import app.olauncher.data.Prefs import app.olauncher.helper.SingleLiveEvent import app.olauncher.helper.WallpaperWorker @@ -34,6 +35,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val toggleDateTime = MutableLiveData() val updateSwipeApps = MutableLiveData() val appList = MutableLiveData?>() + val drawerCharacterList = MutableLiveData>() val hiddenApps = MutableLiveData?>() val isOlauncherDefault = MutableLiveData() val launcherResetFailed = MutableLiveData() @@ -243,4 +245,20 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { prefs.homeAlignment = gravity homeAppAlignment.value = prefs.homeAlignment } + + fun updateDrawerCharacterList(characters:List){ + drawerCharacterList.value = characters + } + + fun updateRangeDrawerCharacterList(char:String){ + val charRegex = Regex("[0-9\\\\$&+,:;=?@#|/'<>.^*()%!-]") + val characters = drawerCharacterList.value ?: emptyList() + if (characters.isNotEmpty()){ + val checkAndReplaceIfNum = if (charRegex.matches(char)) "#" else char + val updatedCharacters = + characters.map { DrawerCharacterModel(it.character, it.character.equals(checkAndReplaceIfNum,true)) } + + drawerCharacterList.value = updatedCharacters + } + } } \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt b/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt new file mode 100644 index 000000000..fa95700f6 --- /dev/null +++ b/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt @@ -0,0 +1,7 @@ +package app.olauncher.data + +data class DrawerCharacterModel( + val character: String = "", + val inRange: Boolean = false, + +) \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/helper/AppFilterHelper.kt b/app/src/main/java/app/olauncher/helper/AppFilterHelper.kt new file mode 100644 index 000000000..271e96e54 --- /dev/null +++ b/app/src/main/java/app/olauncher/helper/AppFilterHelper.kt @@ -0,0 +1,7 @@ +package app.olauncher.helper + +import app.olauncher.data.AppModel + +interface AppFilterHelper { + fun onAppFiltered(items:List) +} \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt index 55dd97367..47d7352a9 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt @@ -18,6 +18,7 @@ import app.olauncher.R import app.olauncher.data.AppModel import app.olauncher.data.Constants import app.olauncher.databinding.AdapterAppDrawerBinding +import app.olauncher.helper.AppFilterHelper import app.olauncher.helper.hideKeyboard import app.olauncher.helper.isSystemApp import app.olauncher.helper.showKeyboard @@ -25,6 +26,7 @@ import java.text.Normalizer class AppDrawerAdapter( private var flag: Int, + private val appFilterHelper: AppFilterHelper, private val appLabelGravity: Int, private val appClickListener: (AppModel) -> Unit, private val appInfoListener: (AppModel) -> Unit, @@ -97,7 +99,9 @@ class AppDrawerAdapter( @Suppress("UNCHECKED_CAST") override fun publishResults(constraint: CharSequence?, results: FilterResults?) { results?.values?.let { - appFilteredList = it as MutableList + val items = it as MutableList + appFilteredList = items + appFilterHelper.onAppFiltered(items.toList()) submitList(appFilteredList) { autoLaunch() } diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index b6a766a63..07aee269c 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -1,12 +1,15 @@ package app.olauncher.ui import android.os.Bundle +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils +import android.widget.FrameLayout import android.widget.TextView import androidx.appcompat.widget.SearchView +import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -15,9 +18,12 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.Recycler import app.olauncher.MainViewModel import app.olauncher.R +import app.olauncher.data.AppModel import app.olauncher.data.Constants +import app.olauncher.data.DrawerCharacterModel import app.olauncher.data.Prefs import app.olauncher.databinding.FragmentAppDrawerBinding +import app.olauncher.helper.AppFilterHelper import app.olauncher.helper.hideKeyboard import app.olauncher.helper.isEinkDisplay import app.olauncher.helper.isSystemApp @@ -34,6 +40,8 @@ class AppDrawerFragment : Fragment() { private lateinit var prefs: Prefs private lateinit var adapter: AppDrawerAdapter + private lateinit var linearLayoutManager: LinearLayoutManager + private lateinit var drawerCharacterAdapter: DrawerCharacterAdapter private var flag = Constants.FLAG_LAUNCH_APP private var canRename = false @@ -42,7 +50,11 @@ class AppDrawerFragment : Fragment() { private var _binding: FragmentAppDrawerBinding? = null private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { _binding = FragmentAppDrawerBinding.inflate(inflater, container, false) return binding.root } @@ -61,7 +73,26 @@ class AppDrawerFragment : Fragment() { initClickListeners() } + private fun setAppDrawerMargins(center: Boolean) { + val centerValue = if (center) 5 else 48 + + val rv = binding.recyclerView + val params = rv.layoutParams as FrameLayout.LayoutParams + val scale = resources.displayMetrics.density + val marginTop = (180 * scale).toInt() + val marginBottom = (24 * scale).toInt() + val marginRight = (centerValue * scale).toInt() + params.setMargins(0, marginTop, marginRight, marginBottom) + rv.layoutParams = params + } + + private fun initViews() { + binding.alphabetRecyclerView.isVisible = prefs.autoShowKeyboard.not() + + setAppDrawerMargins(prefs.appLabelAlignment == Gravity.CENTER) + + if (flag == Constants.FLAG_HIDDEN_APPS) binding.search.queryHint = getString(R.string.hidden_apps) else if (flag in Constants.FLAG_SET_HOME_APP_1..Constants.FLAG_SET_CALENDAR_APP) @@ -101,8 +132,17 @@ class AppDrawerFragment : Fragment() { } private fun initAdapter() { + + val appFilterHelper = object : AppFilterHelper { + override fun onAppFiltered(items: List) { + submitDrawerCharacters(items) + } + } + drawerCharacterAdapter = DrawerCharacterAdapter() + adapter = AppDrawerAdapter( flag, + appFilterHelper, prefs.appLabelAlignment, appClickListener = { if (it.appPackage.isEmpty()) @@ -158,8 +198,12 @@ class AppDrawerFragment : Fragment() { } ) - val linearLayoutManager: LinearLayoutManager = object : LinearLayoutManager(requireContext()) { - override fun scrollVerticallyBy(dx: Int, recycler: Recycler, state: RecyclerView.State): Int { + linearLayoutManager = object : LinearLayoutManager(requireContext()) { + override fun scrollVerticallyBy( + dx: Int, + recycler: Recycler, + state: RecyclerView.State + ): Int { val scrollRange = super.scrollVerticallyBy(dx, recycler, state) val overScroll = dx - scrollRange if (overScroll < -10 && binding.recyclerView.scrollState == RecyclerView.SCROLL_STATE_DRAGGING) @@ -174,6 +218,7 @@ class AppDrawerFragment : Fragment() { if (requireContext().isEinkDisplay().not()) binding.recyclerView.layoutAnimation = AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.layout_anim_from_bottom) + binding.alphabetRecyclerView.adapter = drawerCharacterAdapter } private fun initObservers() { @@ -183,17 +228,26 @@ class AppDrawerFragment : Fragment() { binding.appDrawerTip.isSelected = true } } - if (flag == Constants.FLAG_HIDDEN_APPS) + if (flag == Constants.FLAG_HIDDEN_APPS) { viewModel.hiddenApps.observe(viewLifecycleOwner) { - it?.let { adapter.setAppList(it.toMutableList()) } - } - else - viewModel.appList.observe(viewLifecycleOwner) { it?.let { adapter.setAppList(it.toMutableList()) + submitDrawerCharacters(it) + } + } + } else { + viewModel.appList.observe(viewLifecycleOwner) { + it?.let { appModels -> + adapter.setAppList(appModels.toMutableList()) adapter.filter.filter(binding.search.query) + submitDrawerCharacters(appModels) } } + } + + viewModel.drawerCharacterList.observe(viewLifecycleOwner) { characters -> + drawerCharacterAdapter.submitList(characters) + } } private fun initClickListeners() { @@ -250,6 +304,14 @@ class AppDrawerFragment : Fragment() { } } } + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + val visiblePosition = linearLayoutManager.findFirstVisibleItemPosition() + val position = if (visiblePosition >= 0) visiblePosition else 0 + val item = adapter.currentList[position] + viewModel.updateRangeDrawerCharacterList(item.appLabel.first().toString()) + } } } @@ -259,6 +321,55 @@ class AppDrawerFragment : Fragment() { viewModel.checkForMessages.call() } + private fun submitDrawerCharacters(drawerItems: List) { + if (drawerItems.isEmpty()) { + viewModel.updateDrawerCharacterList(emptyList()) + return + } + + + val charRegex = Regex("[0-9\\\\$&+,:;=?@#|/'<>.^*()%!-]") + val emojiRegex = Regex("\\p{So}+") + val emojiRegex2 = Regex("[\uD800-\uDBFF\uDC00-\uDFFF]+") + + val firstVisibleItemPosition = + linearLayoutManager.findFirstCompletelyVisibleItemPosition() + + val position = + if (firstVisibleItemPosition >= 0) firstVisibleItemPosition else 0 + val firstVisibleItem = + drawerItems[position] + + + val drawerCharacters = + drawerItems.filter { it.appLabel.isNotEmpty() }.map { char -> + val firstLetter = char.appLabel.first().toString() + val regexMatch = charRegex.matches(firstLetter) || emojiRegex.matches( + char.appLabel.first().toString() + ) || emojiRegex2.matches(char.appLabel.first().toString()) + + if (regexMatch) "#" else firstLetter.uppercase() + }.toSet() + .map { str -> + DrawerCharacterModel(str, str.equals(firstVisibleItem.appLabel.first().toString(),true)) + } + + viewModel.updateDrawerCharacterList(drawerCharacters) + + drawerCharacterAdapter.adapterClick { char -> + + val matchIndex = if (char == "#") { + 0 + } else { + val match = drawerItems.find { char.equals(it.appLabel.first().toString(),true) } + drawerItems.indexOf(match) + } + linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) + + } + } + + override fun onStart() { super.onStart() binding.search.showKeyboard(prefs.autoShowKeyboard) diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt new file mode 100644 index 000000000..d5e8f338c --- /dev/null +++ b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt @@ -0,0 +1,69 @@ +package app.olauncher.ui + +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import app.olauncher.R +import app.olauncher.data.DrawerCharacterModel +import app.olauncher.databinding.DrawerAlphabetBinding + +class DrawerCharacterAdapter : + ListAdapter(diffObject) { + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + private val binding = DrawerAlphabetBinding.bind(view) + fun bind(character: DrawerCharacterModel) { + + if (character.inRange) { + binding.character.setTextColor(itemView.context.getColor(R.color.design_default_color_secondary)) + }else{ + val typedValue = TypedValue() + itemView.context.theme.resolveAttribute(R.attr.primaryColor, typedValue, true) + binding.character.setTextColor(itemView.context.getColor(typedValue.resourceId)) + } + + binding.character.text = character.character + binding.root.setOnClickListener { + listener?.let { it(character.character) } + } + + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = + LayoutInflater.from(parent.context).inflate(R.layout.drawer_alphabet, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val pos = getItem(position) + holder.bind(pos) + } + + companion object { + val diffObject = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: DrawerCharacterModel, + newItem: DrawerCharacterModel + ): Boolean { + return oldItem.character == newItem.character + } + + override fun areContentsTheSame( + oldItem: DrawerCharacterModel, + newItem: DrawerCharacterModel + ): Boolean { + return oldItem.hashCode() == newItem.hashCode() + } + } + } + + private var listener: ((String) -> Unit)? = null + fun adapterClick(listener: (String) -> Unit) { + this.listener = listener + } +} \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_app_drawer.xml b/app/src/main/res/layout-land/fragment_app_drawer.xml index 4749e24b4..dd8de35fd 100644 --- a/app/src/main/res/layout-land/fragment_app_drawer.xml +++ b/app/src/main/res/layout-land/fragment_app_drawer.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools" android:animateLayoutChanges="true" android:background="?attr/primaryShadeDarkColor"> @@ -74,4 +75,20 @@ android:requiresFadingEdge="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/drawer_alphabet.xml b/app/src/main/res/layout/drawer_alphabet.xml new file mode 100644 index 000000000..147753ec6 --- /dev/null +++ b/app/src/main/res/layout/drawer_alphabet.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index 81e4422cb..b80909ee6 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools" android:animateLayoutChanges="true" android:background="?attr/primaryShadeDarkColor"> @@ -72,4 +73,19 @@ android:fadingEdgeLength="24dp" android:requiresFadingEdge="vertical" /> + + \ No newline at end of file From da5e76e3c696ce56e30d0749ab6d0149899e6981 Mon Sep 17 00:00:00 2001 From: J-cart Date: Thu, 18 Jul 2024 10:49:38 +0100 Subject: [PATCH 015/150] go to app when scrolling through character list... --- .../app/olauncher/ui/AppDrawerFragment.kt | 26 ++++++---- .../olauncher/ui/DrawerCharacterAdapter.kt | 51 ++++++++++++++----- .../res/layout/drawer_alphabet_pop_up.xml | 26 ++++++++++ 3 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 app/src/main/res/layout/drawer_alphabet_pop_up.xml diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 07aee269c..532091298 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -211,6 +211,21 @@ class AppDrawerFragment : Fragment() { return scrollRange } } + binding.alphabetRecyclerView.addOnItemTouchListener( + DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char -> + viewModel.updateRangeDrawerCharacterList(char) + val matchIndex = if (char == "#") { + 0 + } else { + val match = adapter.currentList.find { + char.equals(it.appLabel.first().toString(), true) + } + adapter.currentList.indexOf(match) + } + linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) + }) + + binding.recyclerView.layoutManager = linearLayoutManager binding.recyclerView.adapter = adapter binding.recyclerView.addOnScrollListener(getRecyclerViewOnScrollListener()) @@ -356,17 +371,6 @@ class AppDrawerFragment : Fragment() { viewModel.updateDrawerCharacterList(drawerCharacters) - drawerCharacterAdapter.adapterClick { char -> - - val matchIndex = if (char == "#") { - 0 - } else { - val match = drawerItems.find { char.equals(it.appLabel.first().toString(),true) } - drawerItems.indexOf(match) - } - linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) - - } } diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt index d5e8f338c..124efc398 100644 --- a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt @@ -2,33 +2,33 @@ package app.olauncher.ui import android.util.TypedValue import android.view.LayoutInflater +import android.view.MotionEvent import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener import app.olauncher.R import app.olauncher.data.DrawerCharacterModel import app.olauncher.databinding.DrawerAlphabetBinding + class DrawerCharacterAdapter : ListAdapter(diffObject) { inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { private val binding = DrawerAlphabetBinding.bind(view) fun bind(character: DrawerCharacterModel) { - if (character.inRange) { + if (character.inRange) { binding.character.setTextColor(itemView.context.getColor(R.color.design_default_color_secondary)) - }else{ - val typedValue = TypedValue() - itemView.context.theme.resolveAttribute(R.attr.primaryColor, typedValue, true) - binding.character.setTextColor(itemView.context.getColor(typedValue.resourceId)) + } else { + val typedValue = TypedValue() + itemView.context.theme.resolveAttribute(R.attr.primaryColor, typedValue, true) + binding.character.setTextColor(itemView.context.getColor(typedValue.resourceId)) } binding.character.text = character.character - binding.root.setOnClickListener { - listener?.let { it(character.character) } - } } } @@ -62,8 +62,35 @@ class DrawerCharacterAdapter : } } - private var listener: ((String) -> Unit)? = null - fun adapterClick(listener: (String) -> Unit) { - this.listener = listener + + class CharacterTouchListener( + private val adapter: DrawerCharacterAdapter, + private val clickListener: ((String) -> Unit)? + ) : + OnItemTouchListener { + + override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { + val child = rv.findChildViewUnder(e.x, e.y) + if (child != null) { + val itemPosition = rv.getChildAdapterPosition(child) + clickListener?.let { it(adapter.currentList[itemPosition].character) } + } + + return true + } + + override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) { + val child = rv.findChildViewUnder(e.x, e.y) + if (child != null) { + val itemPosition = rv.getChildAdapterPosition(child) + clickListener?.let { it(adapter.currentList[itemPosition].character) } + } + } + + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { + } + } -} \ No newline at end of file + +} + diff --git a/app/src/main/res/layout/drawer_alphabet_pop_up.xml b/app/src/main/res/layout/drawer_alphabet_pop_up.xml new file mode 100644 index 000000000..df4f4522a --- /dev/null +++ b/app/src/main/res/layout/drawer_alphabet_pop_up.xml @@ -0,0 +1,26 @@ + + + + + + \ No newline at end of file From 2c78578639fb058be0ba862c9fb052f22f7d66ee Mon Sep 17 00:00:00 2001 From: J-cart Date: Wed, 24 Jul 2024 20:34:35 +0100 Subject: [PATCH 016/150] scroll position indicator ... --- .../main/java/app/olauncher/MainViewModel.kt | 29 +++++++++++++++-- .../main/java/app/olauncher/data/Constants.kt | 5 +++ .../olauncher/data/DrawerCharacterModel.kt | 1 + .../app/olauncher/ui/AppDrawerFragment.kt | 28 +++++++++++------ .../olauncher/ui/DrawerCharacterAdapter.kt | 31 +++++++++++++++++-- app/src/main/res/layout/drawer_alphabet.xml | 27 +++++++++++++--- .../res/layout/drawer_alphabet_pop_up.xml | 26 ---------------- 7 files changed, 102 insertions(+), 45 deletions(-) delete mode 100644 app/src/main/res/layout/drawer_alphabet_pop_up.xml diff --git a/app/src/main/java/app/olauncher/MainViewModel.kt b/app/src/main/java/app/olauncher/MainViewModel.kt index 4c5fafe81..9b56772f9 100644 --- a/app/src/main/java/app/olauncher/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/MainViewModel.kt @@ -16,6 +16,7 @@ import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import app.olauncher.data.AppModel import app.olauncher.data.Constants +import app.olauncher.data.Constants.CharacterIndicator import app.olauncher.data.DrawerCharacterModel import app.olauncher.data.Prefs import app.olauncher.helper.SingleLiveEvent @@ -250,15 +251,39 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { drawerCharacterList.value = characters } - fun updateRangeDrawerCharacterList(char:String){ + fun updateRangeDrawerCharacterList(char:String,mode:Int){ val charRegex = Regex("[0-9\\\\$&+,:;=?@#|/'<>.^*()%!-]") val characters = drawerCharacterList.value ?: emptyList() if (characters.isNotEmpty()){ val checkAndReplaceIfNum = if (charRegex.matches(char)) "#" else char + val updatedCharacters = - characters.map { DrawerCharacterModel(it.character, it.character.equals(checkAndReplaceIfNum,true)) } + characters.map { + val showIndicator = + if (mode == CharacterIndicator.SHOW) it.character.equals(checkAndReplaceIfNum, true) else false + DrawerCharacterModel( + it.character, + it.character.equals(checkAndReplaceIfNum, true), + showIndicator + ) + } drawerCharacterList.value = updatedCharacters } } + + fun updateRangeIndicator(){ + val currentList = (drawerCharacterList.value?.toMutableList() ?: mutableListOf()) + + if (currentList.isNotEmpty()){ + val currentRangeChar = currentList.find { it.inRange } + currentRangeChar?.let { + val index = currentList.indexOf(it) + val newValue = it.copy(showIndicator = false) + currentList[index] = newValue + drawerCharacterList.value = currentList + } + + } + } } \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index 10509a98d..30aae8f25 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -52,6 +52,11 @@ object Constants { const val SEVEN = 1.3f } + object CharacterIndicator{ + const val SHOW = 102 + const val HIDE = 101 + } + const val WALL_TYPE_LIGHT = "light" const val WALL_TYPE_DARK = "dark" diff --git a/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt b/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt index fa95700f6..0bc4ae308 100644 --- a/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt +++ b/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt @@ -3,5 +3,6 @@ package app.olauncher.data data class DrawerCharacterModel( val character: String = "", val inRange: Boolean = false, + val showIndicator: Boolean = false, ) \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 532091298..b01e3954d 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -20,6 +20,7 @@ import app.olauncher.MainViewModel import app.olauncher.R import app.olauncher.data.AppModel import app.olauncher.data.Constants +import app.olauncher.data.Constants.CharacterIndicator import app.olauncher.data.DrawerCharacterModel import app.olauncher.data.Prefs import app.olauncher.databinding.FragmentAppDrawerBinding @@ -212,17 +213,24 @@ class AppDrawerFragment : Fragment() { } } binding.alphabetRecyclerView.addOnItemTouchListener( - DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char -> - viewModel.updateRangeDrawerCharacterList(char) - val matchIndex = if (char == "#") { - 0 - } else { - val match = adapter.currentList.find { - char.equals(it.appLabel.first().toString(), true) + DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char,mode -> + if (mode != CharacterIndicator.HIDE) { + viewModel.updateRangeDrawerCharacterList(char,mode) + val matchIndex = if (char == "#") { + 0 + } else { + val match = adapter.currentList.find { + char.equals(it.appLabel.first().toString(), true) + } + adapter.currentList.indexOf(match) } - adapter.currentList.indexOf(match) + linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) + } + + if (mode == CharacterIndicator.HIDE) { + viewModel.updateRangeIndicator() } - linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) + }) @@ -325,7 +333,7 @@ class AppDrawerFragment : Fragment() { val visiblePosition = linearLayoutManager.findFirstVisibleItemPosition() val position = if (visiblePosition >= 0) visiblePosition else 0 val item = adapter.currentList[position] - viewModel.updateRangeDrawerCharacterList(item.appLabel.first().toString()) + viewModel.updateRangeDrawerCharacterList(item.appLabel.first().toString(),101) } } } diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt index 124efc398..4c0bf0b23 100644 --- a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt @@ -5,11 +5,14 @@ import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener import app.olauncher.R +import app.olauncher.data.Constants +import app.olauncher.data.Constants.CharacterIndicator import app.olauncher.data.DrawerCharacterModel import app.olauncher.databinding.DrawerAlphabetBinding @@ -28,7 +31,14 @@ class DrawerCharacterAdapter : binding.character.setTextColor(itemView.context.getColor(typedValue.resourceId)) } + if (character.showIndicator) { + binding.characterIndicator.visibility = View.VISIBLE + } else { + binding.characterIndicator.visibility = View.INVISIBLE + } + binding.character.text = character.character + binding.characterIndicator.text = character.character } } @@ -65,17 +75,26 @@ class DrawerCharacterAdapter : class CharacterTouchListener( private val adapter: DrawerCharacterAdapter, - private val clickListener: ((String) -> Unit)? + private val clickListener: ((String,Int) -> Unit)? ) : OnItemTouchListener { override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { val child = rv.findChildViewUnder(e.x, e.y) + if (child != null) { val itemPosition = rv.getChildAdapterPosition(child) - clickListener?.let { it(adapter.currentList[itemPosition].character) } + clickListener?.let { it(adapter.currentList[itemPosition].character, + CharacterIndicator.SHOW) } + if (e.action == MotionEvent.ACTION_UP){ + child.postDelayed({clickListener?.let { it("", CharacterIndicator.HIDE) }},1000L) + + } } + + + return true } @@ -83,8 +102,14 @@ class DrawerCharacterAdapter : val child = rv.findChildViewUnder(e.x, e.y) if (child != null) { val itemPosition = rv.getChildAdapterPosition(child) - clickListener?.let { it(adapter.currentList[itemPosition].character) } + clickListener?.let { it(adapter.currentList[itemPosition].character,102) } + if (e.action == MotionEvent.ACTION_UP){ +// clickListener?.let { it("",101) } + child.postDelayed({clickListener?.let { it("", CharacterIndicator.HIDE) }},1000L) + } + } + } override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { diff --git a/app/src/main/res/layout/drawer_alphabet.xml b/app/src/main/res/layout/drawer_alphabet.xml index 147753ec6..cd1a8418b 100644 --- a/app/src/main/res/layout/drawer_alphabet.xml +++ b/app/src/main/res/layout/drawer_alphabet.xml @@ -5,20 +5,39 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/drawer_alphabet_pop_up.xml b/app/src/main/res/layout/drawer_alphabet_pop_up.xml deleted file mode 100644 index df4f4522a..000000000 --- a/app/src/main/res/layout/drawer_alphabet_pop_up.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - \ No newline at end of file From 96f60eac9c92b093cb3b76461db6839410db13d5 Mon Sep 17 00:00:00 2001 From: J-cart Date: Thu, 25 Jul 2024 20:34:57 +0100 Subject: [PATCH 017/150] scroll position indicator (better alt) ... --- .../main/java/app/olauncher/MainViewModel.kt | 22 +-------- .../olauncher/data/DrawerCharacterModel.kt | 4 +- .../app/olauncher/ui/AppDrawerFragment.kt | 33 +++++++++---- .../olauncher/ui/DrawerCharacterAdapter.kt | 49 +++++++------------ .../res/layout-land/fragment_app_drawer.xml | 2 +- app/src/main/res/layout/drawer_alphabet.xml | 30 ++---------- .../main/res/layout/fragment_app_drawer.xml | 20 +++++++- 7 files changed, 71 insertions(+), 89 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainViewModel.kt b/app/src/main/java/app/olauncher/MainViewModel.kt index 9b56772f9..155f3e4d3 100644 --- a/app/src/main/java/app/olauncher/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/MainViewModel.kt @@ -251,7 +251,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { drawerCharacterList.value = characters } - fun updateRangeDrawerCharacterList(char:String,mode:Int){ + fun updateRangeDrawerCharacterList(char:String){ val charRegex = Regex("[0-9\\\\$&+,:;=?@#|/'<>.^*()%!-]") val characters = drawerCharacterList.value ?: emptyList() if (characters.isNotEmpty()){ @@ -259,31 +259,13 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val updatedCharacters = characters.map { - val showIndicator = - if (mode == CharacterIndicator.SHOW) it.character.equals(checkAndReplaceIfNum, true) else false DrawerCharacterModel( it.character, - it.character.equals(checkAndReplaceIfNum, true), - showIndicator + it.character.equals(checkAndReplaceIfNum, true) ) } drawerCharacterList.value = updatedCharacters } } - - fun updateRangeIndicator(){ - val currentList = (drawerCharacterList.value?.toMutableList() ?: mutableListOf()) - - if (currentList.isNotEmpty()){ - val currentRangeChar = currentList.find { it.inRange } - currentRangeChar?.let { - val index = currentList.indexOf(it) - val newValue = it.copy(showIndicator = false) - currentList[index] = newValue - drawerCharacterList.value = currentList - } - - } - } } \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt b/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt index 0bc4ae308..565020c39 100644 --- a/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt +++ b/app/src/main/java/app/olauncher/data/DrawerCharacterModel.kt @@ -2,7 +2,5 @@ package app.olauncher.data data class DrawerCharacterModel( val character: String = "", - val inRange: Boolean = false, - val showIndicator: Boolean = false, - + val inRange: Boolean = false ) \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index b01e3954d..8746dc3d8 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -80,20 +80,29 @@ class AppDrawerFragment : Fragment() { val rv = binding.recyclerView val params = rv.layoutParams as FrameLayout.LayoutParams val scale = resources.displayMetrics.density - val marginTop = (180 * scale).toInt() + val marginTop = (160 * scale).toInt() val marginBottom = (24 * scale).toInt() val marginRight = (centerValue * scale).toInt() params.setMargins(0, marginTop, marginRight, marginBottom) rv.layoutParams = params } + private fun setIndicatorMargins(x:Float,y:Float) { + val indicator = binding.characterIndicator + val params = indicator?.layoutParams as FrameLayout.LayoutParams + val scale = resources.displayMetrics.density + val marginTop = y.toInt() + (158 * scale).toInt() + val marginRight = (32 * scale).toInt() + params.setMargins(x.toInt(), marginTop, marginRight, 0) + indicator.layoutParams = params + } + private fun initViews() { - binding.alphabetRecyclerView.isVisible = prefs.autoShowKeyboard.not() + binding.characterRecyclerView.isVisible = prefs.autoShowKeyboard.not() setAppDrawerMargins(prefs.appLabelAlignment == Gravity.CENTER) - if (flag == Constants.FLAG_HIDDEN_APPS) binding.search.queryHint = getString(R.string.hidden_apps) else if (flag in Constants.FLAG_SET_HOME_APP_1..Constants.FLAG_SET_CALENDAR_APP) @@ -212,10 +221,16 @@ class AppDrawerFragment : Fragment() { return scrollRange } } - binding.alphabetRecyclerView.addOnItemTouchListener( - DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char,mode -> + binding.characterRecyclerView.addOnItemTouchListener( + DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char,mode ,pos-> + if (mode != CharacterIndicator.HIDE) { - viewModel.updateRangeDrawerCharacterList(char,mode) + binding.characterIndicator?.let{ + setIndicatorMargins(pos.first,pos.second) + it.text = char + it.isVisible = true + } + viewModel.updateRangeDrawerCharacterList(char) val matchIndex = if (char == "#") { 0 } else { @@ -228,7 +243,7 @@ class AppDrawerFragment : Fragment() { } if (mode == CharacterIndicator.HIDE) { - viewModel.updateRangeIndicator() + binding.characterIndicator?.isVisible = false } }) @@ -241,7 +256,7 @@ class AppDrawerFragment : Fragment() { if (requireContext().isEinkDisplay().not()) binding.recyclerView.layoutAnimation = AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.layout_anim_from_bottom) - binding.alphabetRecyclerView.adapter = drawerCharacterAdapter + binding.characterRecyclerView.adapter = drawerCharacterAdapter } private fun initObservers() { @@ -333,7 +348,7 @@ class AppDrawerFragment : Fragment() { val visiblePosition = linearLayoutManager.findFirstVisibleItemPosition() val position = if (visiblePosition >= 0) visiblePosition else 0 val item = adapter.currentList[position] - viewModel.updateRangeDrawerCharacterList(item.appLabel.first().toString(),101) + viewModel.updateRangeDrawerCharacterList(item.appLabel.first().toString()) } } } diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt index 4c0bf0b23..c99f6ae9a 100644 --- a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt @@ -5,13 +5,11 @@ import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener import app.olauncher.R -import app.olauncher.data.Constants import app.olauncher.data.Constants.CharacterIndicator import app.olauncher.data.DrawerCharacterModel import app.olauncher.databinding.DrawerAlphabetBinding @@ -31,14 +29,8 @@ class DrawerCharacterAdapter : binding.character.setTextColor(itemView.context.getColor(typedValue.resourceId)) } - if (character.showIndicator) { - binding.characterIndicator.visibility = View.VISIBLE - } else { - binding.characterIndicator.visibility = View.INVISIBLE - } binding.character.text = character.character - binding.characterIndicator.text = character.character } } @@ -75,46 +67,43 @@ class DrawerCharacterAdapter : class CharacterTouchListener( private val adapter: DrawerCharacterAdapter, - private val clickListener: ((String,Int) -> Unit)? + private val clickListener: ((String,Int,Pair) -> Unit)? ) : OnItemTouchListener { override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { - val child = rv.findChildViewUnder(e.x, e.y) - - if (child != null) { - val itemPosition = rv.getChildAdapterPosition(child) - clickListener?.let { it(adapter.currentList[itemPosition].character, - CharacterIndicator.SHOW) } - if (e.action == MotionEvent.ACTION_UP){ - child.postDelayed({clickListener?.let { it("", CharacterIndicator.HIDE) }},1000L) - - } - } - - - - + updateIndicatorView(rv, e) return true } override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) { + updateIndicatorView(rv, e) + } + + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { + } + + private fun updateIndicatorView(rv: RecyclerView,e:MotionEvent){ val child = rv.findChildViewUnder(e.x, e.y) if (child != null) { + val view = rv.getChildViewHolder(child).itemView val itemPosition = rv.getChildAdapterPosition(child) - clickListener?.let { it(adapter.currentList[itemPosition].character,102) } + + clickListener?.let { + it( + adapter.currentList[itemPosition].character, + CharacterIndicator.SHOW, + Pair(view.x, view.y) + ) + } if (e.action == MotionEvent.ACTION_UP){ -// clickListener?.let { it("",101) } - child.postDelayed({clickListener?.let { it("", CharacterIndicator.HIDE) }},1000L) + child.postDelayed({clickListener?.let { it("", CharacterIndicator.HIDE,Pair(e.x,e.y)) }},1000L) } } } - override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { - } - } } diff --git a/app/src/main/res/layout-land/fragment_app_drawer.xml b/app/src/main/res/layout-land/fragment_app_drawer.xml index dd8de35fd..d8cada455 100644 --- a/app/src/main/res/layout-land/fragment_app_drawer.xml +++ b/app/src/main/res/layout-land/fragment_app_drawer.xml @@ -76,7 +76,7 @@ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - - - - + /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index b80909ee6..cb2ddd8b3 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -74,7 +74,7 @@ android:requiresFadingEdge="vertical" /> + + \ No newline at end of file From 720277e871d38228e1f23de16715e35233747e89 Mon Sep 17 00:00:00 2001 From: J-cart Date: Fri, 26 Jul 2024 13:04:58 +0100 Subject: [PATCH 018/150] scroll position indicator visibility timer fix... --- .../main/java/app/olauncher/ui/AppDrawerFragment.kt | 9 ++++++++- .../java/app/olauncher/ui/DrawerCharacterAdapter.kt | 12 ++++++------ app/src/main/res/layout/fragment_app_drawer.xml | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 8746dc3d8..5c0a20ec7 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -12,6 +12,7 @@ import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -35,6 +36,8 @@ import app.olauncher.helper.searchOnPlayStore import app.olauncher.helper.showKeyboard import app.olauncher.helper.showToast import app.olauncher.helper.uninstall +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch class AppDrawerFragment : Fragment() { @@ -243,7 +246,11 @@ class AppDrawerFragment : Fragment() { } if (mode == CharacterIndicator.HIDE) { - binding.characterIndicator?.isVisible = false + lifecycleScope.launch { + delay(1000L) + binding.characterIndicator?.isVisible = false + } + } }) diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt index c99f6ae9a..c8e587e40 100644 --- a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt @@ -83,10 +83,10 @@ class DrawerCharacterAdapter : override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { } - private fun updateIndicatorView(rv: RecyclerView,e:MotionEvent){ + private fun updateIndicatorView(rv: RecyclerView, e: MotionEvent) { val child = rv.findChildViewUnder(e.x, e.y) - if (child != null) { - val view = rv.getChildViewHolder(child).itemView + child?.let { + val view = rv.getChildViewHolder(child).itemView val itemPosition = rv.getChildAdapterPosition(child) clickListener?.let { @@ -96,11 +96,11 @@ class DrawerCharacterAdapter : Pair(view.x, view.y) ) } - if (e.action == MotionEvent.ACTION_UP){ - child.postDelayed({clickListener?.let { it("", CharacterIndicator.HIDE,Pair(e.x,e.y)) }},1000L) + if (e.action == MotionEvent.ACTION_UP) { + clickListener?.let { it("", CharacterIndicator.HIDE, Pair(e.x, e.y)) } } + } ?: clickListener?.let { it("", CharacterIndicator.HIDE, Pair(e.x, e.y)) } - } } diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index cb2ddd8b3..5394c552e 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -95,7 +95,7 @@ android:layout_height="wrap_content" android:maxLines="1" tools:text="W" - android:visibility="gone" + android:visibility="invisible" android:layout_gravity="end" android:paddingHorizontal="6dp" android:paddingVertical="2dp" From 37379254c527860e62be96f63b808ef217fc38eb Mon Sep 17 00:00:00 2001 From: Tamim Hossain Date: Sun, 28 Jul 2024 10:54:18 +0600 Subject: [PATCH 019/150] Introduce version catalog for dependency management Adds a (libs.versions.toml) file to centralize dependency management. This improves dependency consistency, reduces maintenance overhead, and simplifies version updates across modules. --- app/build.gradle | 18 +++++++++--------- build.gradle | 4 ++-- gradle/libs.versions.toml | 23 +++++++++++++++++++++++ 3 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/app/build.gradle b/app/build.gradle index e31ba8e62..314e4a237 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,22 +44,22 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.21" - implementation 'androidx.core:core-ktx:1.10.1' - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation "androidx.recyclerview:recyclerview:1.3.0" + implementation libs.kotlin.stdlib + implementation libs.core.ktx + implementation libs.appcompat + implementation libs.recyclerview // Android lifecycle - implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' + implementation libs.lifecycle.extensions + implementation libs.lifecycle.viewmodel.ktx // Navigation - implementation "androidx.navigation:navigation-fragment-ktx:2.6.0" + implementation libs.navigation.fragment.ktx // Work Manager - implementation "androidx.work:work-runtime-ktx:2.8.1" + implementation libs.work.runtime.ktx //Material dependency - implementation 'com.google.android.material:material:1.9.0' + implementation libs.material } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 995ac225e..67e26d132 100644 --- a/build.gradle +++ b/build.gradle @@ -6,8 +6,8 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21" + classpath libs.gradle + classpath libs.kotlin.gradle.plugin // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 000000000..0ffbdad61 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,23 @@ +[versions] +appcompat = "1.6.1" +coreKtx = "1.10.1" +gradle = "7.4.2" +kotlinStdlib = "1.8.21" +lifecycleExtensions = "2.2.0" +lifecycleViewmodelKtx = "2.6.1" +material = "1.9.0" +navigationFragmentKtx = "2.6.0" +recyclerview = "1.3.0" +workRuntimeKtx = "2.8.1" +[libraries] +appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } +core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } +gradle = { module = "com.android.tools.build:gradle", version.ref = "gradle" } +kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlinStdlib" } +kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlinStdlib" } +lifecycle-extensions = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "lifecycleExtensions" } +lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } +material = { module = "com.google.android.material:material", version.ref = "material" } +navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "navigationFragmentKtx" } +recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" } +work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "workRuntimeKtx" } \ No newline at end of file From a98fe9e487c17e7842a0b0a21f558c7e3cbd008d Mon Sep 17 00:00:00 2001 From: J-cart Date: Mon, 29 Jul 2024 12:24:51 +0100 Subject: [PATCH 020/150] target--compile SDK-> 34... --- app/build.gradle | 4 ++-- .../java/app/olauncher/listener/OnSwipeTouchListener.kt | 6 +++--- .../java/app/olauncher/listener/ViewSwipeTouchListener.kt | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 314e4a237..a5d3b5b61 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdkVersion 33 + compileSdk 34 compileOptions { sourceCompatibility JavaVersion.VERSION_17 @@ -16,7 +16,7 @@ android { defaultConfig { applicationId "app.olauncher" minSdkVersion 23 - targetSdkVersion 33 + targetSdkVersion 34 versionCode 78 versionName "v4.2.2" diff --git a/app/src/main/java/app/olauncher/listener/OnSwipeTouchListener.kt b/app/src/main/java/app/olauncher/listener/OnSwipeTouchListener.kt index ae09a784f..3197b3c8c 100644 --- a/app/src/main/java/app/olauncher/listener/OnSwipeTouchListener.kt +++ b/app/src/main/java/app/olauncher/listener/OnSwipeTouchListener.kt @@ -74,14 +74,14 @@ internal open class OnSwipeTouchListener(c: Context?) : OnTouchListener { } override fun onFling( - event1: MotionEvent, + event1: MotionEvent?, event2: MotionEvent, velocityX: Float, velocityY: Float, ): Boolean { try { - val diffY = event2.y - event1.y - val diffX = event2.x - event1.x + val diffY = event2.y - (event1?.y ?: 0F) + val diffX = event2.x - (event1?.x ?: 0F) if (abs(diffX) > abs(diffY)) { if (abs(diffX) > SWIPE_THRESHOLD && abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) onSwipeRight() else onSwipeLeft() diff --git a/app/src/main/java/app/olauncher/listener/ViewSwipeTouchListener.kt b/app/src/main/java/app/olauncher/listener/ViewSwipeTouchListener.kt index 881082417..9d7009ee2 100644 --- a/app/src/main/java/app/olauncher/listener/ViewSwipeTouchListener.kt +++ b/app/src/main/java/app/olauncher/listener/ViewSwipeTouchListener.kt @@ -58,14 +58,14 @@ internal open class ViewSwipeTouchListener(c: Context?, v: View) : OnTouchListen } override fun onFling( - event1: MotionEvent, + event1: MotionEvent?, event2: MotionEvent, velocityX: Float, velocityY: Float, ): Boolean { try { - val diffY = event2.y - event1.y - val diffX = event2.x - event1.x + val diffY = event2.y - (event1?.y ?: 0F) + val diffX = event2.x - (event1?.x ?: 0F) if (abs(diffX) > abs(diffY)) { if (abs(diffX) > SWIPE_THRESHOLD && abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) onSwipeRight() else onSwipeLeft() From facd0ff9ea1b27184d0d9a636cbf0c2b19f8f631 Mon Sep 17 00:00:00 2001 From: J-cart Date: Wed, 31 Jul 2024 07:52:38 +0100 Subject: [PATCH 021/150] (fix) app drawer character list... --- .../app/olauncher/ui/AppDrawerFragment.kt | 66 +++++++++++++++---- .../res/layout-land/fragment_app_drawer.xml | 49 ++++++++++---- .../main/res/layout/fragment_app_drawer.xml | 64 ++++++++++-------- 3 files changed, 123 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 5c0a20ec7..762b71e77 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -1,5 +1,6 @@ package app.olauncher.ui +import android.content.res.Configuration.ORIENTATION_PORTRAIT import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -7,6 +8,7 @@ import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils import android.widget.FrameLayout +import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible @@ -77,34 +79,67 @@ class AppDrawerFragment : Fragment() { initClickListeners() } - private fun setAppDrawerMargins(center: Boolean) { + private fun setAppDrawerPortraitMargins(center: Boolean) { val centerValue = if (center) 5 else 48 val rv = binding.recyclerView val params = rv.layoutParams as FrameLayout.LayoutParams val scale = resources.displayMetrics.density - val marginTop = (160 * scale).toInt() + val marginTop = (180 * scale).toInt() val marginBottom = (24 * scale).toInt() val marginRight = (centerValue * scale).toInt() params.setMargins(0, marginTop, marginRight, marginBottom) rv.layoutParams = params } - private fun setIndicatorMargins(x:Float,y:Float) { + private fun setAppDrawerLandMargins() { + val rv = binding.recyclerView + val params = rv.layoutParams as FrameLayout.LayoutParams + val scale = resources.displayMetrics.density + val marginTop = (80 * scale).toInt() + val marginBottom = 0 + val marginRight = (56 * scale).toInt() + val marginLeft = (56 * scale).toInt() + params.setMargins(marginLeft, marginTop, marginRight, marginBottom) + rv.layoutParams = params + } + + private fun setIndicatorMargins(x:Float,y:Float,isLast:Boolean,isFirst:Boolean) { + val lastValue = if (isLast) 6 else 3 val indicator = binding.characterIndicator - val params = indicator?.layoutParams as FrameLayout.LayoutParams + val params = indicator.layoutParams as LinearLayout.LayoutParams val scale = resources.displayMetrics.density - val marginTop = y.toInt() + (158 * scale).toInt() - val marginRight = (32 * scale).toInt() - params.setMargins(x.toInt(), marginTop, marginRight, 0) + val marginTop =if (isFirst) (y + (1 * scale)).toInt() else (y - (lastValue * scale)).toInt() + val marginRight = (8 * scale).toInt() + val marginLeft = x.toInt() + val marginBottom = 0 + params.setMargins(marginLeft, marginTop, marginRight, marginBottom) indicator.layoutParams = params } + private fun setIndicatorLayoutLandMargins() { + val indicatorLayout = binding.indicatorLayout + val params = indicatorLayout.layoutParams as FrameLayout.LayoutParams + val scale = resources.displayMetrics.density + val marginTop = (6 * scale).toInt() + val marginRight = 0 + val marginLeft = 0 + val marginBottom = (6 * scale).toInt() + params.setMargins(marginLeft, marginTop, marginRight, marginBottom) + indicatorLayout.layoutParams = params + } + + private fun initViews() { binding.characterRecyclerView.isVisible = prefs.autoShowKeyboard.not() - setAppDrawerMargins(prefs.appLabelAlignment == Gravity.CENTER) + if (requireContext().resources.configuration.orientation == ORIENTATION_PORTRAIT) { + setAppDrawerPortraitMargins(prefs.appLabelAlignment == Gravity.CENTER) + }else{ + setAppDrawerLandMargins() + setIndicatorLayoutLandMargins() + } if (flag == Constants.FLAG_HIDDEN_APPS) binding.search.queryHint = getString(R.string.hidden_apps) @@ -228,10 +263,15 @@ class AppDrawerFragment : Fragment() { DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char,mode ,pos-> if (mode != CharacterIndicator.HIDE) { - binding.characterIndicator?.let{ - setIndicatorMargins(pos.first,pos.second) - it.text = char - it.isVisible = true + binding.characterIndicator.apply{ + setIndicatorMargins( + pos.first, + pos.second, + char.equals("Z", true), + char.equals("A", true) + ) + text = char + isVisible = true } viewModel.updateRangeDrawerCharacterList(char) val matchIndex = if (char == "#") { @@ -248,7 +288,7 @@ class AppDrawerFragment : Fragment() { if (mode == CharacterIndicator.HIDE) { lifecycleScope.launch { delay(1000L) - binding.characterIndicator?.isVisible = false + binding.characterIndicator.isVisible = false } } diff --git a/app/src/main/res/layout-land/fragment_app_drawer.xml b/app/src/main/res/layout-land/fragment_app_drawer.xml index d8cada455..f54713981 100644 --- a/app/src/main/res/layout-land/fragment_app_drawer.xml +++ b/app/src/main/res/layout-land/fragment_app_drawer.xml @@ -75,20 +75,41 @@ android:requiresFadingEdge="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - + android:layout_height="wrap_content" + android:layout_marginVertical="6dp" + android:layout_gravity="center|end" + > + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index 5394c552e..bb79e735a 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -19,6 +19,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" + android:layout_marginEnd="32dp" android:gravity="end" android:imeOptions="actionSearch" android:paddingHorizontal="3dp" @@ -73,37 +74,42 @@ android:fadingEdgeLength="24dp" android:requiresFadingEdge="vertical" /> - - + android:layout_gravity="center|end" + > + + + + \ No newline at end of file From 39ec3bbe6af9858fb6ec123c77eb80600ac0308b Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 9 Aug 2024 20:26:28 +0530 Subject: [PATCH 022/150] Changes in letters app drawer --- .../app/olauncher/ui/AppDrawerFragment.kt | 22 +++---- .../olauncher/ui/DrawerCharacterAdapter.kt | 65 ++++++------------- .../main/res/drawable/bg_shade_circular.xml | 5 ++ .../main/res/layout-land/drawer_alphabet.xml | 24 +++++++ .../res/layout-land/fragment_app_drawer.xml | 38 +++++------ app/src/main/res/layout/drawer_alphabet.xml | 19 +++--- .../main/res/layout/fragment_app_drawer.xml | 40 ++++++------ 7 files changed, 104 insertions(+), 109 deletions(-) create mode 100644 app/src/main/res/drawable/bg_shade_circular.xml create mode 100644 app/src/main/res/layout-land/drawer_alphabet.xml diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 762b71e77..3c0e2b2bd 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -59,7 +59,7 @@ class AppDrawerFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? + savedInstanceState: Bundle?, ): View { _binding = FragmentAppDrawerBinding.inflate(inflater, container, false) return binding.root @@ -104,12 +104,11 @@ class AppDrawerFragment : Fragment() { rv.layoutParams = params } - private fun setIndicatorMargins(x:Float,y:Float,isLast:Boolean,isFirst:Boolean) { - val lastValue = if (isLast) 6 else 3 + private fun setIndicatorMargins(x: Float, y: Float, isLast: Boolean, isFirst: Boolean) { val indicator = binding.characterIndicator val params = indicator.layoutParams as LinearLayout.LayoutParams val scale = resources.displayMetrics.density - val marginTop =if (isFirst) (y + (1 * scale)).toInt() else (y - (lastValue * scale)).toInt() + val marginTop = y.toInt() - 80 val marginRight = (8 * scale).toInt() val marginLeft = x.toInt() val marginBottom = 0 @@ -136,7 +135,7 @@ class AppDrawerFragment : Fragment() { if (requireContext().resources.configuration.orientation == ORIENTATION_PORTRAIT) { setAppDrawerPortraitMargins(prefs.appLabelAlignment == Gravity.CENTER) - }else{ + } else { setAppDrawerLandMargins() setIndicatorLayoutLandMargins() } @@ -250,7 +249,7 @@ class AppDrawerFragment : Fragment() { override fun scrollVerticallyBy( dx: Int, recycler: Recycler, - state: RecyclerView.State + state: RecyclerView.State, ): Int { val scrollRange = super.scrollVerticallyBy(dx, recycler, state) val overScroll = dx - scrollRange @@ -260,10 +259,10 @@ class AppDrawerFragment : Fragment() { } } binding.characterRecyclerView.addOnItemTouchListener( - DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char,mode ,pos-> + DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char, mode, pos -> if (mode != CharacterIndicator.HIDE) { - binding.characterIndicator.apply{ + binding.characterIndicator.apply { setIndicatorMargins( pos.first, pos.second, @@ -287,15 +286,12 @@ class AppDrawerFragment : Fragment() { if (mode == CharacterIndicator.HIDE) { lifecycleScope.launch { - delay(1000L) + delay(300L) binding.characterIndicator.isVisible = false } - } - }) - binding.recyclerView.layoutManager = linearLayoutManager binding.recyclerView.adapter = adapter binding.recyclerView.addOnScrollListener(getRecyclerViewOnScrollListener()) @@ -436,7 +432,7 @@ class AppDrawerFragment : Fragment() { if (regexMatch) "#" else firstLetter.uppercase() }.toSet() .map { str -> - DrawerCharacterModel(str, str.equals(firstVisibleItem.appLabel.first().toString(),true)) + DrawerCharacterModel(str, str.equals(firstVisibleItem.appLabel.first().toString(), true)) } viewModel.updateDrawerCharacterList(drawerCharacters) diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt index c8e587e40..f589adb78 100644 --- a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt @@ -1,6 +1,5 @@ package app.olauncher.ui -import android.util.TypedValue import android.view.LayoutInflater import android.view.MotionEvent import android.view.View @@ -13,75 +12,54 @@ import app.olauncher.R import app.olauncher.data.Constants.CharacterIndicator import app.olauncher.data.DrawerCharacterModel import app.olauncher.databinding.DrawerAlphabetBinding +import app.olauncher.helper.getColorFromAttr - -class DrawerCharacterAdapter : - ListAdapter(diffObject) { +class DrawerCharacterAdapter : ListAdapter(diffObject) { inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { private val binding = DrawerAlphabetBinding.bind(view) fun bind(character: DrawerCharacterModel) { - if (character.inRange) { - binding.character.setTextColor(itemView.context.getColor(R.color.design_default_color_secondary)) - } else { - val typedValue = TypedValue() - itemView.context.theme.resolveAttribute(R.attr.primaryColor, typedValue, true) - binding.character.setTextColor(itemView.context.getColor(typedValue.resourceId)) - } - - + val textColor = if (character.inRange) + itemView.context.getColor(R.color.colorAccent) + else + itemView.context.getColorFromAttr(R.attr.primaryColor) + binding.character.setTextColor(textColor) binding.character.text = character.character - } } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val view = - LayoutInflater.from(parent.context).inflate(R.layout.drawer_alphabet, parent, false) - return ViewHolder(view) - } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = + ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.drawer_alphabet, parent, false)) - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val pos = getItem(position) - holder.bind(pos) - } + override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(getItem(position)) companion object { val diffObject = object : DiffUtil.ItemCallback() { override fun areItemsTheSame( oldItem: DrawerCharacterModel, - newItem: DrawerCharacterModel - ): Boolean { - return oldItem.character == newItem.character - } + newItem: DrawerCharacterModel, + ): Boolean = oldItem.character == newItem.character override fun areContentsTheSame( oldItem: DrawerCharacterModel, - newItem: DrawerCharacterModel - ): Boolean { - return oldItem.hashCode() == newItem.hashCode() - } + newItem: DrawerCharacterModel, + ): Boolean = oldItem.hashCode() == newItem.hashCode() } } - class CharacterTouchListener( private val adapter: DrawerCharacterAdapter, - private val clickListener: ((String,Int,Pair) -> Unit)? - ) : - OnItemTouchListener { + private val clickListener: ((String, Int, Pair) -> Unit)?, + ) : OnItemTouchListener { override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { updateIndicatorView(rv, e) return true } - override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) { - updateIndicatorView(rv, e) - } + override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) = updateIndicatorView(rv, e) - override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { - } + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) = Unit private fun updateIndicatorView(rv: RecyclerView, e: MotionEvent) { val child = rv.findChildViewUnder(e.x, e.y) @@ -96,15 +74,10 @@ class DrawerCharacterAdapter : Pair(view.x, view.y) ) } - if (e.action == MotionEvent.ACTION_UP) { + if (e.action == MotionEvent.ACTION_UP) clickListener?.let { it("", CharacterIndicator.HIDE, Pair(e.x, e.y)) } - } } ?: clickListener?.let { it("", CharacterIndicator.HIDE, Pair(e.x, e.y)) } - - } - } - } diff --git a/app/src/main/res/drawable/bg_shade_circular.xml b/app/src/main/res/drawable/bg_shade_circular.xml new file mode 100644 index 000000000..f0b124240 --- /dev/null +++ b/app/src/main/res/drawable/bg_shade_circular.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/layout-land/drawer_alphabet.xml b/app/src/main/res/layout-land/drawer_alphabet.xml new file mode 100644 index 000000000..a40caca39 --- /dev/null +++ b/app/src/main/res/layout-land/drawer_alphabet.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_app_drawer.xml b/app/src/main/res/layout-land/fragment_app_drawer.xml index f54713981..8a813f63f 100644 --- a/app/src/main/res/layout-land/fragment_app_drawer.xml +++ b/app/src/main/res/layout-land/fragment_app_drawer.xml @@ -1,9 +1,9 @@ @@ -79,37 +79,35 @@ android:id="@+id/indicatorLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginVertical="6dp" - android:layout_gravity="center|end" - > + android:layout_gravity="center_vertical|end" + android:clipChildren="false" + android:clipToPadding="false"> + android:maxLines="1" + android:textAlignment="center" + android:visibility="invisible" + tools:text="W" + tools:visibility="visible" /> + + tools:listitem="@layout/drawer_alphabet" /> \ No newline at end of file diff --git a/app/src/main/res/layout/drawer_alphabet.xml b/app/src/main/res/layout/drawer_alphabet.xml index 7d289805f..912e7bb6b 100644 --- a/app/src/main/res/layout/drawer_alphabet.xml +++ b/app/src/main/res/layout/drawer_alphabet.xml @@ -1,23 +1,24 @@ + android:maxLines="1" + android:paddingVertical="2.5dp" + android:paddingStart="20dp" + android:paddingEnd="16dp" + android:textAlignment="center" + android:textSize="13sp" + tools:targetApi="o" + tools:text="W" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index bb79e735a..fe6481510 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -1,9 +1,9 @@ @@ -18,8 +18,8 @@ android:id="@+id/search" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_weight="1" android:layout_marginEnd="32dp" + android:layout_weight="1" android:gravity="end" android:imeOptions="actionSearch" android:paddingHorizontal="3dp" @@ -74,42 +74,40 @@ android:fadingEdgeLength="24dp" android:requiresFadingEdge="vertical" /> - + android:layout_gravity="center_vertical|end" + android:clipChildren="false" + android:clipToPadding="false"> + android:maxLines="1" + android:textAlignment="center" + android:visibility="invisible" + tools:text="W" + tools:visibility="visible" /> + + tools:listitem="@layout/drawer_alphabet" /> \ No newline at end of file From 1d933f233ab7c8e7dea8f56ada9310e6c762c354 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 9 Aug 2024 20:28:03 +0530 Subject: [PATCH 023/150] Minor UI change --- app/src/main/res/layout-land/fragment_app_drawer.xml | 1 + app/src/main/res/layout/fragment_app_drawer.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/res/layout-land/fragment_app_drawer.xml b/app/src/main/res/layout-land/fragment_app_drawer.xml index 8a813f63f..8d2912821 100644 --- a/app/src/main/res/layout-land/fragment_app_drawer.xml +++ b/app/src/main/res/layout-land/fragment_app_drawer.xml @@ -80,6 +80,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|end" + android:alpha="0.8" android:clipChildren="false" android:clipToPadding="false"> diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index fe6481510..c6cc2fb65 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -79,6 +79,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|end" + android:alpha="0.8" android:clipChildren="false" android:clipToPadding="false"> From ff1a7a9c522584fc1e667c2ec523f702f605dea6 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 9 Aug 2024 20:29:35 +0530 Subject: [PATCH 024/150] App version bumped to 80 (v4.3.0) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a5d3b5b61..368cec18e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 23 targetSdkVersion 34 - versionCode 78 - versionName "v4.2.2" + versionCode 80 + versionName "v4.3.0" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 2727465765cb7f9c20a4011af22214031db03d82 Mon Sep 17 00:00:00 2001 From: Jonas Wischeropp Date: Sat, 10 Aug 2024 13:44:37 +0200 Subject: [PATCH 025/150] fixed crash when search is empty --- app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 3c0e2b2bd..8c61ae789 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -388,6 +388,8 @@ class AppDrawerFragment : Fragment() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) + if (linearLayoutManager.itemCount == 0) + return val visiblePosition = linearLayoutManager.findFirstVisibleItemPosition() val position = if (visiblePosition >= 0) visiblePosition else 0 val item = adapter.currentList[position] From 61b9afe6cde0197c9a2fc0897258ff56a9682a3f Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 10 Aug 2024 20:15:36 +0530 Subject: [PATCH 026/150] UI UX fixes in the app drawer --- .../java/app/olauncher/ui/AppDrawerAdapter.kt | 11 ++++- .../app/olauncher/ui/AppDrawerFragment.kt | 9 ++-- app/src/main/res/drawable/ic_check.xml | 11 +++++ app/src/main/res/drawable/ic_close.xml | 4 +- app/src/main/res/drawable/ic_rename.xml | 4 +- .../main/res/layout/adapter_app_drawer.xml | 48 +++++++++++++++---- 6 files changed, 70 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/drawable/ic_check.xml diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt index 47d7352a9..d9bfacdb4 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt @@ -160,6 +160,7 @@ class AppDrawerAdapter( with(binding) { appHideLayout.visibility = View.GONE renameLayout.visibility = View.GONE + appTitle.visibility = View.VISIBLE appTitle.text = appModel.appLabel appTitle.gravity = appLabelGravity otherProfileIndicator.isVisible = appModel.user != myUserHandle @@ -172,6 +173,7 @@ class AppDrawerAdapter( root.context.getString(R.string.adapter_show) else root.context.getString(R.string.adapter_hide) + appTitle.visibility = View.INVISIBLE appHideLayout.visibility = View.VISIBLE appRename.isVisible = flag != Constants.FLAG_HIDDEN_APPS } @@ -246,7 +248,14 @@ class AppDrawerAdapter( } appInfo.setOnClickListener { appInfoListener(appModel) } appDelete.setOnClickListener { appDeleteListener(appModel) } - appHideLayout.setOnClickListener { appHideLayout.visibility = View.GONE } + appMenuClose.setOnClickListener { + appHideLayout.visibility = View.GONE + appTitle.visibility = View.VISIBLE + } + appRenameClose.setOnClickListener { + renameLayout.visibility = View.GONE + appTitle.visibility = View.VISIBLE + } appHide.setOnClickListener { appHideListener(appModel, bindingAdapterPosition) } } diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 8c61ae789..1a28a41a3 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -87,7 +87,7 @@ class AppDrawerFragment : Fragment() { val scale = resources.displayMetrics.density val marginTop = (180 * scale).toInt() val marginBottom = (24 * scale).toInt() - val marginRight = (centerValue * scale).toInt() + val marginRight = if (prefs.autoShowKeyboard) 0 else (centerValue * scale).toInt() params.setMargins(0, marginTop, marginRight, marginBottom) rv.layoutParams = params } @@ -273,13 +273,14 @@ class AppDrawerFragment : Fragment() { isVisible = true } viewModel.updateRangeDrawerCharacterList(char) - val matchIndex = if (char == "#") { - 0 - } else { + val matchIndex = try { val match = adapter.currentList.find { char.equals(it.appLabel.first().toString(), true) } adapter.currentList.indexOf(match) + } catch (e: Exception) { + e.printStackTrace() + 0 } linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) } diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 000000000..53bb39ee2 --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml index e5c82ddda..022cd025f 100644 --- a/app/src/main/res/drawable/ic_close.xml +++ b/app/src/main/res/drawable/ic_close.xml @@ -1,6 +1,6 @@ + tools:visibility="gone"> + + - + android:textSize="12sp" + app:drawableTopCompat="@drawable/ic_check" /> + From 3f91d909e48b3f760c554f6c3dca5525a52b0436 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 10 Aug 2024 20:16:37 +0530 Subject: [PATCH 027/150] App version bumped to 81 (v4.3.0) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 368cec18e..27c296500 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { applicationId "app.olauncher" minSdkVersion 23 targetSdkVersion 34 - versionCode 80 + versionCode 81 versionName "v4.3.0" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] From 82959e3f3eb1cde83cbc8532f26a0a228514a496 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Mon, 12 Aug 2024 17:03:22 +0530 Subject: [PATCH 028/150] Crash fix --- .../main/java/app/olauncher/ui/AppDrawerFragment.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 1a28a41a3..8a1a82e42 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -238,6 +238,8 @@ class AppDrawerFragment : Fragment() { viewModel.showDialog.postValue(Constants.Dialog.HIDDEN) findNavController().navigate(R.id.action_appListFragment_to_settingsFragment2) } + viewModel.getAppList() + viewModel.getHiddenApps() }, appRenameListener = { appModel, renameLabel -> prefs.setAppRenameLabel(appModel.appPackage, renameLabel) @@ -301,6 +303,7 @@ class AppDrawerFragment : Fragment() { binding.recyclerView.layoutAnimation = AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.layout_anim_from_bottom) binding.characterRecyclerView.adapter = drawerCharacterAdapter + binding.characterRecyclerView.itemAnimator = null } private fun initObservers() { @@ -421,9 +424,7 @@ class AppDrawerFragment : Fragment() { val position = if (firstVisibleItemPosition >= 0) firstVisibleItemPosition else 0 - val firstVisibleItem = - drawerItems[position] - + val firstVisibleItem = if (position < drawerItems.size) drawerItems[position] else null val drawerCharacters = drawerItems.filter { it.appLabel.isNotEmpty() }.map { char -> @@ -435,11 +436,10 @@ class AppDrawerFragment : Fragment() { if (regexMatch) "#" else firstLetter.uppercase() }.toSet() .map { str -> - DrawerCharacterModel(str, str.equals(firstVisibleItem.appLabel.first().toString(), true)) + DrawerCharacterModel(str, str.equals(firstVisibleItem?.appLabel?.first().toString(), true)) } viewModel.updateDrawerCharacterList(drawerCharacters) - } From 9116775fbfa96f5b6493d1a94a1429429ad9f4ae Mon Sep 17 00:00:00 2001 From: Tanuj Date: Mon, 12 Aug 2024 17:03:46 +0530 Subject: [PATCH 029/150] App version bumped to 82 (v4.3.1) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 27c296500..5ad424ebf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 23 targetSdkVersion 34 - versionCode 81 - versionName "v4.3.0" + versionCode 82 + versionName "v4.3.1" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From d3809fc56ace5fc9846c3878b3f85713ba19aef6 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 23 Aug 2024 14:53:54 +0530 Subject: [PATCH 030/150] Removed character scrolling in the app drawer --- .../main/java/app/olauncher/MainViewModel.kt | 25 --- .../java/app/olauncher/ui/AppDrawerAdapter.kt | 2 - .../app/olauncher/ui/AppDrawerFragment.kt | 169 ------------------ .../olauncher/ui/DrawerCharacterAdapter.kt | 83 --------- .../res/drawable/rounded_rect_shade_color.xml | 2 +- .../main/res/layout-land/drawer_alphabet.xml | 24 --- .../res/layout-land/fragment_app_drawer.xml | 36 ---- .../res/layout-land/fragment_settings.xml | 4 +- .../main/res/layout/adapter_app_drawer.xml | 4 +- app/src/main/res/layout/drawer_alphabet.xml | 24 --- .../main/res/layout/fragment_app_drawer.xml | 37 ---- app/src/main/res/layout/fragment_settings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 13 files changed, 8 insertions(+), 406 deletions(-) delete mode 100644 app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt delete mode 100644 app/src/main/res/layout-land/drawer_alphabet.xml delete mode 100644 app/src/main/res/layout/drawer_alphabet.xml diff --git a/app/src/main/java/app/olauncher/MainViewModel.kt b/app/src/main/java/app/olauncher/MainViewModel.kt index 155f3e4d3..a06a35e5d 100644 --- a/app/src/main/java/app/olauncher/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/MainViewModel.kt @@ -16,8 +16,6 @@ import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import app.olauncher.data.AppModel import app.olauncher.data.Constants -import app.olauncher.data.Constants.CharacterIndicator -import app.olauncher.data.DrawerCharacterModel import app.olauncher.data.Prefs import app.olauncher.helper.SingleLiveEvent import app.olauncher.helper.WallpaperWorker @@ -36,7 +34,6 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val toggleDateTime = MutableLiveData() val updateSwipeApps = MutableLiveData() val appList = MutableLiveData?>() - val drawerCharacterList = MutableLiveData>() val hiddenApps = MutableLiveData?>() val isOlauncherDefault = MutableLiveData() val launcherResetFailed = MutableLiveData() @@ -246,26 +243,4 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { prefs.homeAlignment = gravity homeAppAlignment.value = prefs.homeAlignment } - - fun updateDrawerCharacterList(characters:List){ - drawerCharacterList.value = characters - } - - fun updateRangeDrawerCharacterList(char:String){ - val charRegex = Regex("[0-9\\\\$&+,:;=?@#|/'<>.^*()%!-]") - val characters = drawerCharacterList.value ?: emptyList() - if (characters.isNotEmpty()){ - val checkAndReplaceIfNum = if (charRegex.matches(char)) "#" else char - - val updatedCharacters = - characters.map { - DrawerCharacterModel( - it.character, - it.character.equals(checkAndReplaceIfNum, true) - ) - } - - drawerCharacterList.value = updatedCharacters - } - } } \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt index d9bfacdb4..76a0ebf1e 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt @@ -26,7 +26,6 @@ import java.text.Normalizer class AppDrawerAdapter( private var flag: Int, - private val appFilterHelper: AppFilterHelper, private val appLabelGravity: Int, private val appClickListener: (AppModel) -> Unit, private val appInfoListener: (AppModel) -> Unit, @@ -101,7 +100,6 @@ class AppDrawerAdapter( results?.values?.let { val items = it as MutableList appFilteredList = items - appFilterHelper.onAppFiltered(items.toList()) submitList(appFilteredList) { autoLaunch() } diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 8a1a82e42..cd8e30fb2 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -1,33 +1,23 @@ package app.olauncher.ui -import android.content.res.Configuration.ORIENTATION_PORTRAIT import android.os.Bundle -import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils -import android.widget.FrameLayout -import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.widget.SearchView -import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.Recycler import app.olauncher.MainViewModel import app.olauncher.R -import app.olauncher.data.AppModel import app.olauncher.data.Constants -import app.olauncher.data.Constants.CharacterIndicator -import app.olauncher.data.DrawerCharacterModel import app.olauncher.data.Prefs import app.olauncher.databinding.FragmentAppDrawerBinding -import app.olauncher.helper.AppFilterHelper import app.olauncher.helper.hideKeyboard import app.olauncher.helper.isEinkDisplay import app.olauncher.helper.isSystemApp @@ -38,8 +28,6 @@ import app.olauncher.helper.searchOnPlayStore import app.olauncher.helper.showKeyboard import app.olauncher.helper.showToast import app.olauncher.helper.uninstall -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch class AppDrawerFragment : Fragment() { @@ -47,7 +35,6 @@ class AppDrawerFragment : Fragment() { private lateinit var prefs: Prefs private lateinit var adapter: AppDrawerAdapter private lateinit var linearLayoutManager: LinearLayoutManager - private lateinit var drawerCharacterAdapter: DrawerCharacterAdapter private var flag = Constants.FLAG_LAUNCH_APP private var canRename = false @@ -79,67 +66,7 @@ class AppDrawerFragment : Fragment() { initClickListeners() } - private fun setAppDrawerPortraitMargins(center: Boolean) { - val centerValue = if (center) 5 else 48 - - val rv = binding.recyclerView - val params = rv.layoutParams as FrameLayout.LayoutParams - val scale = resources.displayMetrics.density - val marginTop = (180 * scale).toInt() - val marginBottom = (24 * scale).toInt() - val marginRight = if (prefs.autoShowKeyboard) 0 else (centerValue * scale).toInt() - params.setMargins(0, marginTop, marginRight, marginBottom) - rv.layoutParams = params - } - - private fun setAppDrawerLandMargins() { - val rv = binding.recyclerView - val params = rv.layoutParams as FrameLayout.LayoutParams - val scale = resources.displayMetrics.density - val marginTop = (80 * scale).toInt() - val marginBottom = 0 - val marginRight = (56 * scale).toInt() - val marginLeft = (56 * scale).toInt() - params.setMargins(marginLeft, marginTop, marginRight, marginBottom) - rv.layoutParams = params - } - - private fun setIndicatorMargins(x: Float, y: Float, isLast: Boolean, isFirst: Boolean) { - val indicator = binding.characterIndicator - val params = indicator.layoutParams as LinearLayout.LayoutParams - val scale = resources.displayMetrics.density - val marginTop = y.toInt() - 80 - val marginRight = (8 * scale).toInt() - val marginLeft = x.toInt() - val marginBottom = 0 - params.setMargins(marginLeft, marginTop, marginRight, marginBottom) - indicator.layoutParams = params - } - - - private fun setIndicatorLayoutLandMargins() { - val indicatorLayout = binding.indicatorLayout - val params = indicatorLayout.layoutParams as FrameLayout.LayoutParams - val scale = resources.displayMetrics.density - val marginTop = (6 * scale).toInt() - val marginRight = 0 - val marginLeft = 0 - val marginBottom = (6 * scale).toInt() - params.setMargins(marginLeft, marginTop, marginRight, marginBottom) - indicatorLayout.layoutParams = params - } - - private fun initViews() { - binding.characterRecyclerView.isVisible = prefs.autoShowKeyboard.not() - - if (requireContext().resources.configuration.orientation == ORIENTATION_PORTRAIT) { - setAppDrawerPortraitMargins(prefs.appLabelAlignment == Gravity.CENTER) - } else { - setAppDrawerLandMargins() - setIndicatorLayoutLandMargins() - } - if (flag == Constants.FLAG_HIDDEN_APPS) binding.search.queryHint = getString(R.string.hidden_apps) else if (flag in Constants.FLAG_SET_HOME_APP_1..Constants.FLAG_SET_CALENDAR_APP) @@ -179,17 +106,8 @@ class AppDrawerFragment : Fragment() { } private fun initAdapter() { - - val appFilterHelper = object : AppFilterHelper { - override fun onAppFiltered(items: List) { - submitDrawerCharacters(items) - } - } - drawerCharacterAdapter = DrawerCharacterAdapter() - adapter = AppDrawerAdapter( flag, - appFilterHelper, prefs.appLabelAlignment, appClickListener = { if (it.appPackage.isEmpty()) @@ -260,40 +178,6 @@ class AppDrawerFragment : Fragment() { return scrollRange } } - binding.characterRecyclerView.addOnItemTouchListener( - DrawerCharacterAdapter.CharacterTouchListener(drawerCharacterAdapter) { char, mode, pos -> - - if (mode != CharacterIndicator.HIDE) { - binding.characterIndicator.apply { - setIndicatorMargins( - pos.first, - pos.second, - char.equals("Z", true), - char.equals("A", true) - ) - text = char - isVisible = true - } - viewModel.updateRangeDrawerCharacterList(char) - val matchIndex = try { - val match = adapter.currentList.find { - char.equals(it.appLabel.first().toString(), true) - } - adapter.currentList.indexOf(match) - } catch (e: Exception) { - e.printStackTrace() - 0 - } - linearLayoutManager.scrollToPositionWithOffset(matchIndex, 0) - } - - if (mode == CharacterIndicator.HIDE) { - lifecycleScope.launch { - delay(300L) - binding.characterIndicator.isVisible = false - } - } - }) binding.recyclerView.layoutManager = linearLayoutManager binding.recyclerView.adapter = adapter @@ -302,8 +186,6 @@ class AppDrawerFragment : Fragment() { if (requireContext().isEinkDisplay().not()) binding.recyclerView.layoutAnimation = AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.layout_anim_from_bottom) - binding.characterRecyclerView.adapter = drawerCharacterAdapter - binding.characterRecyclerView.itemAnimator = null } private fun initObservers() { @@ -317,7 +199,6 @@ class AppDrawerFragment : Fragment() { viewModel.hiddenApps.observe(viewLifecycleOwner) { it?.let { adapter.setAppList(it.toMutableList()) - submitDrawerCharacters(it) } } } else { @@ -325,14 +206,9 @@ class AppDrawerFragment : Fragment() { it?.let { appModels -> adapter.setAppList(appModels.toMutableList()) adapter.filter.filter(binding.search.query) - submitDrawerCharacters(appModels) } } } - - viewModel.drawerCharacterList.observe(viewLifecycleOwner) { characters -> - drawerCharacterAdapter.submitList(characters) - } } private fun initClickListeners() { @@ -389,16 +265,6 @@ class AppDrawerFragment : Fragment() { } } } - - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (linearLayoutManager.itemCount == 0) - return - val visiblePosition = linearLayoutManager.findFirstVisibleItemPosition() - val position = if (visiblePosition >= 0) visiblePosition else 0 - val item = adapter.currentList[position] - viewModel.updateRangeDrawerCharacterList(item.appLabel.first().toString()) - } } } @@ -408,41 +274,6 @@ class AppDrawerFragment : Fragment() { viewModel.checkForMessages.call() } - private fun submitDrawerCharacters(drawerItems: List) { - if (drawerItems.isEmpty()) { - viewModel.updateDrawerCharacterList(emptyList()) - return - } - - - val charRegex = Regex("[0-9\\\\$&+,:;=?@#|/'<>.^*()%!-]") - val emojiRegex = Regex("\\p{So}+") - val emojiRegex2 = Regex("[\uD800-\uDBFF\uDC00-\uDFFF]+") - - val firstVisibleItemPosition = - linearLayoutManager.findFirstCompletelyVisibleItemPosition() - - val position = - if (firstVisibleItemPosition >= 0) firstVisibleItemPosition else 0 - val firstVisibleItem = if (position < drawerItems.size) drawerItems[position] else null - - val drawerCharacters = - drawerItems.filter { it.appLabel.isNotEmpty() }.map { char -> - val firstLetter = char.appLabel.first().toString() - val regexMatch = charRegex.matches(firstLetter) || emojiRegex.matches( - char.appLabel.first().toString() - ) || emojiRegex2.matches(char.appLabel.first().toString()) - - if (regexMatch) "#" else firstLetter.uppercase() - }.toSet() - .map { str -> - DrawerCharacterModel(str, str.equals(firstVisibleItem?.appLabel?.first().toString(), true)) - } - - viewModel.updateDrawerCharacterList(drawerCharacters) - } - - override fun onStart() { super.onStart() binding.search.showKeyboard(prefs.autoShowKeyboard) diff --git a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt b/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt deleted file mode 100644 index f589adb78..000000000 --- a/app/src/main/java/app/olauncher/ui/DrawerCharacterAdapter.kt +++ /dev/null @@ -1,83 +0,0 @@ -package app.olauncher.ui - -import android.view.LayoutInflater -import android.view.MotionEvent -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener -import app.olauncher.R -import app.olauncher.data.Constants.CharacterIndicator -import app.olauncher.data.DrawerCharacterModel -import app.olauncher.databinding.DrawerAlphabetBinding -import app.olauncher.helper.getColorFromAttr - -class DrawerCharacterAdapter : ListAdapter(diffObject) { - inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { - private val binding = DrawerAlphabetBinding.bind(view) - fun bind(character: DrawerCharacterModel) { - - val textColor = if (character.inRange) - itemView.context.getColor(R.color.colorAccent) - else - itemView.context.getColorFromAttr(R.attr.primaryColor) - binding.character.setTextColor(textColor) - binding.character.text = character.character - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = - ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.drawer_alphabet, parent, false)) - - override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(getItem(position)) - - companion object { - val diffObject = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame( - oldItem: DrawerCharacterModel, - newItem: DrawerCharacterModel, - ): Boolean = oldItem.character == newItem.character - - override fun areContentsTheSame( - oldItem: DrawerCharacterModel, - newItem: DrawerCharacterModel, - ): Boolean = oldItem.hashCode() == newItem.hashCode() - } - } - - class CharacterTouchListener( - private val adapter: DrawerCharacterAdapter, - private val clickListener: ((String, Int, Pair) -> Unit)?, - ) : OnItemTouchListener { - - override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { - updateIndicatorView(rv, e) - return true - } - - override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) = updateIndicatorView(rv, e) - - override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) = Unit - - private fun updateIndicatorView(rv: RecyclerView, e: MotionEvent) { - val child = rv.findChildViewUnder(e.x, e.y) - child?.let { - val view = rv.getChildViewHolder(child).itemView - val itemPosition = rv.getChildAdapterPosition(child) - - clickListener?.let { - it( - adapter.currentList[itemPosition].character, - CharacterIndicator.SHOW, - Pair(view.x, view.y) - ) - } - if (e.action == MotionEvent.ACTION_UP) - clickListener?.let { it("", CharacterIndicator.HIDE, Pair(e.x, e.y)) } - } ?: clickListener?.let { it("", CharacterIndicator.HIDE, Pair(e.x, e.y)) } - } - } -} - diff --git a/app/src/main/res/drawable/rounded_rect_shade_color.xml b/app/src/main/res/drawable/rounded_rect_shade_color.xml index b3274c40b..aed39185a 100644 --- a/app/src/main/res/drawable/rounded_rect_shade_color.xml +++ b/app/src/main/res/drawable/rounded_rect_shade_color.xml @@ -4,6 +4,6 @@ diff --git a/app/src/main/res/layout-land/drawer_alphabet.xml b/app/src/main/res/layout-land/drawer_alphabet.xml deleted file mode 100644 index a40caca39..000000000 --- a/app/src/main/res/layout-land/drawer_alphabet.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_app_drawer.xml b/app/src/main/res/layout-land/fragment_app_drawer.xml index 8d2912821..c15bbb1b7 100644 --- a/app/src/main/res/layout-land/fragment_app_drawer.xml +++ b/app/src/main/res/layout-land/fragment_app_drawer.xml @@ -75,40 +75,4 @@ android:requiresFadingEdge="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_settings.xml b/app/src/main/res/layout-land/fragment_settings.xml index 0f513133a..9e00ebc5d 100644 --- a/app/src/main/res/layout-land/fragment_settings.xml +++ b/app/src/main/res/layout-land/fragment_settings.xml @@ -4,14 +4,14 @@ android:id="@+id/mainActivityLayout" android:layout_width="match_parent" android:layout_height="match_parent" - android:animateLayoutChanges="true"> + android:animateLayoutChanges="true" + android:background="?attr/primaryShadeDarkColor"> + tools:visibility="visible"> - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_app_drawer.xml b/app/src/main/res/layout/fragment_app_drawer.xml index c6cc2fb65..91d048457 100644 --- a/app/src/main/res/layout/fragment_app_drawer.xml +++ b/app/src/main/res/layout/fragment_app_drawer.xml @@ -74,41 +74,4 @@ android:fadingEdgeLength="24dp" android:requiresFadingEdge="vertical" /> - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index f4d41425f..6f292f20e 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" - android:background="?attr/primaryColorInverseTrans50"> + android:background="?attr/primaryShadeDarkColor"> Show Hide Are you using your phone, or is your phone using you? - About Olauncher + About and FAQs Digital Wellbeing Learn more Did you know? From 246d3e8f0bc04ae8cef0237b20d3544a381a9ff2 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 23 Aug 2024 15:28:12 +0530 Subject: [PATCH 031/150] Changes in set default launcher and minSdkVersion is not 24 --- app/build.gradle | 2 +- .../main/java/app/olauncher/MainActivity.kt | 34 +++++++++++-------- .../java/app/olauncher/helper/Extensions.kt | 12 +++++++ 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5ad424ebf..7c81450a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { defaultConfig { applicationId "app.olauncher" - minSdkVersion 23 + minSdkVersion 24 targetSdkVersion 34 versionCode 82 versionName "v4.3.1" diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index d3e867a57..56d3478cb 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -11,7 +11,6 @@ import android.os.Bundle import android.provider.Settings import android.view.View import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS -import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.lifecycle.ViewModelProvider @@ -20,8 +19,19 @@ import androidx.navigation.Navigation import app.olauncher.data.Constants import app.olauncher.data.Prefs import app.olauncher.databinding.ActivityMainBinding -import app.olauncher.helper.* -import java.util.* +import app.olauncher.helper.hasBeenDays +import app.olauncher.helper.isDarkThemeOn +import app.olauncher.helper.isDefaultLauncher +import app.olauncher.helper.isEinkDisplay +import app.olauncher.helper.isOlauncherDefault +import app.olauncher.helper.isTablet +import app.olauncher.helper.openUrl +import app.olauncher.helper.rateApp +import app.olauncher.helper.resetLauncherViaFakeActivity +import app.olauncher.helper.setPlainWallpaper +import app.olauncher.helper.shareApp +import app.olauncher.helper.showLauncherSelector +import java.util.Calendar class MainActivity : AppCompatActivity() { @@ -102,10 +112,10 @@ class MainActivity : AppCompatActivity() { openLauncherChooser(it) } viewModel.resetLauncherLiveData.observe(this) { -// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) - resetDefaultLauncher() -// else -// showLauncherSelector(Constants.REQUEST_CODE_LAUNCHER_SELECTOR) + if (isDefaultLauncher() || Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) + resetLauncherViaFakeActivity() + else + showLauncherSelector(Constants.REQUEST_CODE_LAUNCHER_SELECTOR) } viewModel.checkForMessages.observe(this) { checkForMessages() @@ -225,12 +235,7 @@ class MainActivity : AppCompatActivity() { private fun openLauncherChooser(resetFailed: Boolean) { if (resetFailed) { - val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) - else { - showToast(getString(R.string.search_for_Launcher_or_home_app), Toast.LENGTH_LONG) - Intent(Settings.ACTION_SETTINGS) - } + val intent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) startActivity(intent) } } @@ -245,7 +250,8 @@ class MainActivity : AppCompatActivity() { } Constants.REQUEST_CODE_LAUNCHER_SELECTOR -> { - resetDefaultLauncher() + if (resultCode == Activity.RESULT_OK) + resetLauncherViaFakeActivity() } } } diff --git a/app/src/main/java/app/olauncher/helper/Extensions.kt b/app/src/main/java/app/olauncher/helper/Extensions.kt index 3c9bda6c1..585108a2c 100644 --- a/app/src/main/java/app/olauncher/helper/Extensions.kt +++ b/app/src/main/java/app/olauncher/helper/Extensions.kt @@ -11,10 +11,12 @@ import android.content.pm.PackageManager import android.net.Uri import android.os.Build import android.os.UserHandle +import android.provider.Settings import android.view.View import android.view.WindowManager import android.view.inputmethod.InputMethodManager import androidx.annotation.RequiresApi +import app.olauncher.BuildConfig import app.olauncher.data.Constants fun View.hideKeyboard() { @@ -64,6 +66,16 @@ fun Context.resetDefaultLauncher() { } } +fun Context.isDefaultLauncher(): Boolean { + val launcherPackageName = getDefaultLauncherPackage(this) + return BuildConfig.APPLICATION_ID == launcherPackageName +} + +fun Context.resetLauncherViaFakeActivity() { + resetDefaultLauncher() + if (getDefaultLauncherPackage(this).contains(".")) + startActivity(Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)) +} fun Context.openSearch(query: String? = null) { val intent = Intent(Intent.ACTION_WEB_SEARCH) From 3335f12932b063893504a03625f27007d4b53dde Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 23 Aug 2024 16:15:55 +0530 Subject: [PATCH 032/150] Changes in text shadow --- app/src/main/res/values-night/styles.xml | 4 ++-- app/src/main/res/values/styles.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 2085d29c7..c8688e354 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -65,9 +65,9 @@ @drawable/text_colors_default ?attr/primaryColorTrans80 ?attr/primaryTextShadowColor - 1 + 0 1 - 2 + 4 diff --git a/app/src/main/res/values-xhdpi/dimens.xml b/app/src/main/res/values-xhdpi/dimens.xml index 4bdf6a247..1745fdd90 100644 --- a/app/src/main/res/values-xhdpi/dimens.xml +++ b/app/src/main/res/values-xhdpi/dimens.xml @@ -1,6 +1,6 @@ - 25sp + 28sp 16sp 12dp 10dp diff --git a/app/src/main/res/values-xxhdpi/dimens.xml b/app/src/main/res/values-xxhdpi/dimens.xml index bfaf7604f..d601687bd 100644 --- a/app/src/main/res/values-xxhdpi/dimens.xml +++ b/app/src/main/res/values-xxhdpi/dimens.xml @@ -1,6 +1,6 @@ - 27sp + 30sp 16sp 12dp 10dp diff --git a/app/src/main/res/values-xxxhdpi/dimens.xml b/app/src/main/res/values-xxxhdpi/dimens.xml index 4713aa71b..6e38b443a 100644 --- a/app/src/main/res/values-xxxhdpi/dimens.xml +++ b/app/src/main/res/values-xxxhdpi/dimens.xml @@ -1,6 +1,6 @@ - 29sp + 32sp 17sp 16dp 14dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2da7339d0..e80e1c6e2 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -66,7 +66,7 @@ ?attr/primaryColorTrans80 ?attr/primaryTextShadowColor 0 - 1 + 2 4 From 1f88ce804ed0f6d2dd7e8e8f4803b856ed3ecbea Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 23 Aug 2024 16:27:29 +0530 Subject: [PATCH 034/150] App version bumped to 82 (v4.3.2) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7c81450a7..416ea593e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 24 targetSdkVersion 34 - versionCode 82 - versionName "v4.3.1" + versionCode 83 + versionName "v4.3.2" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 6617b621afba479648a918f5ae6b8ab6cdff0dec Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 23 Aug 2024 16:36:53 +0530 Subject: [PATCH 035/150] Change in share message --- app/src/main/res/values/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 76f012a91..e12299a33 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,10 +71,10 @@ \n\nThank you. Hi, you won\'t see this message again. \n\nIf you\'re finding Olauncher useful, could you please leave a 5-star review? It\'ll mean the world to us. Thank you! - - - Your monthly reminder - you should use your phone, not the other way round. Stay strong. You\'re doing great! - \n\nIf you have a moment to spare, could you please share Olauncher with others? Olauncher needs people. More importantly, people need Olauncher. + We need your help! Last year we crossed a million downloads. This year we want to reach a million more. We can\'t do it alone. + \n\nCould you please share Olauncher with the world? Because Olauncher needs people, and people need Olauncher. + + Hi, keyboard is the fastest way to find and launch apps in Olauncher. Can we request you to keep this On for a few more days and then decide? \n\nThe choice is always yours. If you want to set time limits for certain apps, Digital Wellbeing feature of Android can help you do it. From 844163323d911b8fbd27b1753a8abc149379aa81 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 23 Aug 2024 16:37:32 +0530 Subject: [PATCH 036/150] App version bumped to 84 (v4.3.2) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 416ea593e..f6c4c8a02 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { applicationId "app.olauncher" minSdkVersion 24 targetSdkVersion 34 - versionCode 83 + versionCode 84 versionName "v4.3.2" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] From 4fa00a2c5c1686fa998f9c81dde25a92527f5b6f Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 31 Aug 2024 14:29:35 +0530 Subject: [PATCH 037/150] Search on web from app drawer --- app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index cd8e30fb2..919c78931 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -24,7 +24,6 @@ import app.olauncher.helper.isSystemApp import app.olauncher.helper.openAppInfo import app.olauncher.helper.openSearch import app.olauncher.helper.openUrl -import app.olauncher.helper.searchOnPlayStore import app.olauncher.helper.showKeyboard import app.olauncher.helper.showToast import app.olauncher.helper.uninstall @@ -84,7 +83,7 @@ class AppDrawerFragment : Fragment() { override fun onQueryTextSubmit(query: String?): Boolean { if (query?.startsWith("!") == true) requireContext().openUrl(Constants.URL_DUCK_SEARCH + query.replace(" ", "%20")) - else if (adapter.itemCount == 0 && requireContext().searchOnPlayStore(query?.trim()).not()) + else if (adapter.itemCount == 0) // && requireContext().searchOnPlayStore(query?.trim()).not()) requireContext().openSearch(query?.trim()) else adapter.launchFirstInList() From 03da448203a7521f527ed3e0852c7e2b5e4779e3 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 31 Aug 2024 14:30:17 +0530 Subject: [PATCH 038/150] Minor change in small font scale --- app/src/main/java/app/olauncher/data/Constants.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index 30aae8f25..5b3e0a749 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -43,8 +43,8 @@ object Constants { } object TextSize { - const val ONE = 0.7f - const val TWO = 0.8f + const val ONE = 0.6f + const val TWO = 0.75f const val THREE = 0.9f const val FOUR = 1f const val FIVE = 1.1f From 87022579eeb448d8fb3fd760554e163c2cf09cbc Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 31 Aug 2024 16:55:41 +0530 Subject: [PATCH 039/150] Fixed: showing keyboard after closing app drawer --- .../java/app/olauncher/ui/AppDrawerFragment.kt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt index 919c78931..1986300fd 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerFragment.kt @@ -248,19 +248,16 @@ class AppDrawerFragment : Fragment() { RecyclerView.SCROLL_STATE_DRAGGING -> { onTop = !recyclerView.canScrollVertically(-1) - if (onTop) binding.search.hideKeyboard() - // if (onTop && !recyclerView.canScrollVertically(1)) - // checkMessageAndExit() + if (onTop) + binding.search.hideKeyboard() } RecyclerView.SCROLL_STATE_IDLE -> { - if (!recyclerView.canScrollVertically(1)) { + if (!recyclerView.canScrollVertically(1)) binding.search.hideKeyboard() - } else if (!recyclerView.canScrollVertically(-1)) { - if (!onTop) binding.search.showKeyboard(prefs.autoShowKeyboard) - // if (onTop) checkMessageAndExit() - // else binding.search.showKeyboard(prefs.autoShowKeyboard) - } + else if (!recyclerView.canScrollVertically(-1)) + if (!onTop && isRemoving.not()) + binding.search.showKeyboard(prefs.autoShowKeyboard) } } } From 2fc19a0e9d1192a45b7c1a18c4bd7acf5b84ae3f Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 31 Aug 2024 23:09:02 +0530 Subject: [PATCH 040/150] Indicator for new apps --- app/src/main/java/app/olauncher/data/AppModel.kt | 1 + app/src/main/java/app/olauncher/helper/Utils.kt | 10 +++++++--- app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt | 5 ++--- app/src/main/java/app/olauncher/ui/HomeFragment.kt | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/app/olauncher/data/AppModel.kt b/app/src/main/java/app/olauncher/data/AppModel.kt index 3064bb97f..7c1196587 100644 --- a/app/src/main/java/app/olauncher/data/AppModel.kt +++ b/app/src/main/java/app/olauncher/data/AppModel.kt @@ -8,6 +8,7 @@ data class AppModel( val key: CollationKey?, val appPackage: String, val activityClassName: String?, + val isNew: Boolean? = false, val user: UserHandle, ) : Comparable { override fun compareTo(other: AppModel): Int = when { diff --git a/app/src/main/java/app/olauncher/helper/Utils.kt b/app/src/main/java/app/olauncher/helper/Utils.kt index cb2541982..14612fa5e 100644 --- a/app/src/main/java/app/olauncher/helper/Utils.kt +++ b/app/src/main/java/app/olauncher/helper/Utils.kt @@ -5,12 +5,10 @@ import android.app.SearchManager import android.app.WallpaperManager import android.content.ClipData import android.content.ClipboardManager -import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.ApplicationInfo import android.content.pm.LauncherApps -import android.content.pm.PackageManager import android.content.res.Configuration import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.graphics.Bitmap @@ -65,7 +63,12 @@ fun Context.showToast(stringResource: Int, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(this, getString(stringResource), duration).show() } -suspend fun getAppsList(context: Context, prefs: Prefs, includeRegularApps: Boolean = true, includeHiddenApps: Boolean = false): MutableList { +suspend fun getAppsList( + context: Context, + prefs: Prefs, + includeRegularApps: Boolean = true, + includeHiddenApps: Boolean = false, +): MutableList { return withContext(Dispatchers.IO) { val appList: MutableList = mutableListOf() @@ -86,6 +89,7 @@ suspend fun getAppsList(context: Context, prefs: Prefs, includeRegularApps: Bool collator.getCollationKey(app.label.toString()), app.applicationInfo.packageName, app.componentName.className, + (System.currentTimeMillis() - app.firstInstallTime) < Constants.ONE_HOUR_IN_MILLIS, profile ) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt index 76a0ebf1e..b0b0f8569 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt @@ -18,7 +18,6 @@ import app.olauncher.R import app.olauncher.data.AppModel import app.olauncher.data.Constants import app.olauncher.databinding.AdapterAppDrawerBinding -import app.olauncher.helper.AppFilterHelper import app.olauncher.helper.hideKeyboard import app.olauncher.helper.isSystemApp import app.olauncher.helper.showKeyboard @@ -131,7 +130,7 @@ class AppDrawerAdapter( fun setAppList(appsList: MutableList) { // Add empty app for bottom padding in recyclerview - appsList.add(AppModel("", null, "", "", android.os.Process.myUserHandle())) + appsList.add(AppModel("", null, "", "", false, android.os.Process.myUserHandle())) this.appsList = appsList this.appFilteredList = appsList submitList(appsList) @@ -159,7 +158,7 @@ class AppDrawerAdapter( appHideLayout.visibility = View.GONE renameLayout.visibility = View.GONE appTitle.visibility = View.VISIBLE - appTitle.text = appModel.appLabel + appTitle.text = appModel.appLabel + if (appModel.isNew == true) " ✨" else "" appTitle.gravity = appLabelGravity otherProfileIndicator.isVisible = appModel.user != myUserHandle diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index e64ecd4da..b60361167 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -333,6 +333,7 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener null, packageName, activityClassName, + false, getUserHandleFromString(requireContext(), userString) ), Constants.FLAG_LAUNCH_APP From b72530f499cbbf107dc2f4693a5eb5a6bda4dfde Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 1 Sep 2024 11:53:03 +0530 Subject: [PATCH 041/150] Copy changes --- app/src/main/res/values/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e12299a33..00ca5f106 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -71,10 +71,10 @@ \n\nThank you. Hi, you won\'t see this message again. \n\nIf you\'re finding Olauncher useful, could you please leave a 5-star review? It\'ll mean the world to us. Thank you! - We need your help! Last year we crossed a million downloads. This year we want to reach a million more. We can\'t do it alone. - \n\nCould you please share Olauncher with the world? Because Olauncher needs people, and people need Olauncher. - - + We need your help! We crossed a million downloads last year. This year, we want to reach a million more, but we can\'t do it alone. + \n\nOlauncher needs people, and people need Olauncher. Could you please share Olauncher with others? + + Hi, keyboard is the fastest way to find and launch apps in Olauncher. Can we request you to keep this On for a few more days and then decide? \n\nThe choice is always yours. If you want to set time limits for certain apps, Digital Wellbeing feature of Android can help you do it. @@ -141,7 +141,7 @@ Learn more Did you know? Leave a review - Olauncher is free and always will be. It has no ads. It collects no data. Most importantly, it helps you in reducing your screen time and live a healthier digital life. - \n\nWe believe that switching to a minimal launcher is an excellent decision. While we\'re obviously biased, we hope you\'re enjoying the experience. Feel free to share your thoughts with us! + Olauncher is free and always will be. It has no ads, collects no data, and helps you reduce screen time for a healthier digital life. + \n\nWe believe a minimal launcher is a great choice, and we hope you enjoy it. Tell the world what you think! Alignment changed ✅ \ No newline at end of file From 06618a1f44ebb87a99e45de12b0b236069baa1ea Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 1 Sep 2024 11:54:32 +0530 Subject: [PATCH 042/150] Changes in popup messages --- app/src/main/java/app/olauncher/MainActivity.kt | 7 ++++--- app/src/main/java/app/olauncher/helper/Extensions.kt | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 56d3478cb..238113279 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -20,6 +20,7 @@ import app.olauncher.data.Constants import app.olauncher.data.Prefs import app.olauncher.databinding.ActivityMainBinding import app.olauncher.helper.hasBeenDays +import app.olauncher.helper.hasBeenHours import app.olauncher.helper.isDarkThemeOn import app.olauncher.helper.isDefaultLauncher import app.olauncher.helper.isEinkDisplay @@ -184,7 +185,7 @@ class MainActivity : AppCompatActivity() { when (prefs.userState) { Constants.UserState.START -> { - if (prefs.firstOpenTime.hasBeenDays(1)) + if (prefs.firstOpenTime.hasBeenHours(1)) prefs.userState = Constants.UserState.REVIEW } @@ -199,14 +200,14 @@ class MainActivity : AppCompatActivity() { if (prefs.rateClicked) prefs.userState = Constants.UserState.SHARE else if (isOlauncherDefault(this) - && prefs.firstOpenTime.hasBeenDays(7) + && prefs.firstOpenTime.hasBeenDays(3) && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 15 ) viewModel.showDialog.postValue(Constants.Dialog.RATE) } Constants.UserState.SHARE -> { if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenDays(14) - && prefs.shareShownTime.hasBeenDays(35) + && prefs.shareShownTime.hasBeenDays(45) && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 15 ) viewModel.showDialog.postValue(Constants.Dialog.SHARE) } diff --git a/app/src/main/java/app/olauncher/helper/Extensions.kt b/app/src/main/java/app/olauncher/helper/Extensions.kt index 585108a2c..c15d9e636 100644 --- a/app/src/main/java/app/olauncher/helper/Extensions.kt +++ b/app/src/main/java/app/olauncher/helper/Extensions.kt @@ -120,3 +120,6 @@ fun Context.isPackageInstalled(packageName: String, userHandle: UserHandle = and fun Long.hasBeenDays(days: Int): Boolean = ((System.currentTimeMillis() - this) / Constants.ONE_DAY_IN_MILLIS) >= days + +fun Long.hasBeenHours(hours: Int): Boolean = + ((System.currentTimeMillis() - this) / Constants.ONE_HOUR_IN_MILLIS) >= hours From a6824c995ff94c6f51d2372899378a012f49f7fd Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 1 Sep 2024 12:05:36 +0530 Subject: [PATCH 043/150] Minor changes --- app/src/main/java/app/olauncher/MainActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 238113279..b0785026a 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -32,6 +32,7 @@ import app.olauncher.helper.resetLauncherViaFakeActivity import app.olauncher.helper.setPlainWallpaper import app.olauncher.helper.shareApp import app.olauncher.helper.showLauncherSelector +import app.olauncher.helper.showToast import java.util.Calendar class MainActivity : AppCompatActivity() { @@ -128,6 +129,7 @@ class MainActivity : AppCompatActivity() { showMessageDialog(getString(R.string.did_you_know), getString(R.string.review_message), getString(R.string.leave_a_review)) { binding.messageLayout.visibility = View.GONE prefs.rateClicked = true + showToast("😇🙏❤️") rateApp() } } @@ -137,6 +139,7 @@ class MainActivity : AppCompatActivity() { showMessageDialog(getString(R.string.app_name), getString(R.string.rate_us_message), getString(R.string.rate_now)) { binding.messageLayout.visibility = View.GONE prefs.rateClicked = true + showToast("🤩🙏❤️") rateApp() } } @@ -145,6 +148,7 @@ class MainActivity : AppCompatActivity() { prefs.shareShownTime = System.currentTimeMillis() showMessageDialog(getString(R.string.app_name), getString(R.string.share_message), getString(R.string.share_now)) { binding.messageLayout.visibility = View.GONE + showToast("😊🙏❤️") shareApp() } } From f5f9d9731dd5db2655eb26f776ad040c99515066 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 1 Sep 2024 12:06:09 +0530 Subject: [PATCH 044/150] App version bumped to 85 (v4.3.3) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f6c4c8a02..739ca824f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 24 targetSdkVersion 34 - versionCode 84 - versionName "v4.3.2" + versionCode 85 + versionName "v4.3.3" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From a03439f8131ec0d86efc41e3a19c8227d4bb3369 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 3 Sep 2024 15:04:10 +0530 Subject: [PATCH 045/150] Don't set wallpaper if phone is in landscape mode --- app/src/main/java/app/olauncher/helper/Utils.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/app/olauncher/helper/Utils.kt b/app/src/main/java/app/olauncher/helper/Utils.kt index 14612fa5e..181dfac26 100644 --- a/app/src/main/java/app/olauncher/helper/Utils.kt +++ b/app/src/main/java/app/olauncher/helper/Utils.kt @@ -264,17 +264,16 @@ suspend fun getWallpaperBitmap(originalImage: Bitmap, width: Int, height: Int): suspend fun setWallpaper(appContext: Context, url: String): Boolean { return withContext(Dispatchers.IO) { val originalImageBitmap = getBitmapFromURL(url) ?: return@withContext false - val wallpaperManager = WallpaperManager.getInstance(appContext) + if (appContext.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && isTablet(appContext).not()) + return@withContext false + val wallpaperManager = WallpaperManager.getInstance(appContext) val (width, height) = getScreenDimensions(appContext) val scaledBitmap = getWallpaperBitmap(originalImageBitmap, width, height) try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - wallpaperManager.setBitmap(scaledBitmap, null, false, WallpaperManager.FLAG_SYSTEM) - wallpaperManager.setBitmap(scaledBitmap, null, false, WallpaperManager.FLAG_LOCK) - } else - wallpaperManager.setBitmap(scaledBitmap) + wallpaperManager.setBitmap(scaledBitmap, null, false, WallpaperManager.FLAG_SYSTEM) + wallpaperManager.setBitmap(scaledBitmap, null, false, WallpaperManager.FLAG_LOCK) } catch (e: Exception) { return@withContext false } From a349434940b8ec23ddec3f827e39a3a5af10aa00 Mon Sep 17 00:00:00 2001 From: Tamas Balog Date: Fri, 6 Sep 2024 18:53:37 +0200 Subject: [PATCH 046/150] Update Hungarian translation based on the latest English changes --- app/src/main/res/values-hu/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index aa2e2fa90..ce20e109e 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -55,10 +55,10 @@ \n\nKöszönjük! Üdv, ezt az üzenetet nem fogja újra látni. \n\nHa tetszik az Olauncher, kérjük, adjon nekünk 5 csillagos értékelést! Ez segít javítani a helyezésünket, és nagyon boldoggá tesz minket. Köszönjük! - - - Az Ön havi emlékeztetője - használja Ön a telefonját, és ne a telefonja Önt! Csak így tovább! Nagyszerűen csinálja! - \n\nHa van egy kis ideje, kérjük, ossza meg másokkal is az Olauncher-t. Az Olauncher-nek szüksége van emberekre. De ami még fontosabb, az embereknek szüksége van az Olauncher-re.. + A segítségére van szükségünk! Tavaly átléptük az egymillió letöltést. Idén egy millióval többet szeretnénk elérni, de egyedül nem tudjuk megtenni. + \n\nAz Olauncher-nek emberekre van szüksége, az embereknek pedig az Olauncher-re. Köszönettel vennénk, ha megosztaná másokkal is az Olaunchert! + + Üdv, a billentyűzet a leggyorsabb módja az alkalmazások megtalálásához és elindításához az Olauncherben. Megkérhetjük, hogy hagyja bekapcsolva még néhány napig, és utána döntsön? \n\nA választás mindig az Öné. Ha időkorlátokat szeretne beállítani bizonyos alkalmazásokhoz, az Android Digital Wellbeing funkciója segíthet ebben. @@ -127,7 +127,7 @@ Tudjon meg többet Tudta? Hagyjon véleményt - Az Olauncher teljesen ingyenes és mindig is ingyenes lesz. Nincsenek hirdetései. Nem gyűjt adatokat. A legfontosabb, hogy segít csökkenteni a képernyő előtt töltött időt és egészségesebb digitális életet élni. - \n\nÚgy gondoljuk, hogy a minimális indítóra váltás kiváló döntés. Bár nyilvánvalóan elfogultak vagyunk, reméljük, hogy élvezni fogja az élményt. Nyugodtan ossza meg velünk gondolatait! + Az Olauncher teljesen ingyenes és mindig is az lesz. Nincsenek hirdetései, nem gyűjt adatokat, és segít csökkenteni a képernyő előtt töltött időt egy egészségesebb digitális élet végett. + \n\nÚgy gondoljuk, hogy egy minimális indítóra váltás kiváló döntés, és reméljük, hogy élvezni fogja. Ossza meg másokkal is tapasztalatait! Az igazítás megváltozott ✅ \ No newline at end of file From 2e30c0430c9fe8b10a0dacc74f47278700129baa Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 28 Sep 2024 10:22:20 +0530 Subject: [PATCH 047/150] Change in star indicator for new app --- app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt index b0b0f8569..cc9dd2c92 100644 --- a/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt +++ b/app/src/main/java/app/olauncher/ui/AppDrawerAdapter.kt @@ -158,7 +158,7 @@ class AppDrawerAdapter( appHideLayout.visibility = View.GONE renameLayout.visibility = View.GONE appTitle.visibility = View.VISIBLE - appTitle.text = appModel.appLabel + if (appModel.isNew == true) " ✨" else "" + appTitle.text = appModel.appLabel + if (appModel.isNew == true) " ✦" else "" appTitle.gravity = appLabelGravity otherProfileIndicator.isVisible = appModel.user != myUserHandle From d9b864e7c5ce433853ed481c35d380605c303e6f Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 12:05:30 +0530 Subject: [PATCH 048/150] Copy changes --- app/src/main/java/app/olauncher/ui/SettingsFragment.kt | 2 +- app/src/main/res/layout-land/fragment_settings.xml | 2 +- app/src/main/res/layout/fragment_settings.xml | 2 +- app/src/main/res/values-ar/strings.xml | 2 ++ app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-es-rUS/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 2 +- 21 files changed, 22 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index 531e2db37..ff88dc7e8 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -271,7 +271,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe viewModel.isOlauncherDefault.observe(viewLifecycleOwner) { if (it) { binding.setLauncher.text = getString(R.string.change_default_launcher) - prefs.toShowHintCounter = prefs.toShowHintCounter + 1 + prefs.toShowHintCounter += 1 } } viewModel.homeAppAlignment.observe(viewLifecycleOwner) { diff --git a/app/src/main/res/layout-land/fragment_settings.xml b/app/src/main/res/layout-land/fragment_settings.xml index 9e00ebc5d..22aa09cd3 100644 --- a/app/src/main/res/layout-land/fragment_settings.xml +++ b/app/src/main/res/layout-land/fragment_settings.xml @@ -97,7 +97,7 @@ android:layout_marginStart="8dp" android:layout_marginTop="12dp" android:layout_marginBottom="8dp" - android:text="@string/digital_wellbeing" + android:text="@string/screen_time" android:visibility="gone" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 6f292f20e..731db9b71 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -98,7 +98,7 @@ android:layout_marginStart="8dp" android:layout_marginTop="12dp" android:layout_marginBottom="8dp" - android:text="@string/digital_wellbeing" + android:text="@string/screen_time" android:visibility="gone" tools:visibility="visible" /> diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2ee29139b..b507ac264 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -122,4 +122,6 @@ ترك التعليق Olauncher هو وسيظل دائمًا مجانيًا تمامًا. ليس لديها إعلانات. لا يجمع أي بيانات. والأهم من ذلك أنه يساعدك على تقليل وقت الشاشة والعيش حياة رقمية أكثر صحة. \n\nنحن نعتقد أن التحول إلى الحد الأدنى من المشغل هو قرار ممتاز. على الرغم من أننا متحيزون بشكل واضح، إلا أننا نأمل أن تستمتع بالتجربة. لا تتردد في مشاركة أفكارك معنا! + + وقت الشاشة \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 12865b01a..cdcb3d8b5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -120,6 +120,7 @@ App nach links wischen deaktiviert App nach rechts wischen deaktiviert Benutzen Sie Ihr Telefon, oder nutzt Ihr Telefon Sie? + Bildschirmzeit Über Olauncher Erfahren Sie mehr Wussten Sie? diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index ccf642ca1..e119300ba 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -123,6 +123,7 @@ Acerca de Olauncher Aprende más ¿Sabías? + Tiempo de pantalla Dejar un comentario Olauncher es y será siempre completamente gratuito. No tiene anuncios. No recopila datos. Lo más importante es que te ayuda a reducir el tiempo que pasa frente a la pantalla y a vivir una vida digital más saludable. \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dudes en compartir tus pensamientos con nosotros! diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 3ee1884a2..bc2c18114 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -119,6 +119,7 @@ ¿Está usando su teléfono, o el teléfono lo usa a usted? Acerca de Olauncher Aprenda más + Tiempo de pantalla ¿Sabía qué? Dejar un comentario Olauncher es y será siempre completamente gratuito. No tiene anuncios. No recopila datos. Lo más importante es que le ayuda a reducir el tiempo que pasa frente a la pantalla y a vivir una vida digital más saludable. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0a47cbd62..272c30bca 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -124,6 +124,7 @@ Utilisez-vous votre téléphone, ou votre téléphone vous utilise-t-il? À propos Olauncher Apprendre encore plus + Temps d'écran Saviez-vous? Laisser un commentaire Olauncher est et sera toujours entièrement gratuit. Il n\'y a pas de publicité. Il ne collecte aucune donnée. Plus important encore, cela vous aide à réduire votre temps d’écran et à vivre une vie numérique plus saine. diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index fda7d01aa..d284f9e38 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -84,6 +84,7 @@ Obavijesti Saznajte više Dali si znao? + Vrijeme na ekranu Ostavite recenziju Olauncher jest i uvijek će biti potpuno besplatan. Nema reklama. Ne prikuplja podatke. Što je najvažnije, pomaže vam u smanjenju vremena koje provodite pred ekranom i živite zdravijim digitalnim životom. \n\nVjerujemo da je prelazak na minimalni launcher izvrsna odluka. Iako smo očito pristrani, nadamo se da uživate u iskustvu. Slobodno podijelite svoje misli s nama! diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index aa2e2fa90..527ff1faf 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -123,7 +123,7 @@ Rejtsd el! Ön használja a telefonját, vagy a telefonja használja Önt? Az Olauncher-ről - Digitális jóllét + Képernyőidő Tudjon meg többet Tudta? Hagyjon véleményt diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 13c80186f..56a6e483d 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -119,6 +119,7 @@ Apakah Anda menggunakan ponsel Anda, atau ponsel Anda menggunakan Anda? Tentang Olauncher Pelajari lebih lanjut + Waktu layar Tahukah kamu? Tinggalkan ulasan Olauncher sepenuhnya gratis dan akan selalu gratis. Tidak ada iklan. Tidak mengumpulkan data pribadi. Yang terpenting, ini membantu Anda mengurangi waktu pemakaian perangkat dan menjalani kehidupan digital yang lebih sehat. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 639f447f7..41a6fb585 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -122,6 +122,7 @@ Stai usando il tuo telefono, o è il tuo telefono che sta usando te? Info Olauncher Saperne di più + Tempo di schermo Lo sapevate? Lascia una recensione Olauncher è e sarà sempre completamente gratuito. Non ha pubblicità. Non raccoglie dati. Ancora più importante, ti aiuta a ridurre il tempo trascorso davanti allo schermo e a vivere una vita digitale più sana. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 7b66dc38c..438e23935 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -117,6 +117,7 @@ アプリを左にスワイプ有効化 アプリを右にスワイプ有効 左にスワイプするとアプリが無効になります + スクリーンタイム アプリを右にスワイプすると無効になります あなたは電話を使っていますか、それともあなたの電話があなたを使っていますか? アバウト Olauncher diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 4511a80bb..bba9f9d53 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -119,6 +119,7 @@ Gest Przesuń w prawo jest wyłączony Czy używasz telefonu, czy telefon używa ciebie? O Olauncher + Czas ekranowy Ucz się więcej Czy wiedziałeś? Ucz się więcej diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a1edb7850..2153e4e07 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -122,6 +122,7 @@ Você está usando seu telefone, ou seu telefone está usando você? Sobre Olauncher Saber mais + Tempo de tela Você sabia? Deixe um comentário Olauncher é e sempre será totalmente gratuito. Não tem anúncios. Não coleta dados. Mais importante ainda, ajuda você a reduzir o tempo de tela e a ter uma vida digital mais saudável. diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 652378b3e..5198eaa6e 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -121,6 +121,7 @@ Скрыть Вы используете свой телефон, или ваш телефон использует вас? О нас Olauncher + Время на экране Узнать больше Вы знали? Оставить отзыв diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 9e323c9e8..4f8c984ad 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -120,7 +120,7 @@ Dölj Använder du din telefon, eller använder din telefon dig? Om Olauncher - Digitalt välmående + Skärmtid Läs mer Visste du? Lämna en recension diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 01fb2877c..79780d134 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -122,6 +122,7 @@ Sen mi telefonunu, kullanıyorsun yoksa telefon mu seni kullanıyor? Hakkında Olauncher Daha fazla bilgi edin + Ekran süresi Biliyor musun? İnceleme bırak Olauncher tamamen ücretsizdir ve her zaman ücretsiz olacaktır. Hiçbir reklamı yok. Hiçbir veri toplamaz. En önemlisi ekran başında geçirdiğiniz süreyi azaltmanıza ve daha sağlıklı bir dijital yaşam sürmenize yardımcı olur. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 3b1a987f4..1e0902e75 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -122,6 +122,7 @@ Ви користуєтеся своїм телефоном, чи ваш телефон використовує вас? Про нас Olauncher Вивчайте більше + Час екрану Ти знав? Залиште відгук Olauncher є і завжди буде абсолютно безкоштовним. У ньому немає реклами. Він не збирає дані. Найважливіше те, що це допомагає вам скоротити час використання екрана та жити здоровішим цифровим життям. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 4113bee9a..2d0b3a7ec 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -122,6 +122,7 @@ 是你在用手机,还是手机在用你? 关于 Olauncher 了解更多 + 屏幕时间 你可知道? 发表评论 Olauncher 现在并且永远是完全免费的。它没有广告。它不收集任何数据。最重要的是,它可以帮助您减少屏幕时间并过上更健康的数字生活。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 00ca5f106..6ef72cb03 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -137,7 +137,7 @@ Hide Are you using your phone, or is your phone using you? About and FAQs - Digital Wellbeing + Screen time Learn more Did you know? Leave a review From 1f468fd05e29729e3d58e35951a1696af795042d Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 12:15:51 +0530 Subject: [PATCH 049/150] Added some missing translations! --- app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-es-rUS/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values-hr/strings.xml | 40 ++++++++++++++++++++++ app/src/main/res/values-hu/strings.xml | 6 ++-- app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + 17 files changed, 59 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b507ac264..a6b0947d1 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -124,4 +124,5 @@ \n\nنحن نعتقد أن التحول إلى الحد الأدنى من المشغل هو قرار ممتاز. على الرغم من أننا متحيزون بشكل واضح، إلا أننا نأمل أن تستمتع بالتجربة. لا تتردد في مشاركة أفكارك معنا! وقت الشاشة + تم تغيير المحاذاة ✅ \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index cdcb3d8b5..2e83bdac2 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -127,4 +127,5 @@ Rezension Olauncher ist und bleibt völlig kostenlos. Es gibt keine Werbung. Es werden keine Daten erfasst. Am wichtigsten ist, dass es Ihnen dabei hilft, Ihre Bildschirmzeit zu verkürzen und ein gesünderes digitales Leben zu führen. \n\nWir glauben, dass der Wechsel zu einem Minimal Launcher eine ausgezeichnete Entscheidung ist. Obwohl wir offensichtlich voreingenommen sind, hoffen wir, dass Ihnen die Erfahrung gefällt. Teilen Sie uns gerne Ihre Gedanken mit! + Ausrichtung geändert ✅ diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e119300ba..d01d9a0eb 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -127,4 +127,5 @@ Dejar un comentario Olauncher es y será siempre completamente gratuito. No tiene anuncios. No recopila datos. Lo más importante es que te ayuda a reducir el tiempo que pasa frente a la pantalla y a vivir una vida digital más saludable. \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dudes en compartir tus pensamientos con nosotros! + Alineación cambiada ✅ diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index bc2c18114..be60ea68e 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -124,4 +124,5 @@ Dejar un comentario Olauncher es y será siempre completamente gratuito. No tiene anuncios. No recopila datos. Lo más importante es que le ayuda a reducir el tiempo que pasa frente a la pantalla y a vivir una vida digital más saludable. \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dude en compartir sus pensamientos con nosotros! + Alineación cambiada ✅ diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 272c30bca..7a38be767 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -124,9 +124,10 @@ Utilisez-vous votre téléphone, ou votre téléphone vous utilise-t-il? À propos Olauncher Apprendre encore plus - Temps d'écran + Temps d\'écran Saviez-vous? Laisser un commentaire Olauncher est et sera toujours entièrement gratuit. Il n\'y a pas de publicité. Il ne collecte aucune donnée. Plus important encore, cela vous aide à réduire votre temps d’écran et à vivre une vie numérique plus saine. \n\nNous pensons que passer à un lanceur minimal est une excellente décision. Même si nous sommes évidemment partiaux, nous espérons que vous appréciez l\'expérience. N\'hésitez pas à partager vos idées avec nous! + Alignement changé ✅ diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index d284f9e38..5fc882bdf 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -58,6 +58,8 @@ \n\nBok, ako uživaš u korištenju Olaunchera, možeš li nam dati recenziju s 5 zvijezdica? To nam donosi više korisnika i usrećuje nas.\nHvala ti i sretan ostatak dana! Bok, trebamo tvoju pomoć! Prošle godine prešli smo milijun preuzimanja. Ove godine želimo doseći milijun više, ali ne možemo sami. \n\nHoćete li, molim vas, biti ljubazni podijeliti Olauncher sa svojim prijateljima? Hvala i ugodan dan! + Bok, tipkovnica je najbrži način za pronalaženje i pokretanje aplikacija u Olauncheru. Možemo li vas zamoliti da to zadržite uključeno još nekoliko dana, a zatim odlučite? + \n\nIzbor je uvijek vaš. Ako želite postaviti vremenska ograničenja za određene aplikacije, značajka Digital Wellbeing na Androidu može vam pomoći u tome. \n\nPotražite Digital Wellbeing u postavkama telefona i omogućite ga. Dozvola za pristupačnost potrebna je za omogućavanje zaključavanja dvostrukim dodirom. Bilo koji podatci prikupljeni ovim servisom neće napustiti tvoj uređaj. @@ -67,6 +69,7 @@ Otvori poveznicu Kopiraj Zatvori + Ne sad Javni plan razvoja Olaunchera Instagram Twitter @@ -88,4 +91,41 @@ Ostavite recenziju Olauncher jest i uvijek će biti potpuno besplatan. Nema reklama. Ne prikuplja podatke. Što je najvažnije, pomaže vam u smanjenju vremena koje provodite pred ekranom i živite zdravijim digitalnim životom. \n\nVjerujemo da je prelazak na minimalni launcher izvrsna odluka. Iako smo očito pristrani, nadamo se da uživate u iskustvu. Slobodno podijelite svoje misli s nama! + + Molimo vas da uključite ili isključite Olauncherovu uslugu pristupa u postavkama vašeg uređaja kako biste omogućili ili onemogućili ovu funkciju.\n\nImajte na umu da se ova usluga koristi samo za isključivanje ekrana vašeg uređaja pomoću geste dvostrukog dodira. Naša usluga pristupa ne prikuplja niti dijeli bilo kakve podatke. + Prihvati + Dozvola + Dvostruki dodir za zaključavanje + Omogući + Onemogući + Ne radi? + Informacije + Izbriši + Veličina teksta + Omogućeno + Onemogućeno + Molimo vas da uključite dvostruki dodir za otključavanje + Olauncher nije uspio zaključati uređaj.\nMolimo provjerite postavke aplikacije. + Dugo pritisnite za odabir aplikacije + Nije moguće otvoriti informacije o aplikaciji + Kopirano + Sistemska aplikacija, ne može se izbrisati + Prvo upišite novo ime aplikacije + Aplikacija nije pronađena + Nije moguće pokrenuti aplikaciju + Pretraži Launcher ili Home aplikaciju + Povucite lijevo, aplikacija omogućena + Povucite desno, aplikacija omogućena + Povucite lijevo, aplikacija onemogućena + Povucite desno, aplikacija onemogućena + Vaša pozadina će se uskoro ažurirati + Olauncher nije zadani. Ažuriranje pozadine će ne uspjeti. + Dugo pritisnite za omogućavanje + Nema skrivenih aplikacija + Skrivene aplikacije + Prikaži + Sakrij + Koristite li svoj telefon ili vaš telefon koristi vas? + O Olauncher-u i ČPP + Poravnanje promijenjeno ✅ diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 527ff1faf..f93d3a033 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -55,8 +55,8 @@ \n\nKöszönjük! Üdv, ezt az üzenetet nem fogja újra látni. \n\nHa tetszik az Olauncher, kérjük, adjon nekünk 5 csillagos értékelést! Ez segít javítani a helyezésünket, és nagyon boldoggá tesz minket. Köszönjük! - - + + Az Ön havi emlékeztetője - használja Ön a telefonját, és ne a telefonja Önt! Csak így tovább! Nagyszerűen csinálja! \n\nHa van egy kis ideje, kérjük, ossza meg másokkal is az Olauncher-t. Az Olauncher-nek szüksége van emberekre. De ami még fontosabb, az embereknek szüksége van az Olauncher-re.. Üdv, a billentyűzet a leggyorsabb módja az alkalmazások megtalálásához és elindításához az Olauncherben. Megkérhetjük, hogy hagyja bekapcsolva még néhány napig, és utána döntsön? @@ -129,5 +129,5 @@ Hagyjon véleményt Az Olauncher teljesen ingyenes és mindig is ingyenes lesz. Nincsenek hirdetései. Nem gyűjt adatokat. A legfontosabb, hogy segít csökkenteni a képernyő előtt töltött időt és egészségesebb digitális életet élni. \n\nÚgy gondoljuk, hogy a minimális indítóra váltás kiváló döntés. Bár nyilvánvalóan elfogultak vagyunk, reméljük, hogy élvezni fogja az élményt. Nyugodtan ossza meg velünk gondolatait! - Az igazítás megváltozott ✅ + Igazítás megváltozott ✅ \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 56a6e483d..b1b12a18c 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -124,4 +124,5 @@ Tinggalkan ulasan Olauncher sepenuhnya gratis dan akan selalu gratis. Tidak ada iklan. Tidak mengumpulkan data pribadi. Yang terpenting, ini membantu Anda mengurangi waktu pemakaian perangkat dan menjalani kehidupan digital yang lebih sehat. \n\nKami percaya bahwa beralih ke peluncur minimal adalah keputusan yang sangat baik. Meskipun kami jelas-jelas bias, kami harap Anda menikmati pengalaman ini. Jangan ragu untuk berbagi pemikiran Anda dengan kami! + Penyelarasan diubah ✅ \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 41a6fb585..f6cae2216 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -127,4 +127,5 @@ Lascia una recensione Olauncher è e sarà sempre completamente gratuito. Non ha pubblicità. Non raccoglie dati. Ancora più importante, ti aiuta a ridurre il tempo trascorso davanti allo schermo e a vivere una vita digitale più sana. \n\nCrediamo che passare a un launcher minimale sia un\'ottima decisione. Anche se siamo ovviamente di parte, ci auguriamo che l\'esperienza ti piaccia. Sentitevi liberi di condividere i tuoi pensieri con noi! + Allineamento cambiato ✅ \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 438e23935..1420e9e28 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -126,4 +126,5 @@ レビューを残す Olauncher は現在も、今後も完全に無料です。広告はありません。データは収集されません。最も重要なことは、スクリーンタイムを短縮し、より健康的なデジタル ライフを送るのに役立つことです。 \n\n私たちは、最小限のランチャーに切り替えるのは素晴らしい決断だと信じています。明らかに偏見がありますが、楽しんでいただければ幸いです。ぜひご意見をお聞かせください。 + アライメントが変更されました ✅ \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index bba9f9d53..178654ec0 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -125,4 +125,5 @@ Ucz się więcej Olauncher jest i zawsze będzie całkowicie darmowy. Nie zawiera reklam. Nie zbiera żadnych danych. Co najważniejsze, pomaga skrócić czas spędzany przed ekranem i prowadzić zdrowsze cyfrowe życie. \n\nWierzymy, że przejście na minimalny program uruchamiający to doskonała decyzja. Chociaż jesteśmy oczywiście stronniczy, mamy nadzieję, że spodoba ci się to doświadczenie. Podziel się z nami swoimi przemyśleniami! + Wyrównanie zmienione ✅ diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2153e4e07..32af0ac58 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -127,4 +127,5 @@ Deixe um comentário Olauncher é e sempre será totalmente gratuito. Não tem anúncios. Não coleta dados. Mais importante ainda, ajuda você a reduzir o tempo de tela e a ter uma vida digital mais saudável. \n\nAcreditamos que mudar para um launcher mínimo é uma excelente decisão. Embora sejamos obviamente tendenciosos, esperamos que você esteja gostando da experiência. Sinta-se à vontade para compartilhar suas idéias conosco! + Alinhamento alterado ✅ \ No newline at end of file diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 5198eaa6e..61b2fa33b 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -127,4 +127,5 @@ Оставить отзыв Olauncher есть и всегда будет полностью бесплатным. В нем нет рекламы. Он не собирает никаких данных. Самое главное, это помогает вам сократить время, проводимое перед экраном, и вести более здоровую цифровую жизнь. \n\nМы считаем, что переход на минимальный лаунчер — отличное решение. Хотя мы явно предвзяты, мы надеемся, что вам понравится этот опыт. Не стесняйтесь поделиться с нами своим мнением! + Выравнивание изменено ✅ diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 4f8c984ad..424a45fc6 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -126,5 +126,5 @@ Lämna en recension Olauncher är gratis och kommer alltid att vara det. Den har inga annonser. Den samlar inte in någon data. Viktigast av allt, det hjälper dig att minska din skärmtid och leva ett hälsosammare digitalt liv. \n\nVi tycker att det är ett utmärkt beslut att byta till en minimalistisk startskärmsapp. Även om vi uppenbarligen är partiska, hoppas vi att du gillar upplevelsen. Vi vill gärna höra dina tankar! - Placering ändrad ✅ + Justering ändrad ✅ \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 79780d134..637eed2c7 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -127,4 +127,5 @@ İnceleme bırak Olauncher tamamen ücretsizdir ve her zaman ücretsiz olacaktır. Hiçbir reklamı yok. Hiçbir veri toplamaz. En önemlisi ekran başında geçirdiğiniz süreyi azaltmanıza ve daha sağlıklı bir dijital yaşam sürmenize yardımcı olur. \n\nMinimal bir başlatıcıya geçmenin mükemmel bir karar olduğuna inanıyoruz. Açıkça ön yargılı olsak da, bu deneyimden keyif alacağınızı umuyoruz. Düşüncelerinizi bizimle paylaşmaktan çekinmeyin! + Hizalama değiştirildi ✅ \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 1e0902e75..33f35460c 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -127,4 +127,5 @@ Залиште відгук Olauncher є і завжди буде абсолютно безкоштовним. У ньому немає реклами. Він не збирає дані. Найважливіше те, що це допомагає вам скоротити час використання екрана та жити здоровішим цифровим життям. \n\nМи вважаємо, що перехід на мінімальний лаунчер є відмінним рішенням. Хоча ми явно упереджені, ми сподіваємося, що вам сподобається. Не соромтеся поділитися з нами своїми думками! + Вирівнювання змінено ✅ diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 2d0b3a7ec..0297c46bf 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -127,4 +127,5 @@ 发表评论 Olauncher 现在并且永远是完全免费的。它没有广告。它不收集任何数据。最重要的是,它可以帮助您减少屏幕时间并过上更健康的数字生活。 \n\n我们相信切换到最小启动器是一个很好的决定。虽然我们显然有偏见,但我们希望您喜欢这次体验。请随时与我们分享您的想法! + 对齐已更改 ✅ From 743a2221d61c7281d7a901331f795495d5baf952 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 12:49:34 +0530 Subject: [PATCH 050/150] Minor text size changes --- app/src/main/res/values-xxhdpi/dimens.xml | 2 +- app/src/main/res/values-xxxhdpi/dimens.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-xxhdpi/dimens.xml b/app/src/main/res/values-xxhdpi/dimens.xml index d601687bd..34d6328fc 100644 --- a/app/src/main/res/values-xxhdpi/dimens.xml +++ b/app/src/main/res/values-xxhdpi/dimens.xml @@ -5,6 +5,6 @@ 12dp 10dp - 70sp + 66sp 18sp \ No newline at end of file diff --git a/app/src/main/res/values-xxxhdpi/dimens.xml b/app/src/main/res/values-xxxhdpi/dimens.xml index 6e38b443a..247b4a572 100644 --- a/app/src/main/res/values-xxxhdpi/dimens.xml +++ b/app/src/main/res/values-xxxhdpi/dimens.xml @@ -5,6 +5,6 @@ 16dp 14dp - 70sp + 66sp 18sp From 781bd67dc7efd492360ec1d9777e327057a5e857 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 13:09:36 +0530 Subject: [PATCH 051/150] Translation and copy changes --- app/src/main/java/app/olauncher/MainActivity.kt | 11 ++++++++--- app/src/main/java/app/olauncher/data/Constants.kt | 1 + .../main/java/app/olauncher/ui/SettingsFragment.kt | 1 + app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 3 ++- app/src/main/res/values-es-rES/strings.xml | 3 ++- app/src/main/res/values-es-rUS/strings.xml | 3 ++- app/src/main/res/values-fr/strings.xml | 3 ++- app/src/main/res/values-hr/strings.xml | 4 ++-- app/src/main/res/values-hu/strings.xml | 4 ++-- app/src/main/res/values-in/strings.xml | 3 ++- app/src/main/res/values-it/strings.xml | 4 ++-- app/src/main/res/values-ja/strings.xml | 3 ++- app/src/main/res/values-pl/strings.xml | 3 ++- app/src/main/res/values-pt-rBR/strings.xml | 3 ++- app/src/main/res/values-ru-rRU/strings.xml | 3 ++- app/src/main/res/values-sv/strings.xml | 4 ++-- app/src/main/res/values-tr/strings.xml | 3 ++- app/src/main/res/values-uk/strings.xml | 3 ++- app/src/main/res/values-zh/strings.xml | 3 ++- app/src/main/res/values/strings.xml | 4 ++-- 21 files changed, 45 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index b0785026a..ca4cbfc99 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -124,12 +124,17 @@ class MainActivity : AppCompatActivity() { } viewModel.showDialog.observe(this) { when (it) { + Constants.Dialog.ABOUT -> { + showMessageDialog(getString(R.string.app_name), getString(R.string.welcome_to_olauncher_settings), getString(R.string.okay)) { + binding.messageLayout.visibility = View.GONE + } + } Constants.Dialog.REVIEW -> { prefs.userState = Constants.UserState.RATE showMessageDialog(getString(R.string.did_you_know), getString(R.string.review_message), getString(R.string.leave_a_review)) { binding.messageLayout.visibility = View.GONE prefs.rateClicked = true - showToast("😇🙏❤️") + showToast("😇❤️") rateApp() } } @@ -139,7 +144,7 @@ class MainActivity : AppCompatActivity() { showMessageDialog(getString(R.string.app_name), getString(R.string.rate_us_message), getString(R.string.rate_now)) { binding.messageLayout.visibility = View.GONE prefs.rateClicked = true - showToast("🤩🙏❤️") + showToast("🤩❤️") rateApp() } } @@ -148,7 +153,7 @@ class MainActivity : AppCompatActivity() { prefs.shareShownTime = System.currentTimeMillis() showMessageDialog(getString(R.string.app_name), getString(R.string.share_message), getString(R.string.share_now)) { binding.messageLayout.visibility = View.GONE - showToast("😊🙏❤️") + showToast("😊❤️") shareApp() } } diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index 5b3e0a749..b7bd8b190 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -8,6 +8,7 @@ object Constants { } object Dialog { + const val ABOUT = "ABOUT" const val REVIEW = "REVIEW" const val RATE = "RATE" const val SHARE = "SHARE" diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index ff88dc7e8..c6b21304f 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -266,6 +266,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe private fun initObservers() { if (prefs.firstSettingsOpen) { + viewModel.showDialog.postValue(Constants.Dialog.ABOUT) prefs.firstSettingsOpen = false } viewModel.isOlauncherDefault.observe(viewLifecycleOwner) { diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index a6b0947d1..f65131514 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -85,7 +85,7 @@ نظام مظلم ضوء - تحتوي صفحة \"حول\" في الأسفل على إجابات لجميع أسئلتك. لا تنسى. شكرًا لك. + مرحبًا بك في الإعدادات!\n\nتذكر، إذا كان لديك أي سؤال، فإن صفحة "حول" لدينا تحتوي على الإجابة. مرحبًا ، لن ترى هذه الرسالة مرة أخرى. \n\nإذا كنت تحب Olauncher ، فهل يمكنك أن تعطينا تصنيف 5 نجوم؟ يساعدنا ذلك على تحسين تصنيفنا ويجعلنا سعداء. شكرًا لك! مرحبا، نحن بحاجة لمساعدتكم! في العام الماضي تجاوزنا مليون عملية تنزيل. نريد هذا العام أن نصل إلى مليون آخرين ولكن لا يمكننا القيام بذلك بمفردنا. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2e83bdac2..c1dfd9617 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -86,7 +86,8 @@ System Dunkel Hell - Auf unserer About-Seite unten finden Sie Antworten auf alle Ihre Fragen. Vergiss es nicht. :)\n\nDan­ke­schön. + Willkommen in den Einstellungen! + \n\nDenken Sie daran, wenn Sie Fragen haben, unsere Seite „Über“ hat die Antwort. Hallo, diese Nachricht wird Ihnen nicht mehr angezeigt. \n\nWenn Ihnen Olauncher gefällt, können Sie uns bitte eine 5-Sterne-Bewertung geben? Es hilft uns, unser Ranking zu verbessern und macht uns glücklich. Dan­ke­schön! Hallo, wir brauchen deine Hilfe! Letztes Jahr haben wir die Marke von einer Million Downloads überschritten. Dieses Jahr wollen wir eine Million mehr erreichen, aber alleine schaffen wir das nicht. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index d01d9a0eb..ab1ce0569 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -53,7 +53,8 @@ Sistema Oscuro Claro - Nuestra página \'Acerca de\' en la parte inferior tiene respuestas a todas sus preguntas. no lo olvides :)\n\nGracias. + ¡Bienvenido a la configuración! + \n\nRecuerda, si tienes alguna pregunta, nuestra página Acerca de tiene la respuesta. Hola, no volverás a ver este mensaje. \n\nSi te gusta Olauncher, ¿puedes darnos una calificación de 5 estrellas? Nos ayuda a mejorar nuestra clasificación y nos hace felices. ¡Gracias! Hola, necesitamos tu ayuda! El año pasado superamos el millón de descargas. Este año queremos llegar a un millón más, pero no podemos hacerlo solos. diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index be60ea68e..91ec3aac3 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -53,7 +53,8 @@ Sistema Oscuro Claro - Nuestra página Acerca de en la parte inferior tiene respuestas a todas tus preguntas. No lo olvides. :) + ¡Bienvenido a la configuración! + \n\nRecuerda, si tienes alguna pregunta, nuestra página Acerca de tiene la respuesta. Hola, no volverá a ver este mensaje. \n\nSi le gusta Olauncher, ¿puede darnos una calificación de 5 estrellas? Nos ayuda a mejorar nuestra clasificación y nos hace felices. ¡Gracias! Hola, necesitamos su ayuda! El año pasado superamos el millón de descargas. Este año queremos llegar a un millón más pero no podemos hacerlo solos. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7a38be767..41c6e93ac 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -53,7 +53,8 @@ Système Sombre Clair - Notre page \"À propos\" en bas a des réponses à toutes vos questions. :)\n\nMerci! + Bienvenue dans les paramètres ! + \n\nN\'oubliez pas, si vous avez des questions, notre page À propos a la réponse. Hé, trouvez-vous Olauncher utile? Si oui, une note de 5 étoiles est le meilleur moyen de nous soutenir. \n\nMerci, vous ne verrez plus ce message. Bonjour, nous avons besoin de votre aide ! L\'année dernière, nous avons franchi le million de téléchargements. Cette année, nous voulons atteindre un million de plus, mais nous ne pouvons pas le faire seuls. diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 5fc882bdf..ffe9c9e2c 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -52,8 +52,8 @@ Sustav Tamna Svijetla - Naša stranica s informacijama na dnu zaslona ima odgovore na sva tvoja pitanja. Nemoj zaboraviti to. :) - \n\nHvala ti. + Dobrodošli u postavke! + \n\nZapamtite, ako imate bilo kakvih pitanja, naša stranica O nama ima odgovor. Ovu poruku više nećeš vidjeti. \n\nBok, ako uživaš u korištenju Olaunchera, možeš li nam dati recenziju s 5 zvijezdica? To nam donosi više korisnika i usrećuje nas.\nHvala ti i sretan ostatak dana! Bok, trebamo tvoju pomoć! Prošle godine prešli smo milijun preuzimanja. Ove godine želimo doseći milijun više, ali ne možemo sami. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index f93d3a033..2009c9fdf 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -51,8 +51,8 @@ Rendszer Sötét Világos - A Névjegy oldalunk alján megtalálja a válaszokat minden kérdésére. Ne feledje el. :) - \n\nKöszönjük! + Üdvözöljük a beállításokban! + \n\nNe feledje, ha bármilyen kérdése van, az „Rólunk” oldalunk tartalmazza a választ. Üdv, ezt az üzenetet nem fogja újra látni. \n\nHa tetszik az Olauncher, kérjük, adjon nekünk 5 csillagos értékelést! Ez segít javítani a helyezésünket, és nagyon boldoggá tesz minket. Köszönjük! diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index b1b12a18c..cf4e4e264 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -53,7 +53,8 @@ Sistem Gelap Terang - Halaman Tentang kami di bagian bawah memiliki jawaban atas semua pertanyaan Anda. Jangan lupa. :) + Selamat datang di pengaturan! + \n\nIngat, jika Anda memiliki pertanyaan, halaman Tentang kami memiliki jawabannya. Hai, Anda tidak akan melihat pesan ini lagi. \n\nJika Anda menyukai Olauncher, bisakah Anda memberi kami peringkat bintang 5? Ini membantu kami meningkatkan peringkat kami dan membuat kami bahagia. Terima kasih! Hai, kami membutuhkan bantuan Anda! Tahun lalu kami melampaui satu juta unduhan. Tahun ini kami ingin menjangkau satu juta orang lagi tetapi kami tidak dapat melakukannya sendiri. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f6cae2216..8b3fd6c86 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -52,8 +52,8 @@ di sistema Scuro Chiaro - La nostra pagina Informazioni in basso ha le risposto a tutte le tue domande. Non dimenticare. :) - \n\nGrazie. + Benvenuto nelle impostazioni! + \n\nRicorda, se hai domande, la nostra pagina Informazioni ha la risposta. Ehi, trovi utile Olauncher? Se sì, una valutazione a 5 stelle è il modo migliore per sostenerci. \n\nGrazie e non lo vedrai più. Ciao, abbiamo bisogno del tuo aiuto! L\'anno scorso abbiamo superato il milione di download. Quest’anno vogliamo raggiungere un milione in più ma non possiamo farcela da soli. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1420e9e28..5f5fcf734 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -87,7 +87,8 @@ システム ダーク ライト - 下部にある当社の概要ページには、すべての質問への回答が記載されています。忘れないで。 :)\n\nありがとう。 + 設定へようこそ! + \n\n質問がある場合は、私たちの「About」ページに答えがありますので、覚えておいてください。 ねえ、Olauncher は役に立つと思いますか? 「はい」の場合、5 つ星の評価が私たちをサポートする最善の方法です。\n\nありがとう、もうこれを見ることはないだろう。 こんにちは、あなたの助けが必要です!昨年、ダウンロード数が 100 万件を突破しました。今年はさらに 100 万人を達成したいと考えていますが、私たちだけでは達成できません。 \n\nOlauncher をお友達と共有していただけますか?ありがとう、そして素晴らしい一日をお過ごしください! diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 178654ec0..7970b0428 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -86,7 +86,8 @@ System Ciemny Jasny - Nasza strona Informacje na dole zawiera odpowiedzi na wszystkie Twoje pytania. Nie zapomnij. :)\n\nDziękuję. + Witamy w ustawieniach! + \n\nPamiętaj, jeśli masz jakiekolwiek pytania, nasza strona „O nas” ma odpowiedź. Hej, czy uważasz, że Olauncher jest przydatny? Jeśli tak, ocena 5 gwiazdek to najlepszy sposób, aby nas wesprzeć.\n\nDziękuję i więcej tego nie zobaczysz. Cześć, potrzebujemy Twojej pomocy! W zeszłym roku przekroczyliśmy milion pobrań. W tym roku chcemy dotrzeć do kolejnego miliona, ale sami nie możemy tego zrobić. \n\nCzy byłbyś tak miły i udostępnił Olauncher swoim znajomym? Dziękuję i życzę cudownego dnia! diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 32af0ac58..3af6d22ba 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -53,7 +53,8 @@ Sistema Escuro Claro - Nossa página Sobre, na parte inferior, tem respostas para todas as suas perguntas. Não se esqueça. :) + Bem-vindo às configurações! + \n\nLembre-se, se você tiver alguma dúvida, nossa página Sobre tem a resposta. Ei, você acha Olauncher útil? Se sim, uma classificação de 5 estrelas é a melhor maneira de nos apoiar. Obrigado. Olá, precisamos da sua ajuda! No ano passado ultrapassamos um milhão de downloads. Este ano queremos chegar a mais um milhão, mas não podemos fazê-lo sozinhos. \n\nVocê poderia fazer a gentileza de compartilhar o Olauncher com seus amigos, por favor? Obrigado e tenha um dia maravilhoso! diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 61b2fa33b..51abd3b00 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -53,7 +53,8 @@ Системная Темная Светлая - На странице «О нас» внизу есть ответы на все ваши вопросы. Не забывайте. :) + Добро пожаловать в настройки! + \n\nПомните, если у вас есть вопросы, на нашей странице «О нас» есть ответ. Здравствуйте, вы больше не увидите это сообщение. \n\nЕсли вам нравится Olauncher, не могли бы вы поставить нам 5 звезд? Это поможет улучшить наш рейтинг и сделает нас счастливыми. Спасибо! Привет, нам нужна ваша помощь! В прошлом году мы преодолели миллион загрузок. В этом году мы хотим достичь еще миллиона, но мы не можем сделать это в одиночку. diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 424a45fc6..aaf77f01c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -52,8 +52,8 @@ System Mörkt Ljust - Tips: Vår Om-sida har svar på alla dina frågor. Glöm inte det. :) - \n\nTack. + Välkommen till inställningarna! + \n\nKom ihåg, om du har några frågor har vår sida Om oss svaret. Hejsan, du kommer inte att se detta meddelande igen. \n\nOm du tycker att Olauncher är användbar, skulle du vänligen kunna lämna en 5-stjärnig recension? Det skulle göra oss väldigt glada. Tack! Vi behöver din hjälp! Förra året passerade vi en miljon nedladdningar. I år vill vi nå en miljon till, men vi kan inte göra det på egen hand. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 637eed2c7..8f9b8daa0 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -86,7 +86,8 @@ sistem Karanlık Işık - Alt kısımdaki Hakkında sayfamızda tüm sorularınızın yanıtları bulunmaktadır. unutma :)\n\nTeşekkür ederim. + Ayarlar sayfasına hoş geldiniz! + \n\nUnutmayın, herhangi bir sorunuz varsa, Hakkında sayfamızda cevap var. Merhaba, bu mesajı bir daha görmeyeceksiniz. \n\nOlauncher\'ı beğendiyseniz, lütfen bize 5 yıldız verebilir misiniz? Sıralamamızı yükseltmemize yardımcı oluyor ve bizi mutlu ediyor. Teşekkür ederim! Merhaba, yardımınıza ihtiyacımız var! Geçen yıl bir milyon indirmeyi geçtik. Bu yıl bir milyona daha ulaşmak istiyoruz ama bunu tek başımıza yapamayız. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 33f35460c..077101005 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -53,7 +53,8 @@ Системна Темна Світла - На сторінці «Про нас» є відповіді на всі ваші запитання. Не забувайте. :) + Ласкаво просимо до налаштувань! + \n\nПам\'ятайте, якщо у вас є питання, на нашій сторінці «Про нас» є відповідь. Привіт, ти більше не побачиш це повідомлення. \n\nЯкщо вам подобається Olauncher, чи можете ви поставити нам 5 зірок? Це допомагає нам покращити наш рейтинг і робить нас щасливими. Дякую тобі! Привіт, нам потрібна ваша допомога! Минулого року ми перевищили мільйон завантажень. Цього року ми хочемо досягти мільйона більше, але ми не можемо зробити це поодинці. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 0297c46bf..25d138d9b 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -86,7 +86,8 @@ 系统 黑暗 - 我们底部的“关于”页面可以解答您的所有问题。别忘了。 :)\n\n谢谢。 + 欢迎来到设置! + \n\n请记住,如果您有任何问题,我们的“关于”页面有答案。 您好,您不会再看到此消息。 \n\n如果您喜欢 Olauncher,能给我们一个 5 星评价吗? 它帮助我们提高排名并使我们高兴。 谢谢你! 你好,我们需要你的帮助!去年我们的下载量突破了一百万次。今年我们希望再增加一百万,但我们无法单独做到这一点。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6ef72cb03..b7e8e31f9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,8 +67,8 @@ System Dark Light - Tip: Our About page has answers to all your questions. Don\'t forget. :) - \n\nThank you. + Welcome to the settings! + \n\nRemember, if you have any questions, our About page has the answer. Hi, you won\'t see this message again. \n\nIf you\'re finding Olauncher useful, could you please leave a 5-star review? It\'ll mean the world to us. Thank you! We need your help! We crossed a million downloads last year. This year, we want to reach a million more, but we can\'t do it alone. From 7504f5980004ea480584de439f90e5612d9904e0 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 13:16:32 +0530 Subject: [PATCH 052/150] Minor UI changes --- app/src/main/res/drawable/rounded_rect_shade_color.xml | 6 +++--- app/src/main/res/drawable/rounded_rectangle_dark.xml | 2 +- app/src/main/res/layout/activity_main.xml | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/drawable/rounded_rect_shade_color.xml b/app/src/main/res/drawable/rounded_rect_shade_color.xml index aed39185a..eda3ce1c4 100644 --- a/app/src/main/res/drawable/rounded_rect_shade_color.xml +++ b/app/src/main/res/drawable/rounded_rect_shade_color.xml @@ -1,9 +1,9 @@ - - + + diff --git a/app/src/main/res/drawable/rounded_rectangle_dark.xml b/app/src/main/res/drawable/rounded_rectangle_dark.xml index 9138e962e..4c0758a54 100644 --- a/app/src/main/res/drawable/rounded_rectangle_dark.xml +++ b/app/src/main/res/drawable/rounded_rectangle_dark.xml @@ -4,6 +4,6 @@ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index de1dc4cfb..12a0fb259 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -53,6 +53,7 @@ android:layout_gravity="end|center_vertical" android:alpha="0.5" android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/close" android:padding="6dp" android:src="@drawable/ic_close" /> From 310d1b7943aeec02cf0fb44d30d8c02fc6b7891a Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 13:23:37 +0530 Subject: [PATCH 053/150] Minor copy changes --- app/src/main/res/layout-land/fragment_home.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 2 +- app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-es-rUS/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 20 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index 0165e156d..c3b71a651 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -172,6 +172,6 @@ android:layout_marginBottom="56dp" android:ellipsize="end" android:maxLines="1" - android:text="@string/set_as_default_launcher" + android:text="@string/set_as_default_launcher_u" android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 3cbd920c0..0057e9eea 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -173,6 +173,6 @@ android:layout_marginBottom="56dp" android:ellipsize="end" android:maxLines="1" - android:text="@string/set_as_default_launcher" + android:text="@string/set_as_default_launcher_u" android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index f65131514..8812c6a3e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -2,6 +2,7 @@ App تعيين كمشغل افتراضي + تعيين كمشغل افتراضي تعيين كمشغل افتراضي صفر واحد diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c1dfd9617..6b3e1b5bc 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -2,6 +2,7 @@ App Als Standard-Launcher festlegen + Als Standard-Launcher festlegen Als Standard-Launcher festlegen 0 1 diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index ab1ce0569..eff5985e8 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -2,6 +2,7 @@ App Establecer como lanzador principal + Establecer como lanzador principal Establecer como lanzador principal Color del texto Tocar dos veces para bloquear diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 91ec3aac3..3d1ef69ee 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -2,6 +2,7 @@ App Establecer como lanzador principal + Establecer como lanzador principal Primero pongalo como lanzador principal Color del texto Tocar dos veces para bloquear diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 41c6e93ac..ffb7fc0b1 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -2,6 +2,7 @@ App Définir comme lanceur par défaut + Définir comme lanceur par défaut Définir comme lanceur par défaut Couleur du texte Double appui pour verrouiller diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index ffe9c9e2c..7f09100a9 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -2,6 +2,7 @@ Olauncher Aplikacija Postavi kao zadani pokretač + Postavi kao zadani pokretač Postavi kao zadani pokretač Boja teksta Dvostruki dodir za zaključavanje diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2009c9fdf..2d85931db 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,6 +1,7 @@ Alkalmazás Beállítás alapért. indítóként + Beállítás alapért. indítóként Beállítás alapértelmezett indítóként Szövegszín Dupla koppintás a képernyő lezárásához diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index cf4e4e264..213e9a11f 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -2,6 +2,7 @@ Aplikasi Tetapkan sebagai peluncur default + Tetapkan sebagai peluncur default Tetapkan sebagai peluncur default Warna teks Ketuk dua kali untuk mengunci diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8b3fd6c86..263a9fcfc 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,6 +1,7 @@ App Imposta come launcher predefinito + Imposta come launcher predefinito Imposta come launcher predefinito Colore del testo Tocca due volte per bloccare diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 5f5fcf734..695e6f0d0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -2,6 +2,7 @@ アプリ デフォルトのランチャーとして設定 + デフォルトのランチャーとして設定 デフォルトのランチャーとして設定 diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7970b0428..a24540379 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -2,6 +2,7 @@ Aplikacja Ustaw jako domyślny program uruchamiający + Ustaw jako domyślny program uruchamiający Ustaw jako domyślny program uruchamiający 0 1 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3af6d22ba..032a6d886 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -2,6 +2,7 @@ Aplicativo Definir como launcher padrão + Definir como launcher padrão Definir como launcher padrão Cor do texto Toque duplo para bloquear diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 51abd3b00..5b878fa5b 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -2,6 +2,7 @@ Приложение Сделать лаунчером по умолчанию + Сделать лаунчером по умолчанию Сделать лаунчером по умолчанию Цвет текста Блокировка двойным тапом diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index aaf77f01c..05e0c361a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -2,6 +2,7 @@ App Ange som förvald startskärmsapp + Ange som förvald startskärmsapp Ange Olauncher som förvald först Textfärg Dubbeltryck för att låsa diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 8f9b8daa0..96050ec85 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -2,6 +2,7 @@ Uygulama Varsayılan başlatıcı olarak ayarla + Varsayılan başlatıcı olarak ayarla Varsayılan başlatıcı olarak ayarla 0 1 diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 077101005..80dc6d96a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -2,6 +2,7 @@ Додаток Зробити лаунчером за замовчування + Зробити лаунчером за замовчування Зробити лаунчером за замовчування Кольор тексту Блокування подвійним тапом diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 25d138d9b..757fde2bc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -2,6 +2,7 @@ 应用程序 设置为默认启动器 + 设置为默认启动器 设置为默认启动器 提示:输入应用程序名称以查找并启动它 好的 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7e8e31f9..3387a659f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,6 +17,7 @@ App Set as default launcher + Set as default launcher Set Olauncher default first Text color Double tap to lock From a6990ab359b13613c7344185a266f3377d4fe5d1 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Tue, 1 Oct 2024 13:24:05 +0530 Subject: [PATCH 054/150] App version bumped to 86 (v4.3.4) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 739ca824f..cd58529cf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 24 targetSdkVersion 34 - versionCode 85 - versionName "v4.3.3" + versionCode 86 + versionName "v4.3.4" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From fbfe4203651452f40fac588f2f5bb7756e941cc2 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Thu, 14 Nov 2024 17:13:33 +0530 Subject: [PATCH 055/150] Showing screen time on home screen --- app/src/main/AndroidManifest.xml | 3 + .../main/java/app/olauncher/MainActivity.kt | 8 +-- .../main/java/app/olauncher/MainViewModel.kt | 28 +++++++++ .../main/java/app/olauncher/data/Constants.kt | 2 + .../java/app/olauncher/helper/Extensions.kt | 39 +++++++++++++ .../java/app/olauncher/ui/HomeFragment.kt | 57 +++++++++++++++++++ .../java/app/olauncher/ui/SettingsFragment.kt | 11 ++-- .../main/res/layout-land/fragment_home.xml | 15 +++++ app/src/main/res/layout/fragment_home.xml | 15 +++++ app/src/main/res/layout/fragment_settings.xml | 1 - app/src/main/res/values/strings.xml | 4 ++ 11 files changed, 172 insertions(+), 11 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 89753941d..922853d3d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + { prefs.userState = Constants.UserState.RATE showMessageDialog(getString(R.string.did_you_know), getString(R.string.review_message), getString(R.string.leave_a_review)) { @@ -171,9 +171,9 @@ class MainActivity : AppCompatActivity() { } Constants.Dialog.DIGITAL_WELLBEING -> { - showMessageDialog("Hi", getString(R.string.digital_wellbeing_message), getString(R.string.learn_more)) { - binding.messageLayout.visibility = View.GONE - openUrl(Constants.URL_DIGITAL_WELLBEING_LEARN_MORE) + showMessageDialog(getString(R.string.screen_time), getString(R.string.app_usage_message), getString(R.string.permission)) { + startActivity(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) + // openUrl(Constants.URL_DIGITAL_WELLBEING_LEARN_MORE) } } } diff --git a/app/src/main/java/app/olauncher/MainViewModel.kt b/app/src/main/java/app/olauncher/MainViewModel.kt index a06a35e5d..735b5276f 100644 --- a/app/src/main/java/app/olauncher/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/MainViewModel.kt @@ -1,10 +1,13 @@ package app.olauncher import android.app.Application +import android.app.Service.USAGE_STATS_SERVICE +import android.app.usage.UsageStatsManager import android.content.ComponentName import android.content.Context import android.content.pm.LauncherApps import android.os.UserHandle +import android.util.Log import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope @@ -16,15 +19,19 @@ import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import app.olauncher.data.AppModel import app.olauncher.data.Constants +import app.olauncher.data.Constants.ONE_DAY_IN_MILLIS import app.olauncher.data.Prefs import app.olauncher.helper.SingleLiveEvent import app.olauncher.helper.WallpaperWorker +import app.olauncher.helper.formattedTimeSpent import app.olauncher.helper.getAppsList import app.olauncher.helper.isOlauncherDefault import app.olauncher.helper.showToast import kotlinx.coroutines.launch +import java.util.Calendar import java.util.concurrent.TimeUnit + class MainViewModel(application: Application) : AndroidViewModel(application) { private val appContext by lazy { application.applicationContext } private val prefs = Prefs(appContext) @@ -38,6 +45,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val isOlauncherDefault = MutableLiveData() val launcherResetFailed = MutableLiveData() val homeAppAlignment = MutableLiveData() + val screenTimeValue = MutableLiveData() val showDialog = SingleLiveEvent() val checkForMessages = SingleLiveEvent() @@ -243,4 +251,24 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { prefs.homeAlignment = gravity homeAppAlignment.value = prefs.homeAlignment } + + fun getTodaysScreenTime() { + viewModelScope.launch { + val usageStatsManager = appContext.getSystemService(USAGE_STATS_SERVICE) as UsageStatsManager + + val calendar = Calendar.getInstance() + calendar.set(Calendar.HOUR_OF_DAY, 0) + calendar.set(Calendar.MINUTE, 0) + calendar.set(Calendar.SECOND, 0) + + val usageStats = usageStatsManager.queryUsageStats( + UsageStatsManager.INTERVAL_DAILY, + calendar.timeInMillis, + calendar.timeInMillis + ONE_DAY_IN_MILLIS + ) + val totalTimeInMillis = usageStats.sumOf { it.totalTimeInForeground } + val viewTimeSpent = appContext.formattedTimeSpent(totalTimeInMillis) + screenTimeValue.postValue(viewTimeSpent) + } + } } \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index b7bd8b190..12f9a75cb 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -109,6 +109,8 @@ object Constants { const val URL_DIGITAL_WELLBEING_LEARN_MORE = "https://tanujnotes.substack.com/p/digital-wellbeing-app-on-android?utm_source=olauncher" const val DIGITAL_WELLBEING_PACKAGE_NAME = "com.google.android.apps.wellbeing" + const val DIGITAL_WELLBEING_ACTIVITY = "com.google.android.apps.wellbeing.settings.TopLevelSettingsActivity" const val DIGITAL_WELLBEING_SAMSUNG_PACKAGE_NAME = "com.samsung.android.forest" + const val DIGITAL_WELLBEING_SAMSUNG_ACTIVITY = "com.samsung.android.forest.launcher.LauncherActivity" const val WALLPAPER_WORKER_NAME = "WALLPAPER_WORKER_NAME" } \ No newline at end of file diff --git a/app/src/main/java/app/olauncher/helper/Extensions.kt b/app/src/main/java/app/olauncher/helper/Extensions.kt index c15d9e636..3bab48f60 100644 --- a/app/src/main/java/app/olauncher/helper/Extensions.kt +++ b/app/src/main/java/app/olauncher/helper/Extensions.kt @@ -1,6 +1,7 @@ package app.olauncher.helper import android.app.Activity +import android.app.AppOpsManager import android.app.SearchManager import android.app.role.RoleManager import android.content.ComponentName @@ -8,6 +9,7 @@ import android.content.Context import android.content.Intent import android.content.pm.LauncherApps import android.content.pm.PackageManager +import android.content.res.Resources import android.net.Uri import android.os.Build import android.os.UserHandle @@ -17,6 +19,7 @@ import android.view.WindowManager import android.view.inputmethod.InputMethodManager import androidx.annotation.RequiresApi import app.olauncher.BuildConfig +import app.olauncher.R import app.olauncher.data.Constants fun View.hideKeyboard() { @@ -118,8 +121,44 @@ fun Context.isPackageInstalled(packageName: String, userHandle: UserHandle = and return activityInfo.size > 0 } +@RequiresApi(Build.VERSION_CODES.Q) +fun Context.appUsagePermissionGranted(): Boolean { + val appOpsManager = getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager + return appOpsManager.unsafeCheckOpNoThrow( + "android:get_usage_stats", + android.os.Process.myUid(), + packageName + ) == AppOpsManager.MODE_ALLOWED +} + +fun Context.formattedTimeSpent(timeSpent: Long): String { + val seconds = timeSpent / 1000 + val minutes = seconds / 60 + val hours = minutes / 60 + val remainingMinutes = minutes % 60 + return when { + timeSpent == 0L -> "0m" + + hours > 0 -> getString( + R.string.time_spent_hour, + hours.toString(), + remainingMinutes.toString() + ) + + minutes > 0 -> { + getString(R.string.time_spent_min, minutes.toString()) + } + + else -> "<1m" + } +} + fun Long.hasBeenDays(days: Int): Boolean = ((System.currentTimeMillis() - this) / Constants.ONE_DAY_IN_MILLIS) >= days fun Long.hasBeenHours(hours: Int): Boolean = ((System.currentTimeMillis() - this) / Constants.ONE_HOUR_IN_MILLIS) >= hours + +fun Int.dpToPx(): Int { + return (this * Resources.getSystem().displayMetrics.density).toInt() +} diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index b60361167..458f42a14 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -2,6 +2,7 @@ package app.olauncher.ui import android.app.admin.DevicePolicyManager import android.content.Context +import android.content.Intent import android.os.BatteryManager import android.os.Build import android.os.Bundle @@ -11,10 +12,13 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowInsets +import android.widget.FrameLayout import android.widget.TextView import android.widget.Toast +import androidx.annotation.RequiresApi import androidx.core.os.bundleOf import androidx.core.view.isVisible +import androidx.core.view.setPadding import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -25,6 +29,8 @@ import app.olauncher.data.AppModel import app.olauncher.data.Constants import app.olauncher.data.Prefs import app.olauncher.databinding.FragmentHomeBinding +import app.olauncher.helper.appUsagePermissionGranted +import app.olauncher.helper.dpToPx import app.olauncher.helper.expandNotificationDrawer import app.olauncher.helper.getChangedAppTheme import app.olauncher.helper.getUserHandleFromString @@ -87,6 +93,8 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener R.id.clock -> openClockApp() R.id.date -> openCalendarApp() R.id.setDefaultLauncher -> viewModel.resetLauncherLiveData.call() + R.id.tvScreenTime -> openScreenTimeDigitalWellbeing() + else -> { try { // Launch app val appLocation = view.tag.toString().toInt() @@ -177,6 +185,9 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener viewModel.toggleDateTime.observe(viewLifecycleOwner) { populateDateTime() } + viewModel.screenTimeValue.observe(viewLifecycleOwner) { + it?.let { binding.tvScreenTime.text = it } + } } private fun initSwipeTouchListener() { @@ -199,6 +210,7 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener binding.clock.setOnLongClickListener(this) binding.date.setOnLongClickListener(this) binding.setDefaultLauncher.setOnClickListener(this) + binding.tvScreenTime.setOnClickListener(this) } private fun setHomeAlignment(horizontalGravity: Int = prefs.homeAlignment) { @@ -233,10 +245,33 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener binding.date.text = dateText.replace(".,", ",") } + @RequiresApi(Build.VERSION_CODES.Q) + private fun populateScreenTime() { + if (requireContext().appUsagePermissionGranted().not()) return + + viewModel.getTodaysScreenTime() + + binding.tvScreenTime.visibility = View.VISIBLE + val params = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT + ).apply { + topMargin = 72.dpToPx() + marginStart = 10.dpToPx() + marginEnd = 10.dpToPx() + gravity = if (prefs.homeAlignment == Gravity.END) Gravity.START else Gravity.END + } + binding.tvScreenTime.layoutParams = params + binding.tvScreenTime.setPadding(10.dpToPx()) + } + private fun populateHomeScreen(appCountUpdated: Boolean) { if (appCountUpdated) hideHomeApps() populateDateTime() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) + populateScreenTime() + val homeAppsNum = prefs.homeAppsNum if (homeAppsNum == 0) return @@ -439,6 +474,28 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener requireActivity().recreate() } + private fun openScreenTimeDigitalWellbeing() { + val intent = Intent() + try { + intent.setClassName( + Constants.DIGITAL_WELLBEING_PACKAGE_NAME, + Constants.DIGITAL_WELLBEING_ACTIVITY + ) + startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + try { + intent.setClassName( + Constants.DIGITAL_WELLBEING_SAMSUNG_PACKAGE_NAME, + Constants.DIGITAL_WELLBEING_SAMSUNG_ACTIVITY + ) + startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + } + } + } + private fun showLongPressToast() = requireContext().showToast(getString(R.string.long_press_to_select_app)) private fun textOnClick(view: View) = onClick(view) diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index c6b21304f..48e3b0b53 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -68,7 +68,6 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe checkAdminPermission() binding.homeAppsNum.text = prefs.homeAppsNum.toString() - populateDigitalWellbeing() populateKeyboardText() populateLockSettings() populateWallpaperText() @@ -593,11 +592,11 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe binding.swipeRightApp.setTextColor(requireContext().getColorFromAttr(R.attr.primaryColorTrans50)) } - private fun populateDigitalWellbeing() { - binding.digitalWellbeing.isVisible = requireContext().isPackageInstalled(Constants.DIGITAL_WELLBEING_PACKAGE_NAME).not() - && requireContext().isPackageInstalled(Constants.DIGITAL_WELLBEING_SAMSUNG_PACKAGE_NAME).not() - && prefs.hideDigitalWellbeing.not() - } +// private fun populateDigitalWellbeing() { +// binding.digitalWellbeing.isVisible = requireContext().isPackageInstalled(Constants.DIGITAL_WELLBEING_PACKAGE_NAME).not() +// && requireContext().isPackageInstalled(Constants.DIGITAL_WELLBEING_SAMSUNG_PACKAGE_NAME).not() +// && prefs.hideDigitalWellbeing.not() +// } private fun showAppListIfEnabled(flag: Int) { if ((flag == Constants.FLAG_SET_SWIPE_LEFT_APP) and !prefs.swipeLeftEnabled) { diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index c3b71a651..7b470d751 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -49,6 +49,21 @@ tools:text="Thu, 30 Dec" /> + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3387a659f..fbe4ad0b5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,6 +14,8 @@ 6 7 8 + %1$sm + %1$sh %2$sm App Set as default launcher @@ -80,6 +82,8 @@ \n\nThe choice is always yours. If you want to set time limits for certain apps, Digital Wellbeing feature of Android can help you do it. \n\nPlease search for Digital Wellbeing in your phone settings and enable it. + To see your screen time on the home screen, please allow the app usage permission. + \n\nNote: No app usage data is collected by us. All the data is processed on your device. The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. Support Olauncher for free by using our Amazon affiliate link. Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! From cf792624d404a2d6aea81548964f0be298fc942d Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 15 Nov 2024 12:42:12 +0530 Subject: [PATCH 056/150] Minor UI change --- app/src/main/res/layout-land/fragment_home.xml | 1 + app/src/main/res/layout/fragment_home.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index 7b470d751..0c08f2c32 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -60,6 +60,7 @@ android:layout_marginTop="72dp" android:gravity="center" android:padding="10dp" + android:textSize="@dimen/date_size" android:visibility="gone" tools:text="2h 11m" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 9339a4c35..4626a5b35 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -59,6 +59,7 @@ android:layout_marginTop="72dp" android:gravity="center" android:padding="10dp" + android:textSize="@dimen/date_size" android:visibility="gone" tools:text="2h 11m" tools:visibility="visible" /> From cbe544335a3c8d214ce0d14ae76da1e9cfdfa7ff Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 15 Nov 2024 13:08:31 +0530 Subject: [PATCH 057/150] Removed vibrator --- app/src/main/java/app/olauncher/ui/HomeFragment.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index 458f42a14..9e19a8141 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -6,7 +6,6 @@ import android.content.Intent import android.os.BatteryManager import android.os.Build import android.os.Bundle -import android.os.Vibrator import android.view.Gravity import android.view.LayoutInflater import android.view.View @@ -53,7 +52,6 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener private lateinit var prefs: Prefs private lateinit var viewModel: MainViewModel private lateinit var deviceManager: DevicePolicyManager - private lateinit var vibrator: Vibrator private var _binding: FragmentHomeBinding? = null private val binding get() = _binding!! @@ -71,7 +69,6 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener } ?: throw Exception("Invalid Activity") deviceManager = context?.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager - vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator initObservers() setHomeAlignment(prefs.homeAlignment) From c4487df71df1f31f2db10e029218786449296ebb Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 15 Nov 2024 16:41:16 +0530 Subject: [PATCH 058/150] Screen time margins on landscape --- app/src/main/java/app/olauncher/ui/HomeFragment.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index 9e19a8141..c13087ca1 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -3,6 +3,7 @@ package app.olauncher.ui import android.app.admin.DevicePolicyManager import android.content.Context import android.content.Intent +import android.content.res.Configuration import android.os.BatteryManager import android.os.Build import android.os.Bundle @@ -247,15 +248,17 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener if (requireContext().appUsagePermissionGranted().not()) return viewModel.getTodaysScreenTime() - binding.tvScreenTime.visibility = View.VISIBLE + + val isLandscape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + val horizontalMargin = if (isLandscape) 64.dpToPx() else 10.dpToPx() val params = FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT ).apply { - topMargin = 72.dpToPx() - marginStart = 10.dpToPx() - marginEnd = 10.dpToPx() + topMargin = if (isLandscape) 56.dpToPx() else 72.dpToPx() + marginStart = horizontalMargin + marginEnd = horizontalMargin gravity = if (prefs.homeAlignment == Gravity.END) Gravity.START else Gravity.END } binding.tvScreenTime.layoutParams = params From 557f496613835bc0455e3d5c913454961043b868 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Fri, 15 Nov 2024 16:42:58 +0530 Subject: [PATCH 059/150] App version bumped to 87 (v4.3.4.b1) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cd58529cf..aabb28457 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 24 targetSdkVersion 34 - versionCode 86 - versionName "v4.3.4" + versionCode 87 + versionName "v4.3.4.b1" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 5db3c85e0ab6005840001b6cedf0c7decf873eea Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 16 Nov 2024 12:07:19 +0530 Subject: [PATCH 060/150] Settings UI changes --- app/src/main/java/app/olauncher/data/Prefs.kt | 10 - .../java/app/olauncher/ui/SettingsFragment.kt | 20 +- .../res/layout-land/fragment_settings.xml | 221 ++++++++++------- app/src/main/res/layout/fragment_settings.xml | 230 +++++++++++------- app/src/main/res/values/strings.xml | 5 +- 5 files changed, 281 insertions(+), 205 deletions(-) diff --git a/app/src/main/java/app/olauncher/data/Prefs.kt b/app/src/main/java/app/olauncher/data/Prefs.kt index c281b8cf5..c1ab5ad43 100644 --- a/app/src/main/java/app/olauncher/data/Prefs.kt +++ b/app/src/main/java/app/olauncher/data/Prefs.kt @@ -27,7 +27,6 @@ class Prefs(context: Context) { private val DATE_TIME_VISIBILITY = "DATE_TIME_VISIBILITY" private val SWIPE_LEFT_ENABLED = "SWIPE_LEFT_ENABLED" private val SWIPE_RIGHT_ENABLED = "SWIPE_RIGHT_ENABLED" - private val SCREEN_TIMEOUT = "SCREEN_TIMEOUT" private val HIDDEN_APPS = "HIDDEN_APPS" private val HIDDEN_APPS_UPDATED = "HIDDEN_APPS_UPDATED" private val SHOW_HINT_COUNTER = "SHOW_HINT_COUNTER" @@ -37,7 +36,6 @@ class Prefs(context: Context) { private val SHARE_SHOWN_TIME = "SHARE_SHOWN_TIME" private val SWIPE_DOWN_ACTION = "SWIPE_DOWN_ACTION" private val TEXT_SIZE_SCALE = "TEXT_SIZE_SCALE" - private val HIDE_DIGITAL_WELLBEING = "HIDE_DIGITAL_WELLBEING" private val APP_NAME_1 = "APP_NAME_1" private val APP_NAME_2 = "APP_NAME_2" @@ -169,14 +167,6 @@ class Prefs(context: Context) { get() = prefs.getFloat(TEXT_SIZE_SCALE, 1.0f) set(value) = prefs.edit().putFloat(TEXT_SIZE_SCALE, value).apply() - var hideDigitalWellbeing: Boolean - get() = prefs.getBoolean(HIDE_DIGITAL_WELLBEING, false) - set(value) = prefs.edit().putBoolean(HIDE_DIGITAL_WELLBEING, value).apply() - - var screenTimeout: Int - get() = prefs.getInt(SCREEN_TIMEOUT, 30000) // Default: 30 seconds - set(value) = prefs.edit().putInt(SCREEN_TIMEOUT, value).apply() - var hiddenApps: MutableSet get() = prefs.getStringSet(HIDDEN_APPS, mutableSetOf()) as MutableSet set(value) = prefs.edit().putStringSet(HIDDEN_APPS, value).apply() diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index 48e3b0b53..94a4fc3a3 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -27,11 +27,11 @@ import app.olauncher.data.Constants import app.olauncher.data.Prefs import app.olauncher.databinding.FragmentSettingsBinding import app.olauncher.helper.animateAlpha +import app.olauncher.helper.appUsagePermissionGranted import app.olauncher.helper.getColorFromAttr import app.olauncher.helper.isAccessServiceEnabled import app.olauncher.helper.isDarkThemeOn import app.olauncher.helper.isOlauncherDefault -import app.olauncher.helper.isPackageInstalled import app.olauncher.helper.openAppInfo import app.olauncher.helper.openUrl import app.olauncher.helper.rateApp @@ -69,6 +69,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe binding.homeAppsNum.text = prefs.homeAppsNum.toString() populateKeyboardText() + populateScreenTimeOnOff() populateLockSettings() populateWallpaperText() populateAppThemeText() @@ -95,7 +96,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe when (view.id) { R.id.olauncherHiddenApps -> showHiddenApps() R.id.olauncherPro -> requireContext().openUrl(Constants.URL_OLAUNCHER_PRO) - R.id.digitalWellbeing -> viewModel.showDialog.postValue(Constants.Dialog.DIGITAL_WELLBEING) + R.id.screenTimeOnOff -> viewModel.showDialog.postValue(Constants.Dialog.DIGITAL_WELLBEING) R.id.appInfo -> openAppInfo(requireContext(), Process.myUserHandle(), BuildConfig.APPLICATION_ID) R.id.setLauncher -> viewModel.resetLauncherLiveData.call() R.id.toggleLock -> toggleLockMode() @@ -168,11 +169,6 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe override fun onLongClick(view: View): Boolean { when (view.id) { - R.id.digitalWellbeing -> { - prefs.hideDigitalWellbeing = true - binding.digitalWellbeing.visibility = View.GONE - } - R.id.alignment -> { prefs.appLabelAlignment = prefs.homeAlignment findNavController().navigate(R.id.action_settingsFragment_to_appListFragment) @@ -199,10 +195,10 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe binding.setLauncher.setOnClickListener(this) binding.aboutOlauncher.setOnClickListener(this) binding.olauncherPro.setOnClickListener(this) - binding.digitalWellbeing.setOnClickListener(this) binding.autoShowKeyboard.setOnClickListener(this) binding.toggleLock.setOnClickListener(this) binding.homeAppsNum.setOnClickListener(this) + binding.screenTimeOnOff.setOnClickListener(this) binding.dailyWallpaperUrl.setOnClickListener(this) binding.dailyWallpaper.setOnClickListener(this) binding.alignment.setOnClickListener(this) @@ -254,7 +250,6 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe binding.textSize6.setOnClickListener(this) binding.textSize7.setOnClickListener(this) - binding.digitalWellbeing.setOnLongClickListener(this) binding.dailyWallpaper.setOnLongClickListener(this) binding.alignment.setOnLongClickListener(this) binding.appThemeText.setOnLongClickListener(this) @@ -525,6 +520,13 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe }.toString() } + private fun populateScreenTimeOnOff() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + if (requireContext().appUsagePermissionGranted()) binding.screenTimeOnOff.text = getString(R.string.on) + else binding.screenTimeOnOff.text = getString(R.string.off) + } else binding.screenTimeLayout.visibility = View.GONE + } + private fun populateKeyboardText() { if (prefs.autoShowKeyboard) binding.autoShowKeyboard.text = getString(R.string.on) else binding.autoShowKeyboard.text = getString(R.string.off) diff --git a/app/src/main/res/layout-land/fragment_settings.xml b/app/src/main/res/layout-land/fragment_settings.xml index 22aa09cd3..30e400259 100644 --- a/app/src/main/res/layout-land/fragment_settings.xml +++ b/app/src/main/res/layout-land/fragment_settings.xml @@ -89,18 +89,6 @@ android:layout_marginBottom="8dp" android:text="@string/olauncher_pro" /> - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If you want to set time limits for certain apps, Digital Wellbeing feature of Android can help you do it. \n\nPlease search for Digital Wellbeing in your phone settings and enable it. - To see your screen time on the home screen, please allow the app usage permission. - \n\nNote: No app usage data is collected by us. All the data is processed on your device. + To see show/hide your screen time on the home screen, please allow or disallow the app usage permission. + \n\nNote: No app usage data is collected. Everything is processed on your device. The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. Support Olauncher for free by using our Amazon affiliate link. Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! @@ -149,4 +149,5 @@ Olauncher is free and always will be. It has no ads, collects no data, and helps you reduce screen time for a healthier digital life. \n\nWe believe a minimal launcher is a great choice, and we hope you enjoy it. Tell the world what you think! Alignment changed ✅ + Home screen \ No newline at end of file From 8843617455e69c3c4ec54b0e78d28a3c70abe595 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 16 Nov 2024 18:26:44 +0530 Subject: [PATCH 061/150] Minor UI fixes in screen time on home --- app/src/main/java/app/olauncher/ui/HomeFragment.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index c13087ca1..35d6e581b 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -252,11 +252,16 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener val isLandscape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE val horizontalMargin = if (isLandscape) 64.dpToPx() else 10.dpToPx() + val marginTop = if (isLandscape) { + if (prefs.dateTimeVisibility == Constants.DateTime.DATE_ONLY) 36.dpToPx() else 56.dpToPx() + } else { + if (prefs.dateTimeVisibility == Constants.DateTime.DATE_ONLY) 45.dpToPx() else 72.dpToPx() + } val params = FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT ).apply { - topMargin = if (isLandscape) 56.dpToPx() else 72.dpToPx() + topMargin = marginTop marginStart = horizontalMargin marginEnd = horizontalMargin gravity = if (prefs.homeAlignment == Gravity.END) Gravity.START else Gravity.END From b15ce740531a02632a1534eac34983b45be65b45 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 16 Nov 2024 19:06:27 +0530 Subject: [PATCH 062/150] Translations --- app/src/main/res/values-ar/strings.xml | 8 +++++--- app/src/main/res/values-de/strings.xml | 7 +++++-- app/src/main/res/values-es-rES/strings.xml | 7 +++++-- app/src/main/res/values-es-rUS/strings.xml | 7 +++++-- app/src/main/res/values-fr/strings.xml | 7 +++++-- app/src/main/res/values-hr/strings.xml | 8 ++++++-- app/src/main/res/values-hu/strings.xml | 19 +++++++++++-------- app/src/main/res/values-in/strings.xml | 7 +++++-- app/src/main/res/values-it/strings.xml | 7 +++++-- app/src/main/res/values-ja/strings.xml | 7 +++++-- app/src/main/res/values-pl/strings.xml | 7 +++++-- app/src/main/res/values-pt-rBR/strings.xml | 7 +++++-- app/src/main/res/values-ru-rRU/strings.xml | 7 +++++-- app/src/main/res/values-sv/strings.xml | 7 +++++-- app/src/main/res/values-tr/strings.xml | 7 +++++-- app/src/main/res/values-uk/strings.xml | 7 +++++-- app/src/main/res/values-zh/strings.xml | 7 +++++-- app/src/main/res/values/strings.xml | 2 +- 18 files changed, 93 insertions(+), 42 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 8812c6a3e..4b88ffaec 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -94,6 +94,8 @@ مرحبًا ، لوحة المفاتيح هي أسرع طريقة للعثور على التطبيقات وتشغيلها في Olauncher. هل يمكننا أن نطلب منك الاحتفاظ بهذا الأمر لبضعة أيام أخرى ثم اتخاذ القرار؟ الاختيار دائما لك. إذا كنت تريد تعيين حدود زمنية لتطبيقات معينة، فيمكن أن تساعدك ميزة الرفاهية الرقمية في Android على القيام بذلك. \n\nيرجى البحث عن الرفاهية الرقمية في إعدادات هاتفك وتمكينها. + لعرض/إخفاء وقت استخدام الشاشة على الشاشة الرئيسية، يرجى السماح أو منع إذن استخدام التطبيق. + \n\nملاحظة: لا يتم جمع أي بيانات حول استخدام التطبيقات. يتم معالجة كل شيء على جهازك. إذن الوصول مطلوب لتمكين النقر المزدوج للقفل. أي بيانات حصل عليها Olauncher عبر هذه الخدمة لن تترك جهازك. ادعم Olauncher مجانًا باستخدام رابط الشراكة التابع لشركة Amazon. في كل مرة تشتري شيئًا باستخدام الرابط الخاص بنا ، نحصل على عمولة صغيرة. يرجى حفظ الرابط واستخدامه في أي وقت تتسوق فيه عبر الإنترنت. شكرًا لك! @@ -123,7 +125,7 @@ ترك التعليق Olauncher هو وسيظل دائمًا مجانيًا تمامًا. ليس لديها إعلانات. لا يجمع أي بيانات. والأهم من ذلك أنه يساعدك على تقليل وقت الشاشة والعيش حياة رقمية أكثر صحة. \n\nنحن نعتقد أن التحول إلى الحد الأدنى من المشغل هو قرار ممتاز. على الرغم من أننا متحيزون بشكل واضح، إلا أننا نأمل أن تستمتع بالتجربة. لا تتردد في مشاركة أفكارك معنا! - - وقت الشاشة - تم تغيير المحاذاة ✅ + وقت الشاشة + تم تغيير المحاذاة ✅ + شاشة الرئيسية \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6b3e1b5bc..5d65da857 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -97,6 +97,8 @@ \n\nDie Wahl liegt immer bei Ihnen. Wenn Sie Zeitlimits für bestimmte Apps festlegen möchten, kann Ihnen die Digital Wellbeing-Funktion von Android dabei helfen. \n\nBitte suchen Sie in Ihren Telefoneinstellungen nach Digital Wellbeing und aktivieren Sie es. + Um die Bildschirmzeit auf dem Startbildschirm anzuzeigen oder zu verbergen, erteilen Sie bitte die Erlaubnis für die App-Nutzung oder verweigern Sie sie. + \n\nHinweis: Es werden keine Daten zur App-Nutzung gesammelt. Alles wird auf Ihrem Gerät verarbeitet. Die Zugriffsberechtigung ist erforderlich, um das Sperren durch Doppeltippen zu ermöglichen. Die von Olauncher über diesen Dienst erfassten Daten verlassen Ihr Gerät nicht. Unterstützen Sie Olauncher kostenlos, indem Sie unseren Amazon-Partnerlink verwenden. Jedes Mal, wenn Sie über unseren Link etwas kaufen, erhalten wir eine kleine Provision. Bitte speichern Sie den Link und verwenden Sie ihn bei jedem Online-Einkauf. Dan­ke­schön! @@ -122,12 +124,13 @@ App nach links wischen deaktiviert App nach rechts wischen deaktiviert Benutzen Sie Ihr Telefon, oder nutzt Ihr Telefon Sie? - Bildschirmzeit + Bildschirmzeit Über Olauncher Erfahren Sie mehr Wussten Sie? Rezension Olauncher ist und bleibt völlig kostenlos. Es gibt keine Werbung. Es werden keine Daten erfasst. Am wichtigsten ist, dass es Ihnen dabei hilft, Ihre Bildschirmzeit zu verkürzen und ein gesünderes digitales Leben zu führen. \n\nWir glauben, dass der Wechsel zu einem Minimal Launcher eine ausgezeichnete Entscheidung ist. Obwohl wir offensichtlich voreingenommen sind, hoffen wir, dass Ihnen die Erfahrung gefällt. Teilen Sie uns gerne Ihre Gedanken mit! - Ausrichtung geändert ✅ + Ausrichtung geändert ✅ + Startbildschirm diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index eff5985e8..ec88fd357 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -64,6 +64,8 @@ \n\nLa decisión siempre es vuestra. Si deseas establecer límites de tiempo para determinadas aplicaciones, la función Bienestar digital de Android puede ayudarte a hacerlo. \n\nBusca Bienestar digital en la configuración de su teléfono y habilítelo. + Para mostrar/ocultar el tiempo de pantalla en la pantalla de inicio, permita o deniegue el permiso de uso de la aplicación. + \n\nNota: No se recopilan datos de uso de la aplicación. Todo se procesa en su dispositivo. "Se requiere el permiso de accesibilidad para habilitar el doble toque para bloquear. Cualquier dato adquirido por Olauncher a través de este servicio no saldrá de su dispositivo." Apoya a Olauncher de forma gratuita utilizando nuestro enlace de afiliado de Amazon. Cada vez que compre algo usando nuestro enlace, obtendremos una pequeña comisión. Guarde el enlace y utilícelo cada vez que compre en línea.\n¡Gracias! @@ -125,9 +127,10 @@ Acerca de Olauncher Aprende más ¿Sabías? - Tiempo de pantalla + Tiempo de pantalla Dejar un comentario Olauncher es y será siempre completamente gratuito. No tiene anuncios. No recopila datos. Lo más importante es que te ayuda a reducir el tiempo que pasa frente a la pantalla y a vivir una vida digital más saludable. \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dudes en compartir tus pensamientos con nosotros! - Alineación cambiada ✅ + Alineación cambiada ✅ + Pantalla de inicio diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 3d1ef69ee..76f0a3d6e 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -63,6 +63,8 @@ Hola, el teclado es la forma más rápida de encontrar y abrir aplicaciones en Olauncher. ¿Podemos pedirle que mantenga esto activado por unos días más y luego decidir? La decisión siempre es suya. Si desea establecer límites de tiempo para determinadas aplicaciones, la función Bienestar Digital de Android puede ayudarle a hacerlo. \n\nBusque Bienestar Digital en la configuración de su teléfono y habilítelo. + Para mostrar/ocultar el tiempo de pantalla en la pantalla de inicio, permita o deniegue el permiso de uso de la aplicación. + \n\nNota: No se recopilan datos de uso de la aplicación. Todo se procesa en su dispositivo. Se necesita el permiso de Accesibilidad para activar el bloqueo con doble toque. Cualquier dato recolectado por Olauncher no saldrá de su dispositivo. Apoye Olauncher de forma gratuita utilizando nuestro enlace de afiliado de Amazon. Cada vez que compre algo usando nuestro enlace, obtenemos una pequeña comisión. Por favor, guarde el enlace y úselo cada vez que compre en línea. ¡Gracias! @@ -121,10 +123,11 @@ ¿Está usando su teléfono, o el teléfono lo usa a usted? Acerca de Olauncher Aprenda más - Tiempo de pantalla + Tiempo de pantalla ¿Sabía qué? Dejar un comentario Olauncher es y será siempre completamente gratuito. No tiene anuncios. No recopila datos. Lo más importante es que le ayuda a reducir el tiempo que pasa frente a la pantalla y a vivir una vida digital más saludable. \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dude en compartir sus pensamientos con nosotros! - Alineación cambiada ✅ + Alineación cambiada ✅ + Pantalla de inicio diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ffb7fc0b1..1dfb55881 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -63,6 +63,8 @@ Bonjour, le clavier est le moyen le plus rapide de trouver et de lancer des applications dans Olauncher. Pouvons-nous vous demander de garder cela activé pendant quelques jours de plus, puis de décider? Le choix vous appartient toujours. Si vous souhaitez définir des limites de temps pour certaines applications, la fonctionnalité Digital Wellbeing d\'Android peut vous aider à le faire. \n\nVeuillez rechercher Digital Wellbeing dans les paramètres de votre téléphone et l\'activer. + Pour afficher/masquer le temps d\'écran sur l\'écran d\'accueil, autorisez ou refusez l\'autorisation d\'utilisation de l\'application. + \n\nRemarque : Aucune donnée d'utilisation de l\'application n\'est collectée. Tout est traité sur votre appareil. L\'autorisation d\'accessibilité est requise pour activer le double appui pour verrouiller. Toutes les données acquises par Olauncher via ce service ne quitteront pas votre appareil. Soutenez Olauncher gratuitement en utilisant notre lien d\'affiliation Amazon. Chaque fois que vous achetez quelque chose en utilisant notre lien, nous recevons une petite commission. Enregistrez le lien et utilisez le chaque fois que vous commandez en ligne. Merci! @@ -126,10 +128,11 @@ Utilisez-vous votre téléphone, ou votre téléphone vous utilise-t-il? À propos Olauncher Apprendre encore plus - Temps d\'écran + Temps d\'écran Saviez-vous? Laisser un commentaire Olauncher est et sera toujours entièrement gratuit. Il n\'y a pas de publicité. Il ne collecte aucune donnée. Plus important encore, cela vous aide à réduire votre temps d’écran et à vivre une vie numérique plus saine. \n\nNous pensons que passer à un lanceur minimal est une excellente décision. Même si nous sommes évidemment partiaux, nous espérons que vous appréciez l\'expérience. N\'hésitez pas à partager vos idées avec nous! - Alignement changé ✅ + Alignement changé ✅ + Écran d\'accueil diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 7f09100a9..572f3d7cb 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -42,6 +42,7 @@ 8 Savjet: Povuci prema dolje za zatvaranje. Pomakni zaslon za zatvaranje tipkovnice. U redu + Cool! Automatski prikaži tipkovnicu Sakrij Prikaži statusnu traku @@ -63,6 +64,8 @@ \n\nIzbor je uvijek vaš. Ako želite postaviti vremenska ograničenja za određene aplikacije, značajka Digital Wellbeing na Androidu može vam pomoći u tome. \n\nPotražite Digital Wellbeing u postavkama telefona i omogućite ga. + Da biste prikazali/sakrili vrijeme korištenja ekrana na početnom zaslonu, molimo dozvolite ili onemogućite dopuštenje korištenja aplikacije. + \n\nNapomena: Ne prikupljaju se podaci o korištenju aplikacije. Sve se obrađuje na vašem uređaju. Dozvola za pristupačnost potrebna je za omogućavanje zaključavanja dvostrukim dodirom. Bilo koji podatci prikupljeni ovim servisom neće napustiti tvoj uređaj. lock layout description to be used a unique id to lock screen Besplatno podrži Olauncher korištenjem naše sponzorske poveznice za Amazon. @@ -88,7 +91,7 @@ Obavijesti Saznajte više Dali si znao? - Vrijeme na ekranu + Vrijeme na ekranu Ostavite recenziju Olauncher jest i uvijek će biti potpuno besplatan. Nema reklama. Ne prikuplja podatke. Što je najvažnije, pomaže vam u smanjenju vremena koje provodite pred ekranom i živite zdravijim digitalnim životom. \n\nVjerujemo da je prelazak na minimalni launcher izvrsna odluka. Iako smo očito pristrani, nadamo se da uživate u iskustvu. Slobodno podijelite svoje misli s nama! @@ -128,5 +131,6 @@ Sakrij Koristite li svoj telefon ili vaš telefon koristi vas? O Olauncher-u i ČPP - Poravnanje promijenjeno ✅ + Poravnanje promijenjeno ✅ + Početni ekran diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 3845f8782..7eb6d4929 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -55,19 +55,21 @@ Üdvözöljük a beállításokban! \n\nNe feledje, ha bármilyen kérdése van, az „Rólunk” oldalunk tartalmazza a választ. Üdv, ezt az üzenetet nem fogja újra látni. - \n\nHa tetszik az Olauncher, kérjük, adjon nekünk 5 csillagos értékelést! Ez segít javítani a helyezésünket, és nagyon boldoggá tesz minket. Köszönjük! + \n\nHa tetszik az Olauncher, kérjük, adjon nekünk 5 csillagos értékelést! Ez segít javítani a helyezésünket, és nagyon boldoggá tesz minket. Köszönjük! A segítségére van szükségünk! Tavaly átléptük az egymillió letöltést. Idén egy millióval többet szeretnénk elérni, de egyedül nem tudjuk megtenni. - \n\nAz Olauncher-nek emberekre van szüksége, az embereknek pedig az Olauncher-re. Köszönettel vennénk, ha megosztaná másokkal is az Olaunchert! - - + \n\nAz Olauncher-nek emberekre van szüksége, az embereknek pedig az Olauncher-re. Köszönettel vennénk, ha megosztaná másokkal is az Olaunchert! + + Üdv, a billentyűzet a leggyorsabb módja az alkalmazások megtalálásához és elindításához az Olauncherben. Megkérhetjük, hogy hagyja bekapcsolva még néhány napig, és utána döntsön? - \n\nA választás mindig az Öné. + \n\nA választás mindig az Öné. Ha időkorlátokat szeretne beállítani bizonyos alkalmazásokhoz, az Android Digital Wellbeing funkciója segíthet ebben. - \n\nKeresse meg a Digitális jólét elemet a telefon beállításai között, és engedélyezze. + \n\nKeresse meg a Digitális jólét elemet a telefon beállításai között, és engedélyezze. + A képernyőidő megjelenítéséhez/elrejtéséhez a kezdőképernyőn engedélyezze vagy tagadja meg az alkalmazás használati engedélyét. + \n\nMegjegyzés: Nem gyűjtünk alkalmazás-használati adatokat. Minden az Ön eszközén kerül feldolgozásra. A hozzáférhetőségi engedély szükséges a dupla koppintás általi zároláshoz. Az Olauncher által ezen a szolgáltatáson keresztül megszerzett adatok nem hagyják el a készüléket. Támogasson minket ingyenesen az Amazon affiliate linkünk használatával. Minden alkalommal, amikor vásárol valamit a linkünket használva, egy kis jutalékot kapunk. Kérjük, mentse el a linket, és használja fel, amikor csak online vásárol. - \n\nKöszönjük! + \n\nKöszönjük! Link megnyitása Másolás Bezárás @@ -124,11 +126,12 @@ Rejtsd el! Ön használja a telefonját, vagy a telefonja használja Önt? Az Olauncher-ről - Képernyőidő + Képernyőidő Tudjon meg többet Tudta? Hagyjon véleményt Az Olauncher teljesen ingyenes és mindig is az lesz. Nincsenek hirdetései, nem gyűjt adatokat, és segít csökkenteni a képernyő előtt töltött időt egy egészségesebb digitális élet végett. \n\nÚgy gondoljuk, hogy egy minimális indítóra váltás kiváló döntés, és reméljük, hogy élvezni fogja. Ossza meg másokkal is tapasztalatait! Az igazítás megváltozott ✅ + Kezdőképernyő \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 213e9a11f..5b7c0bb57 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -63,6 +63,8 @@ Hai, keyboard adalah cara tercepat untuk menemukan dan meluncurkan aplikasi di Olauncher. Bisakah kami meminta Anda untuk mengaktifkannya selama beberapa hari lagi dan kemudian memutuskan? Pilihan selalu menjadi milik Anda. Jika Anda ingin menetapkan batas waktu untuk aplikasi tertentu, fitur Digital Wellbeing Android dapat membantu Anda melakukannya. \n\nSilakan cari Digital Wellbeing di pengaturan ponsel Anda dan aktifkan. + Untuk menampilkan/menyembunyikan waktu layar di layar utama, izinkan atau tolak izin penggunaan aplikasi. + \n\nCatatan: Tidak ada data penggunaan aplikasi yang dikumpulkan. Semua diproses di perangkat Anda. Izin aksesibilitas diperlukan untuk mengaktifkan ketuk dua kali untuk mengunci. Data apa pun yang diperoleh Olauncher melalui layanan ini tidak akan meninggalkan perangkat Anda. Dukung Olauncher secara gratis dengan menggunakan tautan afiliasi Amazon kami. Setiap kali Anda membeli sesuatu menggunakan tautan kami, kami mendapat komisi kecil. Harap simpan tautan dan gunakan setiap kali Anda berbelanja online.\nTerima kasih! @@ -121,10 +123,11 @@ Apakah Anda menggunakan ponsel Anda, atau ponsel Anda menggunakan Anda? Tentang Olauncher Pelajari lebih lanjut - Waktu layar + Waktu layar Tahukah kamu? Tinggalkan ulasan Olauncher sepenuhnya gratis dan akan selalu gratis. Tidak ada iklan. Tidak mengumpulkan data pribadi. Yang terpenting, ini membantu Anda mengurangi waktu pemakaian perangkat dan menjalani kehidupan digital yang lebih sehat. \n\nKami percaya bahwa beralih ke peluncur minimal adalah keputusan yang sangat baik. Meskipun kami jelas-jelas bias, kami harap Anda menikmati pengalaman ini. Jangan ragu untuk berbagi pemikiran Anda dengan kami! - Penyelarasan diubah ✅ + Penyelarasan diubah ✅ + Layar beranda \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 263a9fcfc..0aff260b4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -63,6 +63,8 @@ \n\nSei sempre tu a scegliere. Se desideri impostare limiti di tempo per determinate app, la funzionalità Benessere digitale di Android può aiutarti a farlo. \n\nCerca Benessere digitale nelle impostazioni del telefono e attivalo. + Per visualizzare/nascondere il tempo di utilizzo dello schermo sulla schermata iniziale, conceda o neghi il permesso di utilizzo dell\'app. + \n\nNota: Non vengono raccolti dati sull\'utilizzo dell\'app. Tutto viene elaborato sul tuo dispositivo. L\'autorizzazione di accessibilità è necessaria per abilitare il doppio tocco per il blocco schermo. Qualsiasi dato acquisito da Olauncher tramite questo servizio rimarrà all’interno del telefono Supporta Olauncher gratuitamente utilizzando il nostro link di affiliazione su Amazon. Ogni volta che acquisti qualcosa utilizzando il nostro link, riceviamo una piccola commissione. Salva il link e usalo ogni volta che fai acquisti online.\n Grazie! @@ -123,10 +125,11 @@ Stai usando il tuo telefono, o è il tuo telefono che sta usando te? Info Olauncher Saperne di più - Tempo di schermo + Tempo di schermo Lo sapevate? Lascia una recensione Olauncher è e sarà sempre completamente gratuito. Non ha pubblicità. Non raccoglie dati. Ancora più importante, ti aiuta a ridurre il tempo trascorso davanti allo schermo e a vivere una vita digitale più sana. \n\nCrediamo che passare a un launcher minimale sia un\'ottima decisione. Anche se siamo ovviamente di parte, ci auguriamo che l\'esperienza ti piaccia. Sentitevi liberi di condividere i tuoi pensieri con noi! - Allineamento cambiato ✅ + Allineamento cambiato ✅ + Schermata principale \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 695e6f0d0..f5103da45 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -96,6 +96,8 @@ こんにちは、キーボードは Olauncher でアプリを見つけて起動する最も速い方法です。もう数日間これをオンにしてから判断していただくようお願いできますか?選択は常にあなた次第です。 特定のアプリに時間制限を設定したい場合は、Android の Digital Wellbeing 機能を使用すると便利です。 \n\n携帯電話の設定で Digital Wellbeing を検索し、有効にしてください。 + ホーム画面で画面時間を表示/非表示するには、アプリの使用権限を許可または拒否してください。 + \n\n注意: アプリの使用データは収集されません。すべての処理はあなたのデバイスで行われます。 ダブルタップしてロックを有効にするには、アクセシビリティ許可が必要です。このサービスを通じて Olauncher が取得したデータは、デバイスから流出することはありません。 Amazon アフィリエイト リンクを使用して、Olauncher を無料でサポートしてください。 あなたが私たちのリンクを使用して何かを購入するたびに、私たちは少額の手数料を受け取ります。リンクを保存し、オンライン ショッピングの際には必ずご利用ください。 ありがとう! @@ -119,7 +121,7 @@ アプリを左にスワイプ有効化 アプリを右にスワイプ有効 左にスワイプするとアプリが無効になります - スクリーンタイム + スクリーンタイム アプリを右にスワイプすると無効になります あなたは電話を使っていますか、それともあなたの電話があなたを使っていますか? アバウト Olauncher @@ -128,5 +130,6 @@ レビューを残す Olauncher は現在も、今後も完全に無料です。広告はありません。データは収集されません。最も重要なことは、スクリーンタイムを短縮し、より健康的なデジタル ライフを送るのに役立つことです。 \n\n私たちは、最小限のランチャーに切り替えるのは素晴らしい決断だと信じています。明らかに偏見がありますが、楽しんでいただければ幸いです。ぜひご意見をお聞かせください。 - アライメントが変更されました ✅ + アライメントが変更されました ✅ + ホーム画面 \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index a24540379..fb2d0e8db 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -95,6 +95,8 @@ Cześć, klawiatura to najszybszy sposób znajdowania i uruchamiania aplikacji w Olauncher. Czy możemy poprosić o pozostawienie tego włączonego jeszcze przez kilka dni, a następnie podjęcie decyzji?\n\nWybór zawsze należy do Ciebie. Jeśli chcesz ustawić limity czasowe dla niektórych aplikacji, funkcja Cyfrowa równowaga w systemie Android może Ci w tym pomóc. \n\nWyszukaj opcję Cyfrowa równowaga w ustawieniach telefonu i włącz ją. + Aby wyświetlić/ukryć czas ekranu na ekranie głównym, pozwól lub zabroń aplikacji na dostęp do danych o użyciu. + \n\nUwaga: Nie są gromadzone żadne dane o użyciu aplikacji. Wszystko jest przetwarzane na Twoim urządzeniu. Uprawnienia dostępu są wymagane, aby włączyć podwójne dotknięcie, aby zablokować. Wszelkie dane pozyskane przez Olauncher za pośrednictwem tej usługi nie opuszczą Twojego urządzenia. Wesprzyj Olauncher za darmo, korzystając z naszego linku afiliacyjnego Amazon. Za każdym razem, gdy kupujesz coś za pomocą naszego linku, otrzymujemy niewielką prowizję. Zapisz link i używaj go podczas zakupów online. Dziękuję! @@ -121,11 +123,12 @@ Gest Przesuń w prawo jest wyłączony Czy używasz telefonu, czy telefon używa ciebie? O Olauncher - Czas ekranowy + Czas ekranowy Ucz się więcej Czy wiedziałeś? Ucz się więcej Olauncher jest i zawsze będzie całkowicie darmowy. Nie zawiera reklam. Nie zbiera żadnych danych. Co najważniejsze, pomaga skrócić czas spędzany przed ekranem i prowadzić zdrowsze cyfrowe życie. \n\nWierzymy, że przejście na minimalny program uruchamiający to doskonała decyzja. Chociaż jesteśmy oczywiście stronniczy, mamy nadzieję, że spodoba ci się to doświadczenie. Podziel się z nami swoimi przemyśleniami! - Wyrównanie zmienione ✅ + Wyrównanie zmienione ✅ + Ekran główny diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 032a6d886..ef6e81bd2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -63,6 +63,8 @@ \n\nA escolha é sempre sua! Se você deseja definir limites de tempo para determinados aplicativos, o recurso Bem-estar digital do Android pode ajudá-lo a fazer isso. \n\nProcure Bem-estar Digital nas configurações do seu telefone e ative-o. + Para exibir/ocultar o tempo de tela na tela inicial, permita ou negue a permissão de uso do aplicativo. + \n\nNota: Não são coletados dados de uso do aplicativo. Tudo é processado no seu dispositivo. A permissão de acessibilidade é necessária para ativar o toque duplo para bloquear. Quaisquer dados adquiridos pelo Olauncher através deste serviço não sairão do seu dispositivo. Apoie o Olauncher gratuitamente usando nosso link de afiliado da Amazon. Sempre que você comprar algo usando nosso link, receberemos uma pequena comissão. Salve o link e use-o sempre que fizer compras online. Obrigado! @@ -124,10 +126,11 @@ Você está usando seu telefone, ou seu telefone está usando você? Sobre Olauncher Saber mais - Tempo de tela + Tempo de tela Você sabia? Deixe um comentário Olauncher é e sempre será totalmente gratuito. Não tem anúncios. Não coleta dados. Mais importante ainda, ajuda você a reduzir o tempo de tela e a ter uma vida digital mais saudável. \n\nAcreditamos que mudar para um launcher mínimo é uma excelente decisão. Embora sejamos obviamente tendenciosos, esperamos que você esteja gostando da experiência. Sinta-se à vontade para compartilhar suas idéias conosco! - Alinhamento alterado ✅ + Alinhamento alterado ✅ + Tela inicial \ No newline at end of file diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 5b878fa5b..6d129fcee 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -64,6 +64,8 @@ \n\nВыбор всегда за вами. Если вы хотите установить ограничения по времени для определенных приложений, функция «Цифровое благополучие» Android может помочь вам в этом. \n\nНайдите параметр «Цифровое благополучие» в настройках телефона и включите его. + Чтобы показать/скрыть время экрана на домашнем экране, разрешите или запретите разрешение на использование приложения. + \n\nПримечание: Не собираются данные об использовании приложения. Все обрабатывается на вашем устройстве. " Разрешение на доступ требуется, чтобы включить двойное касание для блокировки. Любые данные, полученные Olauncher через этот сервис, не покинут ваше устройство." Поддержите Olauncher бесплатно, используя нашу партнерскую ссылку Amazon. Каждый раз, когда вы покупаете что-то по нашей ссылке, мы получаем небольшую комиссию. Пожалуйста, сохраните ссылку и используйте ее при совершении покупок в Интернете.\nСпасибо! @@ -123,11 +125,12 @@ Скрыть Вы используете свой телефон, или ваш телефон использует вас? О нас Olauncher - Время на экране + Время на экране Узнать больше Вы знали? Оставить отзыв Olauncher есть и всегда будет полностью бесплатным. В нем нет рекламы. Он не собирает никаких данных. Самое главное, это помогает вам сократить время, проводимое перед экраном, и вести более здоровую цифровую жизнь. \n\nМы считаем, что переход на минимальный лаунчер — отличное решение. Хотя мы явно предвзяты, мы надеемся, что вам понравится этот опыт. Не стесняйтесь поделиться с нами своим мнением! - Выравнивание изменено ✅ + Выравнивание изменено ✅ + Главный экран diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 05e0c361a..4a8fc2ecb 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -63,6 +63,8 @@ \n\nValet är alltid ditt. Om du vill ställa in tidsgränser för vissa appar, kan Digitalt välmående-funktionen i Android hjälpa dig att göra det. \n\nVänligen sök efter Digitalt välmående i dina telefoninställningar och aktivera den. + För att visa/dölja din skärmtid på startsidan, vänligen tillåt eller neka appanvändningsbehörigheten. + \n\nObs: Inga data om appanvändning samlas in. Allt bearbetas på din enhet. Tillgänglighetsbehörigheten krävs för att aktivera dubbeltryck för att låsa. Eventuella data förvärvade av Olauncher genom denna tjänst kommer inte att lämna din enhet. Stöd Olauncher utan kostnad genom att använda vår Amazon-affiliatelänk. Varje gång du köper något via vår länk får vi en liten provision. Vänligen spara länken och använd den när du handlar på nätet.\nTack! @@ -121,11 +123,12 @@ Dölj Använder du din telefon, eller använder din telefon dig? Om Olauncher - Skärmtid + Skärmtid Läs mer Visste du? Lämna en recension Olauncher är gratis och kommer alltid att vara det. Den har inga annonser. Den samlar inte in någon data. Viktigast av allt, det hjälper dig att minska din skärmtid och leva ett hälsosammare digitalt liv. \n\nVi tycker att det är ett utmärkt beslut att byta till en minimalistisk startskärmsapp. Även om vi uppenbarligen är partiska, hoppas vi att du gillar upplevelsen. Vi vill gärna höra dina tankar! - Justering ändrad ✅ + Justering ändrad ✅ + Startskärm \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 96050ec85..b54206384 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -97,6 +97,8 @@ \n\nSeçim her zaman senindir. Belirli uygulamalar için zaman sınırları belirlemek istiyorsanız Android\'in Dijital Denge özelliği bunu yapmanıza yardımcı olabilir. \n\nLütfen telefon ayarlarınızda Dijital Refah\'ı arayın ve etkinleştirin. + Ana ekranınızda ekran sürenizi göstermek/gizlemek için lütfen uygulama kullanım iznini onaylayın veya reddedin. + \n\nNot: Uygulama kullanım verileri toplanmaz. Her şey cihazınızda işlenir. Kilitlemek için çift dokunmayı etkinleştirmek için erişilebilirlik izni gereklidir. Olauncher tarafından bu hizmet aracılığıyla elde edilen hiçbir veri cihazınızdan ayrılmayacaktır. Amazon ortaklık bağlantımızı kullanarak Olauncher\'ı ücretsiz olarak destekleyin. Bağlantımızı kullanarak her bir şey satın aldığınızda, küçük bir komisyon alırız. Lütfen bağlantıyı kaydedin ve çevrimiçi alışveriş yaptığınızda kullanın. Teşekkür ederim! @@ -124,10 +126,11 @@ Sen mi telefonunu, kullanıyorsun yoksa telefon mu seni kullanıyor? Hakkında Olauncher Daha fazla bilgi edin - Ekran süresi + Ekran süresi Biliyor musun? İnceleme bırak Olauncher tamamen ücretsizdir ve her zaman ücretsiz olacaktır. Hiçbir reklamı yok. Hiçbir veri toplamaz. En önemlisi ekran başında geçirdiğiniz süreyi azaltmanıza ve daha sağlıklı bir dijital yaşam sürmenize yardımcı olur. \n\nMinimal bir başlatıcıya geçmenin mükemmel bir karar olduğuna inanıyoruz. Açıkça ön yargılı olsak da, bu deneyimden keyif alacağınızı umuyoruz. Düşüncelerinizi bizimle paylaşmaktan çekinmeyin! - Hizalama değiştirildi ✅ + Hizalama değiştirildi ✅ + Ana ekran \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 80dc6d96a..f097332f1 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -64,6 +64,8 @@ \n\nВибір завжди за вами. Якщо ви хочете встановити часові обмеження для певних програм, функція цифрового добробуту Android може допомогти вам це зробити. \n\nЗнайдіть Digital Wellbeing у налаштуваннях телефону та ввімкніть його. + Щоб показати/ховати час роботи з екраном на головному екрані, будь ласка, дозвольте або забороніть дозвіл на використання програми. + \n\nПримітка: Не збираються дані про використання програми. Все обробляється на вашому пристрої. " Дозвіл на доступ потрібний, щоб увімкнути подвійне торкання для блокування. Будь-які дані, отримані Olauncher через цей сервіс, не залишать ваш пристрій." Підтримайте Olauncher безкоштовно, використовуючи наше партнерське посилання Amazon. Щоразу, коли ви купуєте щось за нашим посиланням, ми отримуємо невелику комісію. Будь ласка, збережіть посилання та використовуйте його для здійснення покупок в Інтернеті.\nСпасибі! @@ -124,10 +126,11 @@ Ви користуєтеся своїм телефоном, чи ваш телефон використовує вас? Про нас Olauncher Вивчайте більше - Час екрану + Час екрану Ти знав? Залиште відгук Olauncher є і завжди буде абсолютно безкоштовним. У ньому немає реклами. Він не збирає дані. Найважливіше те, що це допомагає вам скоротити час використання екрана та жити здоровішим цифровим життям. \n\nМи вважаємо, що перехід на мінімальний лаунчер є відмінним рішенням. Хоча ми явно упереджені, ми сподіваємося, що вам сподобається. Не соромтеся поділитися з нами своїми думками! - Вирівнювання змінено ✅ + Вирівнювання змінено ✅ + Головний екран diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 757fde2bc..08c545efe 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -97,6 +97,8 @@ \n\n然后再决定吗?选择权永远在你手中。 如果您想为某些应用程序设置时间限制,Android 的数字健康功能可以帮助您做到这一点。 \n\n请在手机设置中搜索数字健康并启用它。 + 要在主屏幕上显示/隐藏您的屏幕时间,请允许或拒绝应用程序使用权限。 + \n\n注意:不收集应用程序使用数据。所有数据都在您的设备上处理。 请在手机设置中搜索数字健康并启用它。 使用我们的亚马逊附属链接免费支持 Olauncher。 每次您使用我们的链接购买商品时,我们都会获得少量佣金。请保存链接并在网上购物时使用它。 谢谢! @@ -124,10 +126,11 @@ 是你在用手机,还是手机在用你? 关于 Olauncher 了解更多 - 屏幕时间 + 屏幕时间 你可知道? 发表评论 Olauncher 现在并且永远是完全免费的。它没有广告。它不收集任何数据。最重要的是,它可以帮助您减少屏幕时间并过上更健康的数字生活。 \n\n我们相信切换到最小启动器是一个很好的决定。虽然我们显然有偏见,但我们希望您喜欢这次体验。请随时与我们分享您的想法! - 对齐已更改 ✅ + 对齐已更改 ✅ + 主屏幕 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7a85160d4..933c5479b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,7 +82,7 @@ \n\nThe choice is always yours. If you want to set time limits for certain apps, Digital Wellbeing feature of Android can help you do it. \n\nPlease search for Digital Wellbeing in your phone settings and enable it. - To see show/hide your screen time on the home screen, please allow or disallow the app usage permission. + To show/hide your screen time on the home screen, please allow or disallow the app usage permission. \n\nNote: No app usage data is collected. Everything is processed on your device. The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. Support Olauncher for free by using our Amazon affiliate link. From 93794eab27ec7be62320ec9eb56d81afce4e1d60 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sat, 16 Nov 2024 19:12:57 +0530 Subject: [PATCH 063/150] Minor copy fix --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 933c5479b..e5f22ffe9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -102,7 +102,7 @@ Please set Olauncher as default first Affiliate Tip: Start typing for app RENAME option - Note: Tap on \'Olauncher\' at the top of this Settings page to find your hidden apps.\n\nMore details available in our About page below. + Note: Tap on \'Olauncher\' at the top of this Settings page to find your hidden apps.\n\nMore details available in our About page. Swipe down for Search Notifications From 97f105c62897317448ab8bf33ed2eaef726c8323 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 17 Nov 2024 12:14:00 +0530 Subject: [PATCH 064/150] Copy changes --- app/src/main/java/app/olauncher/MainActivity.kt | 10 +++++----- app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-es-rUS/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 9 +++++---- 19 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index b33f3567f..fbf4dd57d 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -151,7 +151,7 @@ class MainActivity : AppCompatActivity() { Constants.Dialog.SHARE -> { prefs.shareShownTime = System.currentTimeMillis() - showMessageDialog(getString(R.string.app_name), getString(R.string.share_message), getString(R.string.share_now)) { + showMessageDialog(getString(R.string.hey), getString(R.string.share_message), getString(R.string.share_now)) { binding.messageLayout.visibility = View.GONE showToast("😊❤️") shareApp() @@ -209,15 +209,15 @@ class MainActivity : AppCompatActivity() { if (prefs.rateClicked) prefs.userState = Constants.UserState.SHARE else if (isOlauncherDefault(this) - && prefs.firstOpenTime.hasBeenDays(3) - && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 15 + && prefs.firstOpenTime.hasBeenDays(7) + && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 18 ) viewModel.showDialog.postValue(Constants.Dialog.RATE) } Constants.UserState.SHARE -> { if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenDays(14) - && prefs.shareShownTime.hasBeenDays(45) - && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 15 + && prefs.shareShownTime.hasBeenDays(42) + && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 18 ) viewModel.showDialog.postValue(Constants.Dialog.SHARE) } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 4b88ffaec..727fa8050 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -128,4 +128,5 @@ وقت الشاشة تم تغيير المحاذاة ✅ شاشة الرئيسية + مرحبا \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 5d65da857..5d95310d3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -133,4 +133,5 @@ \n\nWir glauben, dass der Wechsel zu einem Minimal Launcher eine ausgezeichnete Entscheidung ist. Obwohl wir offensichtlich voreingenommen sind, hoffen wir, dass Ihnen die Erfahrung gefällt. Teilen Sie uns gerne Ihre Gedanken mit! Ausrichtung geändert ✅ Startbildschirm + Hey diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index ec88fd357..24f4ab04c 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -133,4 +133,5 @@ \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dudes en compartir tus pensamientos con nosotros! Alineación cambiada ✅ Pantalla de inicio + Hola diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 76f0a3d6e..90bfe3448 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -130,4 +130,5 @@ \n\nCreemos que cambiar a un lanzador mínimo es una excelente decisión. Aunque obviamente somos parciales, esperamos que disfrutes la experiencia. ¡No dude en compartir sus pensamientos con nosotros! Alineación cambiada ✅ Pantalla de inicio + Hola diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1dfb55881..6fffdcb44 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -135,4 +135,5 @@ \n\nNous pensons que passer à un lanceur minimal est une excellente décision. Même si nous sommes évidemment partiaux, nous espérons que vous appréciez l\'expérience. N\'hésitez pas à partager vos idées avec nous! Alignement changé ✅ Écran d\'accueil + Salut diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 572f3d7cb..1252ea96f 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -133,4 +133,5 @@ O Olauncher-u i ČPP Poravnanje promijenjeno ✅ Početni ekran + Bok diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 7eb6d4929..80128c3e4 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -134,4 +134,5 @@ \n\nÚgy gondoljuk, hogy egy minimális indítóra váltás kiváló döntés, és reméljük, hogy élvezni fogja. Ossza meg másokkal is tapasztalatait! Az igazítás megváltozott ✅ Kezdőképernyő + Szia \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 5b7c0bb57..cb29eb783 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -130,4 +130,5 @@ \n\nKami percaya bahwa beralih ke peluncur minimal adalah keputusan yang sangat baik. Meskipun kami jelas-jelas bias, kami harap Anda menikmati pengalaman ini. Jangan ragu untuk berbagi pemikiran Anda dengan kami! Penyelarasan diubah ✅ Layar beranda + Hai \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0aff260b4..5d2fb745f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -132,4 +132,5 @@ \n\nCrediamo che passare a un launcher minimale sia un\'ottima decisione. Anche se siamo ovviamente di parte, ci auguriamo che l\'esperienza ti piaccia. Sentitevi liberi di condividere i tuoi pensieri con noi! Allineamento cambiato ✅ Schermata principale + Ciao \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f5103da45..b5d035290 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -132,4 +132,5 @@ \n\n私たちは、最小限のランチャーに切り替えるのは素晴らしい決断だと信じています。明らかに偏見がありますが、楽しんでいただければ幸いです。ぜひご意見をお聞かせください。 アライメントが変更されました ✅ ホーム画面 + やあ \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index fb2d0e8db..7e6ff5b96 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -131,4 +131,5 @@ \n\nWierzymy, że przejście na minimalny program uruchamiający to doskonała decyzja. Chociaż jesteśmy oczywiście stronniczy, mamy nadzieję, że spodoba ci się to doświadczenie. Podziel się z nami swoimi przemyśleniami! Wyrównanie zmienione ✅ Ekran główny + Hej diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index ef6e81bd2..8775f8b9c 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -133,4 +133,5 @@ \n\nAcreditamos que mudar para um launcher mínimo é uma excelente decisão. Embora sejamos obviamente tendenciosos, esperamos que você esteja gostando da experiência. Sinta-se à vontade para compartilhar suas idéias conosco! Alinhamento alterado ✅ Tela inicial + Oi \ No newline at end of file diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 6d129fcee..bfc430eb4 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -133,4 +133,5 @@ \n\nМы считаем, что переход на минимальный лаунчер — отличное решение. Хотя мы явно предвзяты, мы надеемся, что вам понравится этот опыт. Не стесняйтесь поделиться с нами своим мнением! Выравнивание изменено ✅ Главный экран + Привет diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 4a8fc2ecb..22f41fb1d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -131,4 +131,5 @@ \n\nVi tycker att det är ett utmärkt beslut att byta till en minimalistisk startskärmsapp. Även om vi uppenbarligen är partiska, hoppas vi att du gillar upplevelsen. Vi vill gärna höra dina tankar! Justering ändrad ✅ Startskärm + Hej \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index b54206384..8b3575fa9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -133,4 +133,5 @@ \n\nMinimal bir başlatıcıya geçmenin mükemmel bir karar olduğuna inanıyoruz. Açıkça ön yargılı olsak da, bu deneyimden keyif alacağınızı umuyoruz. Düşüncelerinizi bizimle paylaşmaktan çekinmeyin! Hizalama değiştirildi ✅ Ana ekran + Merhaba \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index f097332f1..7b54721fc 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -133,4 +133,5 @@ \n\nМи вважаємо, що перехід на мінімальний лаунчер є відмінним рішенням. Хоча ми явно упереджені, ми сподіваємося, що вам сподобається. Не соромтеся поділитися з нами своїми думками! Вирівнювання змінено ✅ Головний екран + Привіт diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 08c545efe..03055df5e 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -133,4 +133,5 @@ \n\n我们相信切换到最小启动器是一个很好的决定。虽然我们显然有偏见,但我们希望您喜欢这次体验。请随时与我们分享您的想法! 对齐已更改 ✅ 主屏幕 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5f22ffe9..816f72853 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,8 +74,8 @@ \n\nRemember, if you have any questions, our About page has the answer. Hi, you won\'t see this message again. \n\nIf you\'re finding Olauncher useful, could you please leave a 5-star review? It\'ll mean the world to us. Thank you! - We need your help! We crossed a million downloads last year. This year, we want to reach a million more, but we can\'t do it alone. - \n\nOlauncher needs people, and people need Olauncher. Could you please share Olauncher with others? + We need your help! We want to tell every Android user about the benefits of Olauncher but we can\'t do it alone. + \n\nCould you please share Olauncher with your friends, family and followers? That\'d be very helpful. Thanks! Hi, keyboard is the fastest way to find and launch apps in Olauncher. Can we request you to keep this On for a few more days and then decide? @@ -146,8 +146,9 @@ Learn more Did you know? Leave a review - Olauncher is free and always will be. It has no ads, collects no data, and helps you reduce screen time for a healthier digital life. - \n\nWe believe a minimal launcher is a great choice, and we hope you enjoy it. Tell the world what you think! + Olauncher is free and always will be. It has no ads, collects no data, and reduces your screen time resulting in a healthier life. + \n\nWe hope you enjoy it. Tell us what you think. Alignment changed ✅ Home screen + Hey \ No newline at end of file From 4f3dfbb29cf2ad3ce402782ef7c2ca67bf4092f5 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 17 Nov 2024 12:40:35 +0530 Subject: [PATCH 065/150] Copy changes --- app/src/main/java/app/olauncher/MainActivity.kt | 10 ++++++++-- app/src/main/java/app/olauncher/data/Constants.kt | 1 + app/src/main/java/app/olauncher/data/Prefs.kt | 5 +++++ app/src/main/java/app/olauncher/ui/SettingsFragment.kt | 8 ++++++++ app/src/main/res/values-ar/strings.xml | 2 ++ app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-es-rES/strings.xml | 2 ++ app/src/main/res/values-es-rUS/strings.xml | 2 ++ app/src/main/res/values-fr/strings.xml | 4 +++- app/src/main/res/values-hr/strings.xml | 2 ++ app/src/main/res/values-hu/strings.xml | 2 ++ app/src/main/res/values-in/strings.xml | 2 ++ app/src/main/res/values-it/strings.xml | 2 ++ app/src/main/res/values-ja/strings.xml | 2 ++ app/src/main/res/values-pl/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 2 ++ app/src/main/res/values-ru-rRU/strings.xml | 2 ++ app/src/main/res/values-sv/strings.xml | 2 ++ app/src/main/res/values-tr/strings.xml | 2 ++ app/src/main/res/values-uk/strings.xml | 2 ++ app/src/main/res/values-zh/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 22 files changed, 59 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index fbf4dd57d..afe4321eb 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -26,6 +26,7 @@ import app.olauncher.helper.isDefaultLauncher import app.olauncher.helper.isEinkDisplay import app.olauncher.helper.isOlauncherDefault import app.olauncher.helper.isTablet +import app.olauncher.helper.openUrl import app.olauncher.helper.rateApp import app.olauncher.helper.resetLauncherViaFakeActivity import app.olauncher.helper.setPlainWallpaper @@ -173,7 +174,12 @@ class MainActivity : AppCompatActivity() { Constants.Dialog.DIGITAL_WELLBEING -> { showMessageDialog(getString(R.string.screen_time), getString(R.string.app_usage_message), getString(R.string.permission)) { startActivity(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) - // openUrl(Constants.URL_DIGITAL_WELLBEING_LEARN_MORE) + } + } + + Constants.Dialog.PRO_MESSAGE -> { + showMessageDialog(getString(R.string.hey), getString(R.string.pro_message), getString(R.string.olauncher_pro)) { + openUrl(Constants.URL_OLAUNCHER_PRO) } } } @@ -215,7 +221,7 @@ class MainActivity : AppCompatActivity() { } Constants.UserState.SHARE -> { - if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenDays(14) + if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenDays(21) && prefs.shareShownTime.hasBeenDays(42) && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 18 ) viewModel.showDialog.postValue(Constants.Dialog.SHARE) diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index 12f9a75cb..bb28b6c95 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -15,6 +15,7 @@ object Constants { const val HIDDEN = "HIDDEN" const val KEYBOARD = "KEYBOARD" const val DIGITAL_WELLBEING = "DIGITAL_WELLBEING" + const val PRO_MESSAGE = "PRO_MESSAGE" } object UserState { diff --git a/app/src/main/java/app/olauncher/data/Prefs.kt b/app/src/main/java/app/olauncher/data/Prefs.kt index c1ab5ad43..6db3119a2 100644 --- a/app/src/main/java/app/olauncher/data/Prefs.kt +++ b/app/src/main/java/app/olauncher/data/Prefs.kt @@ -36,6 +36,7 @@ class Prefs(context: Context) { private val SHARE_SHOWN_TIME = "SHARE_SHOWN_TIME" private val SWIPE_DOWN_ACTION = "SWIPE_DOWN_ACTION" private val TEXT_SIZE_SCALE = "TEXT_SIZE_SCALE" + private val PRO_MESSAGE_SHOWN = "PRO_MESSAGE_SHOWN" private val APP_NAME_1 = "APP_NAME_1" private val APP_NAME_2 = "APP_NAME_2" @@ -167,6 +168,10 @@ class Prefs(context: Context) { get() = prefs.getFloat(TEXT_SIZE_SCALE, 1.0f) set(value) = prefs.edit().putFloat(TEXT_SIZE_SCALE, value).apply() + var proMessageShown: Boolean + get() = prefs.getBoolean(PRO_MESSAGE_SHOWN, false) + set(value) = prefs.edit().putBoolean(PRO_MESSAGE_SHOWN, value).apply() + var hiddenApps: MutableSet get() = prefs.getStringSet(HIDDEN_APPS, mutableSetOf()) as MutableSet set(value) = prefs.edit().putStringSet(HIDDEN_APPS, value).apply() diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index 94a4fc3a3..bfa1a1bda 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -68,6 +68,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe checkAdminPermission() binding.homeAppsNum.text = prefs.homeAppsNum.toString() + populateProMessage() populateKeyboardText() populateScreenTimeOnOff() populateLockSettings() @@ -622,6 +623,13 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe binding.rate.setCompoundDrawablesWithIntrinsicBounds(0, android.R.drawable.arrow_down_float, 0, 0) } + private fun populateProMessage() { + if (prefs.proMessageShown.not() && prefs.userState == Constants.UserState.SHARE) { + prefs.proMessageShown = true + viewModel.showDialog.postValue(Constants.Dialog.PRO_MESSAGE) + } + } + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 727fa8050..2225c0556 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -96,6 +96,8 @@ \n\nيرجى البحث عن الرفاهية الرقمية في إعدادات هاتفك وتمكينها. لعرض/إخفاء وقت استخدام الشاشة على الشاشة الرئيسية، يرجى السماح أو منع إذن استخدام التطبيق. \n\nملاحظة: لا يتم جمع أي بيانات حول استخدام التطبيقات. يتم معالجة كل شيء على جهازك. + يحتوي Olauncher أيضًا على إصدار احترافي يسمى Pro Launcher. يحتوي على ميزات إضافية مثل الطقس، والأدوات، والخطوط، والمجلدات، وخلفيات AMOLED، وما إلى ذلك. + \n\nإنه أيضًا أفضل طريقة لدعم مطوري Olauncher. تحقق من ذلك! إذن الوصول مطلوب لتمكين النقر المزدوج للقفل. أي بيانات حصل عليها Olauncher عبر هذه الخدمة لن تترك جهازك. ادعم Olauncher مجانًا باستخدام رابط الشراكة التابع لشركة Amazon. في كل مرة تشتري شيئًا باستخدام الرابط الخاص بنا ، نحصل على عمولة صغيرة. يرجى حفظ الرابط واستخدامه في أي وقت تتسوق فيه عبر الإنترنت. شكرًا لك! diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 5d95310d3..9f40e7d65 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -99,6 +99,8 @@ \n\nBitte suchen Sie in Ihren Telefoneinstellungen nach Digital Wellbeing und aktivieren Sie es. Um die Bildschirmzeit auf dem Startbildschirm anzuzeigen oder zu verbergen, erteilen Sie bitte die Erlaubnis für die App-Nutzung oder verweigern Sie sie. \n\nHinweis: Es werden keine Daten zur App-Nutzung gesammelt. Alles wird auf Ihrem Gerät verarbeitet. + Olauncher hat auch eine Pro-Version namens Pro Launcher. Sie bietet zusätzliche Funktionen wie Wetter, Widgets, Schriftarten, Ordner, AMOLED-Hintergründe usw. + \n\nEs ist auch der beste Weg, die Entwickler von Olauncher zu unterstützen. Schau es dir an! Die Zugriffsberechtigung ist erforderlich, um das Sperren durch Doppeltippen zu ermöglichen. Die von Olauncher über diesen Dienst erfassten Daten verlassen Ihr Gerät nicht. Unterstützen Sie Olauncher kostenlos, indem Sie unseren Amazon-Partnerlink verwenden. Jedes Mal, wenn Sie über unseren Link etwas kaufen, erhalten wir eine kleine Provision. Bitte speichern Sie den Link und verwenden Sie ihn bei jedem Online-Einkauf. Dan­ke­schön! diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 24f4ab04c..32539933c 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -66,6 +66,8 @@ \n\nBusca Bienestar digital en la configuración de su teléfono y habilítelo. Para mostrar/ocultar el tiempo de pantalla en la pantalla de inicio, permita o deniegue el permiso de uso de la aplicación. \n\nNota: No se recopilan datos de uso de la aplicación. Todo se procesa en su dispositivo. + Olauncher también tiene una versión pro llamada Pro Launcher. Tiene funciones adicionales como clima, widgets, fuentes, carpetas, fondos AMOLED, etc. + \n\nTambién es la mejor manera de apoyar a los desarrolladores de Olauncher. ¡Échale un vistazo! "Se requiere el permiso de accesibilidad para habilitar el doble toque para bloquear. Cualquier dato adquirido por Olauncher a través de este servicio no saldrá de su dispositivo." Apoya a Olauncher de forma gratuita utilizando nuestro enlace de afiliado de Amazon. Cada vez que compre algo usando nuestro enlace, obtendremos una pequeña comisión. Guarde el enlace y utilícelo cada vez que compre en línea.\n¡Gracias! diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 90bfe3448..65cc65b44 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -65,6 +65,8 @@ \n\nBusque Bienestar Digital en la configuración de su teléfono y habilítelo. Para mostrar/ocultar el tiempo de pantalla en la pantalla de inicio, permita o deniegue el permiso de uso de la aplicación. \n\nNota: No se recopilan datos de uso de la aplicación. Todo se procesa en su dispositivo. + Olauncher también tiene una versión pro llamada Pro Launcher. Tiene funciones adicionales como clima, widgets, fuentes, carpetas, fondos AMOLED, etc. + \n\nTambién es la mejor manera de apoyar a los desarrolladores de Olauncher. ¡Échale un vistazo! Se necesita el permiso de Accesibilidad para activar el bloqueo con doble toque. Cualquier dato recolectado por Olauncher no saldrá de su dispositivo. Apoye Olauncher de forma gratuita utilizando nuestro enlace de afiliado de Amazon. Cada vez que compre algo usando nuestro enlace, obtenemos una pequeña comisión. Por favor, guarde el enlace y úselo cada vez que compre en línea. ¡Gracias! diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6fffdcb44..f09c97bdc 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -64,7 +64,9 @@ Si vous souhaitez définir des limites de temps pour certaines applications, la fonctionnalité Digital Wellbeing d\'Android peut vous aider à le faire. \n\nVeuillez rechercher Digital Wellbeing dans les paramètres de votre téléphone et l\'activer. Pour afficher/masquer le temps d\'écran sur l\'écran d\'accueil, autorisez ou refusez l\'autorisation d\'utilisation de l\'application. - \n\nRemarque : Aucune donnée d'utilisation de l\'application n\'est collectée. Tout est traité sur votre appareil. + \n\nRemarque : Aucune donnée d\'utilisation de l\'application n\'est collectée. Tout est traité sur votre appareil. + Olauncher a également une version pro appelée Pro Launcher. Elle dispose de fonctionnalités supplémentaires telles que la météo, les widgets, les polices, les dossiers, les fonds d\'écran AMOLED, etc. + \n\nC\'est aussi le meilleur moyen de soutenir les développeurs d\'Olauncher. Jetez-y un œil ! L\'autorisation d\'accessibilité est requise pour activer le double appui pour verrouiller. Toutes les données acquises par Olauncher via ce service ne quitteront pas votre appareil. Soutenez Olauncher gratuitement en utilisant notre lien d\'affiliation Amazon. Chaque fois que vous achetez quelque chose en utilisant notre lien, nous recevons une petite commission. Enregistrez le lien et utilisez le chaque fois que vous commandez en ligne. Merci! diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 1252ea96f..64b229695 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -66,6 +66,8 @@ \n\nPotražite Digital Wellbeing u postavkama telefona i omogućite ga. Da biste prikazali/sakrili vrijeme korištenja ekrana na početnom zaslonu, molimo dozvolite ili onemogućite dopuštenje korištenja aplikacije. \n\nNapomena: Ne prikupljaju se podaci o korištenju aplikacije. Sve se obrađuje na vašem uređaju. + Olauncher također ima pro verziju pod nazivom Pro Launcher. Ima dodatne značajke poput vremena, widgeta, fontova, mapa, AMOLED pozadina itd. + \n\nTo je također najbolji način da podržite programere Olauncher-a. Pogledajte! Dozvola za pristupačnost potrebna je za omogućavanje zaključavanja dvostrukim dodirom. Bilo koji podatci prikupljeni ovim servisom neće napustiti tvoj uređaj. lock layout description to be used a unique id to lock screen Besplatno podrži Olauncher korištenjem naše sponzorske poveznice za Amazon. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 80128c3e4..6e96f2920 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -66,6 +66,8 @@ \n\nKeresse meg a Digitális jólét elemet a telefon beállításai között, és engedélyezze. A képernyőidő megjelenítéséhez/elrejtéséhez a kezdőképernyőn engedélyezze vagy tagadja meg az alkalmazás használati engedélyét. \n\nMegjegyzés: Nem gyűjtünk alkalmazás-használati adatokat. Minden az Ön eszközén kerül feldolgozásra. + Az Olauncher-nek van egy pro verziója is, amely Pro Launcher néven ismert. További funkciókat kínál, mint például időjárás, widgetek, betűtípusok, mappák, AMOLED háttérképek stb. + \n\nEz a legjobb módja annak, hogy támogassa az Olauncher fejlesztőit. Nézd meg! A hozzáférhetőségi engedély szükséges a dupla koppintás általi zároláshoz. Az Olauncher által ezen a szolgáltatáson keresztül megszerzett adatok nem hagyják el a készüléket. Támogasson minket ingyenesen az Amazon affiliate linkünk használatával. Minden alkalommal, amikor vásárol valamit a linkünket használva, egy kis jutalékot kapunk. Kérjük, mentse el a linket, és használja fel, amikor csak online vásárol. diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index cb29eb783..0a1bf8048 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -65,6 +65,8 @@ \n\nSilakan cari Digital Wellbeing di pengaturan ponsel Anda dan aktifkan. Untuk menampilkan/menyembunyikan waktu layar di layar utama, izinkan atau tolak izin penggunaan aplikasi. \n\nCatatan: Tidak ada data penggunaan aplikasi yang dikumpulkan. Semua diproses di perangkat Anda. + Olauncher juga memiliki versi pro yang disebut Pro Launcher. Ini memiliki fitur tambahan seperti cuaca, widget, font, folder, wallpaper AMOLED, dan banyak lagi. + \n\nIni juga merupakan cara terbaik untuk mendukung pengembang Olauncher. Cek it out! Izin aksesibilitas diperlukan untuk mengaktifkan ketuk dua kali untuk mengunci. Data apa pun yang diperoleh Olauncher melalui layanan ini tidak akan meninggalkan perangkat Anda. Dukung Olauncher secara gratis dengan menggunakan tautan afiliasi Amazon kami. Setiap kali Anda membeli sesuatu menggunakan tautan kami, kami mendapat komisi kecil. Harap simpan tautan dan gunakan setiap kali Anda berbelanja online.\nTerima kasih! diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 5d2fb745f..30655a3a1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -65,6 +65,8 @@ \n\nCerca Benessere digitale nelle impostazioni del telefono e attivalo. Per visualizzare/nascondere il tempo di utilizzo dello schermo sulla schermata iniziale, conceda o neghi il permesso di utilizzo dell\'app. \n\nNota: Non vengono raccolti dati sull\'utilizzo dell\'app. Tutto viene elaborato sul tuo dispositivo. + Olauncher ha anche una versione pro chiamata Pro Launcher. Ha funzionalità extra come meteo, widget, font, cartelle, sfondi AMOLED, e così via. + \n\nÈ anche il modo migliore per supportare gli sviluppatori di Olauncher. Dai un\'occhiata! L\'autorizzazione di accessibilità è necessaria per abilitare il doppio tocco per il blocco schermo. Qualsiasi dato acquisito da Olauncher tramite questo servizio rimarrà all’interno del telefono Supporta Olauncher gratuitamente utilizzando il nostro link di affiliazione su Amazon. Ogni volta che acquisti qualcosa utilizzando il nostro link, riceviamo una piccola commissione. Salva il link e usalo ogni volta che fai acquisti online.\n Grazie! diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b5d035290..db0652222 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -98,6 +98,8 @@ \n\n携帯電話の設定で Digital Wellbeing を検索し、有効にしてください。 ホーム画面で画面時間を表示/非表示するには、アプリの使用権限を許可または拒否してください。 \n\n注意: アプリの使用データは収集されません。すべての処理はあなたのデバイスで行われます。 + OlauncherにはPro Launcherというプロ版もあります。天気、ウィジェット、フォント、フォルダー、AMOLED壁紙などの追加機能があります。 + \n\nOlauncherの開発者をサポートするための最良の方法でもあります。チェックしてみてください! ダブルタップしてロックを有効にするには、アクセシビリティ許可が必要です。このサービスを通じて Olauncher が取得したデータは、デバイスから流出することはありません。 Amazon アフィリエイト リンクを使用して、Olauncher を無料でサポートしてください。 あなたが私たちのリンクを使用して何かを購入するたびに、私たちは少額の手数料を受け取ります。リンクを保存し、オンライン ショッピングの際には必ずご利用ください。 ありがとう! diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7e6ff5b96..ecd179d27 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -97,6 +97,8 @@ \n\nWyszukaj opcję Cyfrowa równowaga w ustawieniach telefonu i włącz ją. Aby wyświetlić/ukryć czas ekranu na ekranie głównym, pozwól lub zabroń aplikacji na dostęp do danych o użyciu. \n\nUwaga: Nie są gromadzone żadne dane o użyciu aplikacji. Wszystko jest przetwarzane na Twoim urządzeniu. + Olauncher ma również wersję pro o nazwie Pro Launcher. Posiada dodatkowe funkcje, takie jak pogoda, widgety, czcionki, foldery, tapety AMOLED itp. + \n\nTo także najlepszy sposób na wsparcie deweloperów Olauncher. Sprawdź to! Uprawnienia dostępu są wymagane, aby włączyć podwójne dotknięcie, aby zablokować. Wszelkie dane pozyskane przez Olauncher za pośrednictwem tej usługi nie opuszczą Twojego urządzenia. Wesprzyj Olauncher za darmo, korzystając z naszego linku afiliacyjnego Amazon. Za każdym razem, gdy kupujesz coś za pomocą naszego linku, otrzymujemy niewielką prowizję. Zapisz link i używaj go podczas zakupów online. Dziękuję! diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8775f8b9c..877b9bfdb 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -65,6 +65,8 @@ \n\nProcure Bem-estar Digital nas configurações do seu telefone e ative-o. Para exibir/ocultar o tempo de tela na tela inicial, permita ou negue a permissão de uso do aplicativo. \n\nNota: Não são coletados dados de uso do aplicativo. Tudo é processado no seu dispositivo. + Olauncher também tem uma versão pro chamada Pro Launcher. Tem recursos extras como clima, widgets, fontes, pastas, papéis de parede AMOLED, e assim por diante. + \n\nÉ também a melhor maneira de apoiar os desenvolvedores do Olauncher. Confira! A permissão de acessibilidade é necessária para ativar o toque duplo para bloquear. Quaisquer dados adquiridos pelo Olauncher através deste serviço não sairão do seu dispositivo. Apoie o Olauncher gratuitamente usando nosso link de afiliado da Amazon. Sempre que você comprar algo usando nosso link, receberemos uma pequena comissão. Salve o link e use-o sempre que fizer compras online. Obrigado! diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index bfc430eb4..9276e9f99 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -66,6 +66,8 @@ \n\nНайдите параметр «Цифровое благополучие» в настройках телефона и включите его. Чтобы показать/скрыть время экрана на домашнем экране, разрешите или запретите разрешение на использование приложения. \n\nПримечание: Не собираются данные об использовании приложения. Все обрабатывается на вашем устройстве. + У Olauncher также есть профессиональная версия под названием Pro Launcher. Она имеет дополнительные функции, такие как погода, виджеты, шрифты, папки, обои AMOLED и так далее. + \n\nЭто также лучший способ поддержать разработчиков Olauncher. Ознакомьтесь! " Разрешение на доступ требуется, чтобы включить двойное касание для блокировки. Любые данные, полученные Olauncher через этот сервис, не покинут ваше устройство." Поддержите Olauncher бесплатно, используя нашу партнерскую ссылку Amazon. Каждый раз, когда вы покупаете что-то по нашей ссылке, мы получаем небольшую комиссию. Пожалуйста, сохраните ссылку и используйте ее при совершении покупок в Интернете.\nСпасибо! diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 22f41fb1d..5d7721ada 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -65,6 +65,8 @@ \n\nVänligen sök efter Digitalt välmående i dina telefoninställningar och aktivera den. För att visa/dölja din skärmtid på startsidan, vänligen tillåt eller neka appanvändningsbehörigheten. \n\nObs: Inga data om appanvändning samlas in. Allt bearbetas på din enhet. + Olauncher har också en pro-version som kallas Pro Launcher. Den har extra funktioner som väder, widgets, typsnitt, mappar, AMOLED-bakgrunder och så vidare. + \n\nDet är också det bästa sättet att stödja utvecklarna av Olauncher. Kolla in det! Tillgänglighetsbehörigheten krävs för att aktivera dubbeltryck för att låsa. Eventuella data förvärvade av Olauncher genom denna tjänst kommer inte att lämna din enhet. Stöd Olauncher utan kostnad genom att använda vår Amazon-affiliatelänk. Varje gång du köper något via vår länk får vi en liten provision. Vänligen spara länken och använd den när du handlar på nätet.\nTack! diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 8b3575fa9..6a1f122c9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -99,6 +99,8 @@ \n\nLütfen telefon ayarlarınızda Dijital Refah\'ı arayın ve etkinleştirin. Ana ekranınızda ekran sürenizi göstermek/gizlemek için lütfen uygulama kullanım iznini onaylayın veya reddedin. \n\nNot: Uygulama kullanım verileri toplanmaz. Her şey cihazınızda işlenir. + Olauncher\'ın Pro Launcher adında bir pro versiyonu da var. Hava durumu, widget\'lar, yazı tipleri, klasörler, AMOLED duvar kağıtları gibi ekstra özelliklere sahip. + \n\nAyrıca Olauncher geliştiricilerini desteklemenin en iyi yolu. Göz atın! Kilitlemek için çift dokunmayı etkinleştirmek için erişilebilirlik izni gereklidir. Olauncher tarafından bu hizmet aracılığıyla elde edilen hiçbir veri cihazınızdan ayrılmayacaktır. Amazon ortaklık bağlantımızı kullanarak Olauncher\'ı ücretsiz olarak destekleyin. Bağlantımızı kullanarak her bir şey satın aldığınızda, küçük bir komisyon alırız. Lütfen bağlantıyı kaydedin ve çevrimiçi alışveriş yaptığınızda kullanın. Teşekkür ederim! diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 7b54721fc..ced28a87d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -66,6 +66,8 @@ \n\nЗнайдіть Digital Wellbeing у налаштуваннях телефону та ввімкніть його. Щоб показати/ховати час роботи з екраном на головному екрані, будь ласка, дозвольте або забороніть дозвіл на використання програми. \n\nПримітка: Не збираються дані про використання програми. Все обробляється на вашому пристрої. + Olauncher також має професійну версію під назвою Pro Launcher. Вона має додаткові функції, такі як погода, віджети, шрифти, папки, фони AMOLED тощо. + \n\nЦе також найкращий спосіб підтримати розробників Olauncher. Ознайомтеся! " Дозвіл на доступ потрібний, щоб увімкнути подвійне торкання для блокування. Будь-які дані, отримані Olauncher через цей сервіс, не залишать ваш пристрій." Підтримайте Olauncher безкоштовно, використовуючи наше партнерське посилання Amazon. Щоразу, коли ви купуєте щось за нашим посиланням, ми отримуємо невелику комісію. Будь ласка, збережіть посилання та використовуйте його для здійснення покупок в Інтернеті.\nСпасибі! diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 03055df5e..d6bf036f2 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -99,6 +99,8 @@ \n\n请在手机设置中搜索数字健康并启用它。 要在主屏幕上显示/隐藏您的屏幕时间,请允许或拒绝应用程序使用权限。 \n\n注意:不收集应用程序使用数据。所有数据都在您的设备上处理。 + Olauncher 还有一个名为 Pro Launcher 的专业版。它具有额外的功能,如天气、部件、字体、文件夹、AMOLED 壁纸等。 + \n\n这也是支持 Olauncher 开发者的最佳方式。快来看看吧! 请在手机设置中搜索数字健康并启用它。 使用我们的亚马逊附属链接免费支持 Olauncher。 每次您使用我们的链接购买商品时,我们都会获得少量佣金。请保存链接并在网上购物时使用它。 谢谢! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 816f72853..6e725c8bd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -84,6 +84,8 @@ \n\nPlease search for Digital Wellbeing in your phone settings and enable it. To show/hide your screen time on the home screen, please allow or disallow the app usage permission. \n\nNote: No app usage data is collected. Everything is processed on your device. + Olauncher also has a pro version called Pro Launcher. It has extra features like weather, widgets, fonts, folders, AMOLED wallpapers, and so on. + \n\nIt\'s also the best way to support the developers of Olauncher. Check it out! The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. Support Olauncher for free by using our Amazon affiliate link. Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! From e2d0fae224589ca09763451b6ee3a26b0f86cf0d Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 17 Nov 2024 12:41:14 +0530 Subject: [PATCH 066/150] App version bumped to 88 (v4.3.5) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index aabb28457..73c83fdfa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "app.olauncher" minSdkVersion 24 targetSdkVersion 34 - versionCode 87 - versionName "v4.3.4.b1" + versionCode 88 + versionName "v4.3.5" resourceConfigurations += ["en", "ar", "de", "es-rES", "es-rUS", "fr", "hr", "hu", "in", "it", "ja", "pl", "pt-rBR", "ru-rRU", "sv", "tr", "uk", "zh"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 1425f20fbfa0af7cd9356daf9395cde9a234f57c Mon Sep 17 00:00:00 2001 From: Tanuj <11060605+tanujnotes@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:20:48 +0530 Subject: [PATCH 067/150] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6ffda0c51..d6e333418 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,12 @@ AF stands for Ad-Free :D To maintain the simplicity of the launcher, a few niche features are available but hidden. -Please check out the [About](https://tanujnotes.substack.com/p/olauncher-minimal-af-launcher?utm_source=github) page in Olauncher settings for the complete feature list and FAQs. +Please check out the [About](https://tanujnotes.substack.com/p/olauncher-minimal-af-launcher?utm_source=github) page in the Olauncher settings for a complete list of features and FAQs. ## License: [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) -Developer: [@tanujnotes](https://twitter.com/tanujnotes) +Follow: [@tanujnotes](https://twitter.com/tanujnotes) -Thank you and have a wonderful day! +[See my other apps](https://play.google.com/store/apps/dev?id=7198807840081074933) From 65bb23c4515ab26e9c3522cffbe173f7e65be97c Mon Sep 17 00:00:00 2001 From: Tanuj <11060605+tanujnotes@users.noreply.github.com> Date: Sun, 17 Nov 2024 18:59:10 +0530 Subject: [PATCH 068/150] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d6e333418..22714c52a 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,6 @@ Please check out the [About](https://tanujnotes.substack.com/p/olauncher-minimal License: [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) -Follow: [@tanujnotes](https://twitter.com/tanujnotes) +@tanujnotes | [X/Twitter](https://twitter.com/tanujnotes) | [Bluesky](https://bsky.app/profile/tanujnotes.bsky.social) [See my other apps](https://play.google.com/store/apps/dev?id=7198807840081074933) From fbcc721e9c97368c5b621270cc4e183920febea2 Mon Sep 17 00:00:00 2001 From: Tanuj <11060605+tanujnotes@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:57:42 +0530 Subject: [PATCH 069/150] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22714c52a..13e6c7e1a 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,4 @@ License: [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) @tanujnotes | [X/Twitter](https://twitter.com/tanujnotes) | [Bluesky](https://bsky.app/profile/tanujnotes.bsky.social) -[See my other apps](https://play.google.com/store/apps/dev?id=7198807840081074933) +**[See my other apps](https://play.google.com/store/apps/dev?id=7198807840081074933)** => From 8c788ac0e01c2705f8adb298c9097cb40ebbc0de Mon Sep 17 00:00:00 2001 From: Ahmad Tharwat <74804846+ahmad-tharwat@users.noreply.github.com> Date: Sun, 2 Feb 2025 15:38:02 +0200 Subject: [PATCH 070/150] Update strings.xml Fixed auto generated Arabic translations with the correct ones. --- app/src/main/res/values-ar/strings.xml | 96 +++++++++++++------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2225c0556..0fef8b824 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,6 +1,6 @@ - App + تطبيق تعيين كمشغل افتراضي تعيين كمشغل افتراضي تعيين كمشغل افتراضي @@ -14,78 +14,78 @@ سبعة ثمانية نصيحة: ابدأ في كتابة اسم التطبيق لتشغيله تلقائيًا - تمام + حسنًا رائع! - نصيحة: ابدأ الكتابة لخيار التطبيق RENAME - سيتم تحديث ورق الحائط الخاص بك قريبًا + نصيحة: ابدأ الكتابة بتغيير اسم التطبيق + سيتم تحديث الخلفية الخاصة بك قريبًا Olauncher ليس المشغل الافتراضي. قد يفشل التحديث اليومي للخلفية. - اضغط لفترة طويلة للتمكين + اضغط مطولًا للتمكين لا توجد تطبيقات مخفية تطبيقات مخفية - انتقاد اليسار تعطيل التطبيق - انتقاد الحق التطبيق تعطيل - ملاحظة: اضغط على \"Olauncher\" أعلى صفحة الإعدادات هذه للعثور على تطبيقاتك المخفية. المزيد من التفاصيل متوفرة في صفحة \"حول\" أدناه. + التمرير لليسار معطّل + التمرير لليمين معطّل + ملاحظة: اضغط على \"Olauncher\" أعلى الصفحة للعثور على تطبيقاتك المخفية. المزيد من التفاصيل متوفرة في صفحة \"حول\" أدناه. اسحب لأسفل من أجل يبحث إشعارات يرجى تشغيل أو إيقاف تشغيل خدمة الوصول في Olauncher في إعدادات جهازك لتمكين هذه الميزة أو تعطيلها. يرجى ملاحظة أن هذه الخدمة تُستخدم فقط للسماح لك بإيقاف تشغيل شاشة جهازك باستخدام إيماءة النقر المزدوج. خدمة الوصول لدينا لا تجمع أو تشارك أي بيانات. يقبل إذن - انقر نقرًا مزدوجًا للقفل - يُمكَِن - إبطال + النقر المزدوج للقفل + تشغيل + إيقاف لا يعمل؟ معلومات يمسح حجم الخط - ممكن - عاجز - يرجى تشغيل النقر المزدوج للقفل + ممكّن + مُطفأ + يرجى تشغيل النقر المزدوج لفتح القفل فشل Olauncher في قفل الجهاز. يرجى التحقق من إعدادات التطبيق الخاص بك. - اضغط لفترة طويلة لتحديد التطبيق - تعذر فتح معلومات التطبيق - نسخ - تطبيق النظام ، لا يمكن الحذف - اكتب اسم تطبيق جديد أولاً + اضغط مطوّلًا لاختيار التطبيق + تعذر فتح التطبيق + نُسخ + ﻻ يمكن حذف تطبيقات النظام + اكتب اسمًا جديدًا للتطبيق أولاً يعرض يخفي لون الخط - انقر نقرًا مزدوجًا للقفل + انقر مرتين لقفل الشاشة يعد Olauncher باستخدام إذن قفل الشاشة بشكل مسؤول. لا يقوم Olauncher بجمع أو مشاركة أي بيانات. - عن - عن - على + حول + + نعم أسود أبيض تغيير المشغل الافتراضي خصوصية - يشارك - يشارك - معدل - معدل - يتبع - بريد إلكتروني - يتبرع - 1. مرر لأعلى لجميع التطبيقات\n2. اضغط لفترة طويلة في أي مكان للإعدادات - تطبيقات على الشاشة الرئيسية - تطبيقات على الشاشة الرئيسية - غادر + شارك + يشارك اﻵن + قيّم + قيّم اﻵن + تابع + بريد + تبرّع + 1. مرر لأعلى لجميع التطبيقات\n2. اضغط مطوّلًا في أي مكان للإعدادات + التطبيقات على الشاشة الرئيسية + تحديث الخلفية يوميّا + يسار يمين مركز محاذاة التطبيق - انتقاد اليسار التطبيق - انتقد التطبيق الصحيح - لوحة مفاتيح العرض التلقائي + افتح عند التمرير لليسار + افتح عند التمرير لليمين + العرض التلقائي للوحة المفاتيح يخفي أظهر شريط الحالة إعادة تسمية إظهار التاريخ والوقت - مظهر + المظهر إيماءات - وضع الموضوع + النمط نظام مظلم - ضوء + مضيء مرحبًا بك في الإعدادات!\n\nتذكر، إذا كان لديك أي سؤال، فإن صفحة "حول" لدينا تحتوي على الإجابة. مرحبًا ، لن ترى هذه الرسالة مرة أخرى. \n\nإذا كنت تحب Olauncher ، فهل يمكنك أن تعطينا تصنيف 5 نجوم؟ يساعدنا ذلك على تحسين تصنيفنا ويجعلنا سعداء. شكرًا لك! @@ -111,24 +111,24 @@ خريطة الطريق تاريخ التاريخ فقط - القاع: تشغيل - القاع: إيقاف + المحاذاة ﻷسفل + المحاذاة ﻷعلى يرجى تعيين Olauncher كمشغل افتراضي أولاً شركة تابعة التطبيق غير موجود تعذر تشغيل التطبيق ابحث عن Launcher أو Home app - انتقاد اليسار التطبيق تمكين - انتقاد الحق التطبيق تمكين + التمرير لليسار مفعّل + التمرير لليمين مفعّل هل تستخدم هاتفك أم أن هاتفك يستخدمك؟ عن Olauncher - يتعلم أكثر + تعلم أكثر هل كنت تعلم؟ - ترك التعليق + أخبرنا رأيك Olauncher هو وسيظل دائمًا مجانيًا تمامًا. ليس لديها إعلانات. لا يجمع أي بيانات. والأهم من ذلك أنه يساعدك على تقليل وقت الشاشة والعيش حياة رقمية أكثر صحة. \n\nنحن نعتقد أن التحول إلى الحد الأدنى من المشغل هو قرار ممتاز. على الرغم من أننا متحيزون بشكل واضح، إلا أننا نأمل أن تستمتع بالتجربة. لا تتردد في مشاركة أفكارك معنا! وقت الشاشة تم تغيير المحاذاة ✅ - شاشة الرئيسية + الشاشة الرئيسية مرحبا - \ No newline at end of file + From 619af0e6ab95fb0c795c122bbbf21a91dc189d12 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 16 Feb 2025 12:41:43 +0530 Subject: [PATCH 071/150] Msg popup timing changes --- app/src/main/java/app/olauncher/MainActivity.kt | 11 ++++++----- .../main/java/app/olauncher/helper/Extensions.kt | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index afe4321eb..483d06def 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -22,6 +22,7 @@ import app.olauncher.databinding.ActivityMainBinding import app.olauncher.helper.hasBeenDays import app.olauncher.helper.hasBeenHours import app.olauncher.helper.isDarkThemeOn +import app.olauncher.helper.isDaySince import app.olauncher.helper.isDefaultLauncher import app.olauncher.helper.isEinkDisplay import app.olauncher.helper.isOlauncherDefault @@ -215,15 +216,15 @@ class MainActivity : AppCompatActivity() { if (prefs.rateClicked) prefs.userState = Constants.UserState.SHARE else if (isOlauncherDefault(this) - && prefs.firstOpenTime.hasBeenDays(7) - && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 18 + && prefs.firstOpenTime.isDaySince() >= 7 + && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 16 ) viewModel.showDialog.postValue(Constants.Dialog.RATE) } Constants.UserState.SHARE -> { - if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenDays(21) - && prefs.shareShownTime.hasBeenDays(42) - && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 18 + if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenDays(14) + && prefs.shareShownTime.isDaySince() >= 70 + && Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 16 ) viewModel.showDialog.postValue(Constants.Dialog.SHARE) } } diff --git a/app/src/main/java/app/olauncher/helper/Extensions.kt b/app/src/main/java/app/olauncher/helper/Extensions.kt index 3bab48f60..2d2675a8f 100644 --- a/app/src/main/java/app/olauncher/helper/Extensions.kt +++ b/app/src/main/java/app/olauncher/helper/Extensions.kt @@ -21,6 +21,7 @@ import androidx.annotation.RequiresApi import app.olauncher.BuildConfig import app.olauncher.R import app.olauncher.data.Constants +import java.util.Calendar fun View.hideKeyboard() { this.clearFocus() @@ -153,6 +154,19 @@ fun Context.formattedTimeSpent(timeSpent: Long): String { } } +fun Long.convertEpochToMidnight(): Long { + val calendar = Calendar.getInstance() + calendar.timeInMillis = this + calendar.set(Calendar.HOUR_OF_DAY, 0) + calendar.set(Calendar.MINUTE, 0) + calendar.set(Calendar.SECOND, 0) + calendar.set(Calendar.MILLISECOND, 0) + return calendar.timeInMillis +} + +fun Long.isDaySince(): Int = ((System.currentTimeMillis().convertEpochToMidnight() - this.convertEpochToMidnight()) + / Constants.ONE_DAY_IN_MILLIS).toInt() + fun Long.hasBeenDays(days: Int): Boolean = ((System.currentTimeMillis() - this) / Constants.ONE_DAY_IN_MILLIS) >= days From ee6cd182a7c8b8801945708c071afef4fc7175da Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 16 Feb 2025 12:56:46 +0530 Subject: [PATCH 072/150] Ask to be default on first open --- app/src/main/java/app/olauncher/MainActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 483d06def..06a412ffd 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -69,6 +69,7 @@ class MainActivity : AppCompatActivity() { viewModel.firstOpen(true) prefs.firstOpen = false prefs.firstOpenTime = System.currentTimeMillis() + viewModel.resetLauncherLiveData.call() } initClickListeners() From 567f89e6981cbb3a5267442d75e5124b2be90260 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 16 Feb 2025 16:02:25 +0530 Subject: [PATCH 073/150] Added a wallpaper message for new users --- .../main/java/app/olauncher/MainActivity.kt | 23 +++++++++++++++++-- .../main/java/app/olauncher/data/Constants.kt | 2 ++ app/src/main/java/app/olauncher/data/Prefs.kt | 5 ++++ .../java/app/olauncher/helper/Extensions.kt | 3 +++ app/src/main/res/values-ar/strings.xml | 2 ++ app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-es-rES/strings.xml | 2 ++ app/src/main/res/values-es-rUS/strings.xml | 2 ++ app/src/main/res/values-fr/strings.xml | 2 ++ app/src/main/res/values-hr/strings.xml | 2 ++ app/src/main/res/values-hu/strings.xml | 2 ++ app/src/main/res/values-in/strings.xml | 2 ++ app/src/main/res/values-it/strings.xml | 2 ++ app/src/main/res/values-ja/strings.xml | 2 ++ app/src/main/res/values-pl/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 2 ++ app/src/main/res/values-ru-rRU/strings.xml | 2 ++ app/src/main/res/values-sv/strings.xml | 2 ++ app/src/main/res/values-tr/strings.xml | 2 ++ app/src/main/res/values-uk/strings.xml | 2 ++ app/src/main/res/values-zh/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 4 +++- 22 files changed, 68 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 06a412ffd..629e3d364 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -21,6 +21,7 @@ import app.olauncher.data.Prefs import app.olauncher.databinding.ActivityMainBinding import app.olauncher.helper.hasBeenDays import app.olauncher.helper.hasBeenHours +import app.olauncher.helper.hasBeenMinutes import app.olauncher.helper.isDarkThemeOn import app.olauncher.helper.isDaySince import app.olauncher.helper.isDefaultLauncher @@ -132,6 +133,17 @@ class MainActivity : AppCompatActivity() { } } + Constants.Dialog.WALLPAPER -> { + prefs.wallpaperMsgShown = true + prefs.userState = Constants.UserState.REVIEW + showMessageDialog(getString(R.string.did_you_know), getString(R.string.wallpaper_message), getString(R.string.enable)) { + binding.messageLayout.visibility = View.GONE + prefs.dailyWallpaper = true + viewModel.setWallpaperWorker() + showToast(getString(R.string.your_wallpaper_will_update_shortly)) + } + } + Constants.Dialog.REVIEW -> { prefs.userState = Constants.UserState.RATE showMessageDialog(getString(R.string.did_you_know), getString(R.string.review_message), getString(R.string.leave_a_review)) { @@ -202,14 +214,21 @@ class MainActivity : AppCompatActivity() { when (prefs.userState) { Constants.UserState.START -> { - if (prefs.firstOpenTime.hasBeenHours(1)) + if (prefs.firstOpenTime.hasBeenMinutes(10)) + prefs.userState = Constants.UserState.WALLPAPER + } + + Constants.UserState.WALLPAPER -> { + if (prefs.wallpaperMsgShown || prefs.dailyWallpaper) prefs.userState = Constants.UserState.REVIEW + else if (isOlauncherDefault(this)) + viewModel.showDialog.postValue(Constants.Dialog.WALLPAPER) } Constants.UserState.REVIEW -> { if (prefs.rateClicked) prefs.userState = Constants.UserState.SHARE - else if (isOlauncherDefault(this)) + else if (isOlauncherDefault(this) && prefs.firstOpenTime.hasBeenHours(1)) viewModel.showDialog.postValue(Constants.Dialog.REVIEW) } diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index bb28b6c95..9b6e922c2 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -9,6 +9,7 @@ object Constants { object Dialog { const val ABOUT = "ABOUT" + const val WALLPAPER = "WALLPAPER" const val REVIEW = "REVIEW" const val RATE = "RATE" const val SHARE = "SHARE" @@ -20,6 +21,7 @@ object Constants { object UserState { const val START = "START" + const val WALLPAPER = "WALLPAPER" const val REVIEW = "REVIEW" const val RATE = "RATE" const val SHARE = "SHARE" diff --git a/app/src/main/java/app/olauncher/data/Prefs.kt b/app/src/main/java/app/olauncher/data/Prefs.kt index 6db3119a2..e9c485b49 100644 --- a/app/src/main/java/app/olauncher/data/Prefs.kt +++ b/app/src/main/java/app/olauncher/data/Prefs.kt @@ -33,6 +33,7 @@ class Prefs(context: Context) { private val APP_THEME = "APP_THEME" private val ABOUT_CLICKED = "ABOUT_CLICKED" private val RATE_CLICKED = "RATE_CLICKED" + private val WALLPAPER_MSG_SHOWN = "WALLPAPER_MSG_SHOWN" private val SHARE_SHOWN_TIME = "SHARE_SHOWN_TIME" private val SWIPE_DOWN_ACTION = "SWIPE_DOWN_ACTION" private val TEXT_SIZE_SCALE = "TEXT_SIZE_SCALE" @@ -192,6 +193,10 @@ class Prefs(context: Context) { get() = prefs.getBoolean(RATE_CLICKED, false) set(value) = prefs.edit().putBoolean(RATE_CLICKED, value).apply() + var wallpaperMsgShown: Boolean + get() = prefs.getBoolean(WALLPAPER_MSG_SHOWN, false) + set(value) = prefs.edit().putBoolean(WALLPAPER_MSG_SHOWN, value).apply() + var shareShownTime: Long get() = prefs.getLong(SHARE_SHOWN_TIME, 0L) set(value) = prefs.edit().putLong(SHARE_SHOWN_TIME, value).apply() diff --git a/app/src/main/java/app/olauncher/helper/Extensions.kt b/app/src/main/java/app/olauncher/helper/Extensions.kt index 2d2675a8f..ee9d90f42 100644 --- a/app/src/main/java/app/olauncher/helper/Extensions.kt +++ b/app/src/main/java/app/olauncher/helper/Extensions.kt @@ -173,6 +173,9 @@ fun Long.hasBeenDays(days: Int): Boolean = fun Long.hasBeenHours(hours: Int): Boolean = ((System.currentTimeMillis() - this) / Constants.ONE_HOUR_IN_MILLIS) >= hours +fun Long.hasBeenMinutes(minutes: Int): Boolean = + ((System.currentTimeMillis() - this) / Constants.ONE_MINUTE_IN_MILLIS) >= minutes + fun Int.dpToPx(): Int { return (this * Resources.getSystem().displayMetrics.density).toInt() } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2225c0556..25451e87b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -98,6 +98,8 @@ \n\nملاحظة: لا يتم جمع أي بيانات حول استخدام التطبيقات. يتم معالجة كل شيء على جهازك. يحتوي Olauncher أيضًا على إصدار احترافي يسمى Pro Launcher. يحتوي على ميزات إضافية مثل الطقس، والأدوات، والخطوط، والمجلدات، وخلفيات AMOLED، وما إلى ذلك. \n\nإنه أيضًا أفضل طريقة لدعم مطوري Olauncher. تحقق من ذلك! + يقدم Olauncher خلفيات جميلة جديدة يوميًا. امنح شاشتك الرئيسية مظهرًا جديدًا كل يوم، مجانًا! + \n\nهل ترغب في تجربته؟ إذن الوصول مطلوب لتمكين النقر المزدوج للقفل. أي بيانات حصل عليها Olauncher عبر هذه الخدمة لن تترك جهازك. ادعم Olauncher مجانًا باستخدام رابط الشراكة التابع لشركة Amazon. في كل مرة تشتري شيئًا باستخدام الرابط الخاص بنا ، نحصل على عمولة صغيرة. يرجى حفظ الرابط واستخدامه في أي وقت تتسوق فيه عبر الإنترنت. شكرًا لك! diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9f40e7d65..95489af20 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -101,6 +101,8 @@ \n\nHinweis: Es werden keine Daten zur App-Nutzung gesammelt. Alles wird auf Ihrem Gerät verarbeitet. Olauncher hat auch eine Pro-Version namens Pro Launcher. Sie bietet zusätzliche Funktionen wie Wetter, Widgets, Schriftarten, Ordner, AMOLED-Hintergründe usw. \n\nEs ist auch der beste Weg, die Entwickler von Olauncher zu unterstützen. Schau es dir an! + Olauncher bietet täglich wunderschöne neue Wallpapers. Verleihe deinem Homescreen jeden Tag ein frisches Aussehen – kostenlos! + \n\nMöchtest du es ausprobieren? Die Zugriffsberechtigung ist erforderlich, um das Sperren durch Doppeltippen zu ermöglichen. Die von Olauncher über diesen Dienst erfassten Daten verlassen Ihr Gerät nicht. Unterstützen Sie Olauncher kostenlos, indem Sie unseren Amazon-Partnerlink verwenden. Jedes Mal, wenn Sie über unseren Link etwas kaufen, erhalten wir eine kleine Provision. Bitte speichern Sie den Link und verwenden Sie ihn bei jedem Online-Einkauf. Dan­ke­schön! diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 32539933c..69bf5866d 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -68,6 +68,8 @@ \n\nNota: No se recopilan datos de uso de la aplicación. Todo se procesa en su dispositivo. Olauncher también tiene una versión pro llamada Pro Launcher. Tiene funciones adicionales como clima, widgets, fuentes, carpetas, fondos AMOLED, etc. \n\nTambién es la mejor manera de apoyar a los desarrolladores de Olauncher. ¡Échale un vistazo! + Olauncher ofrece hermosos fondos de pantalla nuevos a diario. ¡Dale un nuevo look a tu pantalla de inicio cada día, gratis! + \n\n¿Quieres probarlo? "Se requiere el permiso de accesibilidad para habilitar el doble toque para bloquear. Cualquier dato adquirido por Olauncher a través de este servicio no saldrá de su dispositivo." Apoya a Olauncher de forma gratuita utilizando nuestro enlace de afiliado de Amazon. Cada vez que compre algo usando nuestro enlace, obtendremos una pequeña comisión. Guarde el enlace y utilícelo cada vez que compre en línea.\n¡Gracias! diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index 65cc65b44..0bba71209 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -67,6 +67,8 @@ \n\nNota: No se recopilan datos de uso de la aplicación. Todo se procesa en su dispositivo. Olauncher también tiene una versión pro llamada Pro Launcher. Tiene funciones adicionales como clima, widgets, fuentes, carpetas, fondos AMOLED, etc. \n\nTambién es la mejor manera de apoyar a los desarrolladores de Olauncher. ¡Échale un vistazo! + Olauncher ofrece hermosos fondos de pantalla nuevos a diario. ¡Dale un nuevo look a tu pantalla de inicio cada día, gratis! + \n\n¿Quieres probarlo? Se necesita el permiso de Accesibilidad para activar el bloqueo con doble toque. Cualquier dato recolectado por Olauncher no saldrá de su dispositivo. Apoye Olauncher de forma gratuita utilizando nuestro enlace de afiliado de Amazon. Cada vez que compre algo usando nuestro enlace, obtenemos una pequeña comisión. Por favor, guarde el enlace y úselo cada vez que compre en línea. ¡Gracias! diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f09c97bdc..da25890fc 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -67,6 +67,8 @@ \n\nRemarque : Aucune donnée d\'utilisation de l\'application n\'est collectée. Tout est traité sur votre appareil. Olauncher a également une version pro appelée Pro Launcher. Elle dispose de fonctionnalités supplémentaires telles que la météo, les widgets, les polices, les dossiers, les fonds d\'écran AMOLED, etc. \n\nC\'est aussi le meilleur moyen de soutenir les développeurs d\'Olauncher. Jetez-y un œil ! + Olauncher propose de superbes fonds d\'écran nouveaux chaque jour. Donne un nouveau look à ton écran d\'accueil chaque jour, gratuitement! + \n\nTu veux essayer? L\'autorisation d\'accessibilité est requise pour activer le double appui pour verrouiller. Toutes les données acquises par Olauncher via ce service ne quitteront pas votre appareil. Soutenez Olauncher gratuitement en utilisant notre lien d\'affiliation Amazon. Chaque fois que vous achetez quelque chose en utilisant notre lien, nous recevons une petite commission. Enregistrez le lien et utilisez le chaque fois que vous commandez en ligne. Merci! diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 64b229695..3f2c85041 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -68,6 +68,8 @@ \n\nNapomena: Ne prikupljaju se podaci o korištenju aplikacije. Sve se obrađuje na vašem uređaju. Olauncher također ima pro verziju pod nazivom Pro Launcher. Ima dodatne značajke poput vremena, widgeta, fontova, mapa, AMOLED pozadina itd. \n\nTo je također najbolji način da podržite programere Olauncher-a. Pogledajte! + Olauncher nudi predivne nove pozadine svaki dan. Daj svom početnom ekranu svjež izgled svaki dan, besplatno! + \n\nŽeliš li isprobati? Dozvola za pristupačnost potrebna je za omogućavanje zaključavanja dvostrukim dodirom. Bilo koji podatci prikupljeni ovim servisom neće napustiti tvoj uređaj. lock layout description to be used a unique id to lock screen Besplatno podrži Olauncher korištenjem naše sponzorske poveznice za Amazon. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 6e96f2920..4c2cdfd35 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -68,6 +68,8 @@ \n\nMegjegyzés: Nem gyűjtünk alkalmazás-használati adatokat. Minden az Ön eszközén kerül feldolgozásra. Az Olauncher-nek van egy pro verziója is, amely Pro Launcher néven ismert. További funkciókat kínál, mint például időjárás, widgetek, betűtípusok, mappák, AMOLED háttérképek stb. \n\nEz a legjobb módja annak, hogy támogassa az Olauncher fejlesztőit. Nézd meg! + Az Olauncher naponta gyönyörű új háttérképeket kínál. Minden nap frissítheted a kezdőképernyődet, ingyen! + \n\nSzeretnéd kipróbálni? A hozzáférhetőségi engedély szükséges a dupla koppintás általi zároláshoz. Az Olauncher által ezen a szolgáltatáson keresztül megszerzett adatok nem hagyják el a készüléket. Támogasson minket ingyenesen az Amazon affiliate linkünk használatával. Minden alkalommal, amikor vásárol valamit a linkünket használva, egy kis jutalékot kapunk. Kérjük, mentse el a linket, és használja fel, amikor csak online vásárol. diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 0a1bf8048..be78aeb53 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -67,6 +67,8 @@ \n\nCatatan: Tidak ada data penggunaan aplikasi yang dikumpulkan. Semua diproses di perangkat Anda. Olauncher juga memiliki versi pro yang disebut Pro Launcher. Ini memiliki fitur tambahan seperti cuaca, widget, font, folder, wallpaper AMOLED, dan banyak lagi. \n\nIni juga merupakan cara terbaik untuk mendukung pengembang Olauncher. Cek it out! + Olauncher menawarkan wallpaper baru yang indah setiap hari. Berikan tampilan baru pada layar utama Anda setiap hari, secara gratis! + \n\nIngin mencobanya? Izin aksesibilitas diperlukan untuk mengaktifkan ketuk dua kali untuk mengunci. Data apa pun yang diperoleh Olauncher melalui layanan ini tidak akan meninggalkan perangkat Anda. Dukung Olauncher secara gratis dengan menggunakan tautan afiliasi Amazon kami. Setiap kali Anda membeli sesuatu menggunakan tautan kami, kami mendapat komisi kecil. Harap simpan tautan dan gunakan setiap kali Anda berbelanja online.\nTerima kasih! diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 30655a3a1..cec987a85 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -67,6 +67,8 @@ \n\nNota: Non vengono raccolti dati sull\'utilizzo dell\'app. Tutto viene elaborato sul tuo dispositivo. Olauncher ha anche una versione pro chiamata Pro Launcher. Ha funzionalità extra come meteo, widget, font, cartelle, sfondi AMOLED, e così via. \n\nÈ anche il modo migliore per supportare gli sviluppatori di Olauncher. Dai un\'occhiata! + Olauncher offre bellissimi sfondi nuovi ogni giorno. Dai un aspetto fresco alla tua schermata principale ogni giorno, gratuitamente! + \n\nVuoi provarlo? L\'autorizzazione di accessibilità è necessaria per abilitare il doppio tocco per il blocco schermo. Qualsiasi dato acquisito da Olauncher tramite questo servizio rimarrà all’interno del telefono Supporta Olauncher gratuitamente utilizzando il nostro link di affiliazione su Amazon. Ogni volta che acquisti qualcosa utilizzando il nostro link, riceviamo una piccola commissione. Salva il link e usalo ogni volta che fai acquisti online.\n Grazie! diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index db0652222..66bc89351 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -100,6 +100,8 @@ \n\n注意: アプリの使用データは収集されません。すべての処理はあなたのデバイスで行われます。 OlauncherにはPro Launcherというプロ版もあります。天気、ウィジェット、フォント、フォルダー、AMOLED壁紙などの追加機能があります。 \n\nOlauncherの開発者をサポートするための最良の方法でもあります。チェックしてみてください! + Olauncherは毎日美しい新しい壁紙を提供します。毎日ホーム画面に新しい外観を無料で提供! + \n\n試してみますか? ダブルタップしてロックを有効にするには、アクセシビリティ許可が必要です。このサービスを通じて Olauncher が取得したデータは、デバイスから流出することはありません。 Amazon アフィリエイト リンクを使用して、Olauncher を無料でサポートしてください。 あなたが私たちのリンクを使用して何かを購入するたびに、私たちは少額の手数料を受け取ります。リンクを保存し、オンライン ショッピングの際には必ずご利用ください。 ありがとう! diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index ecd179d27..7ed26a56e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -99,6 +99,8 @@ \n\nUwaga: Nie są gromadzone żadne dane o użyciu aplikacji. Wszystko jest przetwarzane na Twoim urządzeniu. Olauncher ma również wersję pro o nazwie Pro Launcher. Posiada dodatkowe funkcje, takie jak pogoda, widgety, czcionki, foldery, tapety AMOLED itp. \n\nTo także najlepszy sposób na wsparcie deweloperów Olauncher. Sprawdź to! + Olauncher oferuje piękne nowe tapety codziennie. Nadaj swojemu ekranowi głównemu świeży wygląd każdego dnia, za darmo! + \n\nChcesz spróbować? Uprawnienia dostępu są wymagane, aby włączyć podwójne dotknięcie, aby zablokować. Wszelkie dane pozyskane przez Olauncher za pośrednictwem tej usługi nie opuszczą Twojego urządzenia. Wesprzyj Olauncher za darmo, korzystając z naszego linku afiliacyjnego Amazon. Za każdym razem, gdy kupujesz coś za pomocą naszego linku, otrzymujemy niewielką prowizję. Zapisz link i używaj go podczas zakupów online. Dziękuję! diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 877b9bfdb..d9d59542a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -67,6 +67,8 @@ \n\nNota: Não são coletados dados de uso do aplicativo. Tudo é processado no seu dispositivo. Olauncher também tem uma versão pro chamada Pro Launcher. Tem recursos extras como clima, widgets, fontes, pastas, papéis de parede AMOLED, e assim por diante. \n\nÉ também a melhor maneira de apoiar os desenvolvedores do Olauncher. Confira! + Olauncher oferece lindos papéis de parede novos todos os dias. Dê uma nova aparência à sua tela inicial todos os dias, gratuitamente! + \n\nQuer tentar? A permissão de acessibilidade é necessária para ativar o toque duplo para bloquear. Quaisquer dados adquiridos pelo Olauncher através deste serviço não sairão do seu dispositivo. Apoie o Olauncher gratuitamente usando nosso link de afiliado da Amazon. Sempre que você comprar algo usando nosso link, receberemos uma pequena comissão. Salve o link e use-o sempre que fizer compras online. Obrigado! diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 9276e9f99..11ab2152e 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -68,6 +68,8 @@ \n\nПримечание: Не собираются данные об использовании приложения. Все обрабатывается на вашем устройстве. У Olauncher также есть профессиональная версия под названием Pro Launcher. Она имеет дополнительные функции, такие как погода, виджеты, шрифты, папки, обои AMOLED и так далее. \n\nЭто также лучший способ поддержать разработчиков Olauncher. Ознакомьтесь! + Olauncher предлагает красивые новые обои каждый день. Обновите свой главный экран каждый день, бесплатно! + \n\nХотите попробовать? " Разрешение на доступ требуется, чтобы включить двойное касание для блокировки. Любые данные, полученные Olauncher через этот сервис, не покинут ваше устройство." Поддержите Olauncher бесплатно, используя нашу партнерскую ссылку Amazon. Каждый раз, когда вы покупаете что-то по нашей ссылке, мы получаем небольшую комиссию. Пожалуйста, сохраните ссылку и используйте ее при совершении покупок в Интернете.\nСпасибо! diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 5d7721ada..92a8a6164 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -67,6 +67,8 @@ \n\nObs: Inga data om appanvändning samlas in. Allt bearbetas på din enhet. Olauncher har också en pro-version som kallas Pro Launcher. Den har extra funktioner som väder, widgets, typsnitt, mappar, AMOLED-bakgrunder och så vidare. \n\nDet är också det bästa sättet att stödja utvecklarna av Olauncher. Kolla in det! + Olauncher erbjuder vackra nya bakgrundsbilder varje dag. Ge din hemskärm ett fräscht utseende varje dag, gratis! + \n\nVill du prova? Tillgänglighetsbehörigheten krävs för att aktivera dubbeltryck för att låsa. Eventuella data förvärvade av Olauncher genom denna tjänst kommer inte att lämna din enhet. Stöd Olauncher utan kostnad genom att använda vår Amazon-affiliatelänk. Varje gång du köper något via vår länk får vi en liten provision. Vänligen spara länken och använd den när du handlar på nätet.\nTack! diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 6a1f122c9..2529a50d1 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -101,6 +101,8 @@ \n\nNot: Uygulama kullanım verileri toplanmaz. Her şey cihazınızda işlenir. Olauncher\'ın Pro Launcher adında bir pro versiyonu da var. Hava durumu, widget\'lar, yazı tipleri, klasörler, AMOLED duvar kağıtları gibi ekstra özelliklere sahip. \n\nAyrıca Olauncher geliştiricilerini desteklemenin en iyi yolu. Göz atın! + Olauncher her gün güzel yeni duvar kağıtları sunuyor. Ana ekranınıza her gün taze bir görünüm kazandırın, ücretsiz! + \n\nDenemek ister misiniz? Kilitlemek için çift dokunmayı etkinleştirmek için erişilebilirlik izni gereklidir. Olauncher tarafından bu hizmet aracılığıyla elde edilen hiçbir veri cihazınızdan ayrılmayacaktır. Amazon ortaklık bağlantımızı kullanarak Olauncher\'ı ücretsiz olarak destekleyin. Bağlantımızı kullanarak her bir şey satın aldığınızda, küçük bir komisyon alırız. Lütfen bağlantıyı kaydedin ve çevrimiçi alışveriş yaptığınızda kullanın. Teşekkür ederim! diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index ced28a87d..be05fb181 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -68,6 +68,8 @@ \n\nПримітка: Не збираються дані про використання програми. Все обробляється на вашому пристрої. Olauncher також має професійну версію під назвою Pro Launcher. Вона має додаткові функції, такі як погода, віджети, шрифти, папки, фони AMOLED тощо. \n\nЦе також найкращий спосіб підтримати розробників Olauncher. Ознайомтеся! + Olauncher пропонує красиві нові шпалери щодня. Дайте вашому головному екрану новий вигляд кожного дня, безкоштовно! + \n\nХочете спробувати? " Дозвіл на доступ потрібний, щоб увімкнути подвійне торкання для блокування. Будь-які дані, отримані Olauncher через цей сервіс, не залишать ваш пристрій." Підтримайте Olauncher безкоштовно, використовуючи наше партнерське посилання Amazon. Щоразу, коли ви купуєте щось за нашим посиланням, ми отримуємо невелику комісію. Будь ласка, збережіть посилання та використовуйте його для здійснення покупок в Інтернеті.\nСпасибі! diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index d6bf036f2..b1daf0542 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -101,6 +101,8 @@ \n\n注意:不收集应用程序使用数据。所有数据都在您的设备上处理。 Olauncher 还有一个名为 Pro Launcher 的专业版。它具有额外的功能,如天气、部件、字体、文件夹、AMOLED 壁纸等。 \n\n这也是支持 Olauncher 开发者的最佳方式。快来看看吧! + Olauncher每天提供美丽的新壁纸。让你的主屏幕每天焕然一新,免费! + \n\n想试试吗? 请在手机设置中搜索数字健康并启用它。 使用我们的亚马逊附属链接免费支持 Olauncher。 每次您使用我们的链接购买商品时,我们都会获得少量佣金。请保存链接并在网上购物时使用它。 谢谢! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e725c8bd..876d807fb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -86,6 +86,8 @@ \n\nNote: No app usage data is collected. Everything is processed on your device. Olauncher also has a pro version called Pro Launcher. It has extra features like weather, widgets, fonts, folders, AMOLED wallpapers, and so on. \n\nIt\'s also the best way to support the developers of Olauncher. Check it out! + Olauncher offers beautiful new wallpapers daily. Give your homescreen a fresh new look every day, for free! + \n\nWant to try it? The accessibility permission is required to enable double tap to lock. Any data acquired by Olauncher via this service will not leave your device. Support Olauncher for free by using our Amazon affiliate link. Every time you buy something using our link, we get a small commission. Please save the link and use it whenever you shop online.\nThank you! @@ -148,7 +150,7 @@ Learn more Did you know? Leave a review - Olauncher is free and always will be. It has no ads, collects no data, and reduces your screen time resulting in a healthier life. + Olauncher is free and always will be. It has no ads, collects no data, and reduces your screen time, resulting in a healthier life. \n\nWe hope you enjoy it. Tell us what you think. Alignment changed ✅ Home screen From e4d413e2fd8e52fd97209dfa85034139ce3b4a50 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 16 Feb 2025 18:18:37 +0530 Subject: [PATCH 074/150] Fixed: Wrong text color --- .../main/java/app/olauncher/MainActivity.kt | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 629e3d364..bf1ee3ec6 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -14,11 +14,13 @@ import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController import androidx.navigation.Navigation import app.olauncher.data.Constants import app.olauncher.data.Prefs import app.olauncher.databinding.ActivityMainBinding +import app.olauncher.helper.getColorFromAttr import app.olauncher.helper.hasBeenDays import app.olauncher.helper.hasBeenHours import app.olauncher.helper.hasBeenMinutes @@ -35,6 +37,9 @@ import app.olauncher.helper.setPlainWallpaper import app.olauncher.helper.shareApp import app.olauncher.helper.showLauncherSelector import app.olauncher.helper.showToast +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import java.util.Calendar class MainActivity : AppCompatActivity() { @@ -43,6 +48,7 @@ class MainActivity : AppCompatActivity() { private lateinit var navController: NavController private lateinit var viewModel: MainViewModel private lateinit var binding: ActivityMainBinding + private var timerJob: Job? = null override fun onBackPressed() { if (navController.currentDestination?.id != R.id.mainFragment) @@ -81,6 +87,11 @@ class MainActivity : AppCompatActivity() { window.addFlags(FLAG_LAYOUT_NO_LIMITS) } + override fun onStart() { + super.onStart() + checkTheme() + } + override fun onStop() { backToHomeScreen() super.onStop() @@ -146,7 +157,7 @@ class MainActivity : AppCompatActivity() { Constants.Dialog.REVIEW -> { prefs.userState = Constants.UserState.RATE - showMessageDialog(getString(R.string.did_you_know), getString(R.string.review_message), getString(R.string.leave_a_review)) { + showMessageDialog(getString(R.string.hey), getString(R.string.review_message), getString(R.string.leave_a_review)) { binding.messageLayout.visibility = View.GONE prefs.rateClicked = true showToast("😇❤️") @@ -277,6 +288,16 @@ class MainActivity : AppCompatActivity() { } } + private fun checkTheme() { + timerJob?.cancel() + timerJob = lifecycleScope.launch { + delay(200) + if ((prefs.appTheme == AppCompatDelegate.MODE_NIGHT_YES && getColorFromAttr(R.attr.primaryColor) != getColor(R.color.white)) + || (prefs.appTheme == AppCompatDelegate.MODE_NIGHT_NO && getColorFromAttr(R.attr.primaryColor) != getColor(R.color.black)) + ) recreate() + } + } + @Deprecated("Deprecated in Java") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) From 41eadf98da287b1235ddec9055c1b508cd38063a Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 16 Feb 2025 18:25:00 +0530 Subject: [PATCH 075/150] Minor text size change --- app/src/main/res/values-hdpi/dimens.xml | 1 - app/src/main/res/values-ldpi/dimens.xml | 1 - app/src/main/res/values-xxhdpi/dimens.xml | 2 +- app/src/main/res/values-xxxhdpi/dimens.xml | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-hdpi/dimens.xml b/app/src/main/res/values-hdpi/dimens.xml index 65f1cc47f..96a19250a 100644 --- a/app/src/main/res/values-hdpi/dimens.xml +++ b/app/src/main/res/values-hdpi/dimens.xml @@ -7,5 +7,4 @@ 50sp 14sp - \ No newline at end of file diff --git a/app/src/main/res/values-ldpi/dimens.xml b/app/src/main/res/values-ldpi/dimens.xml index 9383a8235..7bad3dfdf 100644 --- a/app/src/main/res/values-ldpi/dimens.xml +++ b/app/src/main/res/values-ldpi/dimens.xml @@ -7,5 +7,4 @@ 50sp 14sp - \ No newline at end of file diff --git a/app/src/main/res/values-xxhdpi/dimens.xml b/app/src/main/res/values-xxhdpi/dimens.xml index 34d6328fc..759901803 100644 --- a/app/src/main/res/values-xxhdpi/dimens.xml +++ b/app/src/main/res/values-xxhdpi/dimens.xml @@ -1,7 +1,7 @@ 30sp - 16sp + 18sp 12dp 10dp diff --git a/app/src/main/res/values-xxxhdpi/dimens.xml b/app/src/main/res/values-xxxhdpi/dimens.xml index 247b4a572..d731dc27f 100644 --- a/app/src/main/res/values-xxxhdpi/dimens.xml +++ b/app/src/main/res/values-xxxhdpi/dimens.xml @@ -1,7 +1,7 @@ 32sp - 17sp + 18sp 16dp 14dp From ad00df97add7594049ab412d7ca5e43bd5828ac0 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Sun, 16 Feb 2025 18:51:24 +0530 Subject: [PATCH 076/150] About page indicator --- app/src/main/java/app/olauncher/ui/SettingsFragment.kt | 6 ++++-- app/src/main/res/layout-land/fragment_settings.xml | 2 ++ app/src/main/res/layout/fragment_settings.xml | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index bfa1a1bda..b64a7ca3a 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -63,7 +63,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe } ?: throw Exception("Invalid Activity") viewModel.isOlauncherDefault() - deviceManager = context?.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager + deviceManager = requireContext().getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager componentName = ComponentName(requireContext(), DeviceAdmin::class.java) checkAdminPermission() @@ -618,8 +618,10 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe } private fun populateActionHints() { + if (prefs.aboutClicked.not()) + binding.aboutOlauncher.setCompoundDrawablesWithIntrinsicBounds(0, 0, android.R.drawable.stat_notify_more, 0) if (viewModel.isOlauncherDefault.value != true) return - if (prefs.rateClicked.not() && prefs.toShowHintCounter > Constants.HINT_RATE_US && prefs.toShowHintCounter < Constants.HINT_RATE_US + 10) + if (prefs.rateClicked.not() && prefs.toShowHintCounter > Constants.HINT_RATE_US && prefs.toShowHintCounter < Constants.HINT_RATE_US + 100) binding.rate.setCompoundDrawablesWithIntrinsicBounds(0, android.R.drawable.arrow_down_float, 0, 0) } diff --git a/app/src/main/res/layout-land/fragment_settings.xml b/app/src/main/res/layout-land/fragment_settings.xml index 30e400259..eeebae41d 100644 --- a/app/src/main/res/layout-land/fragment_settings.xml +++ b/app/src/main/res/layout-land/fragment_settings.xml @@ -77,6 +77,8 @@ android:layout_marginStart="8dp" android:layout_marginTop="12dp" android:layout_marginBottom="8dp" + android:drawablePadding="8dp" + android:gravity="center" android:text="@string/about_olauncher" /> Date: Mon, 17 Feb 2025 14:38:34 +0530 Subject: [PATCH 077/150] Daily wallpaper minor changes --- app/src/main/java/app/olauncher/helper/Utils.kt | 12 ++++++++---- .../java/app/olauncher/helper/WallpaperWorker.kt | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/app/olauncher/helper/Utils.kt b/app/src/main/java/app/olauncher/helper/Utils.kt index 181dfac26..d89946a0a 100644 --- a/app/src/main/java/app/olauncher/helper/Utils.kt +++ b/app/src/main/java/app/olauncher/helper/Utils.kt @@ -295,13 +295,17 @@ fun getScreenDimensions(context: Context): Pair { return Pair(point.x, point.y) } -suspend fun getTodaysWallpaper(wallType: String): String { +suspend fun getTodaysWallpaper(wallType: String, firstOpenTime: Long): String { return withContext(Dispatchers.IO) { var wallpaperUrl: String try { - val month = SimpleDateFormat("M", Locale.ENGLISH).format(Date()) ?: "" - val day = SimpleDateFormat("d", Locale.ENGLISH).format(Date()) ?: "" - val key = String.format("%s_%s", month, day) + val key = if (firstOpenTime.isDaySince() < 10) + String.format("0_%s", firstOpenTime.isDaySince().toString()) + else { + val month = SimpleDateFormat("M", Locale.ENGLISH).format(Date()) ?: "0" + val day = SimpleDateFormat("d", Locale.ENGLISH).format(Date()) ?: "0" + String.format("%s_%s", month, day) + } val url = URL(Constants.URL_WALLPAPERS) val connection: HttpURLConnection = url.openConnection() as HttpURLConnection diff --git a/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt b/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt index 7b944c5db..5282dabd2 100644 --- a/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt +++ b/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt @@ -18,7 +18,7 @@ class WallpaperWorker(appContext: Context, workerParams: WorkerParameters) : Cor true else if (prefs.dailyWallpaper) { val wallType = checkWallpaperType() - val wallpaperUrl = getTodaysWallpaper(wallType) + val wallpaperUrl = getTodaysWallpaper(wallType, prefs.firstOpenTime) if (prefs.dailyWallpaperUrl == wallpaperUrl) true else { From f7a847d66c1b1486c4500ad6f862df29e0dfa3ac Mon Sep 17 00:00:00 2001 From: Tanuj Date: Mon, 17 Feb 2025 14:53:10 +0530 Subject: [PATCH 078/150] Long press to hide text - Set as default launcher --- app/src/main/java/app/olauncher/data/Prefs.kt | 5 +++++ .../main/java/app/olauncher/ui/HomeFragment.kt | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/olauncher/data/Prefs.kt b/app/src/main/java/app/olauncher/data/Prefs.kt index e9c485b49..62f164dd2 100644 --- a/app/src/main/java/app/olauncher/data/Prefs.kt +++ b/app/src/main/java/app/olauncher/data/Prefs.kt @@ -38,6 +38,7 @@ class Prefs(context: Context) { private val SWIPE_DOWN_ACTION = "SWIPE_DOWN_ACTION" private val TEXT_SIZE_SCALE = "TEXT_SIZE_SCALE" private val PRO_MESSAGE_SHOWN = "PRO_MESSAGE_SHOWN" + private val HIDE_SET_DEFAULT_LAUNCHER = "HIDE_SET_DEFAULT_LAUNCHER" private val APP_NAME_1 = "APP_NAME_1" private val APP_NAME_2 = "APP_NAME_2" @@ -173,6 +174,10 @@ class Prefs(context: Context) { get() = prefs.getBoolean(PRO_MESSAGE_SHOWN, false) set(value) = prefs.edit().putBoolean(PRO_MESSAGE_SHOWN, value).apply() + var hideSetDefaultLauncher: Boolean + get() = prefs.getBoolean(HIDE_SET_DEFAULT_LAUNCHER, false) + set(value) = prefs.edit().putBoolean(HIDE_SET_DEFAULT_LAUNCHER, value).apply() + var hiddenApps: MutableSet get() = prefs.getStringSet(HIDDEN_APPS, mutableSetOf()) as MutableSet set(value) = prefs.edit().putStringSet(HIDDEN_APPS, value).apply() diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index 35d6e581b..c2406dbdc 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -151,6 +151,15 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener prefs.calendarAppClassName = "" prefs.calendarAppUser = "" } + + R.id.setDefaultLauncher -> { + prefs.hideSetDefaultLauncher = true + binding.setDefaultLauncher.visibility = View.GONE + if (viewModel.isOlauncherDefault.value != true) { + requireContext().showToast(R.string.set_as_default_launcher) + findNavController().navigate(R.id.action_mainFragment_to_settingsFragment) + } + } } return true } @@ -174,8 +183,9 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener setHomeAlignment() } if (binding.firstRunTips.visibility == View.VISIBLE) return@Observer - if (it) binding.setDefaultLauncher.visibility = View.GONE - else binding.setDefaultLauncher.visibility = View.VISIBLE + binding.setDefaultLauncher.isVisible = it.not() && prefs.hideSetDefaultLauncher.not() +// if (it) binding.setDefaultLauncher.visibility = View.GONE +// else binding.setDefaultLauncher.visibility = View.VISIBLE }) viewModel.homeAppAlignment.observe(viewLifecycleOwner) { setHomeAlignment(it) @@ -208,6 +218,7 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener binding.clock.setOnLongClickListener(this) binding.date.setOnLongClickListener(this) binding.setDefaultLauncher.setOnClickListener(this) + binding.setDefaultLauncher.setOnLongClickListener(this) binding.tvScreenTime.setOnClickListener(this) } From 9836fa89b2b4fbf84f5c6f64ed8045a507f0f398 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Mon, 17 Feb 2025 15:04:34 +0530 Subject: [PATCH 079/150] Updated app icon --- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1349 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_foreground.png | Bin 1823 -> 0 bytes .../main/res/mipmap-hdpi/ic_launcher_round.png | Bin 3297 -> 0 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 928 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_foreground.png | Bin 1031 -> 0 bytes .../main/res/mipmap-mdpi/ic_launcher_round.png | Bin 1973 -> 0 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 2645 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_foreground.png | Bin 2812 -> 0 bytes .../main/res/mipmap-xhdpi/ic_launcher_round.png | Bin 5474 -> 0 bytes app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 4157 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 5034 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 8780 -> 0 bytes app/src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 5454 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 7212 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 12343 -> 0 bytes .../main/res/values/ic_launcher_background.xml | 2 +- 16 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 893250c796f79f6d4ea2bbcbf5c7c358a2d75ea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1349 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⋘UhmW{+^eY0@m z+%V7|&K%=5|`6Wp3q55-f9zv{=&{ zM+lfwVQ>PAsQ(0x>55aUg&EcA8FNBX3xg4?q0VM>FK41{?DMwj`{Ek z@ul=s+!KxTrF7lE||8&td9W`O`<6x~~Vd}Gw zgQa5K2pB6vuVtTFw3FkG9!*gvEG7{w@rFdAVnf|Su%Y!DHQ)y4>g3i@Mf zjL=|~L{Y3E7{hm_m@FIpAj_hJqMRoF?1!fBdv`vM_rCA-zR#1d`e^OI$;aoOd(QXV zbMCq4xt5kTPEtyx3r`Ww;HNw8k}bhsu-_bGgj);K_>zP%~7f_YLy~0XB zrp$UyB|3zk^|KKgDV^umbD@A}azMuh2M436FtUzAP3T0owm~$)*&hbDe*Qo}*IU2= zG{8>>P%4}>SAMU@hM(;*kpq5{0B8A(aq~QG*18~4i|0*#7)C|*L{a#YS#`Z?ZVH6K zq#(Mz-yc4FxYrL$N~El6Aj--#c$2@b;ZQjdjHv4G?>`_A%)Us?348O1vY!EOD;Ms-;Vpdc0!A3hy0b$lSSeCuzP9N5y`0U|>LXc6NSkV+$muYp|@; z`)0$Alr}9bE$ZOGgKFKnb!zqM)vBPNK<(VQQyn^VNL5x=dVqQ69Zn#FEOVIa>a!W! zETW{+;H_J?KC&?;k)8MAb-h*)-&8Kkn7VM`f+{R5RLhnvQ^m!_>dculs;8$XN!Bo9 z$RNuc=Ar{#uB>Ip!_d{$^|wItFxpt-WWpn>UtpzeY_zf3;EiW9Wc8bvsB5#U%v&uCu3ELqTS;=?l}VME ziw<<5Gbj>ZVNoRtS1Kwhp0_a@2Rx6YTF~1t2})7~6LMA!!&Db{e6)-XbfFX7?zmy1 zK$NauzrNnaJghYJ_4QRE9F+TPI`Wp#k7wmwMi)BK9kj6xrqA)SA`1EQ_1 zZJr4A>IqPi5-JCqZ!9@K5~CB{*l@=*M+GbALT_ztZH{(eO1vydey!K(?_P}&awk&4%nAFbIzL`UHwPiM{MrtKP4-EhU`~|MNFT$Nw53cOs>ZeukF79SfVWK_BH; zqKyOH-QBGvB_-K$2O1h0=E?!qVT9a?bd)q@LAeu#KvJ#q@ZrPn#2u)v zuAY~Q11NXL!e$mJ6$eU7OTAL+(edNQ-;hI$s}ElX2q$5ktP~<$AC*E<^4s?8*)uop zfSiIeWz+m`HnE(>*Yfl8Uy3^*G)+DlYK@RP(Ueh2+(egA^WpQTGJ502je5a6!$Yo{ zqN!3_OKc&RpQM9Kn!euzGxw`gO)HUp{`~okT98&Esh!|>pR86Q;FFV1A|`tk2fqRH zuvTLK{{4$2Y~5NIauqz*W{%aTnUhrSDJm-Z5X_NC#EXDwr!%D^t?jkCHyzohEuAr9aOWFJAn*gy@Q% z^u&EqO7*$AaN)vi8?)^M9z9c4RkfA77&c5aAPSTHQE#pOcVHa0`i3lzvTonL-N59a zy`aY?^;$)8{~y8j8UW?A_P=J-o=w}mdv~tnWDt@Hq622iHk`35Q?Y6HL>1WK>^=q7P$gXkUclhy~o!CHteVyu7>^ zo7j$w6}%zRDJLiAX?dJ2b^EhRmo7CB4Jwr7h}iZ&GXmKBMbiV0E_60FHa2YDym>9Q zusQ0q2_i9)F3NC%n}7vU0>5u=ZoWdO0b~d-G_XL1EO{?o&{bAe_Jint7aQ2Z=5Q1t zkgma`)GM=Q&04f?-@dKq&Yi24657QIa)JX&M`sxEjxl67RV7urq=m0W2fEOS?h)(! zc!`zKMy3nDEd2JGHETYVcKlmu2FoQ4>gieJv#&)Cpmvz&n>TM>mGrAe23h9FTy7T7 zF&&-TwrxxP!^K3AO8lP*oZ-$MAlbqTva+(?Te4)y$GN$=pTIoxjxjBREOWfCDs&BL zeGEiIs1z43US!j;PfT?9{}0b;=9zcYbMiZbIm}IH8XNrw27Ym?Qf|)Z00000NkvXX Hu0mjf)Hlfp diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 379dab51caab3ba3a582ae0eeabdb08a23026841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2645 zcmV-b3aa&qP)xmN>m_m}UP)9+RCqok398R<02grbjW1V@neeD8 zKl@AMONdXOK8eQ0Mi(ByheUo=Rn?EaoORfgnw6E6zmyFWc!;lUXlSUHpA9Y=8$4Xp z!i^N*QBF?Ix4ztU$kavZ>+3f%@?~RnvawH%&5VKw2b|P>{PcIC>IA7ukosu8_m7fnzCl$DiL@7uTUuW;vt0NpQKxbVkDSAaI5 z1bFr8Rn^|Td;bP^P6*KB%$YL-8eIX}gpUB#yLRpRJKVVfbRt{iZN~4G$H$9xitN6oj}+M0CA^J zpSDJ?B5UHriQ>S41LFDf=K+seu6ym;HL+sF3QJ5S>au0a#FHmaZ1p>euoM9Qj4M$D zjTtjW?BBm%ynFY~R<|R#bLWm&uwa3A9zo!X7cT}ZZgU7b0iHd3Cg#tdZ;=lcEm|ZV zJ$e+h)yw<$@5S-s$GuM)?(N8tBaXEfRsul&?Afy|;+Zt%4U4yL-`eUq4amNA>y|Y! zBLXX?g9i^fB0|^*fZI_c9|AHmGQ@`uA8hr4iN}v0Tlb(uICbijt&YD43jvrImCtA7 zLq2PMyt3f!nPSDE^zznVqyR)7iRaTPqMCZSX~6Z28a2vt zMVBsJvX!?6BL!gTsSZ;JDeL8?fp`&NYz7P~BfY#e7%2eZV0D;6JYO$25o)3Mn3FVi?Sv}y@|Iwv z0Aw#9!1CqGZDpo{i5QpZ?|#5Y0n`eJ2&i6WDjq(3D8`Q;Z|z%d+_+&YZwW>UK;8}l zFtO=nrUJL4f`-?xU$>RF1S17t?N3KY9ns571&Lkb#*Gt0hYl4tZ{D<(w*(^vAY%;y z$lKA&Oa*R-sHne7XCnn5T@V3Cnj-A0mz#+5=g(Vv7ve%iMMbvqmSCg++1c5a0QgkX z<3I{(&~R}7=FJ;hc}p--0Q@PBGfO%$*7S1IAp7TCIILQ=%CCs1kpjq@u@YtJ5b1(? zxoLRu;)VBMhMXb2yfqjp03(PjWje&xK2#YH?FH%W?1G7i^7QKEt-(kE0Ir8k4ILvm zrBdhri2C9bqE?k2twPBSws{L?A_+T+u)ueSd-5VdN|F z@%v81slrA8zy!>jDa45offRAhVuKwqWx~bh<8~DJ{zN=mLs$s_5CJ!!+!2!?hxq

CZ?$3#luMl8MWzxHWdTD_5@cuJaL^3D=41`yy-w z07Ok8MY$w(AVRJtnF;=E+#sEuEP=J9OPBuNoAbCFmYN+|?X-lj763pBFGrA{?@Jn! zCFz13?2|ObT!AQLFK~d)2_F*r80;?2+AVnPF z^ncO;vAktN>IfS;4$ygW^m+(KRFl9OPeibYSLiYVC@@KrB96A%-hJh~WwlV)zJ9<){E>&z}8Lqboq0@O=W(($f9`ca8{{F%a%XGT}K7r>o?*aKk?v%+Ag}0B0WVI%b}We3g)p@R$Ee zi&c#l|Y?GW_K&CPwDl9DnVuHxh4zlJ-F%Yg0kzJ2@tT7G^X8yg#U^5n@QQt8LV z#l;mRB_;1Asy&~P1gp$1yqk{$w8UaVr_#!uFzDdtxDA}`LzkX5j^LvS( zqN1YyDcw>+a&q#Nq@<+8NCbU{1Ifj|-~?_w9QE{Y=BTkE`Z6Xa<~wOI^5-8U{vg5k zWkoXJ;0HK?8~O8>-I}-xilHi#^3S8Aqkq+>PoLlP?%n&hy?XVEibT+NIDiW{@o?k# z$ZyVQg!L_cjz%LHZ~zybLcD9Px#pT{uDRw~*RcNq%R&7FyYDZA00000NkvXXu0mjf DdMfQU diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index 4247ba69ec1872aa572570dfbabed0f4c78dd6b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2812 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 Y4=behG^xg`^#A|>07*qoM6N<$f}%jh=l}o! diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index b2b07cd45ed3ed9cef653a6092cf5cbc6deb2817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4157 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 O8(M05s+G#N5&r>S9rwln diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index a7d4d150a062ebd7ca2fc6731f481c7e235b5fc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5034 zcmc&&`8(TNx7VYW)1pONV}c{9bxNt2g;b3_ZK={DW@>CrH6&(vTdKyWYNO^;+S1lo zH0D&r98xVwi7})~M1&$lk{j>)+~>J}!M)$-*}r_(+IxNW+G~CGT08xwt+m*3x#I!? z0%BKfEN%%19I-eYzYFpIc&=La2?(4DziMIT7~?^oxt0Z(Xcd?buZ>)keGTPaGv z>6twcOS3MvldDHb!Sd~PAX81T*#}m&nxvxa zAE%h5n0~gq3{)|nY>yH1n$XbD0G`SI5<8|e0~Gr@ETI^!a zf&}?2o$i_*EvYO)OkrpNN4|$)S-qNEklb_dBA)g# zX6D-%t9maj1bL3qZ4e1zS2vFC$8oX*9H^6CI!aE~$(wg{RLdr;{7tObhMQY%x=<*u zbHCt7Ur3tO1};!%Ju9X{@4PT*Dk!nedMz|H`&Vi*j5J#Q5{?*V)#AW4vUi!)2ZoEHnNRjILyT(7wO+?jqeoM%FLbc60%Ib zAEl$MuOmzp=YlEE17QkjaCa$anWPvV^W$#@KFGWlI(KePb51`gNtcp`3UR%=B)d2= z2_xwX#$9}hbikb**?5091c1&COfyX*1yHsNA<4$m`WMh>G-`mJ7BcmmJh4Vzh=1K+ zEce~BEWA(F^F8Cpubb>Mzj8*n(M5yc`ehJegh1d0ibbc4UK4<#SRwH@B9H_Cl)yPv z#;k<*Ubb6ub|c#?O}d91ebdWM_QpK#rIRtdcz1>in%piP!QS1CT;6QOZWj8xYu2Nv zvJT*bKU?i6cIlY%X$?cw*4i+Wp@m1u3)^1-J5Eqq6UzZN2v7WEl;;@)Du}i)->|hV zx63eTIDjX1cGvq2qkRe&dQ>Ai;GDHQW$UgrSWo`3f8E`*GFM@mj2y2!V+CS`Bg_h( z+YTGP(lp(5-)p6Hy%29zL`sMIx=YumhLAtf*|{xta20rfXll;n{#AE^`TzmQo@ch% zy}>y&ZdwZxJ0CrIRHl1@VVegm)(rJO*n7Bl(1(ClN2QDgF|C)z+Z4RS(i=+}LH2WN zHuJTtL|in@$ltltxu456@9$d8=rD}5br-G|vhazqSNRzaOm_u^iMzQx9=UXy?eBva z4c&E^iPnukdfp@*0hr1wt7$rWL)(`@llr7H^>x#BtyrU-1*`?xlbIj+Uf)py_V#+; znQ65V<5xLNK3UE$5%^y{bnbh0REIsDgS@J75^yCqMY?((ucg>^Kabh!X^TP(a!Bj_ zZDIZLy%2|vDzxy42R5H03#oOoTo5G!m~rwtxtp_zKoS!n3Jhv?jf(=za*|r%?Em|e z7whMN$g&&R2&T8h#dBPC;ggIoe^RB34D7!q)eIyV&4p>rmx7~?IiG3u%nv#ZLIg;c zx=0zMDUYFo(XtQ9FS#YQBAvdRH+|l7F35RaDX`9m3Y#j7S!Cwy1Zlrl-;G>npp0a4 z;@z;1Zi^2#R}{>0K#YeTrptv3FQ0OtTUNtO?F45}<9lZF0v5MQI`B?S*E@=evjHx2 z=Xk_m!Or8=nFIwt4UvRnbYJG)ldpw=i_DF<_(Hg+FK_faFDGhzFa{FYvRv}OW1#JV!3DLZE>u1pJ`&-LD*E;%)H z-$!&LJ`Fm(=ZJPe^_*K>`s!l++8)0@?Kpg7I8f0{mwAWd#hUIaNUEo~4i3hHuUIvs5-+0xAaLOxn7qvrL`E^4Wa|lsivo)C34hR`MT8Ah+E*q-?rQD$r5YtBB$j7(zV=G z25W%n;0#P;#5UjR`$R`_DXI-%S$g)j+eMIXwLlNg;rg9k(hr)^YQ*UGa6k)}ON|H5#rT0SXR}_;+~Z`b$&2tITw}PmVhOOxMH0d0Yq)BMrAdH>U3?i z)=47O8Hs+o_;__wD{pg@>9yJ833dLxS(Ij%AOgehuT?E(nS|DUnx3uIGd7m=jry_i zP#C*oZoI&03Q%3I_VfB-p$wVI1;qE5Te8otMmg0iHpDbtJPG!@dv~SEf79F&I(_dV z%A=sHjAuWqLaU->MQ_Da`FZ(UBu6KK_X-{p@Upb23-nixgs5@2m4fi{gtiu#61*^r z!pZd3wn1o~<9oV5c&9$)Tg!@{Aqr8S15|svk={4b>~T(&!mFFVtchVYTMcd4s*5K( zrG>e4U0ExMY^onTb{|B;5cgm+bARVQp3O|=r5B2ZB*=yTlvhqv-8kwQIt1-ox~J2F}{(+CXHu(Z0YNhu=3Dt7{IlX{Ou@7vxdU&4!FS;I0uAgScRupNB@Z}Q zzbpC&o%^fb&B%-+YIpPB_r3CHx~)}((v~8#BEp! zEqQ1yL&c!3;ES0tMK(aBGmmq!Y=xidYfloBGz7pthg@Kj5^ekxM36Ftxw##b@gZE0 z>rm7`Rf;a{H&Zy-EQ)_-lVWZB)aP{j>Snd)m=gD61-du_$$NtPX@`c4Ddo0A^rF>pv-9gxk@yOkw7bUrcO zQo)()UhR8I?dDU89nq)86)p-?RvXQF#i~~QOP)a>5ENa9>yw&FHlRPN$ibq}%&;Q? zBtBP8si{RC|C%VN3X=SR=358Jb;|#najnjpNo3DX00*@*F!(-WgYD%4kM@ z4CZlr_!B-TtTxK_+NA0zyje8J6YR$=u4b@|IGrv+FUUoZXoSkh`5l|m?XwJkexBmd z;_x61!6r)3R{G=yTxE1Njfbs3d($(F_+DOs`I^Vx(hxkr0%%4|^-EoPNI*8l?%p57 z((20UI+w>j;mgIXkzQ@oQAyCCLJ+>S;Z1Yo4~PdXRDG83amY*l{oCwa5Gp4tO}bJI zbcO=qdJ6g^?N3K@wXChz)@@$dFJ* zSpN0Rjz_3|jB49c{-6+K=mn*I;`whv02MJfr-mMo;(;8Sw}3K|&4E${A@`i;uYETv z&h(*>8vJ9nsH%ClfG(}rNGyhpB@UkdFl$@u_drnmYO_xPjvaubMp{7ue;U5~xrxA% z+GH$=B$SJ|!Dag7fC=!bz5-81R7jfm0g%vI7Kw}=?~XYbbvCYkdU&lU50u?DOZ(Nd0ft4S}bf?AJ+WbW-bL9pwSaW9PZ* zPd7(U762dgMI~(dzQz7w4ZcI#DTroQ^(tD-9<6rZcHX z|0cTK|HbwK9&qAu;Azbv32|V$p+cXUKrBTX(^oKF_Q~j{-#S=J-O4 zEIkS9JKF35Gv*h^foSZT7r7@>1}ZCr7 ze|lp5rCoDyf@JKBwR?kcyXnNXK+sLZ@ldqv*ewdP25eO1nY7-0pHkaqr`qcwXl?uFd4c?jzyJ99mmKBYMH9n>549pN;i(h7#)Z#k zlw>Sz|4HJYHC$0|X|&|xc{RCiTA`XlC&FSK3p8pmKWU*|24GgAEXt$|kJ3{O@{GFp z-BAW1Jh)h5_G#Js#YWrAfX&!vhwTyCE*OR5(vPz*BuTU;;F3kWJF^jk^lU=M3$kJv zm9szj#xiMr+H()L+2--jxrp+L?)!S!Gw!Z{OuO=Fkx84Tfa^gYKoLnb*#uU__gQxd z!ZIQ{0ezPlyI%G{Sm#sl0JAk@dF^eEM3JPTUQetC!mlU1B}|9k?}b|9bX(oo@lp_} zcHy4Adi{xAfw+rdS{9pg)1qt;vCsQ;Zh%*vl_2}Fj%t1{p|Z*6jT22Y;(v9lubqD^ zhz#ROVI(nTTvQ_1tIt9(@`{d7v|f)fzPaK19IHtdaX(2Q4Y+^UJ)0dQ zMRg>B>h9|KvAm3fLmhDXjSU_!7|UBH2AX4_&!rE+`a31;Ff_vMTSg}~H@c9KwOwX_ zi4!xZKS6zU^_=DO6yUq;ViT)Mw$>Q?4*QIxvbasC2t*vr5CpwQ9^z*mTW_hEUS%GK%*NJ{K+x4QCaRuW5uP|`}GGETcmqS+ue^T z+t>4Y1%)k7tYljG1>h=1?l1Lm5oANhT=H{rKDqVVq*DF6!~Q!1+`qM@YOP~bS50Z| zI%C;|#0@vxi0)@BQ+FmpgkW%b%*tZ9S(}#JEAryy5x%zqyw1mL+Zxzz*(Mfp)iTvXLf|1<+J zUR7dl5FSgsugky6mje!7W~(I^={W^=%s14~Md*kHrNvx`kq%p26%L15N}`4m!e7Tm zE&7{+-#?ogUQ~o;0`0uDlSfTSZvmkLwAmZ%6iL^^w}*=Gi*SFBNLG6uFNVG|Pys8x<}JvoS$#_5A~MN{Jt}1S@{qCw z&- zj+VwocbA%ji3YqLF+$&5$=z|{LzN?ac<>{zUrIbgwTRXu#Sgpu5#TsdAW{f%L?`$UFgL> z)Onsw6A7lr$}EPl9Is{gE~rF5ZFW(HgRp7_B)f|mu8 zZxMewJ2PXOv{FqeI!z12K~+2p8YD5MCcUC853^@5{N z?EypK*G7%89~H~#RL)ma6=h|HRDRZ*+^nG2=X=o5J$IO3a4sFC$eKM;zbyD>bs&=1 zDy@aJF4s=Pw$#saohW9Ik1MpncB!tUdJ!>DLC{QW*ZgSo-k_PCy&l?qr56;d`9g9$ zU-@P7BwUOt_15tt_s(;oub@M)Vs5*~y{%rgvBajMMW!s3>-m~ji>Co@3~1dxbqv(6$3IR`x6 zU+>$YVG-N_i|^OG?)B^zs*Kix$-ED|?iMZ9awWnAWfG88siM>{MKcb%{9xDSDs-Nw zq)IDMqTCop6y@ZsDu#Lk@tY`fbhGZ4?K<5@6Pd3I6*7))52kxt_cJ}(jw?IYTK7_| z+R7j;BduFujBTT=ohz*;HKT2EtnD{Q4?I4dS0jw=WtAOER*N+SuA|J2ZqZ-fniQ-0 z`ozzHwUFCK^4dZBe%ZSmB=d1w_j&gcsGYph<4WtFq#e4?&^_3M;etlHW`=IRKW$up zn%kL{BD=Nicr?#KqZPeE8JdUa37n@`WM0yOlQ&*(W)9yWu$MvYxt|^h4cM%WLz6PVa z>oi!WuzD31&F&Zo?wI|>lO0l7`**JcPkz=t&uY-I5?9`9HCs5&9vVRN<6mil>mZ4% z8;0;h_WgoMv^#6th5!8sW2GAqj5oh-k9OPdmaNtQ&zuMWE9`*pJ*~H0U2^rfyR@F# z%X)t)x(AGM?|iumSG0ak-9~;onEdkImvCEnu1Ypw5dX+nZMWVLj^p0cE>iWg0<+Nd$l3xK3Xviny=~dcv?Ap0=ouC}X z1H=UpwW-i1lC1I#BgPm7+WnXu;$*5BV68(mJ9Le>YM-)t$xHuT7RUM?4JN{)0I zx6Jy4Y5J`(`~)92Tikl88C-&)G9P%>J!e^O7CT2-MGUu?bT#U--wM-guV@uBKe;AJ zu5XU)QV`2!m3I6D9l_C1Gn;`}*3k~WunTm$Stnj9yQ>J+JoE^)?3oxyJKw8-6B-{ac zAnUB<7{V3^`zCo8XW*b_>r>CjS0h5cj?$h>qYG84z{i9$uH4Ew8KkJx5xOEmt0@)o*wtJ zQf%z`yhy?daFyX0=xvSd1uHNX@t|u7881jaPQEXmqB7cdqT;jMSgF&77AJE?Qj_+Q zq4|ED+u7M!FgG1ZPlzEe(-u4yrmOe3KQmfPY!H+P6(nlftn7FiVP#9Drj+#8bs zz<)X{%5uRVE2<`)1?7~;S@If=+tA2Ncy>fUz(z#>L{P|tAW67fvy6w&R)}Z>&S1Nc zRa>(qmLu2f`aWB@3Wq4x>|k;vRY3jxOJ0kt=q&tuvCGC-@h?#lf=GPt*INyrr}B~{ zi!86XEbi}(k+?`|NDKRuS?grzza3@CPdnfWXzr4aQ$>=&2w3CUSjW9MYOOX7eHWX( zy)_&wseQCqr^fI|;$zK@yCeNQ(CT%2W0CGZR^(<5Yj+JjbS(_ZGYw(d)G@{Vm0Vi4 zP*95Q*F5Z!y^}F^?TzxXB4xVXg8RDUH^idC!uX&6IG-utzUNEv$$&-nxPSaDt_tI1 zq*hi|rd-0)Fw80Wkb;+LydCs`m~v?VrnER&;fez&?!g=Wn8kJDabTMG&1(hBFGF%O zyxE-h{S1g4%oPM(v$*Gr?(ih}=Pp4gB_}S`Ft!oS-fL~{=e>bSF5Bdu8M<_Pr4evH zLLta~rmnM3N^IM9z*5ou_ZruJF^-|IXQc+hxGWQNM+ZcvH#7Qm7?lcc_3uK?!XNLA^5diZDz3 z4Z390!dv*N1(!5U5%`&4J3!-kUDtOqKSTFa z+phAzi_Y?!R8ksKwdyg6&eo;$KXZ#J&o#G_DZ|^Ne@2UpbIa4RxLG0qyuQmn6;Z4Vq5H{36Z1eaU+yrH zB*Y6Lsj`MTd`V8aVc5y-hAg4xW@X{4($4JvA==9|kb_z_noh8#g^7{f?^>xbpV`v3 z`A=jBRI_Ul%~4b3e57~vBF3y>kohp2kLM}~SBCzGl&Z>itcwphP0{!*Xo@gGRpk_{ z(uz1^o>xiL&yir{Hl>8PxChcs70Rb62a1eu24T`&Ysb(|JzQ>2y2_J#U?!|80Xv%u z1Re?2tnT91F54sx0=xqyAOyx#Qevs3KI2`TILVOTA#&k%eIoyX{-2-7b-0s6;v$;r zM6jJsea@Qq?TySxe;wqEA*yowt$CccKRNoY>zNx_6B!PO{0H7HR-KNhiLPl9ngav6 z<@kB%`88EvGCi+`Q8y(Ukf@Qv4PRORW689r`o= zPxg8>3^QsFsPd!23$86)lqmzvM{Mkcgq)tWb`Sg}YRo{^T7rQZQhhSRMpR5>{YpdZ zkPnTY#`9#0K7%lxl{dv{`Xk2%d&Ff!LUX4Ndk#vHE9=k@77-^ni}}-1;9$!D_{#;N zo9&3D`UtCibELS0kD=$u1LS@CPXoMPoZS@5?ME%mFC(n@3{*747HUkxmr>6@ZZ#*s z3GBvEK~Supkly?P5HGN`@H7d%KfXtQ%Cb3EP+1xBo;>6 zFo@#99CCW>udOs^hyh(2B8_rxj8#af#6N3BW8zJsu=87_h?<6`K0xF!3MG`Bot@oU z7V)q++^~wyXsPbIQ7ys3?OH#!1roJm^0&9Q*XJ)Vpc;v6g$(}KzyvZuw+k9a@*>#M zzno)c4EeV)Bep;~T1feNjLL>&(-;cxjH~^0(8W0^=)|1f1k{9An{%d#-^ij|?%vIE zEY0~ra7x6w=EkPzV}-LLG$+giMB9M~LZI+KXY{ZFy@S*CKx7GY zLhFVpe#@9y^gcCYlWoB zuo*%ExwLof`X6d58j0NG%rthbrwwttwOc@yS#!<^W#=17U+%d;sKq^X=_hIP4csKX zHloUKWk*)DFtmOYaKG9yvKMur9L3R>lQ~pcP&b+@*K%z|&%cezFEkz+&;?_&jv3;z zGHQ$=j;pm5!&*ur01S3dpsSQVgy$za6o@UI_0;!KF+D3awPkiUnLq?<59NakXj|Ur zzk(SSe202R@Z?ZUsn$&ft5g5u-x(0ZZ?G)Ilw0iEWchI2%7G}j3bE(^`Xa_%2&G}m zKUA)K#_ikU!?(&np<3|kEq}!nj0U=}-J2w5T@yMSR~501Mc~!xlA{BSIHaU9g~4P17m+zvjB` zwT6Jm$cC1`O%(U%Pe)wG7h-fe7Sm-f3NDs^Kwmw(Te}2o_;U*_COKZuQ8G%eF8-iU zfISWPx!wSO0s#j?N;m5T^yubvUhCyroGxXPzvMk>bGNfO*F3Ms)g7l5G`?G6vMrsD z_0;o?@uGY>kgidB=0=R?`857~nX{@PD?36l+;yIP?)359vU@*)-k{^fV29Iaxxq#O zl>9x$on6+hg~J$1KcGuM^7Kvu%eu-N$V9=h!J;ZjY2mQt7>gRl#+0oNf7QLBpGUsE zQt@KTxGH%qzPo6}YC|#f{pD6TYtX8IZN&Y!Ny^Dx zwLb%Cp^9L9a6QOtt?s)DQheUcYT`CAm!$}tcaWwZZL90~+v3k}-vZc4mlLWH(jU9f zkI5cUjJq@pytpaPHtifV?S0w2em?i(8+c-Q={MTyi6!ecvod!O3%tKvFA^6H)R>J1 zl|oG{E+ixCd&sCQsnW8V<_PaF#Eh}BU1RXruyA$#tljFl-KZgbHXgoda@ZEmuO#NN z^+fQh$K{!DAJrQGza;F|&ZTl&752}fu%nEJYgq4Yt!e70 zFYKdZU2o)qM`1M!dcJNg&HOm-9ctC|q@A2s_8K4iD+t)*&Bk1f+3kF*q3^zn=WeXL z9Xn$sLYW9zpf)B#A_ljBZS?%2sFsZls0H?n{=WLWKO3|Sz<3?k8uy3Q0SWAzJ4C-y zzg-Y;Ay`zDVZT>k*)jUU;&!1sZew|^vfz$w4wnJl!^mr)heolxmU#&! zL0~`KsdU&PBR@aisI+#=JP_(E47;LhBpOtQOC(PvXFQhCK`-R^1{$| zoGkTKhYU#w=zBR>hZBx2lyMQJO|S)*w~B7UaxC=dY8R;qHU@e6Ti;DMu)FdyVm{P{BXA<8 zpy5Rd_6cALp-c3z9h7ob${)-YDY`z*)Zb2T4T|~CjwCXB6nf6dDJW#->1vgF zDIG7-;8s^1jT9h4q3FfJKaQ53@c9K0yGKaufTUE!u9z1yPfegV*WhxF5h z?!P4PYN-2($!Kf@69q+1nCIM|javj6se5_}axDB)qI6=$uP-JY!Xt3vxpO_?vPgZ% zP3|xhhPDE+hWI^IE6EAe{(-yN{#SFyT-(A%z=L| zo)Zo4)u&RP-_OiWDixUC6m)`tpFsE>>OC0O^csmapr28xA*WoCzcSu!Kf`q`7Z9vC zW<;|1>xH%JaIfyM_;3HJSdCb`K3?zpl(?iuTdCuH=o5g0^pWkQ)}BByiUtjySJB46 z-b*h9NqrCMhzP%(cBIaRXjW71Rl4L! zMy6J1)tc9$s9$G@`x>FUu+qes7gC)ugW!ffAgyV!hy65e#+GP#so^C`6+EEAL9r3K zUvYYm7LMyElO-$dh#+>aJMeu{JsoLrIsKKDfA_}dKf_7AWqySU7pY03Uk#N~#iohV zT9ffnL~`Y0pggVT&-1lajO>&!?DO(-f{S_g&}aGcnS#;0n}j|gO)>;<2I53YsEZj| z%WDB3`~BRheOstDF(@i@;H4rD(@EejG9)J4DgboCE{qOj-%txT2jt7RLkO3Q{daJs zVGXf~(+L`a5giEUujp!BMC@H}o4(wiVAlhxe;R+UZ+yS6R759ILBRF{^hN1Cf!r^E z+zBey;K4=GaAAs(kB!746Y-wY#X8w~LrQ<79yMtoP0$&V>dIV)9BNKM!mY^Ijr*LR zByX{tyspN7F6QcKJ;o{UBWH~$$4F9OaS+&cbyP#0dP1fuY7)xXH6D3&i#6inc^O$k4igo z42y#quU4Nd*|&305*RfgG+DPte@kYqH+urtRZ20WamXyMHq2?_A9BwK5kYpB0IbfUdv} zMSLYL#okDj3wes+a10H5JVStoCM0x4bWjkjB4k&qXef`91y5oM#GYn$pnRhg-1$km zy3_k~sXoo;aW_eB$QUOS#X8JjL8LTFVHg|eNaJ;D&E@ZI`~(j&Bf>jEmX#!!#N$FN zI~{?HG7&q807|#-SvMa`W)J5|5x|?47=&u}Wm!<(|Au?dm%H7WXI0=tJ2;D&DhR*! zWI3IZlC_3fs#>lYOI*szvmib*5>0@t!KgP2gT4D{$qe}gdIK0(DPpZ=Mn@$;Qkabj zj{}1QwXLz$)FsNDb|oi)M&*9ZkOt~_HK2*kVrs|8c6O^jeD*)R&HDgnm4U=+RK;>Q zub&#ryJ;pAl&M)O7Krj;$76dUL*Pqte0*JODL3a1Oj05@T2g`n(<6ZEcHV#jP6imL z>MU2P&=mne1?RBg<(g3X%yV{Ysgn zX&@sbC*}46tXxaMuh#N!Q9Y+Yu)$KUFY;TsA^AC&;+xl_wY2WvN`uZdKpq>PaiOrA#gtlv?=!z76%GKAz&GaqJxH^*g+gU>wKb-GYhrRBvzjZK%iSg z;#_I@d7M@xpY}Ov+UBJd1v{K3mdjxZI+3u9YIyJkm_KxUXc4nGKqq0)%T;mKF$L7R z++d+(_(4@!n2z57gqZ|U%sjULx_vqa+UU=*XUE_VdU%MGB_8>Gn--c(J_=y)%1pi0 zye-4%k9_BZZ0BI~ZQ(q&PKh{a#QEg)qbu=$%o>n%yU4!Ecay#ltUP>X?HhsXxNnfK z=&*bV4kiT#;q*RZAf`Jph`21Rffk!p0(2nhtcsyWpK)l|tQjj6PKa;hO-NJdVx*l% z3&_)TU=i0Q^5s6BBq>%#l~tv1jL#z7LDJ-Ljey1lkl4O9`TZ829o z%yd6T)qjZMYfwZcFugEuhlFeT84^#i!^eV0mP~cCbwMXZAtRV@_Z)5)8|?qd@j4Re z*G(3?kmTL~mMIy-pHUR%*5X0|Copk(+dFZJ!bxM>yk@cD-QylN2bZO$HsO8kkLsb{ z3rCn9S^Oq)XRiX3@Qhxp|5%xvam|?nNaN9b2k>FNM}cgDwqjQnXcMZ>L3tgI02(6mF z3EefpQSv9@2sTYArVsgA9iETgkXS35*+O{_NQTFTeiO*d0sC*eR!S}!*^ga0SXJhj7$kYgl%sTEBbf3$}ZdsG8&DsTQC zw1Y7@ZLAW*NPju!WMEfKV)DzAV0VFB(wurI`jbv?(1%L*txyoD2Y~O0is`)U)HMn# ztEBvRNm2u_)%J|P0{g4s!o_svye@U{(1}Jf@9ohi`uSR&53k&S0RcoUG05si54U55 zF6TVt%nz6hmMqPN#5#E2#H4m>~4r zP;n6%$=nKTlAPhb1toch4?k(>Y^3*xi=xu3m7$sX0-e2q1k8e8HeCZK$@7ht(_51N zd!c~dp9}Y8_2Ct(2C%(gVll>QL;EjxO8&HM7_hrATYXwe4K@j2j&CJ2uV&>TAX2f6 ziWJ;w_$+L=$_asNrfp#Qm-G z^fW6ZX_b&Z>W>gVg^^c5gMdvvAiB@qjm{jkq_*4pQ7`|Ni=&+|r^80$kBxfwwq5Y*5>=PuBa{uzW0 zc;20Ir3ZmHI1F_(@A*Di%YwSzw@+`2+5SKsUwBu;d$hYdUQYGOrmdsHXjV_W(0mig zS!;+}<3U~p5+(ms{@QoZOQ}%PkmY7W1JotR$6~euMp?zOxTMGB;HdHcqRZp+;B*|R z7Ea}21e{+}AC zduy7<8(XObDR!N2f^?B#9?vrGrJ5oeir3FO?93lPnho|M8(B^g8wk(dIVht)b7SUq z6DePDf@5G_>X4wmvXkEJZ;N-{xJ#YB`5~10eB&4;${ERkv301Y{0El{$%#Kb1>er- zu+>lC;}91~D1USv67waxc#f9k!UaVZsSITdQ(*JiV+g5sHY&zCn^zs@`_vpIGSS^H z%92pF(P_)%JH$BzK`_5!=n>wSwF=l9{-l^vTaT2fV0$V$_-j$94SH5hUQ&)|n#MCC zcyB`E`Bc2xak~Th=Z2_@=;kyYpD09f$A0X}%1TBOG!WG&-5Na#J386v>*>u>4Z7`W zZ!77?X+lQqUmST4J^LXT#)cW{=l#33rr^K7dg#uBW_OkqGMF(F$m{l?XW^@b@tj!J zPMmx+hX|)@=G4^%s3S(k$D>$Z+q=2BLFUHJ&dz2X7p#o9V2IK!Egr1+@yPhLXG#@gq!WEf3pP^i}jS%avPsGAAV?c8d5iR zz7S0>S3RBC1Tlr*%c;O9xYzBC%tY|LTwZFP_&c1JJjgsz<*}f1Y>TfWS&hf2!KfnH zeh9qt+o(IZQ1GafEQDE0(&u~kyVb_E!oG|1y2HFnQQf{v^1E4^c-}3#!znz(RHm5? zVNWY#?Q#|*IKmfnvbEq`LT%?US+&~2TWQ-CA5?N{O}_wGFGoFSCg5N?M4vyv>jJUD zbFp(FN==N@7GVWyt1K@+Eu|5-Wn=uW*)Ng4-OnRm zbm{5ou?uAr47M!+r`5VmRxrUprp|bF9;8& z=f`c{#jM4vuBV|^m5E$2aXYld_FZq7M1ZbZG%_OBf^~MOa8#%ykdAU9Naq{S{vS+& zcZKN(KK|@1P|;u3b?+kGc^iVa%W-PM@ERL3OjBTEx@L5BjQHc`-jJEYVrQzu)_hA2 zkvK3kJp9gYhx{%^x_->k_g5HSsYB29S?jriynLGKM(yA+GhtDca=m^~?T$qvi0wl8 z{_#eG`}?3XKkWJGK?V@;5lhbw5%R~F>#}kV-IVM7OksW7S8<~+Mjtz_*KDZoOkw-{ zmgY0pU)%#$0u}_#1|GYWKATo4bs7*Vq9Z6{9gJDua`!e?-w<0ObALPiBR~a%R4k2E zxMdKPNR}`Ee9;}=Y-y^l4hQmSx_0;H?V0lGQ8d&5gwT%IO}?YPHSt?%+ADd~!6y{K zPb0o|+I79A+Y&fUWO9bPV&#-)O!ZpDB+ASznZ991>1-q2rEn{LQ7$Yp#^w7~D^E{r z98aA~L5^`54J$j%Kz+b*cQ}-%8>%!lSKc;F!V0n$Rn0SER|+cA@8>;u_vQ`f;P`mQ zNFaG3K||3Bw-u)ByP5rVZ%a=7q<8jfqjI?ItnUJJXSKBNZiMd zGvyCMSz*Ck0s?3>x~^j1!0mXv)X`tF64Sz18gT5r(@4+HrReF|fX&~0j1!wR@{YuM z7$2zMpZ73bzP{Uud^EL@4}%3mKD4f`uPfeuBe_)~{mhz{I@aPagr0BnZmLz_p*^fz zYH7|g6MMM5NZ#&}=6{f#(m2Ckgfg|X0`f-)@5*SziSLBM`0;TmFr(P2$%)Ji1o%jF z)GFw-*hs!pC%uAAPLB;q!+Ya7NfKS*IwtV_@3*|#nf@0~SM_;jY$8KxhD-N+ zy!G{}K0cSq{sYQ}+69$2R`xV`iT$9|P!kLn9P*ypES}4)M!pX?KRZ<>*RjGFvs&6yzV%!2ZmF9K5fTUDP+WEMOjW7N2z{Z8E992<#9f@dI}bL|3V6liNMW@ zN09m6rQCw9pbG&2ZDumc6k;x~A6*%xSu60XqLYzpKo$u5{QJ+3 zc0TG%Jo@50a^9O)d4gyIq7$~t{auxlKzhOYvY`r%JS`(3tMAEt*BGh!zfa1{ufQ`j z*+`JhCWwy*y`M`3t5*U?SP09s2L~>$Z`!sij7A1*Bd(f5`F3b_lago@6k6Xhijwn5 zkh%By2QSn&=W6mV?0mi3%|?<*{PKM1taxfb&G-_%I`oK(pr2}= z3wVNcaF^r({kLFJ;)`=f)`1ZZ4@z=TcPLV-? zMRH-G;BR9_6A!0fN2Y&1`~oi8J+%Hwt*-|REq)8+XDwgy;e$=P(JzHhwND4s9stw5 zm{lJf8{_JTET&1M|M~pIix=9@7&j*3Yt+QIEd&74Xg!tr&;Qg$-Iz zp1cII0D8ndi)ERzy&VVmGB@H)wnz5h&u&eSaw&?-E-Edi6bo=WbuY^dtCO>H^k>^Q zicTvF=+RjKRcKjt+a%pg{xbmm;>-h0O_il17X|Yfbavzzt!{(-OvG-e3^DY&6Bz`o zxKmQH{_W&$*R9ZSv@1BfpwAk$nImKVDWv#k=$$Ke%tz^(?eHTs5SryQ1TTNBcsipg zUsH~j3{)gKHiITHLfB9A2g0N4-*(xVr(cDN{;-!+q(Y8)IpwT>Z;P6@j;>yDG>Ygo z&j-p8{Jjah8vGz4ReiB#@cOb>QqhjWc=+9H0jgLK+Ka|LzCu@A z%4YIoF-M%gWpyHuZ${};am2B1@n~kmbM^UsgfgFf+F*C0>dgsy@8GT>S<@^{P%Fv|HEGT``}|0K5GuT)o_YT@8+8poyCc-wG=fN2KUy(2_%BT$ATN%A3EYG-kvEK7E;?BY?_`mu9ohr7`HePZ&J2}kB z%@tenMO?zYD#F+ABr|y27XS*->SU#~qcw9{!_Udd3~X&XQqJSg&o9b>=&I)*mi~7U zdX@gIyj;OCUH(xl02_KGu|+>gj{9ee`A1C=(hVn`uH_mAAlu*x*N)dB+RsG$1>;`| zne$207@f%PETja{VNx1vke+clrp^Zl%@{JhtjX6?hLq_Y%}&6pIM|F zN}{&bR#v(WQ4=J3NguBz(_eBq@7l(9w~|27!8XSLm4jASBhfx<6Xi+0&M5AbtNc}K zfh0%MJAUmEG$t_m3%oLWdwa@Ce!ZE>4m;$YsIQA3!)499adSsunHuU?4fe}yNCp5x z8P`~ft3n;_rt8cpL8orpEMs}(!O#o2R zgubBc>YG$*DPRI@j{#1V!sXnA6B4*;V4NB9!FlUASN=K zKbCV<-Gm@{pUoxGbOfIp$vbW<_ym`jw!)yEadZpsAa@R7=FYf9GBf8kNRErh*BoL<6 z-9^s2dFI9^1|5Dnfmu#Ankv`p8#6>;(Qx6p&KL%y6+zdHZ;4eymJ_5f)6Nr5Gkox0-@NXN;!` z?{VCs`bR30u~?{K)(F3AQ&X(p88pLR69W0JZi1ZDvowT!3&AH>?Gvr>DnPYUI{# zHZe628)wA;K`Cc|0x;^TMLq8DCdRE1PkZls2P-ll;M8M($u6(=4>dJ4|EC8G$dp7) zPKFoW-s>(-P859}7qi0J?OPJlI*_@vr-M00Wg334VSw4zivxPlW}$s-A}BE+d17+% z+{t#eD6+h?SH*>ms03rPmA#HRIb0%~2OO7rZ_L!W_*p_7By*8km+;acMP`5UJ4cI1 zqHBI!U+a@qGK2L<{v)voLb;Tb)OqW~$g0`gSG0g2<8L^}-}UL5ai+Zo7}wU=D`FS1 z<6|+?P7!e$Yh{B@V59Pr;@sTaWZjwl`D4@P1|ME=CAqH6o{u{ch(^E9C&rEthzDr2 zYFJtqFiop2uZ!|oCbn03`0OTj@9!}5W=Tm65A%0gb`0z!ho#1@SfRV_V8)+^s1R_p zI~ZB++AVSm)RyHt9~I=W-62MJ8g$+PNXV*Ib%rtW0$iv+85zr|K`FQzu+yW|W1FB> zk(4G>5sAP^@nEA^L3-#|RR2M)an{k>{iRv+91ZuiET5UJ8D#sXSg`4hD9tLGdAwqf z#;F1RJWA|6g_@{?%JS?Kw+mhdvAZ-|ex#B4AezjW<$O#HnRAy~x_S6Jna6v5>d)FU zy<~{}vGsUvsDXGr?R*pN=ua*=_2Cmlh4`tJVtB8}n-YXBe=?Ww2-^VF{#uPgVwh|H zpMAqkv*Vp5c2U%g%IfOF3&%3cS_ASizWS*R!vx7`J6VQv~z=V$phL->lyoip$*@b!3PqBBYlpS1SmS$)}Kq@umq*-exU%$0pZ_Zan^BGTaEl>*{nEtK5Jvz*Y70$ m-jk+iFX8{&W#hG(Gyd?)7@cgJ`T^jc6lADttW&6EjsG7;&T8!d diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 7d1764d1a89be4845b2f76865bb46633c2e7a2de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7212 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 04dd8ce8782bb907ae2a52485ba9ad1e6da0b528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12343 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 diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml index c5d5899fd..210ab8abf 100644 --- a/app/src/main/res/values/ic_launcher_background.xml +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #FFFFFF + #1A1E1D \ No newline at end of file From 00ca2a7f195ed792108c6adb213b37e4ceb95405 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Mon, 17 Feb 2025 15:04:43 +0530 Subject: [PATCH 080/150] Updated app icon --- app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1396 bytes .../res/mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 1590 bytes .../main/res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2794 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 822 bytes .../res/mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 946 bytes .../main/res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1900 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1776 bytes .../res/mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 2306 bytes .../main/res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3646 bytes app/src/main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2612 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 3936 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5814 bytes app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3754 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.webp | Bin 0 -> 5628 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 8068 bytes 15 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..43ad1d08ed035f005faa1acf1a00d82464e1525b GIT binary patch literal 1396 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..9697b0f260682583188111ab2deb9f0cc726f6c4 GIT binary patch literal 2794 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..dda0a4bc5fb99e9ef2b7f97dd799357f96bf9811 GIT binary patch literal 822 zcmV-61IheSNk&F40{{S5MM6+kP&iB?0{{RoFTe{Bj|QQQBuP>@Yj#O2f1LM%aL~4q zAh~n*kKp-3{WxsfMv^Gcz4c$cx9d8RY*p#!{)J1x#6vC~gS$h92>wMFL4*-S>-~L| z5$@KFV7KBN`)sybY5n84+c%o$f5l(j(cSmG+t+JdPVw)E&lkVCg9yI}a{HQblu=l> zYn%ARCvNeNf4tF401_ymp}>SdVI)ux00Lx43Lr2!bCD2$%EVYXS$PbcDS!ZhN%5Eo zfs>VCa%Dm$Pcwm&i2@0?GXw;gOn|(a$>iO!m^3D@4k#Woxk4IGGXX(>Kmz0`?+(%s z69Pb1Ugk^z6Cf*F1UVrm1rV4JfCLHxkih5no8}6>w$I)9>~@^K_}%^!NZYn;k&>5p z*6uDAn|QW^?ryNV6&tY|TkP&`u#@hF+x9oH^Ul0;$oGi;PXOyJ6_a#DjB{o{&ILGQ zA^(CU{|jM^t8fW*H z*EqXDMhn;sGU~tKPF%3<@X_6?vm=b*$~f?%6+O!@FAp=qmiG{Bx{xN#b+Q@g{&3|) z@!6-10AA0Lb-WdLxi!v9UOw&r>W`u4zm8iiUgi#;ldhicGyo}^G= zJy3pXc669GB60JR4s_j*mqdlt0Gdm0U3*y34Rqd0C0VraUI)~_?F}b+6jgBbQzwAB zX9siLWCWt{^m%JGEX#{^k*FMfHP{U@T5Y1uAQOBkY|Iq0TBKWP`bb}l_xt5f2K4{g zpEF;|;O{fd0cNQI<{3YRC@PHiA2f8taLFTv4eHOCI`2DRp!5NKITJSZk#1tWCFFLG AnE(I) literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..27ed3723a70870a08f5bda76fa4dfd34f869f5d7 GIT binary patch literal 946 zcmV;j15Nx=Nk&Gh0{{S5MM6+kP&iDT0{{RoYrq;12j(i0B*n^}xm(JJW>>mzk*S4o^W0#q6OdT`xI%Z~OMki$+Gq+=A=om6?|J$pi*7Sa_EZKe| z`ac0idr(^k70>*)e&Z%Nqj*p&Zf5`KzpO|dB{f=l#g+iI)!Dq<#A)D~BV?zyW&lFw zltX0q{>dgb8MBU95mp{Mwe^W|1Z(QlKh&E(mlDv-CM{j;M zA`RVcVA0xSJoHqHS#mw3+WJKX88l6!F+RYkd!p=gY8ioXSajTN!G;gYUXpkj=qzX60g7>-I0yIRpv5c48UNgoDw+xj1;N}z1!Yu*y zG2A49#lkHBCl!AOED&xUIQ}1aV7_omL3Ina76}#!HxUHha{J@}U$}mNo^sO!`wExu zfJSbOz>&hm?*OM`I7t^co^Wa*pckAZL9N8^!MMoj0z)H^xE%yvad{pD(m_Ct1a#&r z2l6dA%D^yfC!lK_t`gMgD5wz(x?$TLVvbNa#{Xsn?%L!zj6d;6sJy*^=yJ#g*CFO! z-$1kTVFsOe6w?Ojlf`tqC_K%gQU=l42cZaDea>S0(nLf>$-^w7%AZXSpFY!WldPn$ zhl`>Vs%H0HVeIs}X@zahD%)0O83@M@+h)u5UY^1^rT5l0xqXrhyyFVT{M{Eu`=bkE U4dkN}vb**i?sm$hXw^Pc0Dh0T*8l(j literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..aa005c944de6cf133debfeeb031f94c97b3b3f96 GIT binary patch literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&iCj2LJ#sFTe{BRfmGK4Vccq?JFT7CO{tGW98=m zzs|`T!QI{6T{?GncXxMpcXxMpcXxMpxQgHJ|Njq@nq{uST4qUwRcYxcSs){P+Plfv z<2MDihfYS#QW+@i)wcl)T*Wjj!4AGa#$g2>YSy^+e`UTcQ!xg0Hb|X4vIVjZgHXU> z0Dxd~)S7MEwr$(CZQI^u+vaE6w!JEGAOK(y_4~7J+qP}nwvCm6v~Bzg*#wN+JDC7F z@&7rpqrbfOTHoCdfI{&{x8ojzABbk75&&hQq1+ot8_IP5f*ASGWNH5Nu-GwlmpDH`}(Y&E^5N`+{xl(Olb}0F)L01>l2#I^?>> zMa;4QB!FPN1I!GVGcVzz|K~BD!fb>DU<8>?mRSQcZo`qj5=fCidsqC?cDP{&2m*q^cAf|lf=+Yu>N-~a`a)&W^7`>t8I z_BHv}OTd+KfSF2TKdiO=u);evUq1m{2?xyl>m$9fKUQizc^Gho0^kV`g@ho*g&H9F)$Vh-Wke@CL;ja4(N#;;rL{@k=_v`9waXn;K|)o z$01K;M*(3h!R!lITZTT}K;I@N1^}mlC|ell?sf8XX%ZRKI?!vNrO853q2o|204E?= zO(H}5y?wB3t?gfVrAPn*hCu0Z@eY}(M~2q2vjDnJ74tG;Ztetld9x51!k%4Z?(Q0^ zqj3a@0~|%*G>Q(>GI)oo+{rHH#B-P@$frSa!PfQef|A^%|vXy}7 zpgvMv&#W`j4h|e7B!F(Pxsm_350dT;4ZJ=E$I<{$(9zq)z^JL}x&Ko`0B)crhnC~s z(6CYZTEIFsmMD8iB-i^t(A~xEEp|{-#a-E8(6;?kjK)D_n01ETHd-2-2BOtWjnm7b zc*`5x=xBgjteV3!5gnp-+c`z6OTJ?#6@?wi_l5@kX#gmgqO4%yjBGCf^SV4)-q1ih zKMxH61rsz>?kGSd%L{<@tSq4~t~knkyFdiggKgGD)}@j9TEH)FXh4ai(-Te_0Ls_+ zi)$QZm%AYVx)2+?%QCzHnuQ0ElJS?;4iOMwHw9Ue=_!u3`+ZOV9Z2>11C4L;Ms; zu(;w1+eC9SyuDBZd%!dM%Piv%Qv;xnorO_}RHGwr@h#5k21nV|E{K7Z&smmc;Q_!5 zd70q1cS=;vN&=jNJUnr(Z3hhyz_r`SqFhZ4t~fwMf}NOCtd7>Q|ZyI)QJCIAQ!Fx7TK&mu#;_^2)Pbdc)uKi2vdaXp82Cg8x0 zAx(B8QrjmVvB(&2X|1iF#~MyH`_n*_GhDXP(~Q;D$lB5IgSd})W*6cni^xs_Lg#d} z)}C<4vxw+Mx`BZzSt+dpeY!i_b@XyMo4>Z|r;+&QtlRz7^GiZ*bOKf{vnFwlN2K?L z2F!Q8U=bwsoG|sWFy~?(!lFQEg+pedM-pT|B9j#kIe}==p{Sb(#J!qp>1{REv+cD7 zfn<_UJWT|GZtKzZLF;Wf>n&A%bY1V~NkZ8mfX(ep(m*FItv_Om*dyMu9oWgvq|8kn z%EzgIC{T7?>#*D{$+{rP_C}|*2~;1Z5tS}Z1Pp;@->L0qQ|X~)!B($_fo;CJ@bhF5 zRmVjEQa~5Tw<2W!t>IJu9Q>oU^HFYo_;n=D@lSuh5GYm`76WE6q(uR4_4CaQ&~1j_ mHu)dB`s2;dtM?aEz%0jf0I=!ef&eYRemuXhI6VkxiYN^c1Bey? literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..d5f37d46db9aec74b0b6b9449dadbe90c9c5da3a GIT binary patch literal 1776 zcmV zs=z`#^6v_OBW;@^2Z~(5$N$H;cJKE^4B61?{2zL%Zl@qzUOu9rwZdH!k zMsj39`i@y|x~um5T?Xg2jU-3bRPJdlcBcF8mHXDG^KfiyJ6?UUZQC}>tW3ZdO;*bE zsZ%ARu~pf)_I)RSwykZ4Bdy=K+O}=mc19aB z6Kjw;MobOAFs4|389%rJUl@HpZ=C{&wO;x?S^x9?W8c7}I4wUy zd0ENVlx(o%QW&-a(2oWu!A;!Io{QDS@Xn}e*pRm0heTF~Y^aJQtKvr))EpZffHqW|)WxA8`$9I5{b!3k2{Nz6 zb+!VKQvzV>mct%eFE;TrUQ6Q=h}AagmcwBcKjNh{F2M~oS3B=6s~i@`IqWJCObBY{ z8QdI4fEf(mlQCQFk@U%>%ePgKS;pOOXR1=G>vp~MXCg|oKx0loski!^{K~_2u2v}q zKd``Lq?T%I50g8Ju+wM#TlUL zKod|*S*qvEj0%z=H#Ni_qL@N)=zIAsGi6*5gC8IwZrk|TvNb~$!y?V|IV*!7N?Oa4 zP$K4N;&Y_VIU^s&*9Et>Ig4)_#y>GAK523EVcwb))XgrD+ zIkIyNgXm9i8Ytz$-1^g@pzF(rxdP}XJI}z4F+s|P89}9R9GVdv1vV@AaRpGhFnh_% zC(}U%>PmiLj&TDY2yT|~ihiL6tNhO(CuSIHYL5gvn7gf~M-l(*U~YgK*@J1p`1nK( zUie!96!pg!;7Gt3jut*%eE6%&e0Vx}KaCl84hy!CtaCPh`vdd#1Lp->;gop4w zDTDH1zEP}=6~Y|I5(kDpR3c0W1{+Zn{YOB>!&oxUJQJYkyQ-X;%zp*`njSjBKyh{^N0!8EK3-P}A6|8r&9p-soUKyk-4b+1_0eP-@ ze-lhli+bTRK!2MTXoeW^Yf&$#83AX=JfF+QNL^}r;Wfj@@|x#%J0_z93dVsHoum&Y zqx{CaB}0e-_1(^-pwVf+0fXtk#5_w(wlh~SR58|=j_&3zaQVD>h6O6;XF&ctx`i_M zXSsP8qh$dVi{taCmi|gGddngMr^hlD1u&GDj`IsqZ5~D}SaypCQ-aoZ8$eldTM|e5 zmZ0`89x%j+G2ZvEUE=)oKI1fUVUCG*<_4&dJy>K?jID17cF=e8Oz>gwgHSy#gCluU z&$uAMnGhsz>Ky@c$R6Lu2bvVLp4$P^q%HNALcP4JA$U@YoS^e#8%;c*Q`vLJtl+|Y zlP$MT5!|{Kxxwf)I|XGx(?O~3SB|g6;0J2k9AESP>7WqQ%s21>M@9t7mAcbF0Yv@P zFLujsE_LmwRi;<=S6^Z(xnlPaPiUI4VsWG}NbY1F^FB2#n8cEHeVVjZI+?pnOr^8@ z;ZRtiX~y)Yg2Eu8ADY=y?$nFcGXZDF%l3HQ?u92`E&hRYRP+yp8NN(f%IkFybp5H9 z!Vb~L@^;jB;X3L2b`;h)w7^7)QXNjLFvE!1X^{z35h&Ta#`L+-Q@v+`svGs%47p+F z8YEO1h)1no`eN}glE-rQC>EDm!-M{%94WM6F(WZrVq;8WXh>D~%LX-GDN z(yuM5;+f#mNgJA~5zRUkplw$*#?07wl$PuAM+MXW*zt^(!H zUMT&s-wQH-uDTnJvPqOG3}66=Y5>eDK$h!6ZaT;WvcZah66%g)n{9pR^C(u69{?Yq zPqijdUe`wbaV-6ahnMBei}EV0pQ9J?^if{cW~w#G1AyQMfHcMc5OZPUF z?R`GihaB?@J&97qe-FloV;!;qAOl1I4Zr}f0Ick%7S{gXHbifH2cQ9X05L!^&V2o; Sd+06}?Xmm0WB=n~sVoJK$5@5{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..f75feb2206aa92777a6f84f9cef6ecbe17addf89 GIT binary patch literal 2306 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 QUe5CzCrD89-Hv%00}-|uRsaA1 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..8404384c1e0a578660f692177aa83e4832593aa9 GIT binary patch literal 2612 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 WS_=&`1(MlXgP^s{6ktY>hF1!1jv8?Q literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..7e3c456910633512546fb9c3cd288688dabd7807 GIT binary patch literal 3936 zcmV-m51;T-Nk&Fk4*&pHMM6+kP&iCX4*&o!L%~oG=1|RZQEWl0e0p8QzSX67Z5WuGcz+YGcz+YGcz+YGcznR zGxQF1545Ul#F;(QQU4a_1Bh`#zCv#xdF(Mvs1>rt5=-St55O#oS-#d1j9x%)T4J^s zy!6G)lEvo6y}+HhuE0~2wdPgqc*o-Z@sfQOV_S#rSoa8LojKO=T_10pe;1G=*>=^m z?!V9Ck@t4TQVA#t@*#6UkR;i(H5>T0ZQHi_Z0ld&`*?9MXWd^C003kgt&NkqDWY1* zY}?+?*4egg+qP}nw(Xle0lx5m;s3(_h5rlx7yd8&zY68S|NkNhh$R3>0IcY=0!skt z&aHfk8KmdxCCehp{Nhz}|HL9y<>%;G^CUA*b$fFnbx8pBXhH%aCkkp+{q8{HZbIbz zBq7yeWn|In>lb9cKeoq;U6$c%8~kR2zZCdafwh`K)M_k8&XcY9ReyB1A9wEUsaP5F zD+nL^qyzwTexT^W5q9t<-r-IR#Eze=5cR=CC*^76Z7S=a-8bB+n@l+3OcyUlm_R26 zYK=VY;0fqqUg3@pL@y|?HkjzNyB3I^GjYb9--sPt0suNEv{tMWNodhN;m(%vm%&6U z51}_l`G!0DE3Mq$6T<0$RoQ`Nld+k!`dhJ^3en6%bO9@RBa7yMnS06NMrQ&x@H2}n zMhW!et+2tLJQUjC4>ND|0!8v}z$}8!0xbJy7Kxools|9x%{-Le9Dp87l1B22=nTLH zex8t6v`7oGOCcJ0C@v6)9*s|lIupTH``;xvZ_T^R$QlLK^HA-|E+ zz3(p-S+$1R;4kg~b7a*V(%s=!ej?!9i5ZC(1QQ+HA?jBAPNLM~B>+L~#GyA|YH!Yr zA99DOz}jrwsUvLONCC3wd5h#5h+X6kH3+@5aH;s!?h=F-y3%P>=HL$Ym+4e1T?j1P z(ucR;X6|rj?vEXqq=$_HP|ciuz)UsETk*R*BsRbv zItX=W7DS?9NWl7N2oi&4Kto?RfbSG=e&y6P%S!+NQ=WzVh0DYTZf|&k5l99L9NZX~ z7mmll31*PG_YO&M8UL_2B|-yIbevRUZ14-WYXj^+HfZ9N1OxGo&%z@Ks6+084T-|x+TdqSKOzg@ zg2D5t#NZqc^9gVneqK~1Di3(_EL5bRoSZuR!w{(A7wS_x9?|aG;Ed;7p!@~o0gjli zrJYM)k2viT=CHKz1NW)MAW*%>N>_ZJ>7<yi^ysexv{6Q05$b2U8Oo2A8?}%HF?VACnA}eqf%`p*_;G*p;pV6}r z%Oe~`T=pnf^2DR1C`1#d8etS=@fpTqUL-o4d*LSxZkOA_a*jm3qz1RNxskz(3Gu zK7h&mPHs-8-qQ^boT5dYGVzJitYRs76|t47F1QVTov=ln2#>0shVg%Ln$=ajlGt)p z7u=7xwW_Bb92{DFYEBFdcm-vz<^u3SBW7C-7}(G1T^EGk;uJ@NUC<+-)}tNp{~d#{ zFw&^?;uK4W_Nt=cr2{>^MqdLII3}N2#^2L`nmcs4<0J=M#@~+M&47?FvW7j8Q-np7 z*eg5g9|w9yjo}rYR$xHjFh01P6o%sv_Ua-cH5uQ!$N4}Z9E|^R@;ET)6VR|I(=(_K zF~ERbJJ!nZ1qGNG?-d>o<1%i=-*&ye*CG_6Q?SZ7c?}iyDt}p%@vA&gXy7<23&74$ zI3Va0Ivs4$j2$@;#C%x{U!4rOZ1hSalyELnh=%#)BLoawCe9pA4#8gSi)8%&FT$WR z2fCNZ;0!~c*PegNWc+pe>tpRD5YS?gGH)hp_lmzQyE)b(Wj1s60T7S?nl0?*oEYvq zG{ca=gNSEiFMkmLSmt3`F2gruP~cUEBH3DH9=hbH{=_VDVG%^|^`UNv#7&}@x#c5- z`g5mOAHj)Xb|c-+f*BFdq&~_}f0Y^_EXWbEi@fp!Wv^9wKR~Fy2YZ`$^j<`xQ8w+c z*hh=@dJxs#iF3$>apF1g1J~}gejLW=ao<_B|q4s|A4tpgT zwu*jp$-LPsOaGWe)n3;>V*=0%M58~~@AF=w0QAy5YHtEpl!p+V7W4~`i4N)8HG}F7 zC$ACDspVOO6#E>65|Iu5pSZ@ogt`;+WHBy^5T85%Uy=SBP2EK&VicRSoGTBo)uM!d z%A@YCPp2_h1fMv#^8mPpi_)nLG}N6dOV~3-J9Om1D0mc^!k+0;cO}1!VqRgd6rtB= z<-r{TL|);nk^rXeN_-l|eR$hMu<3IVwne_&?GnJ%U2*pVgc&&~>X#2NC9)s~-%)p6 zoG_D^ei01h0}P2Kar6(V?1oI@G9W^G^I>bzT(bo|5I*DDB2M}n| zm{~Iyt*JXPZVh?a;9nx7IuD>iWP^Xk=JOQl4m%l_tc<@VLY9Jl0bLR8*~K_wP~9;J z$O6!FL=D*Z`qdjm{^;54Oyyr{VlO2!L|ea4O#I|;)t)OEqdVE=`n@RI-lg`UCl(9V ziT-KP?u|Ctq~f8P+7oS$1J;VaBZ9w;wOeR?QNd2e0V~uVEBn|jGb8(ntX(^ZF!9?( z>XxDEi%g|9lnj<%)2*dVmWnkvlBxdaNi!ZAL9{-|>xN3-B#M~0#DYEQ4-4J4tE|{F zB7-{J&{`A!DGb#gdnao&=aapFO{W<`JHITe=KOaU0FAkqLYhLf5ZO|it!3hS=T=BF zAb_=7(f^6;tq#2!t1>J0w64{Z4k5rKK%|ex6f%22tpKqmzxy2qLSyobhAFU?Y#26^ zR@ih)$P`$2lp6+E!**0;S_!bP1TIc=Jv_Azy zdfw3GjrGjopSth277Y^Yoh0;bI)#X)>9Torks$Og?=Vnm^;x0<&WeK>;X4eV zqFlq|uc`2xkhnLp)`CRcWKO-pUR%{>m=q9UM$hfeZp9u_u?S6jW^2!%qd7ga`*vxo z=(GYenErN3v1kt!v#YTMvxF^twYl|t^S2DBSmd!=mit~hR{QRath~`<2XlLG?lll9 zOe;|vY0_GuyRj1OpCc0iPn=Je=2kaFYgvh#HZl)`tI@nw&Vrn9WLA3s&)D?UAE=q@ zbsHY@jKLuLVi)bwHmS>uD>FEGp=Y`d0w*{&=UaBsE^RIbS`44?uK8|sW+kkmuJ!cP zQF~aA<~(Wy-+ti;8-~9fFN0xG)Xc2)dmzVv(h%@W^?hqJ_fbFD0vUAio(VG)x~Uz^ zhC@4;)sw;p0k-+&qbxq zPwy8ZW-!J}`>YS{0q7-r&1eI1d2HXGp{x^9hjiWsEr+!I4S$x#8~UwJ!aK;IjBhnI zRyi-uIz0qrQ1=RZV~c&u7>*3i_+mAyNqw5Ak5yp3<1x~xj;Uo%P%Z{*ci4i`91bMrMk4E87ixG){c(R>GbaW*LMe`q?-q`7pY z^67t*3mNz&APz5N)25yz!%-&o+Veuo#wM-hqm@921XOPc<`fifg$-06y)s07`juH& z0{@sH>Qjd;pZ+JkC79DtxL&AxtQg`fYK571M1gf7%Tq8mxxC4~WPIU8!JLXH0Z0PU zvepCIZBna_2tY4C9a5g&BQ38^F^Ou-Nr`!0JX8Ye^5z&lWya!Cum*c`HU*-$H>UM;Aa>h3 zyiLiN{in`&YU8rfRgu~ub*3Ols)k4aPlpg;+@ zIYUu%M{co3VY?3HNfIEhXufZnI&J6nzTEP?yAk@WPeNbymOsA5zGbXxPEdtx+Q>pS uZR%69zf=0hBx-2LoUAB><}sG(@n`~(t>*v2|Aqex{}=u*{9pKgl_>#n?3G*q literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..716d0253d6bc63e70a60c2c69caa3e43ddd05055 GIT binary patch literal 5814 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%0A}N30AW$t=@uEydj8l2Zsj2 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 W2mTNIANW7;f8hVX|AGGx$Q%IEcET$F literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..ece9e960711d20f393c2be8cdfbbb18434775baa GIT binary patch literal 8068 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⁣&OLjizD3-W#~1y5RFgdElD>#&?R)27dsP> z4P|{~qFk7e+|TXI)Rz-IP<$3=^-zKT`c;+STWgw9`t=8JR_|S%f?YE^xqZl*zALek z>GAw-d2I1?qT4?~j{54-*+QnIX-Y8Pw$N~9!KHIYeS7F`;`G#5c{e|v_F=`F>@#?{ zS=g)2ZL*7A*$=($kZZ|p*tM(TVsHpWE8@~gsxZ!39-4a}09T8fbJe{90lIJudUA)D zNwz7uH$S&oPb9jRhGzeyIPI6K9n3~bScA5ReKlN)oOdNhem%uwcN2;F=G^>VlI@bj zuQUKjy;fP>->A;b)CnjoC%T7WH8@42*M6nhwG1r5W03vGa}MKJ?SoTt7&hI+@-NnB z=BgXX)k;mbIV%aI&my_ETi)(W!A1AO1}4vuA7rh%9dsc=7r?M2{c6oQtcf}4#EeiSQ*rs!#Qq5d z6bd9tnYD%IJ^N(_r@0^D2ch3(nfm6$WHevkUrB4x3XL~5s^#s?`Y$G6>D2G`!f(hG z486T{OgFifshr)-!mpn^KXcVmspR8ZDwQ&s$geNB3wDE#c84#q(+mIKJppTpU#yR9 zm#Z6%@lcCzCAEdw&ZeO}2Z@=^RChU%=yp#Wg!YH^ZIMG$IP6;Pg7p61_K%(I%C;+e zR2@+{b=#S{&aQB`uG#xIa#qRA-Zts|bGCP1^K6guga@H>qT5X*mb+7(8OY?IKAmlw zzAFhXRE|8A%x_c)2+pl6brz=*FuE{Ko#=terJ;QQriWpDG>%8(d=##qb)#?fcR%t2 zzjWeM7e)fc)M968Wp1askx!;LdR53u3eSO19%G3@V=oFz+cTT-#l;hcp_J$*{6;tN zA}1CX-7xzf+#rUYQwNiq~OG!KlNCFOAKt zY)_PT=67?`jly^{9fk~_el#HTb~c<2rM8ld{9Z1)Tb-ZWDVNK0Frd@UpDb*RuQo%KR<;)7)OeWD zgW!}n(sr$u4YyjAbUMU|bh^@Ng|oFF- literal 0 HcmV?d00001 From 078773e180c700eec3ebc64c91b31158dd6e7b54 Mon Sep 17 00:00:00 2001 From: Tanuj Date: Mon, 17 Feb 2025 15:08:01 +0530 Subject: [PATCH 081/150] Increased app drawer search bar max length to 200 --- app/src/main/res/values-night/styles.xml | 2 +- app/src/main/res/values/styles.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 27e00aa49..250a22a44 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -51,7 +51,7 @@