From 9ce4382b345e7fa18ce8258e2b09cdc54dce6827 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 15 Dec 2022 16:51:00 -0800 Subject: [PATCH 1/9] Removing some unused container IDs Bug: 260012466 Test: Presubmit Change-Id: I3d6cff0e5b31928ba8e27ac02c0d1f63156d1bfb --- src/com/android/launcher3/LauncherSettings.java | 4 ---- .../android/launcher3/model/data/ItemInfo.java | 16 ++++++---------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index 4c8f2d9378..ce1af4029a 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -207,12 +207,9 @@ public class LauncherSettings { public static final int CONTAINER_BOTTOM_WIDGETS_TRAY = -112; public static final int CONTAINER_PIN_WIDGETS = -113; public static final int CONTAINER_WALLPAPERS = -114; - // Represents search results view. - public static final int CONTAINER_SEARCH_RESULTS = -106; public static final int CONTAINER_SHORTCUTS = -107; public static final int CONTAINER_SETTINGS = -108; public static final int CONTAINER_TASKSWITCHER = -109; - public static final int CONTAINER_QSB = -110; // Represents any of the extended containers implemented in non-AOSP variants. public static final int EXTENDED_CONTAINERS = -200; @@ -226,7 +223,6 @@ public class LauncherSettings { case CONTAINER_PREDICTION: return "prediction"; case CONTAINER_ALL_APPS: return "all_apps"; case CONTAINER_WIDGETS_TRAY: return "widgets_tray"; - case CONTAINER_SEARCH_RESULTS: return "search_result"; case CONTAINER_SHORTCUTS: return "shortcuts"; default: return String.valueOf(container); } diff --git a/src/com/android/launcher3/model/data/ItemInfo.java b/src/com/android/launcher3/model/data/ItemInfo.java index 159af60a0f..2dd44a4000 100644 --- a/src/com/android/launcher3/model/data/ItemInfo.java +++ b/src/com/android/launcher3/model/data/ItemInfo.java @@ -21,7 +21,6 @@ import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_DESKTOP import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_PREDICTION; -import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_SEARCH_RESULTS; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_SETTINGS; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_SHORTCUTS; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_TASKSWITCHER; @@ -54,7 +53,6 @@ import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.logger.LauncherAtom.AllAppsContainer; import com.android.launcher3.logger.LauncherAtom.ContainerInfo; import com.android.launcher3.logger.LauncherAtom.PredictionContainer; -import com.android.launcher3.logger.LauncherAtom.SearchResultContainer; import com.android.launcher3.logger.LauncherAtom.SettingsContainer; import com.android.launcher3.logger.LauncherAtom.Shortcut; import com.android.launcher3.logger.LauncherAtom.ShortcutsContainer; @@ -439,10 +437,6 @@ public class ItemInfo { return ContainerInfo.newBuilder() .setPredictionContainer(PredictionContainer.getDefaultInstance()) .build(); - case CONTAINER_SEARCH_RESULTS: - return ContainerInfo.newBuilder() - .setSearchResultContainer(SearchResultContainer.getDefaultInstance()) - .build(); case CONTAINER_SHORTCUTS: return ContainerInfo.newBuilder() .setShortcutsContainer(ShortcutsContainer.getDefaultInstance()) @@ -459,10 +453,12 @@ public class ItemInfo { return ContainerInfo.newBuilder() .setWallpapersContainer(WallpapersContainer.getDefaultInstance()) .build(); - case EXTENDED_CONTAINERS: - return ContainerInfo.newBuilder() - .setExtendedContainers(getExtendedContainer()) - .build(); + default: + if (container <= EXTENDED_CONTAINERS) { + return ContainerInfo.newBuilder() + .setExtendedContainers(getExtendedContainer()) + .build(); + } } return ContainerInfo.getDefaultInstance(); } From 10d62429ab29e889f572e49acdb489ea6cb0c037 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 19 Dec 2022 01:42:12 -0800 Subject: [PATCH 2/9] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I29e6fce19e6e759d5d837d28c77a1adb282588eb --- quickstep/res/values-as/strings.xml | 9 +++------ quickstep/res/values-be/strings.xml | 9 +++------ quickstep/res/values-bs/strings.xml | 6 +++--- quickstep/res/values-cs/strings.xml | 9 +++------ quickstep/res/values-eu/strings.xml | 9 +++------ quickstep/res/values-fa/strings.xml | 9 +++------ quickstep/res/values-fi/strings.xml | 9 +++------ quickstep/res/values-fr/strings.xml | 9 +++------ quickstep/res/values-gl/strings.xml | 9 +++------ quickstep/res/values-hi/strings.xml | 9 +++------ quickstep/res/values-it/strings.xml | 9 +++------ quickstep/res/values-kk/strings.xml | 9 +++------ quickstep/res/values-km/strings.xml | 9 +++------ quickstep/res/values-kn/strings.xml | 9 +++------ quickstep/res/values-ky/strings.xml | 9 +++------ quickstep/res/values-lv/strings.xml | 9 +++------ quickstep/res/values-or/strings.xml | 9 +++------ quickstep/res/values-pa/strings.xml | 9 +++------ quickstep/res/values-pt-rPT/strings.xml | 9 +++------ quickstep/res/values-sk/strings.xml | 9 +++------ quickstep/res/values-sq/strings.xml | 9 +++------ quickstep/res/values-sv/strings.xml | 9 +++------ quickstep/res/values-sw/strings.xml | 9 +++------ quickstep/res/values-ta/strings.xml | 9 +++------ quickstep/res/values-uk/strings.xml | 9 +++------ quickstep/res/values-zu/strings.xml | 9 +++------ 26 files changed, 78 insertions(+), 153 deletions(-) diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml index 7747148638..6e43c19aaf 100644 --- a/quickstep/res/values-as/strings.xml +++ b/quickstep/res/values-as/strings.xml @@ -95,12 +95,9 @@ "টাস্কবাৰৰ শিক্ষা" "টাস্কবাৰৰ শিক্ষাৰ পেনেলটো প্ৰদর্শিত হৈছে" "টাস্কবাৰৰ শিক্ষাৰ পেনেলটো বন্ধ হৈছে" - - - - - - + "এবাৰতে দুটা এপ্‌ ব্যৱহাৰ কৰিবলৈ কাষলৈ টানি আনি এৰক" + "টাস্কবাৰ দেখুৱাবলৈ সামান্য পৰিমাণে ওপৰলৈ ছোৱাইপ কৰক" + "টাস্কবাৰে আপোনাৰ ৰুটিনৰ ভিত্তিত এপৰ পৰামৰ্শ দিয়ে" "পৰৱৰ্তী" "উভতি যাওক" "বন্ধ কৰক" diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml index 8f97f0a24b..0f38c75f3e 100644 --- a/quickstep/res/values-be/strings.xml +++ b/quickstep/res/values-be/strings.xml @@ -95,12 +95,9 @@ "Інфармацыя пра панэль задач" "З\'явілася панэль навучання на панэлі задач" "Панэль навучання на панэлі задач закрыта" - - - - - - + "Перацягніце ўбок, каб адначасова скарыстаць 2 праграмы" + "Хутка правядзіце пальцам уверх, каб убачыць панэль задач" + "На панэлі задач праграмы паказваюцца з улікам вашых дзеянняў" "Далей" "Назад" "Закрыць" diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml index 8b1640d4ff..f0118a72c1 100644 --- a/quickstep/res/values-bs/strings.xml +++ b/quickstep/res/values-bs/strings.xml @@ -95,9 +95,9 @@ "Edukacija o traci zadataka" "Edukacija o programskoj traci je prikazana" "Edukacija o programskoj traci je zatvorena" - "Povucite u stranu za istovremeno korištenje 2 aplikacije" - "Kratki pokret prema gore za prikaz trake sa zadacima" - "Traka sa zadacima predlaže aplikacije na temelju vaše rutine" + "Prevucite u stranu da istovremeno koristite 2 aplikacije" + "Nakratko prevucite nagore da prikažete traku zadataka" + "Traka zadataka predlaže aplikacije na osnovu vaše rutine" "Naprijed" "Nazad" "Zatvori" diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index 1eeadba9d1..868393d343 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -95,12 +95,9 @@ "Informace o panelu aplikací" "Zobrazila se výuka k hlavnímu panelu" "Výuka k hlavnímu panelu byla zavřena" - - - - - - + "Po přetažení na stranu lze používat dvě aplikace současně" + "Krátkým přejetím nahoru zobrazíte panel aplikací" + "Panel aplikací navrhuje aplikace na základě vašeho používání" "Další" "Zpět" "Zavřít" diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml index 7eda4448c7..b302888a32 100644 --- a/quickstep/res/values-eu/strings.xml +++ b/quickstep/res/values-eu/strings.xml @@ -95,12 +95,9 @@ "Zereginen barra erabiltzeko argibideak" "Agertu egin da zereginen barraren tutoriala" "Itxi egin da zereginen barraren tutoriala" - - - - - - + "Bi aplikazio batera erabiltzeko, arrastatu hatza albo batera" + "Ataza-barra ikusteko, pasatu hatza bizkor gora" + "Ataza-barran erabileran oinarritutako aplikazioak iradokitzen dira" "Hurrengoa" "Atzera" "Itxi" diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index 6e13752856..c922f8063e 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -95,12 +95,9 @@ "آموزش نوار وظیفه" "پانل آموزشی نوار وظیفه نمایان شد" "پانل آموزشی نوار وظیفه بسته شد" - - - - - - + "برای استفاده هم‌زمان از دو برنامه، آن را به کنار بکشید" + "برای نمایش نوار وظیفه، کمی به بالا بکشید" + "نوار وظیفه برنامه‌ها را براساس روال شما پیشنهاد می‌دهد" "بعدی" "برگشت" "بستن" diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index 55db0e8c53..a07fdea641 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -95,12 +95,9 @@ "Tehtäväpalkin ohje" "Tehtäväpalkin ohje näkyvissä" "Tehtäväpalkin ohje suljettu" - - - - - - + "Vetämällä sivuun voit käyttää kahta sovellusta samaan aikaan" + "Näytä tehtäväpalkki pyyhkäisemällä ylös lyhyesti" + "Tehtäväpalkki ehdottaa sovelluksia ohjelmasi perusteella" "Seuraava" "Takaisin" "Sulje" diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml index 972e8e7485..a20fbc4992 100644 --- a/quickstep/res/values-fr/strings.xml +++ b/quickstep/res/values-fr/strings.xml @@ -95,12 +95,9 @@ "Fonctionnement de la barre des tâches" "Infos sur la barre des tâches affichées" "Infos sur la barre des tâches fermées" - - - - - - + "Faites glisser sur le côté pour utiliser 2 applis à la fois" + "Balayez rapidement vers haut pour afficher barre des tâches" + "La barre des tâches suggère des applis selon vos habitudes" "Suivant" "Retour" "Fermer" diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml index 38b09d56a7..528dd0ad42 100644 --- a/quickstep/res/values-gl/strings.xml +++ b/quickstep/res/values-gl/strings.xml @@ -95,12 +95,9 @@ "Información sobre a función Barra de tarefas" "Panel de información de barra de tarefas aberto" "Panel de información de barra de tarefas pechado" - - - - - - + "Para usar 2 aplicacións á vez, arrastra cara ao lado" + "Pasa o dedo un pouco cara arriba para ver a barra de tarefas" + "Na barra de tarefas suxírense apps segundo a túa rutina" "Seguinte" "Atrás" "Pechar" diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml index 1e79961e4c..c9f3930eff 100644 --- a/quickstep/res/values-hi/strings.xml +++ b/quickstep/res/values-hi/strings.xml @@ -95,12 +95,9 @@ "टास्कबार का ट्यूटोरियल" "टास्कबार ट्यूटोरियल दिखाया गया" "टास्कबार ट्यूटोरियल बंद किया गया" - - - - - - + "एक साथ दो ऐप इस्तेमाल करने के लिए, उन्हें किनारे की ओर खींचें और छोड़ें" + "टास्कबार दिखाने के लिए, ऊपर की ओर थोड़ा स्वाइप करें" + "टास्कबार, डिवाइस के इस्तेमाल के आधार पर ऐप के सुझाव देता है" "आगे बढ़ें" "वापस जाएं" "बंद करें" diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index 54a76aef03..9a5cc9845a 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -95,12 +95,9 @@ "Informazioni sulla barra delle applicazioni" "Riquadro Formazione barra delle applicazioni visualizzato" "Riquadro Formazione barra delle applicazioni chiuso" - - - - - - + "Trascina di lato per usare 2 app contemporaneamente" + "Scorri verso l\'alto per mostrare la barra delle applicazioni" + "Barra delle applicazioni suggerisce app in base alla routine" "Avanti" "Indietro" "Chiudi" diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index 593c6fc939..d0f6a9a9b0 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -95,12 +95,9 @@ "Тапсырмалар жолағы: үйрену" "Тапсырмалар тақтасы бойынша нұсқаулық ашылды." "Тапсырмалар тақтасы бойынша нұсқаулық жабылды." - - - - - - + "Екі қолданбаны бір уақытта пайдалану үшін шетке сүйреңіз." + "Тапсырмалар жолағын көру үшін жоғары қарай тез сырғытыңыз." + "Тапсырмалар жолағындағы ұсыныстар әдеттеріңізге негізделеді." "Келесі" "Артқа" "Жабу" diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml index 04e34396eb..f9a7209b8d 100644 --- a/quickstep/res/values-km/strings.xml +++ b/quickstep/res/values-km/strings.xml @@ -95,12 +95,9 @@ "ការអប់រំលើរបារកិច្ចការ" "ការបង្រៀនអំពីរបារកិច្ចការបានបង្ហាញ" "ការបង្រៀនអំពីរបារកិច្ចការត្រូវបានបិទ" - - - - - - + "អូស​ទៅចំហៀង ដើម្បីប្រើ​កម្មវិធី 2 ក្នុងពេលតែមួយ" + "អូសឡើងលើបន្តិច ដើម្បីបង្ហាញរបារកិច្ចការ" + "របារកិច្ចការនេះណែនាំកម្មវិធីផ្អែកលើទម្លាប់របស់អ្នក" "បន្ទាប់" "ថយក្រោយ" "បិទ" diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 4ec4ce6b45..b7c774ae72 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -95,12 +95,9 @@ "ಟಾಸ್ಕ್‌ಬಾರ್ ಶಿಕ್ಷಣ" "ಟಾಸ್ಕ್‌ಬಾರ್ ಶಿಕ್ಷಣ ಕಾಣಿಸಿಕೊಂಡಿದೆ" "ಟಾಸ್ಕ್‌ಬಾರ್ ಶಿಕ್ಷಣ ಮುಚ್ಚಿದೆ" - - - - - - + "ಏಕಕಾಲದಲ್ಲಿ 2 ಆ್ಯಪ್‌ಗಳನ್ನು ಬಳಸಲು ಬದಿಗೆ ಡ್ರ್ಯಾಗ್ ಮಾಡಿ" + "ಟಾಸ್ಕ್‌ಬಾರ್ ಅನ್ನು ತೋರಿಸಲು ಚಿಕ್ಕದಾಗಿ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ" + "ಟಾಸ್ಕ್‌ಬಾರ್ ನಿಮ್ಮ ದಿನಚರಿ ಆಧರಿಸಿ ಆ್ಯಪ್‌ಗಳನ್ನು ಸೂಚಿಸುತ್ತದೆ" "ಮುಂದೆ" "ಹಿಂದೆ" "ಮುಚ್ಚಿರಿ" diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index 9e9968530a..55e5a11872 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -95,12 +95,9 @@ "Тапшырмалар панели жөнүндө маалымат" "Тапшырмалар тактасынын окутуу панели көрсөтүлдү" "Тапшырмалар тактасынын окутуу панели жабылды" - - - - - - + "2 колдонмону бир убакта пайдалануу үчүн капталга сүйрөңүз" + "Тапшырмалар тактасын көрүү үчүн экранды өйдө серпиңиз" + "Тапшырмалар тактасы колдонмолорду аракеттериңизге жараша сунуштайт" "Кийинки" "Артка" "Жабуу" diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml index 5036588268..da911c1378 100644 --- a/quickstep/res/values-lv/strings.xml +++ b/quickstep/res/values-lv/strings.xml @@ -95,12 +95,9 @@ "Informācija par uzdevumu joslu" "Tika atvērta uzdevumjoslas apmācība" "Tika aizvērta uzdevumjoslas apmācība" - - - - - - + "Velciet uz malu, lai izmantotu divas lietotnes vienlaikus" + "Īsi velciet augšup, lai skatītu uzdevumu joslu" + "Uzdevumu joslā tiek rādītas lietotnes, ņemot vērā lietojumu" "Tālāk" "Atpakaļ" "Aizvērt" diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index 0b7e0cc626..2f0614c002 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -95,12 +95,9 @@ "ଟାସ୍କବାର ଶିକ୍ଷା" "ଟାସ୍କବାର୍ ଶିକ୍ଷା ଦେଖାଯାଇଛି" "ଟାସ୍କବାର୍ ଶିକ୍ଷା ବନ୍ଦ ହୋଇଯାଇଛି" - - - - - - + "ଥରକେ 2ଟି ଆପ୍ସ ବ୍ୟବହାର କରିବା ପାଇଁ ପାର୍ଶ୍ୱକୁ ଡ୍ରାଗ କରନ୍ତୁ" + "ଟାସ୍କବାର ଦେଖାଇବା ପାଇଁ ଉପରକୁ ଅଳ୍ପ ସମୟ ସ୍ୱାଇପ କରନ୍ତୁ" + "ଟାସ୍କବାର ଆପଣଙ୍କ ରୁଟିନ ଆଧାରରେ ଆପ୍ସ ପରାମର୍ଶ ଦିଏ" "ପରବର୍ତ୍ତୀ" "ପଛକୁ ଫେରନ୍ତୁ" "ବନ୍ଦ କରନ୍ତୁ" diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml index 0d9a565ef2..dc9d78e571 100644 --- a/quickstep/res/values-pa/strings.xml +++ b/quickstep/res/values-pa/strings.xml @@ -95,12 +95,9 @@ "ਟਾਸਕਬਾਰ ਸਿੱਖਿਆ" "ਟਾਸਕਵਾਰ ਸਿੱਖਿਆ ਪੈਨਲ ਦਿਖਾਇਆ ਗਿਆ" "ਟਾਸਕਵਾਰ ਸਿੱਖਿਆ ਪੈਨਲ ਬੰਦ ਕੀਤਾ ਗਿਆ" - - - - - - + "ਇੱਕ ਵਾਰ ਵਿੱਚ 2 ਐਪਾਂ ਵਰਤਣ ਲਈ ਉਨ੍ਹਾਂ ਨੂੰ ਸਾਈਡ ਵੱਲ ਘਸੀਟੋ" + "ਟਾਸਕਬਾਰ ਦਿਖਾਉਣ ਲਈ ਥੋੜ੍ਹਾ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ" + "ਟਾਸਕਬਾਰ ਤੁਹਾਡੇ ਨਿਯਮਬੱਧ ਕੰਮ ਮੁਤਾਬਕ ਐਪਾਂ ਦਾ ਸੁਝਾਅ ਦਿੰਦਾ ਹੈ" "ਅੱਗੇ" "ਪਿੱਛੇ" "ਬੰਦ ਕਰੋ" diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index c327df9e4f..b663528b07 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -95,12 +95,9 @@ "Educação da Barra de tarefas" "Informação da barra de tarefas apresentada" "Informação da barra de tarefas fechada" - - - - - - + "Arraste para o lado para usar duas apps em simultâneo" + "Deslize rápido curto para cima para ver a barra de tarefas" + "A barra de tarefas sugere apps baseadas na sua rotina" "Seguinte" "Anterior" "Fechar" diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml index e29c166a71..573c17b168 100644 --- a/quickstep/res/values-sk/strings.xml +++ b/quickstep/res/values-sk/strings.xml @@ -95,12 +95,9 @@ "Panel vzdelávacích aplikácií" "Zobrazila sa výuka k hlavnému panelu" "Výuka k hlavnému panelu bola zatvorená" - - - - - - + "Po presunutí na stranu je možné používať dve aplikácie naraz" + "Krátkym potiahnutím nahor zobrazíte panel aplikácií" + "Panel aplikácií navrhuje aplikácie na základe vašich zvykov" "Ďalej" "Späť" "Zavrieť" diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml index d96141086b..d73aa4836d 100644 --- a/quickstep/res/values-sq/strings.xml +++ b/quickstep/res/values-sq/strings.xml @@ -95,12 +95,9 @@ "Edukimi për shiritin e detyrave" "Edukimi i shiritit të detyrave u shfaq" "Edukimi nga shiriti i detyrave u mbyll" - - - - - - + "Zvarrit në anë për të përdorur 2 aplikacione njëherësh" + "Kryej një rrëshqitje të shkurtër lart për të shfaqur shiritin e detyrave" + "Shiriti i detyrave sugjeron aplikacione bazuar në rutinën tënde" "Para" "Pas" "Mbyll" diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index 900b3a1d2e..bab195241c 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -95,12 +95,9 @@ "Aktivitetsfältsutbildning" "Information om aktivitetsfältet visades" "Information om aktivitetsfältet stängdes" - - - - - - + "Dra till sidan om du vill använda två appar samtidigt" + "Svep en kort bit uppåt för att visa aktivitetsfältet" + "I aktivitetsfältet visas förslag på appar utifrån din rutin" "Nästa" "Tillbaka" "Stäng" diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml index 7961110381..f0990b3a27 100644 --- a/quickstep/res/values-sw/strings.xml +++ b/quickstep/res/values-sw/strings.xml @@ -95,12 +95,9 @@ "Elimu ya Upauzana" "Paneli ya elimu kwenye upau wa shughuli inaonyeshwa" "Paneli ya elimu kwenye upau wa shughuli imefungwa" - - - - - - + "Buruta pembeni ili utumie programu 2 kwa wakati mmoja" + "Telezesha kidole juu ili uonyeshe upauzana" + "Upauzana hupendekeza programu kulingana na ratiba yako" "Endelea" "Nyuma" "Funga" diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index 0b916b0da0..1db0fab7d9 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -95,12 +95,9 @@ "செயல் பட்டியைப் பயன்படுத்தும் விதம்" "பணிப்பட்டியை எவ்வாறு பயன்படுத்துவது என்பது பற்றிய பலகம் காட்டப்படுகிறது" "பணிப்பட்டியை எவ்வாறு பயன்படுத்துவது என்பது பற்றிய பலகம் மூடப்பட்டது" - - - - - - + "ஒரே நேரத்தில் 2 ஆப்ஸை உபயோகிக்க பக்கவாட்டிற்கு இழுக்கவும்" + "செயல் பட்டியைக் காட்டுவதற்கு மேலே சிறிது ஸ்வைப் செய்யவும்" + "உங்கள் வழக்கத்திற்கேற்ப ஆப்ஸை செயல் பட்டி பரிந்துரைக்கும்" "அடுத்து" "பின்செல்" "மூடுக" diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml index 2e444a94d1..b426c8baec 100644 --- a/quickstep/res/values-uk/strings.xml +++ b/quickstep/res/values-uk/strings.xml @@ -95,12 +95,9 @@ "Панель завдань Education" "Панель завдань Education відкрито" "Панель завдань Education закрито" - - - - - - + "Перетягніть убік, щоб використовувати 2 додатки одночасно" + "Швидко проведіть пальцем угору, щоб відкрити панель завдань" + "Панель завдань пропонує додатки на основі вашої програми" "Далі" "Назад" "Закрити" diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml index 06dc488515..0a7e418d81 100644 --- a/quickstep/res/values-zu/strings.xml +++ b/quickstep/res/values-zu/strings.xml @@ -95,12 +95,9 @@ "Imfundo ye-taskbar" "Imfuno yebha yomsebenzi ivelile" "Imfundo yebha yomsebenzi ivaliwe" - - - - - - + "Hudula ngaseceleni ukuze usebenzise ama-app angu-2 ngesikhathi esisodwa" + "Swayiphela phezulu okufushane ukuze ubonise i-taskbar" + "I-taskbar iphakamisa ama-app ezisuselwe kumjikelezo wakho" "Okulandelayo" "Emuva" "Vala" From bd535c46d758b502f68329e4664045d653bfe9b4 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Mon, 19 Dec 2022 17:14:18 +0000 Subject: [PATCH 3/9] Only skip stash animation when going to/from Launcher - Added a cehck on chagnedFlags before skipping stash animation, in additional to !isHotseatIconOnTopWhenAligned check Fix: 262835548 Test: manual Change-Id: I5a90213bc0b3f34609a074ba887adbf113e04120 --- .../taskbar/TaskbarStashController.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 95337ce77d..29b8ee3b5d 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -492,7 +492,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba /* isStashed= */ false, placeholderDuration, /* startDelay= */ 0, - /* animateBg= */ false); + /* animateBg= */ false, + /* changedFlags=*/ 0); animation.play(mAnimator); } @@ -503,8 +504,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba * @param startDelay how many milliseconds to delay the animation after starting it. * @param animateBg whether the taskbar's background should be animated */ - private void createAnimToIsStashed( - boolean isStashed, long duration, long startDelay, boolean animateBg) { + private void createAnimToIsStashed(boolean isStashed, long duration, long startDelay, + boolean animateBg, int changedFlags) { if (mAnimator != null) { mAnimator.cancel(); } @@ -542,8 +543,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba final float firstHalfDurationScale; final float secondHalfDurationScale; - boolean isHotseatIconOnTopWhenAligned = - mControllers.uiController.isHotseatIconOnTopWhenAligned(); + // If Hotseat is not the top element during animation to/from Launcher, fade in/out a + // already stashed Taskbar. + boolean skipStashAnimation = !mControllers.uiController.isHotseatIconOnTopWhenAligned() + && hasAnyFlag(changedFlags, FLAG_IN_APP); if (isStashed) { firstHalfDurationScale = 0.75f; secondHalfDurationScale = 0.5f; @@ -565,8 +568,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba mTaskbarStashedHandleAlpha.animateToValue(1) ); - // If Hotseat is not the top element, an already stashed Taskbar should fade in. - if (!isHotseatIconOnTopWhenAligned) { + if (skipStashAnimation) { fullLengthAnimatorSet.setInterpolator(INSTANT); firstHalfAnimatorSet.setInterpolator(INSTANT); } @@ -591,9 +593,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba mIconAlphaForStash.animateToValue(1) ); - // If Hotseat is not the top element, the stashed Taskbar should fade out without - // unstashing. - if (!isHotseatIconOnTopWhenAligned) { + if (skipStashAnimation) { fullLengthAnimatorSet.setInterpolator(FINAL_FRAME); secondHalfAnimatorSet.setInterpolator(FINAL_FRAME); } @@ -986,7 +986,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba mIsHotseatIconOnTopWhenAligned = isHotseatIconOnTopWhenAligned; // This sets mAnimator. - createAnimToIsStashed(mIsStashed, duration, startDelay, /* animateBg= */ true); + createAnimToIsStashed( + mIsStashed, duration, startDelay, /* animateBg= */ true, changedFlags); if (start) { mAnimator.start(); } From 1b276a1ba791a7c1f0a305a456335397e8dff62f Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Mon, 19 Dec 2022 14:01:36 +0000 Subject: [PATCH 4/9] Add transientTaskbarMargin above taskbar in overview - Also removed transient_taskbar_two_panels_size and use sw720dp override instead, to be consistent with how we handle small vs large tablet in overview - Also made isTransientTaskbar mockable so we can test that in DeviceProfileDumpTest Bug: 260596114 Test: DeviceProfileDumpTest Change-Id: I3c2236b95d91246e9581531478e3c97601cfb2ec --- quickstep/res/values-sw720dp/dimens.xml | 3 +++ quickstep/res/values/dimens.xml | 3 +-- .../launcher3/taskbar/TaskbarActivityContext.java | 8 ++------ .../launcher3/taskbar/TaskbarStashController.java | 4 +--- res/values-sw720dp/dimens.xml | 3 +++ res/values/dimens.xml | 4 +--- src/com/android/launcher3/DeviceProfile.java | 8 ++++---- src/com/android/launcher3/util/DisplayController.java | 9 ++++++++- 8 files changed, 23 insertions(+), 19 deletions(-) diff --git a/quickstep/res/values-sw720dp/dimens.xml b/quickstep/res/values-sw720dp/dimens.xml index 585f01e46a..28f7c5d0de 100644 --- a/quickstep/res/values-sw720dp/dimens.xml +++ b/quickstep/res/values-sw720dp/dimens.xml @@ -37,4 +37,7 @@ 42sp 16sp + + + 76dp diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 7a3c35f439..ad77768263 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -281,8 +281,7 @@ 32dp - 76dp - 72dp + 72dp 24dp 40dp 10dp diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 6d745268cc..731eea78e9 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -284,9 +284,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { private void updateIconSize(Resources resources) { mDeviceProfile.iconSizePx = resources.getDimensionPixelSize( DisplayController.isTransientTaskbar(this) - ? mDeviceProfile.isTwoPanels - ? R.dimen.transient_taskbar_two_panels_icon_size - : R.dimen.transient_taskbar_icon_size + ? R.dimen.transient_taskbar_icon_size : R.dimen.taskbar_icon_size); mDeviceProfile.updateIconSize(1f, resources); } @@ -694,9 +692,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } if (DisplayController.isTransientTaskbar(this)) { - int taskbarSize = resources.getDimensionPixelSize(mDeviceProfile.isTwoPanels - ? R.dimen.transient_taskbar_two_panels_size - : R.dimen.transient_taskbar_size); + int taskbarSize = resources.getDimensionPixelSize(R.dimen.transient_taskbar_size); return taskbarSize + (2 * resources.getDimensionPixelSize(R.dimen.transient_taskbar_margin)) + resources.getDimensionPixelSize(R.dimen.transient_taskbar_shadow_blur); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 95337ce77d..3ff39645ec 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -202,9 +202,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba Resources resources = mActivity.getResources(); boolean isTransientTaskbar = DisplayController.isTransientTaskbar(mActivity); mUnstashedHeight = resources.getDimensionPixelSize(isTransientTaskbar - ? (mActivity.getDeviceProfile().isTwoPanels - ? R.dimen.transient_taskbar_two_panels_size - : R.dimen.transient_taskbar_size) + ? R.dimen.transient_taskbar_size : R.dimen.taskbar_size); mStashedHeight = resources.getDimensionPixelSize(isTransientTaskbar ? R.dimen.transient_taskbar_stashed_size diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml index 09b2d6f83f..40e49f1545 100644 --- a/res/values-sw720dp/dimens.xml +++ b/res/values-sw720dp/dimens.xml @@ -46,4 +46,7 @@ 24dp + + + 57dp diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 664c2f3d5f..d66c82496e 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -364,11 +364,9 @@ 50dp 0dp 44dp - 57dp - 50dp + 50dp 0dp - 0dp 0dp 0dp 0dp diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index b95b0af5b0..4a22f73bfe 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -325,9 +325,7 @@ public class DeviceProfile { if (isTaskbarPresent) { if (DisplayController.isTransientTaskbar(context)) { - taskbarSize = res.getDimensionPixelSize(isTwoPanels - ? R.dimen.transient_taskbar_two_panels_size - : R.dimen.transient_taskbar_size); + taskbarSize = res.getDimensionPixelSize(R.dimen.transient_taskbar_size); stashedTaskbarSize = res.getDimensionPixelSize(R.dimen.transient_taskbar_stashed_size); transientTaskbarMargin = @@ -1376,7 +1374,7 @@ public class DeviceProfile { public int getOverviewActionsClaimedSpaceBelow() { if (isTaskbarPresent) { if (FeatureFlags.ENABLE_TASKBAR_IN_OVERVIEW.get()) { - return taskbarSize + transientTaskbarMargin; + return taskbarSize + transientTaskbarMargin * 2; } return isGestureMode @@ -1647,6 +1645,8 @@ public class DeviceProfile { overviewActionsTopMarginPx)); writer.println(prefix + pxToDpStr("overviewActionsHeight", overviewActionsHeight)); + writer.println(prefix + pxToDpStr("overviewActionsClaimedSpaceBelow", + getOverviewActionsClaimedSpaceBelow())); writer.println(prefix + pxToDpStr("overviewActionsButtonSpacing", overviewActionsButtonSpacing)); writer.println(prefix + pxToDpStr("overviewPageSpacing", overviewPageSpacing)); diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java index 8e3daf33a4..c52890fd18 100644 --- a/src/com/android/launcher3/util/DisplayController.java +++ b/src/com/android/launcher3/util/DisplayController.java @@ -131,13 +131,20 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { * Returns whether taskbar is transient. */ public static boolean isTransientTaskbar(Context context) { + return INSTANCE.get(context).isTransientTaskbar(); + } + + /** + * Returns whether taskbar is transient. + */ + public boolean isTransientTaskbar() { // TODO(b/258604917): When running in test harness, use !sTransientTaskbarStatusForTests // once tests are updated to expect new persistent behavior such as not allowing long press // to stash. if (!Utilities.IS_RUNNING_IN_TEST_HARNESS && FORCE_PERSISTENT_TASKBAR.get()) { return false; } - return getNavigationMode(context) == NavigationMode.NO_BUTTON + return getInfo().navigationMode == NavigationMode.NO_BUTTON && (Utilities.IS_RUNNING_IN_TEST_HARNESS ? sTransientTaskbarStatusForTests : ENABLE_TRANSIENT_TASKBAR.get()); From b6c5feafde8cb02bf8aaf232a2dd3bb6fe231b37 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 19 Dec 2022 09:57:12 -0800 Subject: [PATCH 5/9] Fix IndexOutOfBoundsException in grid span lookup Bug: 262747378 Test: Presubmit Change-Id: I3ac4f0208874c0b7f41f6d02ee99db660dc04f23 --- src/com/android/launcher3/allapps/AllAppsGridAdapter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index 9933ffb060..63e6d13a5c 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -203,8 +203,12 @@ public class AllAppsGridAdapter extends @Override public int getSpanSize(int position) { - int viewType = mApps.getAdapterItems().get(position).viewType; int totalSpans = mGridLayoutMgr.getSpanCount(); + List items = mApps.getAdapterItems(); + if (position >= items.size()) { + return totalSpans; + } + int viewType = items.get(position).viewType; if (isIconViewType(viewType)) { return totalSpans / mAppsPerRow; } else { From d2706823cb91a72b2e57421cdd4669e23ee1a1b4 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Mon, 19 Dec 2022 18:36:14 +0000 Subject: [PATCH 6/9] Add logs to track app grid changes Bug: 258560494 Test: manual Change-Id: I2c44fbc2ce25b61df15853c4789bf0d6321793bb --- src/com/android/launcher3/InvariantDeviceProfile.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index ffe81ad2aa..a4020f9cab 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -206,6 +206,8 @@ public class InvariantDeviceProfile { if (!newGridName.equals(gridName)) { LauncherPrefs.getPrefs(context).edit().putString(KEY_IDP_GRID_NAME, newGridName) .apply(); + Log.d("b/258560494", "InvariantDeviceProfile - setting newGridName: " + newGridName + + ", gridName: " + gridName); } new DeviceGridState(this).writeToPrefs(context); @@ -453,6 +455,7 @@ public class InvariantDeviceProfile { public void setCurrentGrid(Context context, String gridName) { Context appContext = context.getApplicationContext(); LauncherPrefs.getPrefs(appContext).edit().putString(KEY_IDP_GRID_NAME, gridName).apply(); + Log.d("b/258560494", "setCurrentGrid: " + gridName); MAIN_EXECUTOR.execute(() -> onConfigChanged(appContext)); } @@ -517,6 +520,10 @@ public class InvariantDeviceProfile { } } if (filteredProfiles.isEmpty()) { + if (gridName != null) { + Log.d("b/258560494", "No matching grid from for gridName: " + gridName + + ", deviceType: " + deviceType); + } // No grid found, use the default options for (DisplayOption option : profiles) { if (option.canBeDefault) { From 746b2243f91ee66791f7de98121099bbb5a5a775 Mon Sep 17 00:00:00 2001 From: Brian Isganitis Date: Mon, 19 Dec 2022 20:47:21 +0000 Subject: [PATCH 7/9] Add flag for Taskbar education tooltip. Test: Manual Bug: 263157739 Change-Id: I1c427d250864db1b8dee58584d503908a0fd9c8d --- src/com/android/launcher3/config/FeatureFlags.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index ce637efa34..bb3b939550 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -369,6 +369,10 @@ public final class FeatureFlags { "Enable the ability to generate monochromatic icons, if it is not provided by the app" ); + public static final BooleanFlag ENABLE_TASKBAR_EDU_TOOLTIP = getDebugFlag( + "ENABLE_TASKBAR_EDU_TOOLTIP", false, + "Enable the tooltip version of the Taskbar education flow."); + public static void initialize(Context context) { synchronized (sDebugFlags) { for (DebugFlag flag : sDebugFlags) { From 0d4f1ac30e68d26037a1d98bf3cc324b5fddfba2 Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Tue, 20 Dec 2022 12:31:14 +0000 Subject: [PATCH 8/9] folderChild icon and text size should follow the respective configuration - Use mTypeIndex instead of always INDEX_LANDSCAPE or INDEX_DEFAULT to make sure they follow the workspcae icon/text size Fix: 262446829 Test: DeviceProfileDumpTest Change-Id: I9fc37b41114a34e35108330a8d599556bff77eef --- src/com/android/launcher3/DeviceProfile.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index b95b0af5b0..dba461b1e5 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -1050,12 +1050,9 @@ public class DeviceProfile { } private void updateFolderCellSize(float scale, Resources res) { - float invIconSizeDp = isVerticalBarLayout() - ? inv.iconSize[INDEX_LANDSCAPE] - : inv.iconSize[INDEX_DEFAULT]; + float invIconSizeDp = inv.iconSize[mTypeIndex]; folderChildIconSizePx = Math.max(1, pxFromDp(invIconSizeDp, mMetrics, scale)); - folderChildTextSizePx = - pxFromSp(inv.iconTextSize[INDEX_DEFAULT], mMetrics, scale); + folderChildTextSizePx = pxFromSp(inv.iconTextSize[mTypeIndex], mMetrics, scale); folderLabelTextSizePx = Math.max(pxFromSp(MIN_FOLDER_TEXT_SIZE_SP, mMetrics), (int) (folderChildTextSizePx * folderLabelTextScale)); From c03bb43fa525071aeff399aef8de72180a829eed Mon Sep 17 00:00:00 2001 From: Federico Baron Date: Mon, 5 Dec 2022 15:41:56 -0800 Subject: [PATCH 9/9] Improve restore icon treatment This is the first of a few CL's that change the way pending/downloading/installing apps look to follow the new mocks. In this CL we: -Fix a regression where the track path doesn't show up when downloading an app -Change the sizes of icons to reflect the new design mock -Add skeleton motion animation In upcoming CL's we will add visual polish and make sure it matches the motion spec exactly Bug: 254858049 Test: Download an app and check pending, downloading, and installing visuals Change-Id: Ief1038ea52d77874b4031db76d51a2787615a14d --- .../graphics/PreloadIconDrawable.java | 148 +++++++++++++++--- 1 file changed, 128 insertions(+), 20 deletions(-) diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java index 0eb86b1cb4..9a961ca300 100644 --- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java +++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java @@ -17,31 +17,41 @@ package com.android.launcher3.graphics; +import static com.android.launcher3.anim.Interpolators.LINEAR; +import static com.android.launcher3.config.FeatureFlags.ENABLE_DOWNLOAD_APP_UX_V2; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PathMeasure; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; +import android.os.SystemClock; import android.util.Property; import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.anim.Interpolators; import com.android.launcher3.icons.FastBitmapDrawable; import com.android.launcher3.icons.GraphicsUtils; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.util.Themes; +import com.android.launcher3.util.window.RefreshRateTracker; + +import java.util.WeakHashMap; +import java.util.function.Function; /** * Extension of {@link FastBitmapDrawable} which shows a progress bar around the icon. */ -public class PreloadIconDrawable extends FastBitmapDrawable { +public class PreloadIconDrawable extends FastBitmapDrawable implements Runnable { private static final Property INTERNAL_STATE = new Property(Float.TYPE, "internalStateProgress") { @@ -67,12 +77,20 @@ public class PreloadIconDrawable extends FastBitmapDrawable { // Duration = COMPLETE_ANIM_FRACTION * DURATION_SCALE private static final float COMPLETE_ANIM_FRACTION = 0.3f; - private static final float SMALL_SCALE = 0.7f; + private static final float SMALL_SCALE = ENABLE_DOWNLOAD_APP_UX_V2.get() ? 0.85f : 0.7f; private static final float PROGRESS_STROKE_SCALE = 0.075f; private static final int PRELOAD_ACCENT_COLOR_INDEX = 0; private static final int PRELOAD_BACKGROUND_COLOR_INDEX = 1; + private static final int ALPHA_DURATION_MILLIS = 3000; + private static final float OVERLAY_ALPHA_RANGE = 127.5f; + private static final long WAVE_MOTION_DELAY_FACTOR_MILLIS = 100; + private static final WeakHashMap COLOR_FILTER_MAP = + new WeakHashMap<>(); + public static final Function FILTER_FACTORY = + currArgb -> new PorterDuffColorFilter(currArgb, PorterDuff.Mode.SRC_ATOP); + private final Matrix mTmpMatrix = new Matrix(); private final PathMeasure mPathMeasure = new PathMeasure(); @@ -96,6 +114,9 @@ public class PreloadIconDrawable extends FastBitmapDrawable { private boolean mRanFinishAnimation; + private int mOverlayAlpha = 127; + private int mRefreshRateMillis; + // Progress of the internal state. [0, 1] indicates the fraction of completed progress, // [1, (1 + COMPLETE_ANIM_FRACTION)] indicates the progress of zoom animation. private float mInternalStateProgress; @@ -109,14 +130,16 @@ public class PreloadIconDrawable extends FastBitmapDrawable { info, IconPalette.getPreloadProgressColor(context, info.bitmap.color), getPreloadColors(context), - Utilities.isDarkTheme(context)); + Utilities.isDarkTheme(context), + getRefreshRateMillis(context)); } public PreloadIconDrawable( ItemInfoWithIcon info, int indicatorColor, int[] preloadColors, - boolean isDarkMode) { + boolean isDarkMode, + int refreshRateMillis) { super(info.bitmap); mItem = info; mShapePath = GraphicsUtils.getShapePath(DEFAULT_PATH_SIZE); @@ -130,6 +153,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mSystemAccentColor = preloadColors[PRELOAD_ACCENT_COLOR_INDEX]; mSystemBackgroundColor = preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX]; mIsDarkMode = isDarkMode; + mRefreshRateMillis = refreshRateMillis; setLevel(info.getProgressLevel()); setIsStartable(info.isAppStartable()); @@ -178,11 +202,17 @@ public class PreloadIconDrawable extends FastBitmapDrawable { canvas.scale(mIconScale, mIconScale, bounds.exactCenterX(), bounds.exactCenterY()); super.drawInternal(canvas, bounds); canvas.restoreToCount(saveCount); + + if (ENABLE_DOWNLOAD_APP_UX_V2.get() && mInternalStateProgress == 0) { + reschedule(); + } } @Override protected void updateFilter() { - setAlpha(mIsDisabled ? DISABLED_ICON_ALPHA : MAX_PAINT_ALPHA); + if (!ENABLE_DOWNLOAD_APP_UX_V2.get()) { + setAlpha(mIsDisabled ? DISABLED_ICON_ALPHA : MAX_PAINT_ALPHA); + } } /** @@ -237,7 +267,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mCurrentAnim = ObjectAnimator.ofFloat(this, INTERNAL_STATE, finalProgress); mCurrentAnim.setDuration( (long) ((finalProgress - mInternalStateProgress) * DURATION_SCALE)); - mCurrentAnim.setInterpolator(Interpolators.LINEAR); + mCurrentAnim.setInterpolator(LINEAR); if (isFinish) { mCurrentAnim.addListener(new AnimatorListenerAdapter() { @Override @@ -253,13 +283,13 @@ public class PreloadIconDrawable extends FastBitmapDrawable { /** * Sets the internal progress and updates the UI accordingly * for progress <= 0: - * - icon in the small scale and disabled state - * - progress track is visible + * - icon with pending motion + * - progress track is not visible * - progress bar is not visible - * for 0 < progress < 1 - * - icon in the small scale and disabled state + * for progress < 1 + * - icon without pending motion * - progress track is visible - * - progress bar is visible with dominant color. Progress bar is drawn as a fraction of + * - progress bar is visible. Progress bar is drawn as a fraction of * {@link #mScaledTrackPath}. * @see PathMeasure#getSegment(float, float, Path, boolean) * for 1 <= progress < (1 + COMPLETE_ANIM_FRACTION) @@ -273,16 +303,18 @@ public class PreloadIconDrawable extends FastBitmapDrawable { private void setInternalProgress(float progress) { mInternalStateProgress = progress; if (progress <= 0) { - mIconScale = SMALL_SCALE; + mIconScale = ENABLE_DOWNLOAD_APP_UX_V2.get() ? 1 : SMALL_SCALE; mScaledTrackPath.reset(); mTrackAlpha = MAX_PAINT_ALPHA; - } - - if (progress < 1 && progress > 0) { + } else if (progress < 1) { mPathMeasure.getSegment(0, progress * mTrackLength, mScaledProgressPath, true); + if (ENABLE_DOWNLOAD_APP_UX_V2.get()) { + mPaint.setColorFilter(null); + mPathMeasure.getSegment(0, mTrackLength, mScaledTrackPath, true); + } mIconScale = SMALL_SCALE; mTrackAlpha = MAX_PAINT_ALPHA; - } else if (progress >= 1) { + } else { setIsDisabled(mItem.isDisabled()); mScaledTrackPath.set(mScaledProgressPath); float fraction = (progress - 1) / COMPLETE_ANIM_FRACTION; @@ -310,6 +342,10 @@ public class PreloadIconDrawable extends FastBitmapDrawable { return preloadColors; } + private static int getRefreshRateMillis(Context context) { + return RefreshRateTracker.getSingleFrameMs(context); + } + /** * Returns a FastBitmapDrawable with the icon. */ @@ -325,7 +361,75 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mItem, mIndicatorColor, new int[] {mSystemAccentColor, mSystemBackgroundColor}, - mIsDarkMode); + mIsDarkMode, + mRefreshRateMillis); + } + + @Override + public void run() { + if (!ENABLE_DOWNLOAD_APP_UX_V2.get() || mInternalStateProgress > 0) { + return; + } + if (applyPendingIconOverlay()) { + invalidateSelf(); + } else { + reschedule(); + } + } + + @Override + public boolean setVisible(boolean visible, boolean restart) { + boolean result = super.setVisible(visible, restart); + if (visible) { + reschedule(); + } else { + unscheduleSelf(this); + } + return result; + } + + private void reschedule() { + unscheduleSelf(this); + + if (!isVisible()) { + return; + } + + final long upTime = SystemClock.uptimeMillis(); + scheduleSelf(this, upTime - ((upTime % mRefreshRateMillis)) + mRefreshRateMillis); + } + + + /** + * Apply an overlay on the pending icon with cascading motion based on its position. + * Returns {@code true} if the icon alpha is updated, so that we re-draw. + */ + private boolean applyPendingIconOverlay() { + long waveMotionDelay = (mItem.cellX * WAVE_MOTION_DELAY_FACTOR_MILLIS) + + (mItem.cellY * WAVE_MOTION_DELAY_FACTOR_MILLIS); + long time = SystemClock.uptimeMillis(); + int newAlpha = (int) Utilities.mapBoundToRange( + (float) (time + waveMotionDelay) % ALPHA_DURATION_MILLIS, + 0, + ALPHA_DURATION_MILLIS, + 0, + MAX_PAINT_ALPHA, + LINEAR); + if (newAlpha > OVERLAY_ALPHA_RANGE) { + newAlpha = (int) (OVERLAY_ALPHA_RANGE - (newAlpha % OVERLAY_ALPHA_RANGE)); + } + + boolean invalidate = false; + if (mOverlayAlpha != newAlpha) { + mOverlayAlpha = newAlpha; + int overlayColor = mIsDarkMode ? 0 : 255; + int currArgb = Color.argb(mOverlayAlpha, overlayColor, overlayColor, overlayColor); + mPaint.setColorFilter(COLOR_FILTER_MAP.computeIfAbsent( + currArgb, + FILTER_FACTORY)); + invalidate = true; + } + return invalidate; } protected static class PreloadIconConstantState extends FastBitmapConstantState { @@ -335,6 +439,7 @@ public class PreloadIconDrawable extends FastBitmapDrawable { protected final int[] mPreloadColors; protected final boolean mIsDarkMode; protected final int mLevel; + protected final int mRefreshRateMillis; public PreloadIconConstantState( Bitmap bitmap, @@ -342,13 +447,15 @@ public class PreloadIconDrawable extends FastBitmapDrawable { ItemInfoWithIcon info, int indicatorColor, int[] preloadColors, - boolean isDarkMode) { + boolean isDarkMode, + int refreshRateMillis) { super(bitmap, iconColor); mInfo = info; mIndicatorColor = indicatorColor; mPreloadColors = preloadColors; mIsDarkMode = isDarkMode; mLevel = info.getProgressLevel(); + mRefreshRateMillis = refreshRateMillis; } @Override @@ -357,7 +464,8 @@ public class PreloadIconDrawable extends FastBitmapDrawable { mInfo, mIndicatorColor, mPreloadColors, - mIsDarkMode); + mIsDarkMode, + mRefreshRateMillis); } } }