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-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-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"
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..c269648f7d 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
@@ -492,7 +490,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
/* isStashed= */ false,
placeholderDuration,
/* startDelay= */ 0,
- /* animateBg= */ false);
+ /* animateBg= */ false,
+ /* changedFlags=*/ 0);
animation.play(mAnimator);
}
@@ -503,8 +502,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 +541,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 +566,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 +591,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 +984,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();
}
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..25520e1bea 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 =
@@ -1050,12 +1048,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));
@@ -1376,7 +1371,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 +1642,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/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) {
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 932f98a323..6ea331d485 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/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 {
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) {
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);
}
}
}
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();
}
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());