diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index c7a02536d2..6d105ac4fc 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -46,9 +46,7 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/drawable/ic_apps.xml b/SecondaryDisplayLauncher/res/drawable/ic_apps.xml
new file mode 100644
index 0000000000..db779c2d12
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/drawable/ic_apps.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/drawable/ic_settings.xml b/SecondaryDisplayLauncher/res/drawable/ic_settings.xml
new file mode 100644
index 0000000000..c269c3bafc
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/drawable/ic_settings.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml
new file mode 100644
index 0000000000..46f1674e47
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml
new file mode 100644
index 0000000000..6653a77968
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/layout/app_grid_item.xml b/SecondaryDisplayLauncher/res/layout/app_grid_item.xml
new file mode 100644
index 0000000000..ee5158ad32
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/layout/app_grid_item.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml b/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml
new file mode 100644
index 0000000000..563a1afa78
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml b/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml
new file mode 100644
index 0000000000..20f85b16a6
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml
new file mode 100644
index 0000000000..49cd499a50
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/menu/context_menu.xml b/SecondaryDisplayLauncher/res/menu/context_menu.xml
new file mode 100644
index 0000000000..626384229e
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/menu/context_menu.xml
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/SecondaryDisplayLauncher/res/values-af/strings.xml b/SecondaryDisplayLauncher/res/values-af/strings.xml
new file mode 100644
index 0000000000..b544be7a3d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-af/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Kon nie die aktiwiteit begin nie"
+ "Voeg programkortpad by"
+ "Stel muurpapier"
+
diff --git a/SecondaryDisplayLauncher/res/values-am/strings.xml b/SecondaryDisplayLauncher/res/values-am/strings.xml
new file mode 100644
index 0000000000..71854ad624
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-am/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "እንቅስቃሴውን ማስጀመር አልተቻለም"
+ "የመተግበሪያ አቋራጭ ያክሉ"
+ "ልጣፍ አዘጋጅ"
+
diff --git a/SecondaryDisplayLauncher/res/values-ar/strings.xml b/SecondaryDisplayLauncher/res/values-ar/strings.xml
new file mode 100644
index 0000000000..ba81c118c2
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ar/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "تعذَّر تشغيل النشاط."
+ "إضافة اختصار التطبيق"
+ "تعيين الخلفية"
+
diff --git a/SecondaryDisplayLauncher/res/values-as/strings.xml b/SecondaryDisplayLauncher/res/values-as/strings.xml
new file mode 100644
index 0000000000..d199a26829
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-as/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "কাৰ্যকলাপটো লঞ্চ কৰিব পৰা নগ’ল"
+ "এপৰ শ্বর্টকাট যোগ কৰক"
+ "ৱালপেপাৰ ছেট কৰক"
+
diff --git a/SecondaryDisplayLauncher/res/values-az/strings.xml b/SecondaryDisplayLauncher/res/values-az/strings.xml
new file mode 100644
index 0000000000..cee70a08d6
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-az/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Fəaliyyəti başlatmaq mümkün olmadı"
+ "Tətbiq qısayolu əlavə edin"
+ "Divar kağızı ayarlayın"
+
diff --git a/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml b/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000000..a8859d9ff8
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Pokretanje aktivnosti nije uspelo"
+ "Dodaj prečicu za aplikaciju"
+ "Podesite pozadinu"
+
diff --git a/SecondaryDisplayLauncher/res/values-be/strings.xml b/SecondaryDisplayLauncher/res/values-be/strings.xml
new file mode 100644
index 0000000000..3df3760378
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-be/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Не ўдалося запусціць дзеянне"
+ "Дадаць ярлык праграмы"
+ "Устанавіць шпалеры"
+
diff --git a/SecondaryDisplayLauncher/res/values-bg/strings.xml b/SecondaryDisplayLauncher/res/values-bg/strings.xml
new file mode 100644
index 0000000000..4474815bde
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-bg/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Активността не можа да бъде стартирана"
+ "Добавяне на пряк път към приложението"
+ "Задаване на тапет"
+
diff --git a/SecondaryDisplayLauncher/res/values-bn/strings.xml b/SecondaryDisplayLauncher/res/values-bn/strings.xml
new file mode 100644
index 0000000000..7322691709
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-bn/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "অ্যাক্টিভিটি চালু করা যায়নি"
+ "অ্যাপ শর্টকাট যোগ করুন"
+ "ওয়ালপেপার সেট করুন"
+
diff --git a/SecondaryDisplayLauncher/res/values-bs/strings.xml b/SecondaryDisplayLauncher/res/values-bs/strings.xml
new file mode 100644
index 0000000000..1e59d334ab
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-bs/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Pokretanje aktivnosti nije uspjelo"
+ "Dodaj prečicu aplikacije"
+ "Postavi pozadinsku sliku"
+
diff --git a/SecondaryDisplayLauncher/res/values-ca/strings.xml b/SecondaryDisplayLauncher/res/values-ca/strings.xml
new file mode 100644
index 0000000000..c0274d142d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ca/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "No s\'ha pogut iniciar l\'activitat"
+ "Afegeix una drecera d\'aplicació"
+ "Estableix el fons de pantalla"
+
diff --git a/SecondaryDisplayLauncher/res/values-cs/strings.xml b/SecondaryDisplayLauncher/res/values-cs/strings.xml
new file mode 100644
index 0000000000..92ed5fa56f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-cs/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Aktivitu nelze zahájit"
+ "Přidat zkratku aplikace"
+ "Nastavení tapety"
+
diff --git a/SecondaryDisplayLauncher/res/values-da/strings.xml b/SecondaryDisplayLauncher/res/values-da/strings.xml
new file mode 100644
index 0000000000..16bdb33f6f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-da/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Aktiviteten kunne ikke startes"
+ "Tilføj appgenvej"
+ "Angiv baggrund"
+
diff --git a/SecondaryDisplayLauncher/res/values-de/strings.xml b/SecondaryDisplayLauncher/res/values-de/strings.xml
new file mode 100644
index 0000000000..3617a5b209
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-de/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Aktivität konnte nicht gestartet werden"
+ "App-Verknüpfung hinzufügen"
+ "Hintergrund festlegen"
+
diff --git a/SecondaryDisplayLauncher/res/values-el/strings.xml b/SecondaryDisplayLauncher/res/values-el/strings.xml
new file mode 100644
index 0000000000..8d19d09c9d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-el/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Δεν ήταν δυνατή η εκκίνηση της δραστηριότητας"
+ "Προσθήκη συντόμευσης εφαρμογής"
+ "Ορισμός ταπετσαρίας"
+
diff --git a/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml b/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000000..8d8c419b2d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Couldn\'t launch the activity"
+ "Add app shortcut"
+ "Set wallpaper"
+
diff --git a/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml b/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000000..8d8c419b2d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Couldn\'t launch the activity"
+ "Add app shortcut"
+ "Set wallpaper"
+
diff --git a/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml b/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000000..8d8c419b2d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Couldn\'t launch the activity"
+ "Add app shortcut"
+ "Set wallpaper"
+
diff --git a/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml b/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000000..ff6772bf33
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "No se pudo iniciar la actividad"
+ "Agregar acceso directo a app"
+ "Establecer fondo de pantalla"
+
diff --git a/SecondaryDisplayLauncher/res/values-es/strings.xml b/SecondaryDisplayLauncher/res/values-es/strings.xml
new file mode 100644
index 0000000000..0654dcb756
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-es/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "No se ha podido iniciar la acción"
+ "Añadir acceso directo a la aplicación"
+ "Establecer fondo de pantalla"
+
diff --git a/SecondaryDisplayLauncher/res/values-et/strings.xml b/SecondaryDisplayLauncher/res/values-et/strings.xml
new file mode 100644
index 0000000000..3410fd44de
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-et/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Tegevust ei saanud käivitada"
+ "Lisa rakenduse otsetee"
+ "Määra taustapilt"
+
diff --git a/SecondaryDisplayLauncher/res/values-eu/strings.xml b/SecondaryDisplayLauncher/res/values-eu/strings.xml
new file mode 100644
index 0000000000..d7abe33d13
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-eu/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Ezin izan da abiarazi jarduera"
+ "Gehitu aplikaziorako lasterbidea"
+ "Ezarri horma-papera"
+
diff --git a/SecondaryDisplayLauncher/res/values-fa/strings.xml b/SecondaryDisplayLauncher/res/values-fa/strings.xml
new file mode 100644
index 0000000000..4d3ec4d3f5
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-fa/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "فعالیت راهاندازی نشد"
+ "افزودن میانبر برنامه"
+ "تنظیم کاغذدیواری"
+
diff --git a/SecondaryDisplayLauncher/res/values-fi/strings.xml b/SecondaryDisplayLauncher/res/values-fi/strings.xml
new file mode 100644
index 0000000000..e56f67a10b
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-fi/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Käynnistäminen epäonnistui"
+ "Lisää sovelluksen pikakuvake"
+ "Aseta taustakuva"
+
diff --git a/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml b/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000000..f5c9ba55f4
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Impossible de lancer l\'activité"
+ "Ajouter un raccourci vers l\'application"
+ "Définir le fond d\'écran"
+
diff --git a/SecondaryDisplayLauncher/res/values-fr/strings.xml b/SecondaryDisplayLauncher/res/values-fr/strings.xml
new file mode 100644
index 0000000000..daa186b46f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-fr/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Impossible de lancer l\'activité"
+ "Ajouter un raccourci vers l\'application"
+ "Configurer le fond d\'écran"
+
diff --git a/SecondaryDisplayLauncher/res/values-gl/strings.xml b/SecondaryDisplayLauncher/res/values-gl/strings.xml
new file mode 100644
index 0000000000..0bcf9696ca
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-gl/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Non se puido iniciar a actividade"
+ "Engadir atallo da aplicación"
+ "Definir fondo de pantalla"
+
diff --git a/SecondaryDisplayLauncher/res/values-gu/strings.xml b/SecondaryDisplayLauncher/res/values-gu/strings.xml
new file mode 100644
index 0000000000..82b4444f39
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-gu/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "પ્રવૃત્તિ લૉન્ચ કરી શકાઈ નથી"
+ "ઍપ શૉર્ટકટ ઉમેરો"
+ "વૉલપેપર સેટ કરો"
+
diff --git a/SecondaryDisplayLauncher/res/values-hi/strings.xml b/SecondaryDisplayLauncher/res/values-hi/strings.xml
new file mode 100644
index 0000000000..8adb519303
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-hi/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "गतिविधि लॉन्च नहीं हो सकी"
+ "ऐप्लिकेशन शॉर्टकट जोड़ें"
+ "वॉलपेपर सेट करें"
+
diff --git a/SecondaryDisplayLauncher/res/values-hr/strings.xml b/SecondaryDisplayLauncher/res/values-hr/strings.xml
new file mode 100644
index 0000000000..87ac874601
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-hr/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Pokretanje aktivnosti nije uspjelo"
+ "Dodajte aplikacijski prečac"
+ "Postavljanje pozadine"
+
diff --git a/SecondaryDisplayLauncher/res/values-hu/strings.xml b/SecondaryDisplayLauncher/res/values-hu/strings.xml
new file mode 100644
index 0000000000..a8870fc439
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-hu/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Nem sikerült elindítani a tevékenységet"
+ "Alkalmazás parancsikonjának hozzáadása"
+ "Háttérkép beállítása"
+
diff --git a/SecondaryDisplayLauncher/res/values-hy/strings.xml b/SecondaryDisplayLauncher/res/values-hy/strings.xml
new file mode 100644
index 0000000000..a64233f01f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-hy/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Չհաջողվեց գործարկել գործողությունը"
+ "Ավելացնել հավելվածի դյուրանցումը"
+ "Դարձնել պաստառ"
+
diff --git a/SecondaryDisplayLauncher/res/values-in/strings.xml b/SecondaryDisplayLauncher/res/values-in/strings.xml
new file mode 100644
index 0000000000..f51d23840f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-in/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Tidak dapat meluncurkan aktivitas"
+ "Tambahkan pintasan app"
+ "Setel wallpaper"
+
diff --git a/SecondaryDisplayLauncher/res/values-is/strings.xml b/SecondaryDisplayLauncher/res/values-is/strings.xml
new file mode 100644
index 0000000000..e8b3e97c60
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-is/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Ekki tókst að ræsa aðgerðina"
+ "Bæta við flýtileið forrita"
+ "Velja veggfóður"
+
diff --git a/SecondaryDisplayLauncher/res/values-it/strings.xml b/SecondaryDisplayLauncher/res/values-it/strings.xml
new file mode 100644
index 0000000000..4941515cbe
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-it/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Impossibile avviare l\'attività"
+ "Aggiungi scorciatoia app"
+ "Imposta sfondo"
+
diff --git a/SecondaryDisplayLauncher/res/values-iw/strings.xml b/SecondaryDisplayLauncher/res/values-iw/strings.xml
new file mode 100644
index 0000000000..06b0c42bbd
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-iw/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "לא ניתן היה להפעיל את הפעילות"
+ "הוספת קיצור דרך של אפליקציה"
+ "הגדרת טפט"
+
diff --git a/SecondaryDisplayLauncher/res/values-ja/strings.xml b/SecondaryDisplayLauncher/res/values-ja/strings.xml
new file mode 100644
index 0000000000..3ed7b2b110
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ja/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "アクティビティを開始できませんでした"
+ "アプリのショートカットを追加"
+ "壁紙を設定"
+
diff --git a/SecondaryDisplayLauncher/res/values-ka/strings.xml b/SecondaryDisplayLauncher/res/values-ka/strings.xml
new file mode 100644
index 0000000000..ac85f70374
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ka/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "აქტივობის გაშვება ვერ მოხერხდა"
+ "აპის მალსახმობის დამატება"
+ "ფონის დაყენება"
+
diff --git a/SecondaryDisplayLauncher/res/values-kk/strings.xml b/SecondaryDisplayLauncher/res/values-kk/strings.xml
new file mode 100644
index 0000000000..f9ac455687
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-kk/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Әрекет іске қосылмады"
+ "Қолданба таңбашасын енгізу"
+ "Тұсқағаз орнату"
+
diff --git a/SecondaryDisplayLauncher/res/values-km/strings.xml b/SecondaryDisplayLauncher/res/values-km/strings.xml
new file mode 100644
index 0000000000..afc050f37d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-km/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "មិនអាចចាប់ផ្តើមសកម្មភាពទេ"
+ "បញ្ចូលផ្លូវកាត់កម្មវិធី"
+ "កំណត់ផ្ទាំងរូបភាព"
+
diff --git a/SecondaryDisplayLauncher/res/values-kn/strings.xml b/SecondaryDisplayLauncher/res/values-kn/strings.xml
new file mode 100644
index 0000000000..09c327fe45
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-kn/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "ಚಟುವಟಿಕೆಯನ್ನು ಲಾಂಚ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
+ "ಆ್ಯಪ್ ಶಾರ್ಟ್ಕಟ್ ಸೇರಿಸಿ"
+ "ವಾಲ್ಪೇಪರ್ ಹೊಂದಿಸಿ"
+
diff --git a/SecondaryDisplayLauncher/res/values-ko/strings.xml b/SecondaryDisplayLauncher/res/values-ko/strings.xml
new file mode 100644
index 0000000000..6a02ac08ce
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ko/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "활동을 실행할 수 없음"
+ "앱 바로가기 추가"
+ "배경화면 설정"
+
diff --git a/SecondaryDisplayLauncher/res/values-ky/strings.xml b/SecondaryDisplayLauncher/res/values-ky/strings.xml
new file mode 100644
index 0000000000..56185fa7d5
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ky/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Аракет аткарылган жок"
+ "Колдонмого кыска жол кошуу"
+ "Тушкагаз орнотуу"
+
diff --git a/SecondaryDisplayLauncher/res/values-lo/strings.xml b/SecondaryDisplayLauncher/res/values-lo/strings.xml
new file mode 100644
index 0000000000..36a6275567
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-lo/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "ບໍ່ສາມາດເປີດໃຊ້ການເຄື່ອນໄຫວໄດ້"
+ "ເພີ່ມທາງລັດແອັບ"
+ "ຕັ້ງເປັນຮູບພື້ນຫຼັງ"
+
diff --git a/SecondaryDisplayLauncher/res/values-lt/strings.xml b/SecondaryDisplayLauncher/res/values-lt/strings.xml
new file mode 100644
index 0000000000..8113eb61b6
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-lt/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Nepavyko paleisti veiklos"
+ "Pridėti programos šaukinį"
+ "Nustatyti ekrano foną"
+
diff --git a/SecondaryDisplayLauncher/res/values-lv/strings.xml b/SecondaryDisplayLauncher/res/values-lv/strings.xml
new file mode 100644
index 0000000000..e2679335d5
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-lv/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Nevarēja palaist darbību"
+ "Pievienot lietotnes saīsni"
+ "Iestatīt fona tapeti"
+
diff --git a/SecondaryDisplayLauncher/res/values-mk/strings.xml b/SecondaryDisplayLauncher/res/values-mk/strings.xml
new file mode 100644
index 0000000000..e2cca03eeb
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-mk/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Не можеше да се стартува активноста"
+ "Додајте кратенка за апликација"
+ "Поставете го тапетот"
+
diff --git a/SecondaryDisplayLauncher/res/values-ml/strings.xml b/SecondaryDisplayLauncher/res/values-ml/strings.xml
new file mode 100644
index 0000000000..864245b9f6
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ml/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "ആക്റ്റിവിറ്റി പ്രകാശിപ്പിക്കാനായില്ല"
+ "ആപ്പ് കുറുക്കുവഴികൾ ചേർക്കുക"
+ "വാൾപേപ്പർ സജ്ജീകരിക്കുക"
+
diff --git a/SecondaryDisplayLauncher/res/values-mn/strings.xml b/SecondaryDisplayLauncher/res/values-mn/strings.xml
new file mode 100644
index 0000000000..85fb0209eb
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-mn/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Үйл ажиллагааг эхлүүж чадсангүй"
+ "Аппын товчлол нэмэх"
+ "Ханын зураг тохируулах"
+
diff --git a/SecondaryDisplayLauncher/res/values-mr/strings.xml b/SecondaryDisplayLauncher/res/values-mr/strings.xml
new file mode 100644
index 0000000000..6e92a2f2a1
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-mr/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "अॅक्टिव्हिटी लाँच करता आली नाही"
+ "अॅप शॉर्टकट जोडा"
+ "वॉलपेपर सेट करा"
+
diff --git a/SecondaryDisplayLauncher/res/values-ms/strings.xml b/SecondaryDisplayLauncher/res/values-ms/strings.xml
new file mode 100644
index 0000000000..fd7805324c
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ms/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Tidak dapat melancarkan aktiviti"
+ "Tambah pintasan apl"
+ "Tetapkan kertas dinding"
+
diff --git a/SecondaryDisplayLauncher/res/values-my/strings.xml b/SecondaryDisplayLauncher/res/values-my/strings.xml
new file mode 100644
index 0000000000..1521402203
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-my/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "လုပ်ဆောင်ချက်ကို စတင်၍မရပါ"
+ "အက်ပ်ဖြတ်လမ်းလင့်ခ်ထည့်ရန်"
+ "နောက်ခံ သတ်မှတ်ရန်"
+
diff --git a/SecondaryDisplayLauncher/res/values-nb/strings.xml b/SecondaryDisplayLauncher/res/values-nb/strings.xml
new file mode 100644
index 0000000000..945c87bb7d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-nb/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Kunne ikke starte aktiviteten"
+ "Legg til en appsnarvei"
+ "Angi bakgrunn"
+
diff --git a/SecondaryDisplayLauncher/res/values-ne/strings.xml b/SecondaryDisplayLauncher/res/values-ne/strings.xml
new file mode 100644
index 0000000000..9a5b0a0590
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ne/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "उक्त क्रियाकलाप सुरु गर्न सकिएन"
+ "अनुप्रयोगको सर्टकट थप्नुहोस्"
+ "वालपेपर सेट गर्नुहोस्"
+
diff --git a/SecondaryDisplayLauncher/res/values-nl/strings.xml b/SecondaryDisplayLauncher/res/values-nl/strings.xml
new file mode 100644
index 0000000000..8767708814
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-nl/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Kan de activiteit niet starten"
+ "App-snelkoppeling toevoegen"
+ "Achtergrond instellen"
+
diff --git a/SecondaryDisplayLauncher/res/values-or/strings.xml b/SecondaryDisplayLauncher/res/values-or/strings.xml
new file mode 100644
index 0000000000..9bc5725aba
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-or/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "ଗତିବିଧିକୁ ଲଞ୍ଚ କରାଯାଇପାରିଲା ନାହିଁ"
+ "ଆପ୍ ସର୍ଟକଟ୍ ଯୋଗ କରନ୍ତୁ"
+ "ୱାଲ୍ପେପର୍କୁ ସେଟ୍ କରନ୍ତୁ"
+
diff --git a/SecondaryDisplayLauncher/res/values-pa/strings.xml b/SecondaryDisplayLauncher/res/values-pa/strings.xml
new file mode 100644
index 0000000000..c5dd582ce0
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-pa/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "ਸਰਗਰਮੀ ਨੂੰ ਲਾਂਚ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"
+ "ਐਪ ਸ਼ਾਰਟਕੱਟ ਸ਼ਾਮਲ ਕਰੋ"
+ "ਵਾਲਪੇਪਰ ਸੈੱਟ ਕਰੋ"
+
diff --git a/SecondaryDisplayLauncher/res/values-pl/strings.xml b/SecondaryDisplayLauncher/res/values-pl/strings.xml
new file mode 100644
index 0000000000..e8efaed2b0
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-pl/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Nie udało się uruchomić aktywności"
+ "Dodaj skrót do aplikacji"
+ "Ustaw tapetę"
+
diff --git a/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml b/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000000..67c75574be
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Não foi possível iniciar a atividade."
+ "Adicionar atalho de aplicação"
+ "Definir imagem de fundo"
+
diff --git a/SecondaryDisplayLauncher/res/values-pt/strings.xml b/SecondaryDisplayLauncher/res/values-pt/strings.xml
new file mode 100644
index 0000000000..201fc07e52
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-pt/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Não foi possível abrir a atividade"
+ "Adicionar atalho de apps"
+ "Definir plano de fundo"
+
diff --git a/SecondaryDisplayLauncher/res/values-ro/strings.xml b/SecondaryDisplayLauncher/res/values-ro/strings.xml
new file mode 100644
index 0000000000..e2e21c5731
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ro/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Nu s-a putut lansa activitatea"
+ "Adăugați comanda rapidă pentru aplicație"
+ "Setați imaginea de fundal"
+
diff --git a/SecondaryDisplayLauncher/res/values-ru/strings.xml b/SecondaryDisplayLauncher/res/values-ru/strings.xml
new file mode 100644
index 0000000000..64ba00ef1f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ru/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Не удалось запустить объект activity"
+ "Добавить ярлык приложения"
+ "Установить обои"
+
diff --git a/SecondaryDisplayLauncher/res/values-si/strings.xml b/SecondaryDisplayLauncher/res/values-si/strings.xml
new file mode 100644
index 0000000000..ac492eb8ce
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-si/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "ක්රියාකාරකම දියත් කිරීමට නොහැකි විය"
+ "යෙදුම් කෙටිමඟ එක් කරන්න"
+ "බිතුපත සකසන්න"
+
diff --git a/SecondaryDisplayLauncher/res/values-sk/strings.xml b/SecondaryDisplayLauncher/res/values-sk/strings.xml
new file mode 100644
index 0000000000..5e6fa7a613
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sk/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Aktivitu sa nepodarilo spustiť"
+ "Pridať odkaz do aplikácie"
+ "Nastaviť tapetu"
+
diff --git a/SecondaryDisplayLauncher/res/values-sl/strings.xml b/SecondaryDisplayLauncher/res/values-sl/strings.xml
new file mode 100644
index 0000000000..f54dec9c8d
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sl/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Dejavnosti ni bilo mogoče zagnati"
+ "Dodaj bližnjico do aplikacije"
+ "Nastavi ozadje"
+
diff --git a/SecondaryDisplayLauncher/res/values-sq/strings.xml b/SecondaryDisplayLauncher/res/values-sq/strings.xml
new file mode 100644
index 0000000000..e626dd1caf
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sq/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Aktiviteti nuk mund të hapej"
+ "Shto shkurtoren e aplikacionit"
+ "Cakto imazhin e sfondit"
+
diff --git a/SecondaryDisplayLauncher/res/values-sr/strings.xml b/SecondaryDisplayLauncher/res/values-sr/strings.xml
new file mode 100644
index 0000000000..94214f113b
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sr/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Покретање активности није успело"
+ "Додај пречицу за апликацију"
+ "Подесите позадину"
+
diff --git a/SecondaryDisplayLauncher/res/values-sv/strings.xml b/SecondaryDisplayLauncher/res/values-sv/strings.xml
new file mode 100644
index 0000000000..53e17ef685
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sv/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Det gick inte att starta aktiviteten"
+ "Lägg till appgenväg"
+ "Ange bakgrund"
+
diff --git a/SecondaryDisplayLauncher/res/values-sw/strings.xml b/SecondaryDisplayLauncher/res/values-sw/strings.xml
new file mode 100644
index 0000000000..490561a619
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sw/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Imeshindwa kuanzisha shughuli"
+ "Ongeza njia ya mkato ya programu"
+ "Weka mandhari"
+
diff --git a/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml b/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000000..f33a8db400
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ 400dp
+ 400dp
+ 60dp
+
diff --git a/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml b/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml
new file mode 100644
index 0000000000..524e52af71
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ 660dp
+ 660dp
+ 70dp
+
diff --git a/SecondaryDisplayLauncher/res/values-ta/strings.xml b/SecondaryDisplayLauncher/res/values-ta/strings.xml
new file mode 100644
index 0000000000..6bb054a11a
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ta/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "நடவடிக்கையைத் துவக்க இயலவில்லை"
+ "ஆப்ஸ் ஷார்ட்கட்டைச் சேர்"
+ "வால்பேப்பரை அமை"
+
diff --git a/SecondaryDisplayLauncher/res/values-te/strings.xml b/SecondaryDisplayLauncher/res/values-te/strings.xml
new file mode 100644
index 0000000000..3dd3c9bddb
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-te/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "కార్యకలాపాన్ని ప్రారంభించడం సాధ్యం కాలేదు"
+ "యాప్ షార్ట్కట్ని జోడించు"
+ "వాల్పేపర్ను సెట్ చేయండి"
+
diff --git a/SecondaryDisplayLauncher/res/values-th/strings.xml b/SecondaryDisplayLauncher/res/values-th/strings.xml
new file mode 100644
index 0000000000..6368950ad8
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-th/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "เปิดกิจกรรมไม่ได้"
+ "เพิ่มทางลัดของแอป"
+ "ตั้งวอลเปเปอร์"
+
diff --git a/SecondaryDisplayLauncher/res/values-tl/strings.xml b/SecondaryDisplayLauncher/res/values-tl/strings.xml
new file mode 100644
index 0000000000..192e5c4f92
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-tl/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Hindi mailunsad ang aktibidad"
+ "Magdagdag ng shortcut ng app"
+ "Magtakda ng wallpaper"
+
diff --git a/SecondaryDisplayLauncher/res/values-tr/strings.xml b/SecondaryDisplayLauncher/res/values-tr/strings.xml
new file mode 100644
index 0000000000..e7ed9983ee
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-tr/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "İşlem başlatılamadı"
+ "Uygulama kısayolu ekle"
+ "Duvar kağıdı ayarla"
+
diff --git a/SecondaryDisplayLauncher/res/values-uk/strings.xml b/SecondaryDisplayLauncher/res/values-uk/strings.xml
new file mode 100644
index 0000000000..e4659952cd
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-uk/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Не вдалося запустити активність"
+ "Розмістити ярлик додатка"
+ "Вибрати фоновий малюнок"
+
diff --git a/SecondaryDisplayLauncher/res/values-ur/strings.xml b/SecondaryDisplayLauncher/res/values-ur/strings.xml
new file mode 100644
index 0000000000..e4c86417dc
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-ur/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "سرگرمی کو شروع نہیں کیا جا سکا"
+ "ایپ شارٹ کٹ شامل کریں"
+ "وال پیپر سیٹ کریں"
+
diff --git a/SecondaryDisplayLauncher/res/values-uz/strings.xml b/SecondaryDisplayLauncher/res/values-uz/strings.xml
new file mode 100644
index 0000000000..585739d37f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-uz/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Faollik ishga tushmadi"
+ "Yorliq yaratish"
+ "Fonga rasm oʻrnatish"
+
diff --git a/SecondaryDisplayLauncher/res/values-vi/strings.xml b/SecondaryDisplayLauncher/res/values-vi/strings.xml
new file mode 100644
index 0000000000..15a1a44dde
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-vi/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Không thể chạy hoạt động"
+ "Thêm lối tắt ứng dụng"
+ "Đặt hình nền"
+
diff --git a/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000000..3358499824
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "无法启动该操作组件"
+ "添加应用快捷方式"
+ "设置壁纸"
+
diff --git a/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000000..bf76f29dec
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "無法啟動活動"
+ "新增應用程式捷徑"
+ "設定桌布"
+
diff --git a/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000000..c02fe2cdce
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "無法啟動活動"
+ "新增應用程式捷徑"
+ "套用桌布"
+
diff --git a/SecondaryDisplayLauncher/res/values-zu/strings.xml b/SecondaryDisplayLauncher/res/values-zu/strings.xml
new file mode 100644
index 0000000000..ad2f6b9cdb
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values-zu/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ "Ayikwazanga ukuqalisa umsebenzi"
+ "Engeza isinqamuleli sohlelo lokusebenza"
+ "Setha isithombe sangemuva"
+
diff --git a/SecondaryDisplayLauncher/res/values/colors.xml b/SecondaryDisplayLauncher/res/values/colors.xml
new file mode 100644
index 0000000000..66b41a2ba6
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values/colors.xml
@@ -0,0 +1,22 @@
+
+
+
+ #884e8391
+
diff --git a/SecondaryDisplayLauncher/res/values/dimens.xml b/SecondaryDisplayLauncher/res/values/dimens.xml
new file mode 100644
index 0000000000..7cca60719c
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values/dimens.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ 72dp
+ 24dp
+ 24dp
+ 64dp
+ 64dp
+ 24dp
+ 8dp
+ 8dp
+
+ 300dp
+ 300dp
+ 20dp
+ 20dp
+
diff --git a/SecondaryDisplayLauncher/res/values/strings.xml b/SecondaryDisplayLauncher/res/values/strings.xml
new file mode 100644
index 0000000000..b68918ac3f
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values/strings.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Couldn\'t launch the activity
+ Add app shortcut
+ Set wallpaper
+
diff --git a/SecondaryDisplayLauncher/res/values/styles.xml b/SecondaryDisplayLauncher/res/values/styles.xml
new file mode 100644
index 0000000000..4e41a98fc8
--- /dev/null
+++ b/SecondaryDisplayLauncher/res/values/styles.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java
new file mode 100644
index 0000000000..3017b81c1d
--- /dev/null
+++ b/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
+
+/** An entry that represents a single activity that can be launched. */
+public class AppEntry {
+
+ private String mLabel;
+ private Drawable mIcon;
+ private Intent mLaunchIntent;
+
+ AppEntry(ResolveInfo info, PackageManager packageManager) {
+ mLabel = info.loadLabel(packageManager).toString();
+ mIcon = info.loadIcon(packageManager);
+ mLaunchIntent = new Intent();
+ mLaunchIntent.setComponent(new ComponentName(info.activityInfo.packageName,
+ info.activityInfo.name));
+ }
+
+ String getLabel() {
+ return mLabel;
+ }
+
+ Drawable getIcon() {
+ return mIcon;
+ }
+
+ Intent getLaunchIntent() { return mLaunchIntent; }
+
+ ComponentName getComponentName() {
+ return mLaunchIntent.getComponent();
+ }
+
+ @Override
+ public String toString() {
+ return mLabel;
+ }
+}
diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java
new file mode 100644
index 0000000000..aa115cb575
--- /dev/null
+++ b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.launcher3.R;
+
+import java.util.List;
+
+/** Adapter for available apps list. */
+public class AppListAdapter extends ArrayAdapter {
+ private final LayoutInflater mInflater;
+
+ AppListAdapter(Context context) {
+ super(context, android.R.layout.simple_list_item_2);
+ mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ void setData(List data) {
+ clear();
+ if (data != null) {
+ addAll(data);
+ }
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View view;
+
+ if (convertView == null) {
+ view = mInflater.inflate(R.layout.app_grid_item, parent, false);
+ } else {
+ view = convertView;
+ }
+
+ AppEntry item = getItem(position);
+ ((ImageView)view.findViewById(R.id.app_icon)).setImageDrawable(item.getIcon());
+ ((TextView)view.findViewById(R.id.app_name)).setText(item.getLabel());
+
+ return view;
+ }
+}
diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java
new file mode 100644
index 0000000000..914fd5e01a
--- /dev/null
+++ b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java
@@ -0,0 +1,126 @@
+/**
+ * Copyright (c) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.app.Application;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.AsyncTask;
+
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LiveData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A view model that provides a list of activities that can be launched.
+ */
+public class AppListViewModel extends AndroidViewModel {
+
+ private final AppListLiveData mLiveData;
+ private final PackageIntentReceiver
+ mPackageIntentReceiver;
+
+ public AppListViewModel(Application application) {
+ super(application);
+ mLiveData = new AppListLiveData(application);
+ mPackageIntentReceiver = new PackageIntentReceiver(mLiveData, application);
+ }
+
+ public LiveData> getAppList() {
+ return mLiveData;
+ }
+
+ protected void onCleared() {
+ getApplication().unregisterReceiver(mPackageIntentReceiver);
+ }
+}
+
+class AppListLiveData extends LiveData> {
+
+ private final PackageManager mPackageManager;
+ private int mCurrentDataVersion;
+
+ public AppListLiveData(Context context) {
+ mPackageManager = context.getPackageManager();
+ loadData();
+ }
+
+ void loadData() {
+ final int loadDataVersion = ++mCurrentDataVersion;
+
+ new AsyncTask>() {
+ @Override
+ protected List doInBackground(Void... voids) {
+ Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
+ mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+
+ List apps = mPackageManager.queryIntentActivities(mainIntent,
+ PackageManager.GET_META_DATA);
+
+ List entries = new ArrayList<>();
+ if (apps != null) {
+ for (ResolveInfo app : apps) {
+ AppEntry entry = new AppEntry(app, mPackageManager);
+ entries.add(entry);
+ }
+ }
+ return entries;
+ }
+
+ @Override
+ protected void onPostExecute(List data) {
+ if (mCurrentDataVersion == loadDataVersion) {
+ setValue(data);
+ }
+ }
+ }.execute();
+ }
+}
+
+/**
+ * Receiver used to notify live data about app list changes.
+ */
+class PackageIntentReceiver extends BroadcastReceiver {
+
+ private final AppListLiveData mLiveData;
+
+ public PackageIntentReceiver(AppListLiveData liveData, Context context) {
+ mLiveData = liveData;
+ IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+ filter.addDataScheme("package");
+ context.registerReceiver(this, filter);
+
+ // Register for events related to sdcard installation.
+ IntentFilter sdFilter = new IntentFilter();
+ sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
+ sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
+ context.registerReceiver(this, sdFilter);
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ mLiveData.loadData();
+ }
+}
\ No newline at end of file
diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java
new file mode 100644
index 0000000000..4f92038ae4
--- /dev/null
+++ b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java
@@ -0,0 +1,120 @@
+/**
+ * Copyright (c) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import static com.android.launcher3.PinnedAppListViewModel.PINNED_APPS_KEY;
+
+import android.app.Application;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.AsyncTask;
+
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LiveData;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A view model that provides a list of activities that were pinned by user to always display on
+ * home screen.
+ * The pinned activities are stored in {@link SharedPreferences} to keep the sample simple :).
+ */
+public class PinnedAppListViewModel extends AndroidViewModel {
+
+ final static String PINNED_APPS_KEY = "pinned_apps";
+
+ private final PinnedAppListLiveData mLiveData;
+
+ public PinnedAppListViewModel(Application application) {
+ super(application);
+ mLiveData = new PinnedAppListLiveData(application);
+ }
+
+ public LiveData> getPinnedAppList() {
+ return mLiveData;
+ }
+}
+
+class PinnedAppListLiveData extends LiveData> {
+
+ private final Context mContext;
+ private final PackageManager mPackageManager;
+ // Store listener reference, so it won't be GC-ed.
+ private final SharedPreferences.OnSharedPreferenceChangeListener mChangeListener;
+ private int mCurrentDataVersion;
+
+ public PinnedAppListLiveData(Context context) {
+ mContext = context;
+ mPackageManager = context.getPackageManager();
+
+ final SharedPreferences prefs = context.getSharedPreferences(PINNED_APPS_KEY, 0);
+ mChangeListener = (preferences, key) -> {
+ loadData();
+ };
+ prefs.registerOnSharedPreferenceChangeListener(mChangeListener);
+
+ loadData();
+ }
+
+ private void loadData() {
+ final int loadDataVersion = ++mCurrentDataVersion;
+
+ new AsyncTask>() {
+ @Override
+ protected List doInBackground(Void... voids) {
+ List entries = new ArrayList<>();
+
+ final SharedPreferences sp = mContext.getSharedPreferences(PINNED_APPS_KEY, 0);
+ final Set pinnedAppsComponents = sp.getStringSet(PINNED_APPS_KEY, null);
+ if (pinnedAppsComponents == null) {
+ return null;
+ }
+
+ for (String componentString : pinnedAppsComponents) {
+ final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
+ mainIntent.setComponent(ComponentName.unflattenFromString(componentString));
+ mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+
+ final List apps = mPackageManager.queryIntentActivities(mainIntent,
+ PackageManager.GET_META_DATA);
+
+ if (apps != null) {
+ for (ResolveInfo app : apps) {
+ final AppEntry entry = new AppEntry(app, mPackageManager);
+ entries.add(entry);
+ }
+ }
+ }
+
+ return entries;
+ }
+
+ @Override
+ protected void onPostExecute(List data) {
+ if (mCurrentDataVersion == loadDataVersion) {
+ setValue(data);
+ }
+ }
+ }.execute();
+ }
+}
\ No newline at end of file
diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java
new file mode 100644
index 0000000000..02e6e4a9c6
--- /dev/null
+++ b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java
@@ -0,0 +1,74 @@
+/**
+ * Copyright (c) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.GridView;
+
+import androidx.fragment.app.DialogFragment;
+
+import com.android.launcher3.R;
+
+/**
+ * Callback to be invoked when an app was picked.
+ */
+interface AppPickedCallback {
+ void onAppPicked(AppEntry appEntry);
+}
+
+/**
+ * Dialog that provides the user with a list of available apps to pin to the home screen.
+ */
+public class PinnedAppPickerDialog extends DialogFragment {
+
+ private AppListAdapter mAppListAdapter;
+ private AppPickedCallback mAppPickerCallback;
+
+ public PinnedAppPickerDialog() {
+ }
+
+ public static PinnedAppPickerDialog newInstance(AppListAdapter appListAdapter,
+ AppPickedCallback callback) {
+ PinnedAppPickerDialog
+ frag = new PinnedAppPickerDialog();
+ frag.mAppListAdapter = appListAdapter;
+ frag.mAppPickerCallback = callback;
+ return frag;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.app_picker_dialog, container);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ GridView appGridView = view.findViewById(R.id.picker_app_grid);
+ appGridView.setAdapter(mAppListAdapter);
+ appGridView.setOnItemClickListener((adapterView, itemView, position, id) -> {
+ final AppEntry entry = mAppListAdapter.getItem(position);
+ mAppPickerCallback.onAppPicked(entry);
+ dismiss();
+ });
+ }
+}
\ No newline at end of file
diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java b/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java
new file mode 100644
index 0000000000..0a2f18f109
--- /dev/null
+++ b/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java
@@ -0,0 +1,229 @@
+/**
+ * Copyright (c) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3;
+
+import static com.android.launcher3.PinnedAppListViewModel.PINNED_APPS_KEY;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.app.AlertDialog;
+import android.app.Application;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewAnimationUtils;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.GridView;
+import android.widget.ImageButton;
+import android.widget.PopupMenu;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory;
+
+import com.google.android.material.circularreveal.cardview.CircularRevealCardView;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Secondary launcher activity. It's launch mode is configured as "singleTop" to allow showing on
+ * multiple displays and to ensure a single instance per each display.
+ */
+public class SecondaryDisplayLauncher extends FragmentActivity implements AppPickedCallback,
+ PopupMenu.OnMenuItemClickListener {
+
+ private AppListAdapter mAppListAdapter;
+ private AppListAdapter mPinnedAppListAdapter;
+ private CircularRevealCardView mAppDrawerView;
+ private FloatingActionButton mFab;
+
+ private boolean mAppDrawerShown;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.secondary_display_launcher);
+
+ mAppDrawerView = findViewById(R.id.FloatingSheet);
+ mFab = findViewById(R.id.FloatingActionButton);
+
+ mFab.setOnClickListener((View v) -> {
+ showAppDrawer(true);
+ });
+
+ final ViewModelProvider viewModelProvider = new ViewModelProvider(getViewModelStore(),
+ new AndroidViewModelFactory((Application) getApplicationContext()));
+
+ mPinnedAppListAdapter = new AppListAdapter(this);
+ final GridView pinnedAppGridView = findViewById(R.id.pinned_app_grid);
+ pinnedAppGridView.setAdapter(mPinnedAppListAdapter);
+ pinnedAppGridView.setOnItemClickListener((adapterView, view, position, id) -> {
+ final AppEntry entry = mPinnedAppListAdapter.getItem(position);
+ launch(entry.getLaunchIntent());
+ });
+ final PinnedAppListViewModel pinnedAppListViewModel =
+ viewModelProvider.get(PinnedAppListViewModel.class);
+ pinnedAppListViewModel.getPinnedAppList().observe(this, data -> {
+ mPinnedAppListAdapter.setData(data);
+ });
+
+ mAppListAdapter = new AppListAdapter(this);
+ final GridView appGridView = findViewById(R.id.app_grid);
+ appGridView.setAdapter(mAppListAdapter);
+ appGridView.setOnItemClickListener((adapterView, view, position, id) -> {
+ final AppEntry entry = mAppListAdapter.getItem(position);
+ launch(entry.getLaunchIntent());
+ });
+ final AppListViewModel appListViewModel = viewModelProvider.get(AppListViewModel.class);
+ appListViewModel.getAppList().observe(this, data -> {
+ mAppListAdapter.setData(data);
+ });
+
+ ImageButton optionsButton = findViewById(R.id.OptionsButton);
+ optionsButton.setOnClickListener((View v) -> {
+ PopupMenu popup = new PopupMenu(this,v);
+ popup.setOnMenuItemClickListener(this);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.context_menu, popup.getMenu());
+ popup.show();
+ });
+ }
+
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ // Respond to picking one of the popup menu items.
+ final int id = item.getItemId();
+ if (id == R.id.add_app_shortcut) {
+ FragmentManager fm = getSupportFragmentManager();
+ PinnedAppPickerDialog pickerDialogFragment =
+ PinnedAppPickerDialog.newInstance(mAppListAdapter, this);
+ pickerDialogFragment.show(fm, "fragment_app_picker");
+ return true;
+ } else if (id == R.id.set_wallpaper) {
+ Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
+ startActivity(Intent.createChooser(intent, getString(R.string.set_wallpaper)));
+ return true;
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ showAppDrawer(false);
+ }
+
+ public void onBackPressed() {
+ // If the app drawer was shown - hide it. Otherwise, not doing anything since we don't want
+ // to close the launcher.
+ showAppDrawer(false);
+ }
+
+ public void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+
+ if (Intent.ACTION_MAIN.equals(intent.getAction())) {
+ // Hide keyboard.
+ final View v = getWindow().peekDecorView();
+ if (v != null && v.getWindowToken() != null) {
+ getSystemService(InputMethodManager.class).hideSoftInputFromWindow(
+ v.getWindowToken(), 0);
+ }
+ }
+
+ // A new intent will bring the launcher to top. Hide the app drawer to reset the state.
+ showAppDrawer(false);
+ }
+
+ void launch(Intent launchIntent) {
+ launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ try {
+ startActivity(launchIntent);
+ } catch (Exception e) {
+ final AlertDialog.Builder builder =
+ new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(R.string.couldnt_launch)
+ .setMessage(e.getLocalizedMessage())
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .show();
+ }
+ }
+
+ /**
+ * Store the picked app to persistent pinned list and update the loader.
+ */
+ @Override
+ public void onAppPicked(AppEntry appEntry) {
+ final SharedPreferences sp = getSharedPreferences(PINNED_APPS_KEY, 0);
+ Set pinnedApps = sp.getStringSet(PINNED_APPS_KEY, null);
+ if (pinnedApps == null) {
+ pinnedApps = new HashSet();
+ } else {
+ // Always need to create a new object to make sure that the changes are persisted.
+ pinnedApps = new HashSet(pinnedApps);
+ }
+ pinnedApps.add(appEntry.getComponentName().flattenToString());
+
+ final SharedPreferences.Editor editor = sp.edit();
+ editor.putStringSet(PINNED_APPS_KEY, pinnedApps);
+ editor.apply();
+ }
+
+ /**
+ * Show/hide app drawer card with animation.
+ */
+ private void showAppDrawer(boolean show) {
+ if (show == mAppDrawerShown) {
+ return;
+ }
+
+ final Animator animator = revealAnimator(mAppDrawerView, show);
+ if (show) {
+ mAppDrawerShown = true;
+ mAppDrawerView.setVisibility(View.VISIBLE);
+ mFab.setVisibility(View.INVISIBLE);
+ } else {
+ mAppDrawerShown = false;
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ mAppDrawerView.setVisibility(View.INVISIBLE);
+ mFab.setVisibility(View.VISIBLE);
+ }
+ });
+ }
+ animator.start();
+ }
+
+ /**
+ * Create reveal/hide animator for app list card.
+ */
+ private Animator revealAnimator(View view, boolean open) {
+ final int radius = (int) Math.hypot((double) view.getWidth(), (double) view.getHeight());
+ return ViewAnimationUtils.createCircularReveal(view, view.getRight(), view.getBottom(),
+ open ? 0 : radius, open ? radius : 0);
+ }
+}
diff --git a/buglist.txt b/buglist.txt
index e1e95345e2..9e3e977461 100644
--- a/buglist.txt
+++ b/buglist.txt
@@ -1,22 +1,37 @@
-150522230
-150260456
-139137636
-150122946
-150260456
-151166786
-139828243
-150876921
-150644839
-146593239
-143361609
-151025334
-150864182
-151050221
-150680980
-138964382
-150788630
-146593239
-149792636
-147305863
148867106
-139137636
+139828243
+133381284
+145297320
+149969889
+label,
+144052839
+148099851
+148099851
+139750033
+148896221
+149993849
+149935239
+149967272
+148900990
+142753423
+149870691
+149870691
+149870691
+149422395
+145253300
+149927292
+144854916
+139828243
+149867607
+144052839
+148542211
+149200572
+149197172
+149199058
+149215103
+149198955
+145595763
+149481723
+139750033
+148542211
+145647019
diff --git a/buglist_unique.txt b/buglist_unique.txt
index 7caec98a4d..4e7b1be89f 100644
--- a/buglist_unique.txt
+++ b/buglist_unique.txt
@@ -1,19 +1,30 @@
-138964382
-139137636
+133381284
+139750033
139828243
-143361609
-146593239
-147305863
+142753423
+144052839
+144854916
+145253300
+145297320
+145595763
+145647019
+148099851
+148542211
148867106
-149792636
-150122946
-150260456
-150522230
-150644839
-150680980
-150788630
-150864182
-150876921
-151025334
-151050221
-151166786
+148896221
+148900990
+149197172
+149198955
+149199058
+149200572
+149215103
+149422395
+149481723
+149867607
+149870691
+149927292
+149935239
+149967272
+149969889
+149993849
+label,
diff --git a/buglist_with_title.txt b/buglist_with_title.txt
index 39a9bb4449..31e57e287d 100644
--- a/buglist_with_title.txt
+++ b/buglist_with_title.txt
@@ -27,22 +27,3 @@
149967272 hyunyoungs P1 FIXED Tap on Edit Name interaction drops the first recommendation ----
149969889 sfufa P2 FIXED [Crash] java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName ----
149993849 thiruram P1 FIXED Pixel launcher crashes when tapping on empty shortcut folder name ----
-138964382 awickham P2 ASSIGNED Move all shared libs to a common location (plugin / iconloaderlib) ----
-139137636 vadimt P2 ASSIGNED Create memory tests for Launcher ----
-139828243 xuqiu P2 ASSIGNED [Overview Actions] Add Overview actions ----
-143361609 twickham P2 ASSIGNED Overview gesture in R ----
-146593239 awickham P2 FIXED Gesture navigation fail in Facebook messenger ----
-147305863 sfufa P2 FIXED DragNDrop userevent missing target hierarchy ----
-148867106 vadimt P2 FIXED [Flaky test] AddConfigWidgetTest.testConfigCancelled ----
-149792636 dupin P2 ASSIGNED [Android 11] Blur polish ----
-150122946 sfufa P4 FIXED Work toggle styling not correct ----
-150260456 peanutbutter P1 FIXED Add Fixed Rotation Transform to Home Settings ----
-150522230 hyunyoungs P1 ASSIGNED Pixel launcher keeps crashing ('java.lang.String android.content.ComponentName.getPackageName()) ----
-150644839 twickham P3 FIXED In landscape mode, long press on app shortcut UI issue observed. ----
-150680980 jonmiranda P2 FIXED Slide up to home screen animation is not smooth ----
-150788630 hyunyoungs P1 ASSIGNED Turn off FOLDER_NAME_SUGGEST flag on QQ builds earliest possible ----
-150864182 twickham P4 FIXED Crash when dumping while user is locked ----
-150876921 jonmiranda P2 FIXED Pages views seem to snap back to previous page ----
-151025334 hyunyoungs P1 VERIFIED DeviceConfig doesn't update immediately when Pheonotype pushes ----
-151050221 dupin P1 FIXED [NO LAST KMSG] [Short Uptime] [R]DUT will display the "Pixel is starting..." after rebooting and unlocking SIM pin code ----
-151166786 sunnygoyal P2 FIXED Swipe handler and activity interface mismatch ----
diff --git a/commitlist.txt b/commitlist.txt
index e0df402838..778b5a1be3 100644
--- a/commitlist.txt
+++ b/commitlist.txt
@@ -1,556 +1,693 @@
-[34mCOMMAND>> git log f3779f129f7326cb7acb57bf6aabd68aca5b6218..3aaf3967348ff55d2b8ac6d50e59ea01d9362af9(B[m
-commit 3aaf3967348ff55d2b8ac6d50e59ea01d9362af9
-Author: Vinit Nayak
-Date: Fri Mar 13 13:57:09 2020 -0700
-
- Remove sensor manager from RecentsView
-
- This disables the rotation animation in
- overview, but should hopefully fix tests.
-
- fixes: 150260456
- Change-Id: I121cad155672c2e325cc0f83ce209be0d3806b1c
-
-commit 9caed38e34671e6b07b95bea1e971dee03b010ce
-Merge: 6d8203ef4 f546e0599
-Author: Hyunyoung Song
-Date: Fri Mar 13 16:41:17 2020 +0000
-
- Merge "Null check every ComponentName call inside FolderNameProvider" into ub-launcher3-master
-
-commit f546e0599e8127068e7d75ff787483453c781275
-Author: Hyunyoung Song
-Date: Thu Mar 12 12:53:43 2020 -0700
-
- Null check every ComponentName call inside FolderNameProvider
-
- Bug: 150522230
- Change-Id: I50007a3a781234797e16d830935a8b8585ac242b
-
-commit 6d8203ef4495f9550999f483f7c9822316b29971
-Merge: 3af717835 3388323bc
-Author: TreeHugger Robot
-Date: Fri Mar 13 03:00:46 2020 +0000
-
- Merge "Disable OrientationListener if vertical landscape not supported" into ub-launcher3-master
-
-commit 3388323bc1b598dcee37d9522c14f968a1318f8e
-Author: Vinit Nayak
-Date: Thu Mar 12 17:18:51 2020 -0700
-
- Disable OrientationListener if vertical landscape not supported
-
- Even if multiple orientations are disabled but the flag
- is on, we'll be listneing and setting different layouts.
- Seeing in some tests that that callback was getting fired
- for some reason.
-
- Fixes: 150260456
- Change-Id: I0a1c9f06cc4830d3dc8410a777d595851f1c35eb
-
-commit 3af717835652536726e42d46d5875adf5ceb3cb7
-Author: thiruram
-Date: Thu Mar 12 16:16:24 2020 -0700
-
- Fixes missing smart folder logging bug. Uses ProtoLite.toString method to log LauncherEvents.
-
- Change-Id: I45dbf189e7bd47f8d4d7ba55180e59686bd6ecae
-
-commit b6bc08ad5751e360a0e0407f7fc5cd708b7a28be
-Merge: 6aa63d9f8 984c01cbc
-Author: Tony Wickham
-Date: Thu Mar 12 21:48:42 2020 +0000
-
- Merge "Invert playNonAtomicComponent() as onlyPlayAtomicComponent()" into ub-launcher3-master
-
-commit 6aa63d9f8ec9a20c431da2f0cd05be610ed0d152
-Merge: 4e82f5bc3 f0d96f83f
+[34mCOMMAND>> git log 6a8d59d9649cde5626f57935dfeba27cb866583f..d8995a6fdaf363c5cbef2c7209b4b199c7e083af(B[m
+commit d8995a6fdaf363c5cbef2c7209b4b199c7e083af
+Merge: 3be0443d3 3dd64ca3a
Author: Vadim Tryshev
-Date: Thu Mar 12 21:01:30 2020 +0000
+Date: Fri Feb 28 22:29:47 2020 +0000
- Merge "Fixing activity leak via accumulation of draw listeners" into ub-launcher3-master
+ Merge "Revert "TAPL: Verifying activity start/stop events"" into ub-launcher3-master
-commit f0d96f83f72e81ffc0f14db60c50c022839bb6e7
+commit 3dd64ca3a8a43c4b0fcb28a761d9379c0de0e1de
+Author: Vadim Tryshev
+Date: Fri Feb 28 22:28:16 2020 +0000
+
+ Revert "TAPL: Verifying activity start/stop events"
+
+ This reverts commit 1186700c9a9d282824bad4b9cc566974c287a49d.
+
+ Reason for revert: Fails in the lab
+
+ Change-Id: I6715a058c76d96752b904331968b46a07ce93f85
+
+commit 3be0443d377ee78af88bbe5d9551cfeefd280e06
+Merge: 23ceafe3d f450b2500
+Author: Vadim Tryshev
+Date: Fri Feb 28 21:34:25 2020 +0000
+
+ Merge "Revert "Enabling flaky tests per our new flaky test policy"" into ub-launcher3-master
+
+commit f450b2500c6854f59ad9b8ccc373199c631e681b
+Author: Vadim Tryshev
+Date: Fri Feb 28 21:33:16 2020 +0000
+
+ Revert "Enabling flaky tests per our new flaky test policy"
+
+ This reverts commit 983145c5944ae8c44166a1bccce94f077e3e9106.
+
+ Reason for revert: Too flaky
+
+ Change-Id: Ifabb638d6ce0a539518bc0b6b667a9783b6ca29d
+
+commit 23ceafe3d5d1766f458c5cfe3234e92ea35db85a
+Merge: 64a932ed2 dc24231e4
+Author: Zak Cohen
+Date: Fri Feb 28 21:21:36 2020 +0000
+
+ Merge "TAPL tests - make all apps in overview checks less fragile." into ub-launcher3-master
+
+commit dc24231e4faff53750a06e64a16d596add296dbe
+Author: Zak Cohen
+Date: Fri Feb 28 11:59:33 2020 -0800
+
+ TAPL tests - make all apps in overview checks less fragile.
+
+ Tests that check for all apps in overview mode were only checking for
+ actions being enabled. This isn't sufficient logic, two button mode also
+ uses all apps.
+
+ Centralize the check for all apps.
+
+ Test: local tapl tests
+ Change-Id: If1bf98019e6f1aea8f7967883aba6780743e9d6b
+
+commit 64a932ed2a7e166257c107676f35eb2e3c3c4c7c
+Merge: 1fabbf5a2 1186700c9
+Author: Vadim Tryshev
+Date: Fri Feb 28 19:22:32 2020 +0000
+
+ Merge "TAPL: Verifying activity start/stop events" into ub-launcher3-master
+
+commit 1fabbf5a23f2bb0aa83a2b9ceb7b255274e9ff03
+Merge: 7ff297a81 983145c59
+Author: Vadim Tryshev
+Date: Fri Feb 28 18:29:23 2020 +0000
+
+ Merge "Enabling flaky tests per our new flaky test policy" into ub-launcher3-master
+
+commit 983145c5944ae8c44166a1bccce94f077e3e9106
Author: vadimt
-Date: Tue Mar 10 13:44:58 2020 -0700
+Date: Thu Feb 27 17:58:59 2020 -0800
- Fixing activity leak via accumulation of draw listeners
+ Enabling flaky tests per our new flaky test policy
- Bug: 139137636
- Change-Id: I0a2f0849f886acaac31746ac7c9724c765692e88
-
-commit 4e82f5bc364f66d9a6ac72071db0d18e5a7fd956
-Author: Sunny Goyal
-Date: Thu Mar 12 12:29:33 2020 -0700
-
- Fixing crash when swiping up using 3P Launcher
+ I'll check whether the tests are still flaky and assign to the test
+ owner if they are.
- Change-Id: Ia181edc1a00136374b3f0d848beccf0c9acd7b5c
+ Bug: 148867106
+ Change-Id: Ic850abc862b0f266b100aa6bfff4e89b3802e50d
-commit f85fcc792f74b3143670cef9e260ffb1b68a1f9f
-Merge: b9ec9319c f5a4deb12
-Author: TreeHugger Robot
-Date: Thu Mar 12 18:12:59 2020 +0000
-
- Merge "Hide work apps when work profile is paused" into ub-launcher3-master
-
-commit f5a4deb120731f116aea6b2161560f4e81502260
-Author: Samuel Fufa
-Date: Wed Mar 4 16:24:06 2020 -0800
-
- Hide work apps when work profile is paused
-
- - hide overlay icon in landscape mode
- - don't show edu if user has already seen legacy work profile edu
- - make sure personal tab is highlighted when work profile is reinstalled
- - always go home after a work profile is added or removed
- - add tests for work edu flow
-
- Bug: 150122946
- Test: Manual
- Change-Id: I8f80ac763acf03ca31a534464f4ddfd84528d329
-
-commit b9ec9319c5534cf6ebd8df2ee1144e1ebb477c33
-Author: Vinit Nayak
-Date: Wed Mar 4 12:05:28 2020 -0800
-
- Add fixed_rotation_transform to home settings
-
- This sets the feature flag on launcher side
- and also updates the setting in Settings.Global
- Launcher DOES NOT listen to the Settings.Global
- change from adb anymore. This should take
- preference over setting it from command line.
-
- Also fix a related swipe to home animation bug
- that happened w/ merge conflict.
-
- Fixes: 150260456
- Test: Set and unset, visually verified behavior.
- Tested w/ autorotate on and off.
- Checked Settings.Global value correctly updated
- via "adb shell settings get global
- fixed_rotation_transform"
- TODO: Update tests to reflect this new
- default-on fixed rotation behavior.
-
- Change-Id: Id95f006eb1e92a59e24b05567298fd21b1409b13
-
-commit 984c01cbcda8ab31c24c6a27118d9c1934c23795
-Author: Tony Wickham
-Date: Fri Mar 6 15:56:46 2020 -0800
-
- Invert playNonAtomicComponent() as onlyPlayAtomicComponent()
-
- This avoids the double negative we use in a few places, so should be clearer.
- Also added some comments to explain what the animComponents are used for.
-
- Change-Id: Ibd25bd12efce6553b377bbd9c0651e4f4ac3e498
-
-commit 31ff98e14491edda33a7ccd2be04795bdaad124c
-Merge: 4acdb3bcd 9e19866ed
-Author: TreeHugger Robot
-Date: Thu Mar 12 00:26:57 2020 +0000
-
- Merge "Only allow horizontal spring if page will change." into ub-launcher3-master
-
-commit 4acdb3bcd7f69e0cd42b7fae16176cbe15b551aa
-Merge: 6a550f26a 003782f93
-Author: Sunny Goyal
-Date: Thu Mar 12 00:20:15 2020 +0000
-
- Merge "Removing some properties out of AnimationBuilder" into ub-launcher3-master
-
-commit 6a550f26a79564575cee5dfe15338c64ffe00d2b
-Merge: 0abe81991 fa617d89c
-Author: TreeHugger Robot
-Date: Thu Mar 12 00:15:44 2020 +0000
-
- Merge "Using FallbackSwipeHandler in 2-button mode" into ub-launcher3-master
-
-commit 003782f93c8b5096ebf6e64fbfa7e3483c11d685
-Author: Sunny Goyal
-Date: Fri Mar 6 14:52:17 2020 -0800
-
- Removing some properties out of AnimationBuilder
-
- AnimationBuilder and PendingAnimation have similar logic. This will
- allow to unify the two classes
-
- Change-Id: Id8c1d8a7020d132adbccdc6c80538ed6556cb75e
-
-commit 0abe81991398556485d6605dbeb57b64e2414f92
-Merge: 9c47ddd2a 21167f01d
-Author: TreeHugger Robot
-Date: Wed Mar 11 23:27:05 2020 +0000
-
- Merge "[Overview Actions] Hide other tasks for select mode UI." into ub-launcher3-master
-
-commit fa617d89cece2c08c03fa7506700bed93d060cf7
-Author: Sunny Goyal
-Date: Wed Mar 11 16:20:25 2020 -0700
-
- Using FallbackSwipeHandler in 2-button mode
-
- Bug: 151166786
- Change-Id: Ia86af76c1779bafa4690e733a7e6764973c8ae0d
-
-commit 21167f01d4877d5927e4cd473cf6fcf61acc54d8
+commit 7ff297a81faee4815a1feba6d64e6dd464bb7f0d
Author: Becky Qiu
-Date: Thu Mar 5 11:26:34 2020 -0800
+Date: Fri Feb 28 01:38:44 2020 +0000
- [Overview Actions] Hide other tasks for select mode UI.
+ Revert "[Overview Actions] Disable swiping for TaskView if it's in select mode."
- Test:local
- Bug:139828243
+ This reverts commit 0499fb2060af0b7d065d77b22c81f4f77ee24eed.
- Change-Id: Idc9c6a0e354b9df7f48f3ce93b560fdc4999fc3a
-
-commit 9e19866ed86de5237ea02810e28fb56f3ab80616
-Author: Jon Miranda
-Date: Wed Mar 11 14:42:02 2020 -0700
-
- Only allow horizontal spring if page will change.
+ Reason for revert: This might break the post submit test. See b/150401176
- Bug: 150876921
- Change-Id: I88db4c28ec3f8213c583e8a0dcd1cce2b1fee322
+ Change-Id: Iafc420fff72de8e83ce5e325fc1e5b1a1efe7350
-commit 9c47ddd2a60aacd5663e040cf1f90d65896544a4
-Merge: 8780065fd ddb08885f
-Author: Tony Wickham
-Date: Wed Mar 11 21:10:04 2020 +0000
+commit 2fe6fb967163e4c91f90a1680b2004ec45e0730e
+Merge: eecb258cc 3d64ffd4a
+Author: Vadim Tryshev
+Date: Thu Feb 27 22:28:59 2020 +0000
- Merge "Try orienting popup the other way if offset pushes it out of bounds" into ub-launcher3-master
+ Merge "Fixing activity leak via alarm in SecondaryDropTarget" into ub-launcher3-master
-commit 8780065fdbe9e0b012f110d523447bcf4022a191
-Merge: 25960bcd8 2768a2468
-Author: Automerger Merge Worker
-Date: Wed Mar 11 20:17:17 2020 +0000
+commit 3d64ffd4a53e73c6fb4c04d6f144878ce4710d65
+Author: vadimt
+Date: Thu Feb 27 11:28:47 2020 -0800
- [automerger skipped] Merge "[DO NOT MERGE] Adds fling gesture suppression to Launcher" into ub-launcher3-qt-qpr1-dev am: 631ed598ee -s ours am: 2768a24688 -s ours
+ Fixing activity leak via alarm in SecondaryDropTarget
- am skip reason: subject contains skip directive
+ Change-Id: I12c099ee1bb55d9db81e14d27d2eb09fbbc83e0f
+
+commit eecb258cc7c81ce04feb903b15267257d480c8bc
+Merge: 0e0b17636 9a4df4dba
+Author: Zak Cohen
+Date: Thu Feb 27 19:48:51 2020 +0000
+
+ Merge changes from topic "enable" into ub-launcher3-master
- Change-Id: I36a95c05e2cef2bb615c67c30697c8a1b07b4c6f
+ * changes:
+ Overview Actions - Enable by default.
+ TAPL test update - don't run all apps in overview tests with actions.
-commit 25960bcd88b97727c9892dfce0ad57761ef3a992
-Merge: 9c40c83d7 f3b22ffee
-Author: Automerger Merge Worker
-Date: Wed Mar 11 20:17:10 2020 +0000
+commit 0e0b1763612778dc94d3c29e4d32018c854dbcc7
+Merge: 3ba680055 da12b805c
+Author: Vadim Tryshev
+Date: Thu Feb 27 19:45:39 2020 +0000
- [automerger skipped] [DO NOT MERGE] Adds fling gesture suppression to Launcher am: f3b22ffee6 -s ours
-
- am skip reason: subject contains skip directive
-
- Change-Id: I38695bd05d74b8a526e61c2b55b2d2669e4e31a7
+ Merge "Not showing "mismatched events" and other diags after Launcher crashes" into ub-launcher3-master
-commit 2768a24688171fddd0ed4e8fa720d308736c2ca8
-Merge: f3b22ffee 631ed598e
-Author: Automerger Merge Worker
-Date: Wed Mar 11 20:05:05 2020 +0000
-
- [automerger skipped] Merge "[DO NOT MERGE] Adds fling gesture suppression to Launcher" into ub-launcher3-qt-qpr1-dev am: 631ed598ee -s ours
-
- am skip reason: subject contains skip directive
-
- Change-Id: I6a1906e1e7e302ca6886f3ecdeac5d374476020e
-
-commit ddb08885f9d51db577aedc386cc3a90d054132b2
-Author: Tony Wickham
-Date: Tue Mar 10 18:25:31 2020 -0700
-
- Try orienting popup the other way if offset pushes it out of bounds
-
- orientAboutObject() currently determines whether the popup should align
- its left side with the icon or the right side. However, after
- determining this, there is an offset to ensure the popup lines up with
- the icon as expected, which might push it out of bounds. In that case,
- we fallback to centering the popup. However, there might be plenty of
- room on the other side, so we should just align the other direction
- instead. Updated the logic to do that by first trying to align left
- (in LTR) or right (in RTL), then trying again with the other alignment
- if it doesn't fit after all x calculations are made.
-
- Bug: 150644839
- Change-Id: I219dae331bf790e461d91394ffe025d40ec54c9b
-
-commit f3b22ffee691dca3e8a5cc3c0a1fb1d19ce8a5ad
-Author: Govinda Wasserman
-Date: Thu Mar 5 16:50:22 2020 -0500
-
- [DO NOT MERGE] Adds fling gesture suppression to Launcher
-
- Test: Tested locally
- BUG: 150688842
- Change-Id: Ifa96bd01363de47cf1d8cdce34d81d525c8c2c04
- (cherry picked from commit 9b90b1b0345ea57a6152919d318f4ce9cacd7556)
-
-commit 631ed598ee115bdfa1b3249a87c1f266eb93d57d
-Merge: 9a32222ce 9b90b1b03
-Author: Govinda Wasserman
-Date: Wed Mar 11 18:19:26 2020 +0000
-
- Merge "[DO NOT MERGE] Adds fling gesture suppression to Launcher" into ub-launcher3-qt-qpr1-dev
-
-commit 9b90b1b0345ea57a6152919d318f4ce9cacd7556
-Author: Govinda Wasserman
-Date: Thu Mar 5 16:50:22 2020 -0500
-
- [DO NOT MERGE] Adds fling gesture suppression to Launcher
-
- Test: Tested locally
- BUG: 150688842
- Change-Id: Ifa96bd01363de47cf1d8cdce34d81d525c8c2c04
-
-commit 9c40c83d70bbe4689e1bddc012aec6d7a04dc490
-Merge: b41aa64b8 86ace5452
-Author: Automerger Merge Worker
-Date: Tue Mar 10 20:55:30 2020 +0000
-
- [automerger skipped] Merge "Dismisses system overlays for Home intent." into ub-launcher3-qt-future-dev am: 86ace54523 -s ours
-
- am skip reason: Change-Id Ib9c85de2f83f99d1ef53fb17fde5d0b3c514849a with SHA-1 65ced1b1d0 is in history
-
- Change-Id: I70904c253ac6ad36820069f64d9338ee067d159b
-
-commit b41aa64b8df2256f554c7ea4fa96c10464d1a7b6
-Merge: d7c844167 5e72945a8
-Author: Automerger Merge Worker
-Date: Tue Mar 10 20:55:18 2020 +0000
-
- [automerger skipped] Merge "Import translations. DO NOT MERGE" into ub-launcher3-rvc-dev am: 5e72945a85 -s ours
-
- am skip reason: subject contains skip directive
-
- Change-Id: Ib8b27aa6ad4e4f0ed4bdebf3bb7b7cac654fad25
-
-commit d7c84416765d4883fa2d8bba595c058db042325f
-Merge: 0a9471546 3c1db273b
-Author: Hyunyoung Song
-Date: Tue Mar 10 19:15:37 2020 +0000
-
- Merge "DeviceFlag change is not detected when phenotype updates." into ub-launcher3-master
-
-commit 5e72945a852ba56976835874a7c012726d2e00d6
-Merge: a066cb443 a159b77ef
+commit 3ba6800552f699f6937e7ff6d24ff66c20d6c2cc
+Merge: 9f62bc10a 1779a3829
Author: TreeHugger Robot
-Date: Tue Mar 10 17:45:51 2020 +0000
+Date: Thu Feb 27 19:19:14 2020 +0000
- Merge "Import translations. DO NOT MERGE" into ub-launcher3-rvc-dev
+ Merge "Using StrictMode to detect activity leaks" into ub-launcher3-master
-commit 86ace54523dc354fadd65987e5ace43f89586e34
-Merge: 44e729895 b3b8aefe5
+commit 1186700c9a9d282824bad4b9cc566974c287a49d
+Author: vadimt
+Date: Fri Feb 14 14:42:35 2020 -0800
+
+ TAPL: Verifying activity start/stop events
+
+ It also turned out that Pilfer event seems to come in a
+ non-deterministic order relative to the events from the Main and TIS
+ sequences. So I moved it to its own sequence.
+
+ Change-Id: I5851aafb6d04398c5727712eaf8561916a30c4c5
+
+commit 9f62bc10afe375032453d5361707acd6c9df439b
+Merge: b5565fb62 dbc758305
+Author: Vadim Tryshev
+Date: Thu Feb 27 19:08:29 2020 +0000
+
+ Merge "Remove unnecessary PilferPointer events and enable testPressHomeOnAllAppsContextMenu" into ub-launcher3-master
+
+commit b5565fb62fb0256395c4a2fd9abf07c83451f26b
+Merge: 39c610192 0499fb206
+Author: Becky Qiu
+Date: Thu Feb 27 18:48:09 2020 +0000
+
+ Merge "[Overview Actions] Disable swiping for TaskView if it's in select mode." into ub-launcher3-master
+
+commit 39c610192a8350adba64fdf6869f9b560163cb80
+Merge: de9823243 6f9637662
Author: TreeHugger Robot
-Date: Tue Mar 10 17:42:54 2020 +0000
+Date: Thu Feb 27 01:14:52 2020 +0000
- Merge "Dismisses system overlays for Home intent." into ub-launcher3-qt-future-dev
+ Merge "Catching OOM exceptions in auto-investigator" into ub-launcher3-master
-commit a159b77ef149652daf56e4f413fd4dbc264b032b
-Author: Bill Yi
-Date: Tue Mar 10 09:56:26 2020 -0700
+commit de9823243a73662c211a5d405511d6bcf4f1f0a6
+Merge: 833cd4320 f2a15f1be
+Author: Zak Cohen
+Date: Wed Feb 26 21:25:36 2020 +0000
- Import translations. DO NOT MERGE
+ Merge "Make RectFSpringAnim resilient to negative height starting rect." into ub-launcher3-master
+
+commit da12b805cc1c02b03048430840d4772399bcb733
+Author: vadimt
+Date: Wed Feb 26 12:17:47 2020 -0800
+
+ Not showing "mismatched events" and other diags after Launcher crashes
- Auto-generated-cl: translation import
- Change-Id: I4d6b82f9e793cf2649102e913c81c27f6ccc004a
+ Change-Id: Iee5f8813c3610314d486589bc361466a05da0ecb
-commit 0a947154691988747aae405018c8ddb36be27a05
-Merge: f2508e783 44e729895
-Author: Automerger Merge Worker
-Date: Tue Mar 10 16:21:57 2020 +0000
+commit f2a15f1be54735ef41fe3a1dfea7f196a2e93b04
+Author: Zak Cohen
+Date: Wed Feb 26 10:53:53 2020 -0800
- [automerger skipped] Merge "Import translations. DO NOT MERGE" into ub-launcher3-qt-future-dev am: 44e7298953 -s ours
- am skip reason: subject contains skip directive
+ Make RectFSpringAnim resilient to negative height starting rect.
- Change-Id: I1b060550e9d0f839c96b1582712321ef530e353f
+ Test: ran tapl tests, failed before, passed after
+ Change-Id: I10b82dd348b5c12550e60b145c76dad542aa56e8
-commit 44e729895391cd49acc938004c6044fc652ea9db
-Merge: defd3c0e6 83730697f
+commit 833cd43206cefdc2d653d2ab42cb5b6c9317b278
+Merge: 5991eb833 65ed9c3d9
Author: TreeHugger Robot
-Date: Tue Mar 10 16:18:29 2020 +0000
+Date: Wed Feb 26 17:47:59 2020 +0000
- Merge "Import translations. DO NOT MERGE" into ub-launcher3-qt-future-dev
+ Merge "Adding a failure investigator" into ub-launcher3-master
-commit f2508e783f624f423bb892a0060d84cbfc36052f
-Merge: e635a2689 defd3c0e6
-Author: Automerger Merge Worker
-Date: Tue Mar 10 16:16:51 2020 +0000
+commit 5991eb83377e84011d90cc40eb3ebe7617292a49
+Merge: b066af18a 5bb63c916
+Author: TreeHugger Robot
+Date: Wed Feb 26 17:42:40 2020 +0000
- [automerger skipped] Import translations. DO NOT MERGE am: 9a32222ce7 -s ours am: defd3c0e6f -s ours
- am skip reason: subject contains skip directive
+ Merge changes from topic "new-task-snapshots-ub-launcher3-master" into ub-launcher3-master
- Change-Id: I5eb69f5179f420f1ab678a025ab7bf28f93f595a
+ * changes:
+ Toggle loading state based on config_lowResTaskSnapshotScale
+ Add config to enable snapshot preloading
-commit defd3c0e6fc964cbbb5801cf045bd6de9689a0c7
-Merge: 94c993a63 9a32222ce
-Author: Automerger Merge Worker
-Date: Tue Mar 10 16:04:16 2020 +0000
+commit b066af18a51a7ab6ac167c3b9c5532c6aed1f294
+Merge: 0c5f58afb e6981a606
+Author: TreeHugger Robot
+Date: Wed Feb 26 07:59:20 2020 +0000
- [automerger skipped] Import translations. DO NOT MERGE am: 9a32222ce7 -s ours
- am skip reason: subject contains skip directive
+ Merge "Update mEndRect when closing ArrowPopup" into ub-launcher3-master
+
+commit dbc7583054405ab0f87a9394c56ecbf4241d8159
+Author: vadimt
+Date: Wed Feb 19 19:17:28 2020 -0800
+
+ Remove unnecessary PilferPointer events and enable testPressHomeOnAllAppsContextMenu
- Change-Id: I4fe5c187cc89f91199f3265f43d323556a992841
+ Change-Id: I04199f46024b05f05d04ba2be7a797842bb48527
-commit e635a2689d0b75065a7a8d5fae031382137303a6
-Merge: dbcc63ede a066cb443
-Author: Automerger Merge Worker
-Date: Tue Mar 10 16:04:12 2020 +0000
+commit 0499fb2060af0b7d065d77b22c81f4f77ee24eed
+Author: Becky Qiu
+Date: Tue Feb 25 15:12:55 2020 -0800
- [automerger skipped] Import translations. DO NOT MERGE am: a066cb4430 -s ours
- am skip reason: subject contains skip directive
+ [Overview Actions] Disable swiping for TaskView if it's in select mode.
- Change-Id: I2cd255fd2f265718df096d05f3c8a67c78662c58
+ This including swiping up to dismiss, down to launch app, left and right to switch apps.
+
+ Test: local
+ Bug: 139828243
+ Change-Id: Ib588c8725fb765097d03a5def719abdffd603708
-commit dbcc63edebe373d5f698e7d404eff83898a5b8b2
+commit 0c5f58afb716d22fa3adb3a1962483f4430ae63c
+Merge: f17241918 e7e91fd60
+Author: Tracy Zhou
+Date: Wed Feb 26 01:01:24 2020 +0000
+
+ Merge "Connect split-screen things to systemui divider" into ub-launcher3-master
+
+commit f1724191896786e5e957489b34ef5692d43aed46
+Merge: 37f435d62 bb18f4c9c
+Author: TreeHugger Robot
+Date: Wed Feb 26 00:50:47 2020 +0000
+
+ Merge "Fixing log message" into ub-launcher3-master
+
+commit 37f435d62462c31c99c32d9222f539b104338a06
+Merge: 43a161579 20cc7a3b5
+Author: TreeHugger Robot
+Date: Wed Feb 26 00:35:40 2020 +0000
+
+ Merge "Update proguard flags." into ub-launcher3-master
+
+commit e7e91fd60e5f78e63dd1b92fe21cb38a9f0cc494
+Author: Evan Rosky
+Date: Wed Nov 20 17:00:06 2019 -0800
+
+ Connect split-screen things to systemui divider
+
+ Since divider stuff lives in sysui instead of framework
+
+ Bug: 133381284
+ Test: Manual, open 2 apps in split and drag-up to show
+ recents.
+ Change-Id: If6740b7ee4829bf4cac6e829e81943f16a41f977
+ (cherry picked from commit 3ef159becdbda1041781920eb816d041bd88da44)
+
+commit bb18f4c9c6acfeef5666493ae904020b55414fd9
Author: Sunny Goyal
-Date: Fri Mar 6 15:35:55 2020 -0800
+Date: Tue Feb 25 15:27:06 2020 -0800
- Removing some autoboxing during property animation
+ Fixing log message
- Change-Id: Ibd6f20c565a4d66dc6d606b3f0bbc96fec66fe56
+ Change-Id: I0668ea273a54ea741b1b871a50a8738c0ec4788b
-commit add170098c5696948edbd7d7e3f220c801cfc9eb
-Merge: d01ee6d6a 4c9ee6354
+commit 9a4df4dba1512f4aa67da5c7f9d69a1ad22f3805
+Author: Zak Cohen
+Date: Wed Feb 19 14:52:10 2020 -0800
+
+ Overview Actions - Enable by default.
+
+ Enable the Overview Actions feature flag by default.
+
+ Test: local
+ Bug: 145297320
+ Change-Id: I6f4a2b6e90704b78d1ff1f77bbfea2d8789169ff
+
+commit 43a161579600c2f7cbce8d96e2474f97983f7d15
+Author: Zak Cohen
+Date: Tue Feb 25 14:29:37 2020 -0800
+
+ Hide apps view in transitions if none of its parts are visible.
+
+ Check where the all apps view has any pieces visible, if not hide it.
+
+ Test: local
+ Change-Id: I1d9b957b6c10dfbe4beaa56c4fee920844699a6c
+
+commit fe935dfbc198192780f9c3bdd94fdfb1b849d33b
+Author: Zak Cohen
+Date: Thu Feb 20 15:08:10 2020 -0800
+
+ TAPL test update - don't run all apps in overview tests with actions.
+
+ Overview actions removes the all apps from overview. Don't run the tests
+ that depend on these.
+ Ultimately need to add more tests for the actions.
+
+ Test: tapl local
+ Change-Id: I2471d10af7bc03a40a94f99aa16354b85bdb3ad7
+
+commit 1779a38290933a2b72df87795b5c8f1758da2ece
+Author: vadimt
+Date: Tue Feb 25 14:41:01 2020 -0800
+
+ Using StrictMode to detect activity leaks
+
+ Change-Id: I615f641897d57be0cd31be944796c6931ef9ab00
+
+commit 6f96376620b34b68c5896d25a315fc0f8b72ac80
+Author: vadimt
+Date: Tue Feb 25 11:05:39 2020 -0800
+
+ Catching OOM exceptions in auto-investigator
+
+ In the development environment, the device may stay for long time
+ without reboot, and the logcat size may turn to be long enough to
+ overflow the memory.
+
+ Suppressing OOM exceptions.
+
+ Change-Id: I562e2c03312e88f669d9cb660af6e8849dc0c8ef
+
+commit d71c3b185de62a50b730bbf389d48ead9ccc6315
+Merge: 86430dd2d 93c4de741
+Author: TreeHugger Robot
+Date: Tue Feb 25 18:23:19 2020 +0000
+
+ Merge "Setting interpolator beforehand, instead of overriding it after the pending animaiton is created" into ub-launcher3-master
+
+commit 86430dd2d25ba69220f20e5cc2f5379cadcef27c
+Merge: 6382b39ff b79614cc9
+Author: TreeHugger Robot
+Date: Tue Feb 25 18:20:39 2020 +0000
+
+ Merge "Performing a check for a crashed Launcher process for each UI test" into ub-launcher3-master
+
+commit 65ed9c3d9bb6c0086613b3e6512bdb0a1f673936
+Author: vadimt
+Date: Mon Feb 24 19:10:50 2020 -0800
+
+ Adding a failure investigator
+
+ Change-Id: Ie1c9820ecb7373a1f4428a24867c51332a84e65c
+
+commit b79614cc93f7a54dead7c19e6e225cc4a832ba53
+Author: vadimt
+Date: Mon Feb 24 18:24:05 2020 -0800
+
+ Performing a check for a crashed Launcher process for each UI test
+
+commit 6382b39ff4605fbe30d8edf9ba25d32a7c04d7e5
+Author: Tony Wickham
+Date: Mon Feb 24 17:06:17 2020 -0800
+
+ Add null check to sendCustomAccessibilityEvent()
+
+ ag/10273975 caused a regression where launcher crashes if RecentsView is
+ empty.
+
+ Change-Id: I1607627be0a9748fd552adc757296d7b6bbfd1e2
+
+commit e6981a606abac6fe70cbb9fdefd16a25fb2f2f58
+Author: Tony Wickham
+Date: Mon Feb 24 17:33:20 2020 -0800
+
+ Update mEndRect when closing ArrowPopup
+
+ Generally mEndRect is still correct from when we set it in
+ animateOpen(), but there are cases where it is no longer valid and
+ should be recomputed in animateClose(). For example, if you dismiss
+ notifications, the height of the popup changes between opening and
+ closing it.
+
+ Test: Long press an icon with a notification dot, dismiss all
+ notifications from the popup and then close the popup. The shadow
+ follows the outline of the popup, instead of extending well below it.
+
+ Change-Id: Ic5d6ad2807ea1ec8aff5e3d6ce8abaa11ce5d33c
+
+commit 93c4de7413f40a3660fdecb3a19fe5271e93d360
Author: Sunny Goyal
-Date: Tue Mar 10 08:43:41 2020 +0000
+Date: Mon Feb 24 16:39:36 2020 -0800
- Merge "Converting some anonymous classes to lambda calls" into ub-launcher3-master
+ Setting interpolator beforehand, instead of overriding it after the pending
+ animaiton is created
+
+ Change-Id: I7caec2eeb86084591fa627518d064b7ebb895d65
-commit b3b8aefe5751bf55ef32f61148f2a9b6c811db9e
+commit 20cc7a3b5b2ef2e49b85d2cd51320c4c0183e244
+Author: Amos Bianchi
+Date: Mon Feb 24 15:35:49 2020 -0800
+
+ Update proguard flags.
+
+ Fully R8 optimized variants may crash with:
+ java.lang.AbstractMethodError exception.
+
+ Test: build, manual test on device.
+ Change-Id: I18a7b011ddd3536e3d33b991954a52e5fc5c7d56
+
+commit 436573401765cdc97d8cf672ace3ccbea16badeb
+Merge: 6b7fbd22d be13d109b
+Author: Tracy Zhou
+Date: Mon Feb 24 20:01:58 2020 +0000
+
+ Merge "Render user's actual workspace in ThemePicker preview (Part 3)" into ub-launcher3-master
+
+commit 6b7fbd22dda79a31e75da18da4b0bf05cd25a85a
+Merge: d2c56525b 27d3c595c
Author: Andy Wickham
-Date: Tue Mar 10 01:36:02 2020 +0000
+Date: Mon Feb 24 18:49:12 2020 +0000
- Dismisses system overlays for Home intent.
-
- Test: Used Facebook chatheads (not system bubble).
- Before the change, Home gesture didn't work. After
- the change, it does work :)
- Bug: 146593239
-
- Merged-In: Ib9c85de2f83f99d1ef53fb17fde5d0b3c514849a
- Change-Id: I19d91aaed19ccaec68478e364ce6b80049d49a98
+ Merge "Makes all ArrowPopups AccessibilityTargets." into ub-launcher3-master
-commit a066cb4430989496e80770bbac04c68b2d515f2b
-Author: Bill Yi
-Date: Mon Mar 9 19:41:30 2020 -0700
+commit d2c56525bb18c5e971aced5f60857c2f70d502d6
+Merge: 7fa947cb3 a173193af
+Author: Sunny Goyal
+Date: Mon Feb 24 18:30:13 2020 +0000
- Import translations. DO NOT MERGE
-
- Auto-generated-cl: translation import
- Change-Id: I91780ce30d4eb9825d415e2825b9a94e2a4fade8
+ Merge "Using LeastSquaresVelocityTrackerStrategy for calculating velocity when detecting motion pause events. This is the same logic used by the platform implementation VelocityTracker" into ub-launcher3-master
-commit 83730697f8416f8124bb0a6593aba5334f38546e
-Author: Bill Yi
-Date: Mon Mar 9 19:37:07 2020 -0700
-
- Import translations. DO NOT MERGE
-
- Auto-generated-cl: translation import
- Change-Id: I833e37768c8b22a17cd5e36ac7b01ac024f3bbfc
-
-commit 9a32222ce76b37911e42fdfa500d3e47623d459d
-Author: Bill Yi
-Date: Mon Mar 9 19:32:09 2020 -0700
-
- Import translations. DO NOT MERGE
-
- Auto-generated-cl: translation import
- Change-Id: I4cb33e7020ee7cb582982fecba72dfd7f2c70469
-
-commit d01ee6d6a84ca0fcc2dbc4757cdc90e36da02692
-Merge: 7dfe1360e 94c993a63
-Author: Automerger Merge Worker
-Date: Tue Mar 10 01:05:38 2020 +0000
-
- [automerger skipped] Merge "[DO NOT MERGE] Fix some visual jumps when swiping home" into ub-launcher3-qt-future-dev am: 94c993a635 -s ours
- am skip reason: subject contains skip directive
-
- Change-Id: I2b30725cd240cdc7ebfcb50eb2180aaf81ab4267
-
-commit 94c993a635f00796b00c45b47b29496fe891839c
-Merge: e1664fcf1 8caa78790
-Author: Jonathan Miranda
-Date: Tue Mar 10 00:49:17 2020 +0000
-
- Merge "[DO NOT MERGE] Fix some visual jumps when swiping home" into ub-launcher3-qt-future-dev
-
-commit 7dfe1360edbe9ea64c0b8c591ffc525ba9a5a581
-Merge: 590914cc5 79a352169
+commit 7fa947cb316945f40cab5cf7b5ed20e8b82dc219
+Merge: bc5056391 5a93eb3ba
Author: TreeHugger Robot
-Date: Tue Mar 10 00:46:11 2020 +0000
+Date: Mon Feb 24 18:24:22 2020 +0000
- Merge "Show drag handle indictor in 2 zone model" into ub-launcher3-master
+ Merge "Fix NPE on app launch log" into ub-launcher3-master
-commit 79a352169f0197f5d0ea2be32cd8cf2f7dbef1ad
+commit 5a93eb3bafbe38bccd34c59c4843c318135f7975
+Author: Samuel Fufa
+Date: Fri Feb 21 18:51:36 2020 -0800
+
+ Fix NPE on app launch log
+
+ Bug: 149969889
+ Change-Id: I60fd283ac082fab1ebf6ea90568e054525c414cc
+
+commit bc50563915e92d3eec594c45af365f327d277996
+Merge: 218f5276a a241df66d
+Author: Sreyas Rangaraju
+Date: Sat Feb 22 01:11:47 2020 +0000
+
+ Merge "OverviewActions: Creating parent view to house RecentsView and Overview Actions." into ub-launcher3-master
+
+commit 218f5276a3b8e7ac3a5d3dc95c30087149e52e5b
+Merge: 3310b76a2 15d79a9b8
+Author: TreeHugger Robot
+Date: Sat Feb 22 00:55:55 2020 +0000
+
+ Merge "Fixes incorrect FromFolderLabelState in clearcut log when updating folder label." into ub-launcher3-master
+
+commit 3310b76a27ef0f7bdb332e82faea498e868c5f9a
+Merge: 6b029c30b a754374c3
Author: Tony Wickham
-Date: Mon Mar 9 16:31:21 2020 -0700
+Date: Sat Feb 22 00:34:09 2020 +0000
- Show drag handle indictor in 2 zone model
+ Merge "Remove mSourceWindowClipInsetsForLiveTile" into ub-launcher3-master
+
+commit 15d79a9b85cb58319e51ffa364ab38e804da307f
+Author: thiruram
+Date: Fri Feb 21 14:31:02 2020 -0800
+
+ Fixes incorrect FromFolderLabelState in clearcut log when updating folder label.
- Note this is just the tiny arrow we show in accessibility mode, will
- probably need to get some updated visual treatment going forward.
+ Bug description: When folder label is updated from a suggested label to a custom label,
+ EditFolderLabelEvent log expected to have FromFolderLabelState = FROM_SUGGESTED.
+ Currently FromFolderLabelState is logged as FROM_CUSTOM in such scenarios.
- Bug: 143361609
- Change-Id: I65975727f101984429aadc35a650826e36d9c9aa
-
-commit 590914cc5ec219590f56cea52d975865187e7e0e
-Merge: e9801665a 65ced1b1d
-Author: TreeHugger Robot
-Date: Mon Mar 9 22:00:20 2020 +0000
-
- Merge "Dismisses system overlays for Home intent." into ub-launcher3-master
-
-commit e9801665ac81ac0d4059991377a3a782f92dfe66
-Merge: b365cc438 e1664fcf1
-Author: Automerger Merge Worker
-Date: Mon Mar 9 21:42:07 2020 +0000
-
- [automerger skipped] [DO NOT MERGE] Initiailize APP_SEARCH_IMRPOVEMENT flag outside DEBUG builds. am: e1664fcf14 -s ours
- am skip reason: subject contains skip directive
+ Root cause: Folder label state is decided based on whether IME has entered into compose mode while editing.
+ This works fine for initial folder creation and also updated to non-empty label(to both custom or suggested).
+ But when folder is edited from suggested to empty label, its internal state changes from SUGGESTED to CUSTOM as expected.
+ Later when empty label is updated to suggested again, its internal state remains custom forever.
- Change-Id: I06a7e3ef6f5a0d6ed852b0b32238426ca3ba3809
+ Fix: Instead of setting folder's internal state based on IME's compose mode, comparing actual folder label with suggestions
+ and set it to SUGGESTED if any suggestion matches else CUSTOM.
+
+ Change-Id: Ieea572ee93fd5567e3128c9bbcea3b670f0f01d9
-commit 3c1db273bec12d4bb0573e20bc0f6ecc5b7e18b7
+commit a241df66df203e1fcb5133cb93f0968591003b25
+Author: Sreyas
+Date: Wed Feb 5 16:58:34 2020 -0800
+
+ OverviewActions: Creating parent view to house RecentsView and Overview Actions.
+
+ Creating RecentsViewHolder to be contain LauncherRecentsView in OverviewPanel so Overview Actions View can be created only once.
+
+ Change-Id: I111f88903d2ff80275cc2e07b761577260073c17
+
+commit be13d109b7d422e89a994554d2c4be30a86338b2
+Author: Tracy Zhou
+Date: Sun Jan 12 01:07:59 2020 -0800
+
+ Render user's actual workspace in ThemePicker preview (Part 3)
+
+ go/grid-migration-preview
+
+ With this change, we can see actual grid migration in wallpaper preview.
+
+ The approach here: we use a tmp table (favorites_preview) here specifically for this preview (to write off the migration results), and load from this tmp table workspace items if migration is necessary and successful. Otherwise, we load from the current workspace.
+
+ UPDATED: this change should be completely compatible with the new multi-db grid migration algorithm. Here is why
+ 1. In LauncherPreviewRender#renderScreenShot, I added a check to decide which grid migration preview method we should call. Once v2 preview method is implemented, it should be integrated with other parts of this change perfectly (the reason will be mentioned below).
+ 2. While we have multiple DBs, mOpenHelper in LauncherProvider always points to the current db we are using. Queries using CONTENT_URI is routed to whatever DB mOpenHelper points to, so it works perfectly to directly operate on CONTENT_URI even when we use multi-db underneath the hood.
+ 3. With 1 and 2 mentioned, I believe in order for this preview change to support multi-db, we only need to implement the V2 grid migration algorithm. Because most of what we are doing in this change is wrapped in GridSizeMigrationTask, it's perfectly safeguarded.
+
+ Bug: 144052839
+ Change-Id: Ie6d6048d77326f96546c8a180a7cd8f15b47e4c4
+
+commit 5bb63c916e757ca90a3ad56ccb6a8e340bb4fcab
+Author: Peter Kalauskas
+Date: Fri Jan 24 18:51:13 2020 -0800
+
+ Toggle loading state based on config_lowResTaskSnapshotScale
+
+ Change high res loading state implementation to toggle on/off based on
+ config_lowResTaskSnapshotScale!=0 instead of ro.config.low_ram=true
+
+ Test: TaskSnapshotCacheTest
+ Test: TaskSnapshotControllerTest
+ Test: TaskSnapshotPersisterLoaderTest
+ Test: TaskSnapshotSurfaceTest
+ Bug: 148099851
+ Change-Id: I316e553a8a13fe38f1224c38f7aa717a0f628f57
+
+commit 6b029c30b1e36435f4fd6c65bbe6d9f6f6b4d0c0
+Merge: 977940502 8605be316
Author: Hyunyoung Song
-Date: Sat Mar 7 23:52:17 2020 -0800
+Date: Fri Feb 21 23:36:29 2020 +0000
- DeviceFlag change is not detected when phenotype updates.
-
- Bug: 151025334
- Test: adb shell device_config put launcher FOLDER_NAME_SUGGEST false
-
- Change-Id: I5e478aebfea5847cf7cbe7c0cb6cb0c6f81481cb
+ Merge "Convert LauncherPluginLib to soong" into ub-launcher3-master
-commit b365cc43878e0cb4e6d4b998c10cd590adc4cb8d
+commit 03c8f296cd9ed6a95c4de07213c0ba0fda277023
+Author: Peter Kalauskas
+Date: Tue Feb 18 16:20:27 2020 -0800
+
+ Add config to enable snapshot preloading
+
+ Enable preloading if config_enableTaskSnapshotPreloading instead of
+ assuming it should be off for all low ram devices. This allows it to be
+ configured via an overlay.
+
+ Test: TaskSnapshotCacheTest
+ Test: TaskSnapshotControllerTest
+ Test: TaskSnapshotPersisterLoaderTest
+ Test: TaskSnapshotSurfaceTest
+ Bug: 148099851
+ Change-Id: I9e3320dcff5b710e110cc7199c41c5a004991592
+
+commit a173193afa082647db3cd44ce34403773aacad6a
+Author: Sunny Goyal
+Date: Thu Feb 20 12:03:39 2020 -0800
+
+ Using LeastSquaresVelocityTrackerStrategy for calculating velocity
+ when detecting motion pause events. This is the same logic used by
+ the platform implementation VelocityTracker
+
+ Bug: 139750033
+ Change-Id: I87aabd46e58a5caa1395be3a63fd38d0ee75e355
+
+commit 8605be3162fab552a0b950a2c4016986abe62148
+Author: Hyunyoung Song
+Date: Fri Feb 21 14:52:25 2020 -0800
+
+ Convert LauncherPluginLib to soong
+
+ Bug: 148896221
+ Change-Id: I0c09ba2994cf2a8e230aebc51eb52a8acadf8686
+
+commit 9779405023996bbe6bc2f9a050d66f4dbd9d5385
+Merge: 621c1a8be 4e3eaa5a7
+Author: TreeHugger Robot
+Date: Fri Feb 21 20:36:35 2020 +0000
+
+ Merge "[Overview Actions] Add ControlType for overview action buttons." into ub-launcher3-master
+
+commit 621c1a8be7a0ee1ffff4af7a3f1e8c0e5a3c10ee
+Merge: b47a08ad1 6d3e5465e
+Author: Hyunyoung Song
+Date: Fri Feb 21 20:08:20 2020 +0000
+
+ Merge "Update the suggestFolderName when items are added and deleted from folders" into ub-launcher3-master
+
+commit b47a08ad1eb7ce8b7b6ef7eb00b02f45ba6f88d6
+Merge: fb5d542f5 888b516a2
+Author: TreeHugger Robot
+Date: Fri Feb 21 20:05:38 2020 +0000
+
+ Merge "Fixes NPE when creating folder with null suggestedFolderNames." into ub-launcher3-master
+
+commit 888b516a22ebb0a33be0656ede18606c037e9db3
+Author: thiruram
+Date: Fri Feb 21 10:42:23 2020 -0800
+
+ Fixes NPE when creating folder with null suggestedFolderNames.
+
+ Bug: 149993849
+
+ Change-Id: Ia2758b76aef1812dab225c8a95e7141fcdeefab4
+
+commit 6d3e5465e23ef48bdd7a572c985ada779cbb9f42
+Author: Hyunyoung Song
+Date: Wed Feb 19 23:32:04 2020 -0800
+
+ Update the suggestFolderName when items are added and deleted from folders
+
+ Bug: 149935239
+ Bug: 149967272
+ Bug: 148900990
+
+ Change-Id: I0ed27236ad22579a1f3dcfd35a32252c5b1f6691
+
+commit fb5d542f51cb2a4532bb006bd36cf5f71a9e68f3
+Merge: 1562d104b 46b4f5816
+Author: TreeHugger Robot
+Date: Fri Feb 21 17:33:27 2020 +0000
+
+ Merge "Increase FileLog days" into ub-launcher3-master
+
+commit 46b4f581610d322287473e8070a10f649c6985d6
+Author: Samuel Fufa
+Date: Wed Feb 19 15:56:12 2020 -0800
+
+ Increase FileLog days
+
+ Bug: 142753423
+ Change-Id: I43ccfe540cb0899a4a4ab6722b6670e830457f60
+
+commit 1562d104b86fa4f231dbe823d96c61d27fb65057
+Merge: f1030cf56 2f41808e9
+Author: Vadim Tryshev
+Date: Fri Feb 21 00:27:46 2020 +0000
+
+ Merge "Updating logcat reading logic" into ub-launcher3-master
+
+commit f1030cf5642d8d21b1d1c47d3b3518fa7a388b64
+Merge: aeaad97eb d1d342b1c
Author: Tony Wickham
-Date: Mon Mar 9 13:20:04 2020 -0700
+Date: Thu Feb 20 22:53:10 2020 +0000
- Fix crash when dumping before user unlocks
+ Merge changes Ie48f4b66,Ia48f4453 into ub-launcher3-master
- Bug: 150864182
- Bug: 151050221
- Change-Id: I29ba2ef66b4359a47f866d02306498537c45236e
+ * changes:
+ Always update clip rect before applying surface params
+ Clean up AppWindowAnimationHelper and TransformParams
-commit e1664fcf1486d337ea998ded70d092590a0bfbd9
-Author: Alex Mang
-Date: Mon Mar 9 12:57:11 2020 -0700
+commit a754374c30195ecac5f54b3243f5a23e8dfaa8d2
+Author: Tony Wickham
+Date: Wed Feb 19 13:30:34 2020 -0800
- [DO NOT MERGE] Initiailize APP_SEARCH_IMRPOVEMENT flag outside DEBUG builds.
+ Remove mSourceWindowClipInsetsForLiveTile
- This is addressing a bug where flags are only changed on debug build
- devices or initially when changes. When nexuslauncher restarts the flag
- is no longer retrieved.
+ It seems that the only time it is used, it is the same as
+ mSourceWindowClipInsets anyway.
- Change-Id: Ieb6f460a271c918ee4e493b34692244f39cb3740
+ Bug: 149870691
+ Change-Id: I3b1a5a47a0d49cdd6eb8a3271ca24da6c17109cb
-commit 8caa787906b49427afed77e7bd63b72d9bbbe8a7
-Author: Jon Miranda
-Date: Mon Mar 9 12:50:38 2020 -0700
+commit d1d342b1c72c1dd500208098d82be18f4b23cf62
+Author: Tony Wickham
+Date: Wed Feb 19 16:04:25 2020 -0800
- [DO NOT MERGE] Fix some visual jumps when swiping home
+ Always update clip rect before applying surface params
- All caused by running the transform progress from 0 to 1 instead of
- starting at whatever the progress was before ending the gesture, e.g.:
+ Previously, we were only updating the clip rect when params.currentRect
+ == null, meaning the clip would be stale once the caller started
+ providing its own rect (e.g. when swiping to home).
+
+ Also fix some visual jumps when swiping home, all caused by running the
+ transform progress from 0 to 1 instead of starting at whatever the
+ progress was before ending the gesture, e.g.:
- When swiping to home without animating into an icon, the corner radius
was set back to the window corner radius.
- Before this change, the clip didn't update throughout the animation,
@@ -558,220 +695,271 @@ Date: Mon Mar 9 12:50:38 2020 -0700
this change, the clip jumped to show the insets again before clipping
back down during the home animation.
- Partial backport of ag/Ie48f4b665a5bf3cbef76bdf7f043febe99fb84a0
-
- Bug: 150680980
- Change-Id: Ida65097f0ef7d2e11d48b84ecdd353ef89078015
+ Bug: 149870691
+ Change-Id: Ie48f4b665a5bf3cbef76bdf7f043febe99fb84a0
-commit bf48cd480cd131c370760117681917dedd784c51
+commit badab61ace41602c78dd59732a1b954c7c0cf4aa
+Author: Tony Wickham
+Date: Wed Feb 19 12:59:37 2020 -0800
+
+ Clean up AppWindowAnimationHelper and TransformParams
+
+ AppWindowAnimationHelper and TransformParams were being very tightly
+ intertwined, to the point that you really had to understand subtle
+ nuances of both in order to get a desired behavior. This makes making
+ changes really difficult, because there are lots of "traps" to know
+ about and navigate. To help alleviate this burden, cleaned up some of
+ these traps and give AWAH and TP distinct roles:
+ - A caller who needs to animate an app window needs both AWAH and TP.
+ TP defines specific parameters of how the app window should be
+ controlled, and AWAH simply reads from TP in order to provide the
+ desired behavior.
+ - Only the caller should write to TP; AWAH should no longer change
+ anything in a TP that is passed to it. For instance, instead of
+ repurposing TP.currentRect, AWAH now has its own mCurrentRect to
+ update based on passed parameters.
+ - TP is a very basic class that just holds various values that callers
+ can set one at a time. The order should not matter (setting one value
+ will never set another one), and defaults make sense.
+ - Commented the setter methods in TP so developers shouldn't have to
+ follow the code to see how they are used.
+
+ Bug: 149870691
+ Change-Id: Ia48f4453c29549271a3fc6538128a1a77439e015
+
+commit 2f41808e9b7e361341c70c6978301f90bbacfc03
+Author: vadimt
+Date: Wed Feb 19 14:19:17 2020 -0800
+
+ Updating logcat reading logic
+
+ Start a thread to read logcat synchronusly instead
+ of back-tracking at the end of the test
+
+ Also:
+ * Reusing the same logcat process for all checks. This eliminates
+ reading the log from its start for every gesture. We don’t kill that
+ process at the end, and don’t stop the thread. I’ve verified that
+ “am instrument” doesn’t hang, and the logcat process gets automatically
+ killed after the test process exits.
+ * Not using mStarted latch, as there is no need to wait until the reader
+ reaches the start mark.
+
+ Bug: 149422395
+ Change-Id: Ide4ed19ad8d099c41918f38c2b073b8b2e143b69
+
+commit 27d3c595cfd3c462b93364c357253c2f4b686f37
Author: Andy Wickham
-Date: Tue Mar 3 01:15:27 2020 +0000
+Date: Thu Feb 20 20:32:07 2020 +0000
- Removes iconloaderlib from Launcher3.
+ Makes all ArrowPopups AccessibilityTargets.
- (It's now in frameworks/libs/systemui)
+ This currently includes the menu that pops up when
+ long pressing an app icon in Launcher or Search, or
+ long pressing Smartspace. Previously, only the menu
+ for Launcher apps grabbed accessibility focus after
+ the open animation completed, and now all three do.
- Bug: 138964382
- Test: builds
- Change-Id: Ic60adfb2ebdcf1a72b440df26023b861fd6e62d5
+ Fixes: 145253300
+ Change-Id: I147b45d38a04ab9a55eee9b5bd5551b4c7185fcf
-commit a9bcd82554534d55e38ca039eb52c1dfacbdb70a
-Merge: e6df7da2a cfaa4889e
-Author: TreeHugger Robot
-Date: Sat Mar 7 08:38:49 2020 +0000
-
- Merge "Enabling springs for start dismiss animation" into ub-launcher3-master
-
-commit e6df7da2a252c5d57114346d6bf6d6883b4a9f9a
-Merge: df8232c22 16eca5500
-Author: TreeHugger Robot
-Date: Sat Mar 7 07:19:13 2020 +0000
-
- Merge "Enabling event verification for Launcher3" into ub-launcher3-master
-
-commit cfaa4889e65190b40ea988dd03421a01c9e06abc
-Author: Sunny Goyal
-Date: Tue Feb 25 14:37:01 2020 -0800
-
- Enabling springs for start dismiss animation
-
- > Adding flag support for PendingAnimation which can be used
- to define custom behavior for various animations
- > Using SpringAnimationBuild for spring animation instead of
- SpringObjectanimator
-
- Change-Id: I41ca34b0574981bb3fc7894639a321c12e6feac1
-
-commit df8232c2242eeb2d8efc050a5e7afb88782ed9ca
-Merge: cfea0fb34 f538393e4
-Author: Automerger Merge Worker
-Date: Sat Mar 7 06:50:59 2020 +0000
-
- [automerger skipped] [DO NOT MERGE] Turn off FOLDER_NAME_SUGGEST feature flag am: f538393e42 -s ours
- am skip reason: subject contains skip directive
-
- Change-Id: I1bbffc4f9582d106ce28ac07e6c6719c9f8f063d
-
-commit f538393e42896e5488ca10fccc4cf9409d7295e2
-Author: Hyunyoung Song
-Date: Fri Mar 6 12:53:42 2020 -0800
-
- [DO NOT MERGE] Turn off FOLDER_NAME_SUGGEST feature flag
- Bug: 150788630
-
- Change-Id: I740d6b6f3ee1a33a95debfafa29b3caea24a03c3
-
-commit 65ced1b1d00bc6a6713b442162020df31d497f54
-Author: Andy Wickham
-Date: Sat Mar 7 02:14:19 2020 +0000
-
- Dismisses system overlays for Home intent.
-
- Test: Used Facebook chatheads (not system bubble).
- Before the change, Home gesture didn't work. After
- the change, it does work :)
- Fixes: 146593239
-
- Change-Id: Ib9c85de2f83f99d1ef53fb17fde5d0b3c514849a
-
-commit cfea0fb348910bb245a03df0e178f0be59905dc7
-Merge: 312340504 e7dd35ef0
-Author: TreeHugger Robot
-Date: Sat Mar 7 00:20:56 2020 +0000
-
- Merge "OverviewActions: Renaming overview_actions_container and setActionsView" into ub-launcher3-master
-
-commit 31234050473d511a61ce4dc257c15281c1c886b4
-Merge: f655f5cd1 27409e23d
-Author: Sunny Goyal
-Date: Fri Mar 6 23:44:57 2020 +0000
-
- Merge "Removing SecondaryDisplayLauncher library as it is directly included in Launcher" into ub-launcher3-master
-
-commit f655f5cd16a9579afc11088e5545148261225b9f
-Merge: a579ddc9c 8687bc213
-Author: Winson Chung
-Date: Fri Mar 6 23:33:26 2020 +0000
-
- Merge "Initial changes to support blur" into ub-launcher3-master
-
-commit 4c9ee63540dcd2c039831edb0816a56458e30f8f
-Author: Sunny Goyal
-Date: Fri Mar 6 15:16:22 2020 -0800
-
- Converting some anonymous classes to lambda calls
-
- Change-Id: I386046a4a515d84801a8bbd11cfa090ba7adfd71
-
-commit 8687bc2131ce98ea0d058290dd21f03b5a429c82
-Author: Winson Chung
-Date: Thu Feb 27 23:34:24 2020 -0800
-
- Initial changes to support blur
-
- - Add a new controller to update the background blur on either the
- launcher or app surfaces based on state or transition
-
- Bug: 149792636
-
- Change-Id: I6103cd3d53a00c8025558dd49bb73137e2980014
-
-commit a579ddc9c813f314ab3dfd4e80a9c0cf1c77ec61
+commit aeaad97eb7ac5610491c35d2bc7bd15758d22966
Author: Samuel Fufa
-Date: Thu Feb 27 16:59:19 2020 -0800
+Date: Thu Feb 20 11:21:26 2020 -0800
- Refactor logging to capture Target hierarchy
+ Increase timeout for WorkTabTest.toggleWorks test
- Instead of creating a fixed number of targets, we now pass an ArrayList
- of targets to. Any class implementing
- LogContainerProviders#fillInLogContainerData can setup it's own target
- and add it to the ArrayList, It can also pass the ArrayList to other
- LogContainerProvider to capture full Target hierarchy.
-
- Bug: 147305863
- Change-Id: I0063c692120fb9e1cff2d8902c5da972d0623418
+ Bug: 149927292
+ Change-Id: I6dcd0bfa2fe584be9e46f653992f9c748e795614
-commit e7dd35ef0dd653764e57665756e33ce75446e520
-Author: Sreyas
-Date: Fri Mar 6 10:50:43 2020 -0800
-
- OverviewActions: Renaming overview_actions_container and setActionsView
-
- Change-Id: Ie444101f246e0d00980b47ce39f6e74dade23f73
-
-commit 9099dfcfb75dff987c157a659de5883fe92b22c4
-Merge: e90adc47e 04b90c0fc
-Author: Vadim Tryshev
-Date: Fri Mar 6 18:36:05 2020 +0000
-
- Merge "Test tweaks for the memory activity recreation test" into ub-launcher3-master
-
-commit e90adc47ef114e129a14382f30d84910ef394348
+commit d446f984576fa7fbd5ed0555bdcb6a42440f12a4
+Merge: 7be160170 f3b7246bf
Author: Winson Chung
-Date: Fri Mar 6 00:01:49 2020 -0800
+Date: Thu Feb 20 06:37:46 2020 +0000
- Fallback to predefined orientation handler if recents view isn't available
+ Merge "Adding new tracing call from SysUI" into ub-launcher3-master
+
+commit 7be160170d1f1e81f0eea4305a8d01031a8633be
+Merge: 91f97cb2d 10a285dc2
+Author: Tracy Zhou
+Date: Thu Feb 20 05:53:45 2020 +0000
+
+ Merge "Render user's actual workspace in ThemePicker preview (Part 5)" into ub-launcher3-master
+
+commit f3b7246bf273b69a1a7390b4fbb7794ed57168ee
+Author: Winson Chung
+Date: Wed Nov 20 12:27:06 2019 -0800
+
+ Adding new tracing call from SysUI
- Change-Id: Iaed42fb9ef598d65e1cf2d166cc343f888352d47
+ Bug: 144854916
+ Test: This change is only to ensure the changes build
+ Change-Id: I62b247b45454861328b6062ed571c854a374aa34
-commit d9da5a45fd1653c14e6fd54b15708a696c43c037
-Merge: f67ab6c64 3abc8511a
+commit 91f97cb2d1e5be3a17b040e34732b10df14c975f
+Merge: 6e82910a4 d1c077972
Author: TreeHugger Robot
-Date: Fri Mar 6 06:53:51 2020 +0000
+Date: Thu Feb 20 01:49:30 2020 +0000
- Merge "Enabling widget config tests after fixing flakiness" into ub-launcher3-master
+ Merge "Increase timeout for flaky work test" into ub-launcher3-master
-commit 16eca5500dab2f253f52920edaed477f5e43f413
-Author: vadimt
-Date: Thu Mar 5 19:02:18 2020 -0800
+commit 4e3eaa5a71d127f30927e07cc42ddfa7afcb4887
+Author: Becky Qiu
+Date: Wed Feb 19 17:37:22 2020 -0800
- Enabling event verification for Launcher3
+ [Overview Actions] Add ControlType for overview action buttons.
- Will help investigating otherwise mysterious failures.
+ Design: go/logging_for_overview_actions
- Change-Id: I805ed136baf6d86921fdb4782304fcdafbd3af5c
+ Test:local, logging result: https://paste.googleplex.com/6489148393259008
+
+ Bug:139828243
+
+ Change-Id: I61fa66f8ec6edae43f6242599f8d4ea8e28d735d
-commit f67ab6c64d0691f7ff1ede3942179172122dac1e
-Merge: 93648b0a5 bb2bf277c
+commit 6e82910a45539afab26f60d60261c1b56c3885d7
+Merge: 9fb7d28b6 619daaf82
Author: TreeHugger Robot
-Date: Fri Mar 6 02:14:19 2020 +0000
+Date: Thu Feb 20 01:16:42 2020 +0000
- Merge "Catching everything from dumpHprofData" into ub-launcher3-master
+ Merge "Give current TaskView accessibility focus" into ub-launcher3-master
-commit bb2bf277c0b22ecb1dc64d9971978d3c958dda44
-Author: vadimt
-Date: Thu Mar 5 17:22:18 2020 -0800
+commit d1c07797269afc77608809b72088f89fad71acf9
+Author: Samuel Fufa
+Date: Wed Feb 19 17:07:00 2020 -0800
- Catching everything from dumpHprofData
+ Increase timeout for flaky work test
- Change-Id: I79ced1d4bb3e6ea43ce6fa5bd07fe22b577006f9
+ Bug:149867607
+ Change-Id: Ic746a4857a47fc29372d19419ddfa6eaebd06f87
-commit 3abc8511a51afe983b481bdf6631535aa8b94f28
-Author: vadimt
-Date: Thu Mar 5 14:01:23 2020 -0800
+commit 10a285dc24b75cb7469f284c945ea348ea305139
+Author: Tracy Zhou
+Date: Tue Feb 18 11:52:53 2020 -0800
- Enabling widget config tests after fixing flakiness
+ Render user's actual workspace in ThemePicker preview (Part 5)
- Bug: 148867106
- Change-Id: I8bbd9ef9b1ca574f79f3f76869051495b59734ce
+ This change takes care of rendering widgets using widget provider's layout info.
+
+ Test: manual
+ Bug: 144052839
+
+ Change-Id: I7002d8bf653513cdd317736d550a47f61f0ee474
-commit 27409e23d1ba7ca94031de8ff0603c53b86cfcdc
+commit 9fb7d28b638d70be07337ce2c73038bdcfaf8b5d
+Author: Andy Wickham
+Date: Thu Feb 20 00:07:06 2020 +0000
+
+ Removes exported="true" for RecentsActivity.
+
+ Change-Id: Iea9ad04886c3221cefa709c14b6501b2af83af06
+
+commit 2eac20e3789bbd3d47d07a291d85fec9a7c53772
+Merge: b3c991f7d 63b7f3633
+Author: Andy Wickham
+Date: Wed Feb 19 23:51:20 2020 +0000
+
+ Merge "Renames BackGestureTutorialActivity to GestureSandboxActivity." into ub-launcher3-master
+
+commit b3c991f7d344966a1892efd1a4077ad9b6d91161
+Merge: 1e33123a0 9ac4b580a
+Author: TreeHugger Robot
+Date: Wed Feb 19 21:45:38 2020 +0000
+
+ Merge "null check in showLableSuggestion()." into ub-launcher3-master
+
+commit 63b7f36338c5ccce05b97d8fa16e740142360d4a
+Author: Andy Wickham
+Date: Tue Feb 18 23:19:42 2020 +0000
+
+ Renames BackGestureTutorialActivity to GestureSandboxActivity.
+
+ Bug: 148542211
+ Change-Id: Iaac537380b02f1c52f967748c30fe49ac36bb91e
+
+commit 1e33123a0ba651ccd9f020d333e6787948344bd5
+Merge: 6eebaab5d 3b0c1f3ac
+Author: Andy Wickham
+Date: Wed Feb 19 21:11:20 2020 +0000
+
+ Merge "Allows multiple gesture blocking activities to be specified." into ub-launcher3-master
+
+commit 9ac4b580a1a5caabab15cb5b1eafa584da5f9504
+Author: jayaprakashs
+Date: Wed Feb 19 12:38:05 2020 -0800
+
+ null check in showLableSuggestion().
+
+ It throws NPE when the data is missing for all the packages and all the suggestions are null.
+
+ Change-Id: I4aa36969e1aee00bcfc577a839d6da01d4e67a75
+
+commit 6eebaab5d6ba9094715652f4b1107e43e5cb6035
+Merge: aeb185e74 c3bd4d0e7
+Author: TreeHugger Robot
+Date: Wed Feb 19 20:10:59 2020 +0000
+
+ Merge "Updating Pause detection to use motion events directly" into ub-launcher3-master
+
+commit aeb185e744f8d1edac11dad6bd254bd0b741d9fb
+Merge: b8d1e3526 ccebfbe27
+Author: Samuel Fufa
+Date: Wed Feb 19 19:53:38 2020 +0000
+
+ Merge "Clean up work profile" into ub-launcher3-master
+
+commit ccebfbe2733e6570d3af0622262a1eb2e5633478
+Author: Samuel Fufa
+Date: Mon Feb 10 09:26:20 2020 -0800
+
+ Clean up work profile
+
+ This includes
+ - Dismiss work edu on launcher state change
+ - Remove work tab flash on first setup
+ - Make edu bottom sheet adopt theme color
+ - Fix Work toggle bottom inset
+
+
+ Bug: 149200572
+ Bug: 149197172
+ Bug: 149199058
+ Bug: 149215103
+ Bug: 149198955
+ Bug: 145595763
+ Bug:149481723
+
+ Test: Manual
+ Change-Id: I39a30782b80fd3a66bede55754fa30a940d2caee
+
+commit c3bd4d0e75e150a44169551eba27db48bc66a462
Author: Sunny Goyal
-Date: Wed Feb 26 16:08:20 2020 -0800
+Date: Tue Feb 18 17:32:57 2020 -0800
- Removing SecondaryDisplayLauncher library as it is directly included in Launcher
+ Updating Pause detection to use motion events directly
- Change-Id: I97a1fad07f2f6d34fc31c720fcc1e03d0f56477e
+ Bug: 139750033
+ Change-Id: Ib261b203fec941f3c5303eafc1d435efdf3dbcaf
-commit 04b90c0fcb316c830f7dc66475ff85c6760402f5
-Author: vadimt
-Date: Tue Oct 15 10:47:51 2019 -0700
+commit 3b0c1f3acaea80c332da2b49b35a58f1d5a1f53c
+Author: Andy Wickham
+Date: Fri Feb 14 00:31:54 2020 +0000
- Test tweaks for the memory activity recreation test
+ Allows multiple gesture blocking activities to be specified.
- Speeding up switching navigation mode by switching from latch
- (which is not fired) to polling. I'll figure out later why the latch
- doesn't work.
+ Bug: 148542211
+ Change-Id: Ie299359eb2df60f5f08d156dc6882fa133fab27c
+
+commit 619daaf82a65cbd1190a676b8582f1a7eb1cb774
+Author: Tony Wickham
+Date: Fri Feb 7 12:29:06 2020 -0800
+
+ Give current TaskView accessibility focus
- Bug: 139137636
- Change-Id: I28a9b2b9a3882919fd2a3280b9804afe1b44a46e
+ Send TYPE_VIEW_FOCUSED in the following places:
+ - When page transition ends on a task
+ - When finishing state transition to overview
+ - When un-hiding the current running task view
+
+ Bug: 145647019
+ Change-Id: I7bb357ea60e1dea79daf2ad50efa51071e064da8
diff --git a/quickstep/AndroidManifest.xml b/quickstep/AndroidManifest.xml
index 1d0b0455c8..d3606132e5 100644
--- a/quickstep/AndroidManifest.xml
+++ b/quickstep/AndroidManifest.xml
@@ -26,7 +26,6 @@
-
+ layout="@layout/overview_actions_holder" />
diff --git a/quickstep/recents_ui_overrides/res/values/colors.xml b/quickstep/recents_ui_overrides/res/values/colors.xml
index 361f5f70c0..7426e30396 100644
--- a/quickstep/recents_ui_overrides/res/values/colors.xml
+++ b/quickstep/recents_ui_overrides/res/values/colors.xml
@@ -1,18 +1,4 @@
-
#fff
diff --git a/quickstep/recents_ui_overrides/res/values/config.xml b/quickstep/recents_ui_overrides/res/values/config.xml
deleted file mode 100644
index 527eec6457..0000000000
--- a/quickstep/recents_ui_overrides/res/values/config.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- 150
- 90
- 50
- 20
-
\ No newline at end of file
diff --git a/quickstep/recents_ui_overrides/res/values/dimens.xml b/quickstep/recents_ui_overrides/res/values/dimens.xml
index 20b148537f..61c576e82b 100644
--- a/quickstep/recents_ui_overrides/res/values/dimens.xml
+++ b/quickstep/recents_ui_overrides/res/values/dimens.xml
@@ -1,18 +1,4 @@
-
1dp
20dp
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
index 95198b8e36..772820719b 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
@@ -20,7 +20,7 @@ import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.HOTSEAT_ICONS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
-import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS;
+import static com.android.launcher3.LauncherStateManager.ANIM_ALL;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_HOTSEAT_SCALE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_HOTSEAT_TRANSLATE;
@@ -91,9 +91,8 @@ public final class LauncherAppTransitionManagerImpl extends QuickstepAppTransiti
AppWindowAnimationHelper helper =
new AppWindowAnimationHelper(recentsView.getPagedViewOrientedState(), mLauncher);
- Animator recentsAnimator = getRecentsWindowAnimator(taskView, skipLauncherChanges,
- appTargets, wallpaperTargets, mLauncher.getBackgroundBlurController(), helper);
- anim.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION));
+ anim.play(getRecentsWindowAnimator(taskView, skipLauncherChanges, appTargets,
+ wallpaperTargets, helper).setDuration(RECENTS_LAUNCH_DURATION));
Animator childStateAnimation = null;
// Found a visible recents task that matches the opening app, lets launch the app from there
@@ -220,7 +219,7 @@ public final class LauncherAppTransitionManagerImpl extends QuickstepAppTransiti
LauncherStateManager stateManager = mLauncher.getStateManager();
return stateManager.createAtomicAnimation(
stateManager.getCurrentStableState(), OVERVIEW, builder,
- ANIM_ALL_COMPONENTS, ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW);
+ ANIM_ALL, ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW);
}
default:
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java
index ec46418949..425fb13990 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/AppsDividerView.java
@@ -16,7 +16,6 @@
package com.android.launcher3.appprediction;
-import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
import static com.android.launcher3.LauncherState.ALL_APPS;
import android.annotation.TargetApi;
@@ -292,7 +291,7 @@ public class AppsDividerView extends View implements LauncherStateManager.StateL
public void setContentVisibility(boolean hasHeaderExtra, boolean hasAllAppsContent,
PropertySetter setter, Interpolator headerFade, Interpolator allAppsFade) {
// Don't use setViewAlpha as we want to control the visibility ourselves.
- setter.setFloat(this, VIEW_ALPHA, hasAllAppsContent ? 1 : 0, allAppsFade);
+ setter.setFloat(this, ALPHA, hasAllAppsContent ? 1 : 0, allAppsFade);
}
@Override
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java
index 8faec46580..834e6cf0fb 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/appprediction/PredictionRowView.java
@@ -1,5 +1,5 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
+/**
+ * Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,11 +16,8 @@
package com.android.launcher3.appprediction;
-import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound;
-import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
-import static com.android.launcher3.logging.LoggerUtils.newTarget;
import android.annotation.TargetApi;
import android.content.Context;
@@ -47,7 +44,6 @@ import com.android.launcher3.ItemInfoWithIcon;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
-import com.android.launcher3.LauncherState;
import com.android.launcher3.R;
import com.android.launcher3.WorkspaceItemInfo;
import com.android.launcher3.allapps.AllAppsStore;
@@ -191,7 +187,7 @@ public class PredictionRowView extends LinearLayout implements
public int getExpectedHeight() {
return getVisibility() == GONE ? 0 :
Launcher.getLauncher(getContext()).getDeviceProfile().allAppsCellHeightPx
- + getPaddingTop() + getPaddingBottom();
+ + getPaddingTop() + getPaddingBottom();
}
@Override
@@ -286,8 +282,7 @@ public class PredictionRowView extends LinearLayout implements
mParent.onHeightUpdated();
}
- private List processPredictedAppComponents(
- List components) {
+ private List processPredictedAppComponents(List components) {
if (getAppsStore().getApps().length == 0) {
// Apps have not been bound yet.
return Collections.emptyList();
@@ -314,26 +309,16 @@ public class PredictionRowView extends LinearLayout implements
}
@Override
- public void fillInLogContainerData(ItemInfo childInfo, LauncherLogProto.Target child,
- ArrayList parents) {
+ public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target,
+ LauncherLogProto.Target targetParent) {
for (int i = 0; i < mPredictedApps.size(); i++) {
ItemInfoWithIcon appInfo = mPredictedApps.get(i);
- if (appInfo == childInfo) {
- child.predictedRank = i;
+ if (appInfo == info) {
+ targetParent.containerType = LauncherLogProto.ContainerType.PREDICTION;
+ target.predictedRank = i;
break;
}
}
- parents.add(newContainerTarget(LauncherLogProto.ContainerType.PREDICTION));
-
- // include where the prediction is coming this used to be Launcher#modifyUserEvent
- LauncherLogProto.Target parent = newTarget(LauncherLogProto.Target.Type.CONTAINER);
- LauncherState state = mLauncher.getStateManager().getState();
- if (state == LauncherState.ALL_APPS) {
- parent.containerType = LauncherLogProto.ContainerType.ALLAPPS;
- } else if (state == OVERVIEW) {
- parent.containerType = LauncherLogProto.ContainerType.TASKSWITCHER;
- }
- parents.add(parent);
}
public void setTextAlpha(int textAlpha) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
index 2cdcd20732..0b054277e1 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
@@ -226,9 +226,12 @@ public class HotseatPredictionController implements DragController.DragListener,
}
}
if (animate) {
- if (callback != null) {
- animationSet.addListener(AnimationSuccessListener.forRunnable(callback));
- }
+ animationSet.addListener(new AnimationSuccessListener() {
+ @Override
+ public void onAnimationSuccess(Animator animator) {
+ if (callback != null) callback.run();
+ }
+ });
animationSet.start();
} else {
if (callback != null) callback.run();
@@ -572,9 +575,9 @@ public class HotseatPredictionController implements DragController.DragListener,
}
@Override
- public void fillInLogContainerData(ItemInfo childInfo, LauncherLogProto.Target child,
- ArrayList parents) {
- mHotseat.fillInLogContainerData(childInfo, child, parents);
+ public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target,
+ LauncherLogProto.Target targetParent) {
+ mHotseat.fillInLogContainerData(v, info, target, targetParent);
}
private class PinPrediction extends SystemShortcut {
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
index 65aaf22f49..b5d84247a8 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
@@ -30,7 +30,6 @@ import androidx.annotation.NonNull;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherStateManager.AnimationConfig;
-import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimatorSetBuilder;
import com.android.launcher3.anim.PropertySetter;
import com.android.quickstep.views.ClearAllButton;
@@ -65,16 +64,20 @@ public final class RecentsViewStateController extends
@NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) {
super.setStateWithAnimationInternal(toState, builder, config);
- ValueAnimator updateAnim = ValueAnimator.ofFloat(0, 1).setDuration(config.duration);
- if (toState.overviewUi) {
- // While animating into recents, update the visible task data as needed
- updateAnim.addUpdateListener(valueAnimator -> mRecentsView.loadVisibleTaskData());
- mRecentsView.updateEmptyMessage();
- } else {
- updateAnim.addListener(
- AnimationSuccessListener.forRunnable(mRecentsView::resetTaskVisuals));
+ if (!toState.overviewUi) {
+ builder.addOnFinishRunnable(mRecentsView::resetTaskVisuals);
+ }
+
+ if (toState.overviewUi) {
+ ValueAnimator updateAnim = ValueAnimator.ofFloat(0, 1);
+ updateAnim.addUpdateListener(valueAnimator -> {
+ // While animating into recents, update the visible task data as needed
+ mRecentsView.loadVisibleTaskData();
+ });
+ updateAnim.setDuration(config.duration);
+ builder.play(updateAnim);
+ mRecentsView.updateEmptyMessage();
}
- builder.play(updateAnim);
PropertySetter propertySetter = config.getPropertySetter(builder);
setAlphas(propertySetter, toState.getVisibleElements(mLauncher));
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
index 5bac964b1a..48a2f323d4 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
@@ -15,11 +15,8 @@
*/
package com.android.launcher3.uioverrides.states;
-import android.content.Context;
-
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.Launcher;
-import com.android.launcher3.R;
import com.android.launcher3.allapps.AllAppsTransitionController;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.quickstep.util.LayoutUtils;
@@ -105,9 +102,4 @@ public class BackgroundAppState extends OverviewState {
}
return super.getHotseatScaleAndTranslation(launcher);
}
-
- @Override
- public int getBackgroundBlurRadius(Context context) {
- return context.getResources().getInteger(R.integer.app_background_blur_radius);
- }
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java
index bfbb6305b9..7895bac4d2 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java
@@ -35,7 +35,6 @@ import static com.android.launcher3.states.RotationHelper.REQUEST_ROTATE;
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview;
-import android.content.Context;
import android.graphics.Rect;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
@@ -206,11 +205,6 @@ public class OverviewState extends LauncherState {
return LayoutUtils.getDefaultSwipeHeight(launcher, launcher.getDeviceProfile());
}
- @Override
- public int getBackgroundBlurRadius(Context context) {
- return context.getResources().getInteger(R.integer.overview_background_blur_radius);
- }
-
@Override
public void onBackPressed(Launcher launcher) {
TaskView taskView = launcher.getOverviewPanel().getRunningTaskView();
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java
index b34701331e..9cbe11acc3 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java
@@ -21,8 +21,7 @@ import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.LauncherState.OVERVIEW_PEEK;
-import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_PEEK;
-import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW;
+import static com.android.launcher3.LauncherStateManager.ATOMIC_OVERVIEW_PEEK_COMPONENT;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_HEADER_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_FADE;
@@ -44,7 +43,6 @@ import android.view.ViewConfiguration;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppTransitionManagerImpl;
import com.android.launcher3.LauncherState;
-import com.android.launcher3.LauncherStateManager.AnimationFlags;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimatorSetBuilder;
import com.android.launcher3.anim.Interpolators;
@@ -106,7 +104,7 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController {
LauncherState toState = isPaused ? OVERVIEW_PEEK : NORMAL;
long peekDuration = isPaused ? PEEK_IN_ANIM_DURATION : PEEK_OUT_ANIM_DURATION;
mPeekAnim = mLauncher.getStateManager().createAtomicAnimation(fromState, toState,
- new AnimatorSetBuilder(), PLAY_ATOMIC_OVERVIEW_PEEK, peekDuration);
+ new AnimatorSetBuilder(), ATOMIC_OVERVIEW_PEEK_COMPONENT, peekDuration);
mPeekAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
@@ -212,7 +210,7 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController {
super.onAnimationEnd(animation);
if (mCancelled) {
mPeekAnim = mLauncher.getStateManager().createAtomicAnimation(mFromState,
- mToState, new AnimatorSetBuilder(), PLAY_ATOMIC_OVERVIEW_PEEK,
+ mToState, new AnimatorSetBuilder(), ATOMIC_OVERVIEW_PEEK_COMPONENT,
PEEK_OUT_ANIM_DURATION);
mPeekAnim.start();
}
@@ -239,14 +237,11 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController {
}
@Override
- @AnimationFlags
- protected int updateAnimComponentsOnReinit(@AnimationFlags int animComponents) {
+ protected void updateAnimatorBuilderOnReinit(AnimatorSetBuilder builder) {
if (handlingOverviewAnim()) {
// We don't want the state transition to all apps to animate overview,
// as that will cause a jump after our atomic animation.
- return animComponents | SKIP_OVERVIEW;
- } else {
- return animComponents;
+ builder.addFlag(AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW);
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java
index a0ca8865d8..19a2bae467 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java
@@ -171,8 +171,7 @@ public class NavBarToHomeTouchController implements TouchController,
}
}
anim.setDuration(accuracy);
- mCurrentAnimation = AnimatorPlaybackController.wrap(anim, accuracy)
- .setOnCancelRunnable(this::clearState);
+ mCurrentAnimation = AnimatorPlaybackController.wrap(anim, accuracy, this::clearState);
}
private void clearState() {
@@ -220,8 +219,12 @@ public class NavBarToHomeTouchController implements TouchController,
// Quickly return to the state we came from (we didn't move far).
ValueAnimator anim = mCurrentAnimation.getAnimationPlayer();
anim.setFloatValues(progress, 0);
- anim.addListener(AnimationSuccessListener.forRunnable(
- () -> onSwipeInteractionCompleted(mStartState)));
+ anim.addListener(new AnimationSuccessListener() {
+ @Override
+ public void onAnimationSuccess(Animator animator) {
+ onSwipeInteractionCompleted(mStartState);
+ }
+ });
anim.setDuration(80).start();
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
index 7cebabe694..ab634a4b12 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
@@ -19,11 +19,12 @@ package com.android.launcher3.uioverrides.touchcontrollers;
import static com.android.launcher3.LauncherState.HINT_STATE;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
-import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_PEEK;
+import static com.android.launcher3.LauncherStateManager.ATOMIC_OVERVIEW_PEEK_COMPONENT;
import static com.android.launcher3.Utilities.EDGE_NAV_BAR;
import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL;
import static com.android.launcher3.util.VibratorWrapper.OVERVIEW_HAPTIC;
+import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.graphics.PointF;
@@ -175,9 +176,13 @@ public class NoButtonNavbarToOverviewTouchController extends FlingAndHoldTouchCo
long duration = OVERVIEW.getTransitionDuration(mLauncher);
AnimatorSet anim = stateManager.createAtomicAnimation(
stateManager.getState(), NORMAL, builder,
- PLAY_ATOMIC_OVERVIEW_PEEK, duration);
- anim.addListener(AnimationSuccessListener.forRunnable(
- () -> onSwipeInteractionCompleted(NORMAL, Touch.SWIPE)));
+ ATOMIC_OVERVIEW_PEEK_COMPONENT, duration);
+ anim.addListener(new AnimationSuccessListener() {
+ @Override
+ public void onAnimationSuccess(Animator animator) {
+ onSwipeInteractionCompleted(NORMAL, Touch.SWIPE);
+ }
+ });
anim.start();
}
} else {
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
index 81a6d9b786..715529e355 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
@@ -21,13 +21,13 @@ import static com.android.launcher3.LauncherState.HOTSEAT_ICONS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.LauncherState.QUICK_SWITCH;
-import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS;
-import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW;
+import static com.android.launcher3.LauncherStateManager.ANIM_ALL;
import static com.android.launcher3.anim.AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_VERTICAL_PROGRESS;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_WORKSPACE_TRANSLATE;
+import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW;
import static com.android.launcher3.anim.Interpolators.ACCEL_0_75;
import static com.android.launcher3.anim.Interpolators.DEACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL_5;
@@ -55,8 +55,8 @@ import android.view.animation.Interpolator;
import com.android.launcher3.BaseQuickstepLauncher;
import com.android.launcher3.LauncherState;
+import com.android.launcher3.LauncherStateManager;
import com.android.launcher3.LauncherStateManager.AnimationConfig;
-import com.android.launcher3.LauncherStateManager.AnimationFlags;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.AllAppsTransitionController;
@@ -214,7 +214,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
nonOverviewBuilder.setInterpolator(ANIM_ALL_APPS_FADE, FADE_OUT_INTERPOLATOR);
nonOverviewBuilder.setInterpolator(ANIM_WORKSPACE_TRANSLATE, TRANSLATE_OUT_INTERPOLATOR);
nonOverviewBuilder.setInterpolator(ANIM_VERTICAL_PROGRESS, TRANSLATE_OUT_INTERPOLATOR);
- updateNonOverviewAnim(QUICK_SWITCH, nonOverviewBuilder, ANIM_ALL_COMPONENTS);
+ updateNonOverviewAnim(QUICK_SWITCH, nonOverviewBuilder, ANIM_ALL);
mNonOverviewAnim.dispatchOnStart();
if (mRecentsView.getTaskViewCount() == 0) {
@@ -231,10 +231,11 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
/** Create state animation to control non-overview components. */
private void updateNonOverviewAnim(LauncherState toState, AnimatorSetBuilder builder,
- @AnimationFlags int animComponents) {
+ @LauncherStateManager.AnimationComponents int animComponents) {
+ builder.addFlag(FLAG_DONT_ANIMATE_OVERVIEW);
long accuracy = (long) (Math.max(mXRange, mYRange) * 2);
mNonOverviewAnim = mLauncher.getStateManager().createAnimationToNewWorkspace(toState,
- builder, accuracy, this::clearState, animComponents | SKIP_OVERVIEW);
+ builder, accuracy, this::clearState, animComponents);
}
private void setupOverviewAnimators() {
@@ -392,7 +393,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
xOverviewAnim.setFloatValues(startXProgress, endXProgress);
xOverviewAnim.setDuration(xDuration)
.setInterpolator(scrollInterpolatorForVelocity(velocity.x));
- mXOverviewAnim.dispatchOnStart();
+ mXOverviewAnim.dispatchOnStartWithVelocity(endXProgress, velocity.x);
boolean flingUpToNormal = verticalFling && velocity.y < 0 && targetState == NORMAL;
@@ -413,7 +414,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
ValueAnimator yOverviewAnim = mYOverviewAnim.getAnimationPlayer();
yOverviewAnim.setFloatValues(startYProgress, endYProgress);
yOverviewAnim.setDuration(yDuration);
- mYOverviewAnim.dispatchOnStart();
+ mYOverviewAnim.dispatchOnStartWithVelocity(endYProgress, velocity.y);
ValueAnimator nonOverviewAnim = mNonOverviewAnim.getAnimationPlayer();
if (flingUpToNormal && !mIsHomeScreenVisible) {
@@ -435,7 +436,8 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
float startProgress = mNonOverviewAnim.getProgressFraction();
float endProgress = canceled ? 0 : 1;
nonOverviewAnim.setFloatValues(startProgress, endProgress);
- mNonOverviewAnim.dispatchOnStart();
+ mNonOverviewAnim.dispatchOnStartWithVelocity(endProgress,
+ horizontalFling ? velocity.x : velocity.y);
}
nonOverviewAnim.setDuration(Math.max(xDuration, yDuration));
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java
index 845699a761..1f5228a239 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitOverviewStateTouchHelper.java
@@ -22,7 +22,7 @@ import android.view.MotionEvent;
import android.view.animation.Interpolator;
import com.android.launcher3.Launcher;
-import com.android.launcher3.anim.PendingAnimation;
+import com.android.launcher3.util.PendingAnimation;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java
index 8de1b3acbe..d5b221db06 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/QuickSwitchTouchController.java
@@ -17,7 +17,6 @@ package com.android.launcher3.uioverrides.touchcontrollers;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.QUICK_SWITCH;
-import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE;
@@ -40,6 +39,7 @@ import androidx.annotation.Nullable;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
+import com.android.launcher3.LauncherStateManager;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatorSetBuilder;
import com.android.launcher3.touch.AbstractStateChangeTouchController;
@@ -112,7 +112,7 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll
setupInterpolators(animatorSetBuilder);
long accuracy = (long) (getShiftRange() * 2);
mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(mToState,
- animatorSetBuilder, accuracy, this::clearState, ANIM_ALL_COMPONENTS);
+ animatorSetBuilder, accuracy, this::clearState, LauncherStateManager.ANIM_ALL);
mCurrentAnimation.getAnimationPlayer().addUpdateListener(valueAnimator -> {
updateFullscreenProgress((Float) valueAnimator.getAnimatedValue());
});
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
index cc58fcfd57..e0532ac4cf 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
@@ -16,13 +16,17 @@
package com.android.launcher3.uioverrides.touchcontrollers;
import static com.android.launcher3.AbstractFloatingView.TYPE_ACCESSIBLE;
+import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
+import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS;
import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_BOTH;
import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_NEGATIVE;
import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_POSITIVE;
+import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
import android.view.MotionEvent;
import com.android.launcher3.AbstractFloatingView;
@@ -31,12 +35,12 @@ import com.android.launcher3.LauncherAnimUtils;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.Interpolators;
-import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.touch.BaseSwipeDetector;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.touch.SingleAxisSwipeDetector;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.launcher3.util.FlingBlockCheck;
+import com.android.launcher3.util.PendingAnimation;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.views.BaseDragLayer;
import com.android.quickstep.SysUINavigationMode;
@@ -214,8 +218,8 @@ public abstract class TaskViewTouchController
if (mCurrentAnimation != null) {
mCurrentAnimation.setOnCancelRunnable(null);
}
- mCurrentAnimation = AnimatorPlaybackController.wrap(mPendingAnimation, maxDuration)
- .setOnCancelRunnable(this::clearState);
+ mCurrentAnimation = AnimatorPlaybackController.wrap(
+ mPendingAnimation.anim, maxDuration, this::clearState);
onUserControlledAnimationCreated(mCurrentAnimation);
mCurrentAnimation.getTarget().addListener(this);
mCurrentAnimation.dispatchOnStart();
@@ -284,16 +288,26 @@ public abstract class TaskViewTouchController
animationDuration *= LauncherAnimUtils.blockedFlingDurationFactor(velocity);
}
+ float nextFrameProgress = Utilities.boundToRange(progress
+ + velocity * getSingleFrameMs(mActivity) / Math.abs(mEndDisplacement), 0f, 1f);
+
mCurrentAnimation.setEndAction(() -> onCurrentAnimationEnd(goingToEnd, logAction));
+
+ ValueAnimator anim = mCurrentAnimation.getAnimationPlayer();
+ anim.setFloatValues(nextFrameProgress, goingToEnd ? 1f : 0f);
+ anim.setDuration(animationDuration);
+ anim.setInterpolator(scrollInterpolatorForVelocity(velocity));
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
- mCurrentAnimation.getAnimationPlayer().addUpdateListener(valueAnimator -> {
+ anim.addUpdateListener(valueAnimator -> {
if (mRecentsView.getCurrentPage() != 0 || mCurrentAnimationIsGoingUp) {
mRecentsView.redrawLiveTile(true);
}
});
}
- mCurrentAnimation.startWithVelocity(mActivity, goingToEnd,
- velocity, mEndDisplacement, animationDuration);
+ if (UNSTABLE_SPRINGS.get()) {
+ mCurrentAnimation.dispatchOnStartWithVelocity(goingToEnd ? 1f : 0f, velocity);
+ }
+ anim.start();
}
private void onCurrentAnimationEnd(boolean wasSuccess, int logAction) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java
index e1ff4f4525..375f16013f 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java
@@ -15,17 +15,13 @@
*/
package com.android.quickstep;
-import static com.android.launcher3.LauncherState.BACKGROUND_APP;
-import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR;
-import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
import android.animation.Animator;
import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.graphics.Rect;
import android.util.Log;
@@ -34,9 +30,7 @@ import android.view.View;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.anim.AnimationSuccessListener;
-import com.android.launcher3.uioverrides.BackgroundBlurController;
import com.android.quickstep.util.AppWindowAnimationHelper;
-import com.android.quickstep.util.AppWindowAnimationHelper.TransformParams;
import com.android.quickstep.util.RemoteAnimationProvider;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -44,7 +38,7 @@ import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat;
import com.android.systemui.shared.system.TransactionCompat;
/**
- * Provider for the atomic (for 3-button mode) remote window animation from the app to the overview.
+ * Provider for the atomic remote window animation from the app to the overview.
*
* @param activity that contains the overview
*/
@@ -54,15 +48,15 @@ final class AppToOverviewAnimationProvider imple
private static final long RECENTS_LAUNCH_DURATION = 250;
private static final String TAG = "AppToOverviewAnimationProvider";
- private final BaseActivityInterface mActivityInterface;
+ private final BaseActivityInterface mHelper;
// The id of the currently running task that is transitioning to overview.
private final int mTargetTaskId;
private T mActivity;
private RecentsView mRecentsView;
- AppToOverviewAnimationProvider(BaseActivityInterface activityInterface, int targetTaskId) {
- mActivityInterface = activityInterface;
+ AppToOverviewAnimationProvider(BaseActivityInterface helper, int targetTaskId) {
+ mHelper = helper;
mTargetTaskId = targetTaskId;
}
@@ -76,7 +70,7 @@ final class AppToOverviewAnimationProvider imple
activity.getOverviewPanel().showCurrentTask(mTargetTaskId);
AbstractFloatingView.closeAllOpenViews(activity, wasVisible);
BaseActivityInterface.AnimationFactory factory =
- mActivityInterface.prepareRecentsUI(wasVisible,
+ mHelper.prepareRecentsUI(wasVisible,
false /* animate activity */, (controller) -> {
controller.dispatchOnStart();
ValueAnimator anim = controller.getAnimationPlayer()
@@ -104,18 +98,11 @@ final class AppToOverviewAnimationProvider imple
if (mRecentsView != null) {
mRecentsView.setRunningTaskIconScaledDown(true);
}
-
- BackgroundBlurController blurController = mActivityInterface.getBackgroundBlurController();
- if (blurController != null) {
- // Update the surface to be the lowest closing app surface
- blurController.setSurfaceToLauncher(mRecentsView);
- }
-
AnimatorSet anim = new AnimatorSet();
anim.addListener(new AnimationSuccessListener() {
@Override
public void onAnimationSuccess(Animator animator) {
- mActivityInterface.onSwipeUpToRecentsComplete();
+ mHelper.onSwipeUpToRecentsComplete();
if (mRecentsView != null) {
mRecentsView.animateUpRunningTaskIconScale();
}
@@ -123,8 +110,7 @@ final class AppToOverviewAnimationProvider imple
});
if (mActivity == null) {
Log.e(TAG, "Animation created, before activity");
- anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION))
- .with(createBackgroundBlurAnimator(blurController));
+ anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION));
return anim;
}
@@ -135,8 +121,7 @@ final class AppToOverviewAnimationProvider imple
RemoteAnimationTargetCompat runningTaskTarget = targets.findTask(mTargetTaskId);
if (runningTaskTarget == null) {
Log.e(TAG, "No closing app");
- anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION))
- .with(createBackgroundBlurAnimator(blurController));
+ anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION));
return anim;
}
@@ -153,12 +138,11 @@ final class AppToOverviewAnimationProvider imple
clipHelper.updateSource(homeBounds, runningTaskTarget);
Rect targetRect = new Rect();
- mActivityInterface.getSwipeUpDestinationAndLength(mActivity.getDeviceProfile(), mActivity,
- targetRect);
+ mHelper.getSwipeUpDestinationAndLength(mActivity.getDeviceProfile(), mActivity, targetRect);
clipHelper.updateTargetRect(targetRect);
clipHelper.prepareAnimation(mActivity.getDeviceProfile(), false /* isOpening */);
- TransformParams params = new TransformParams()
+ AppWindowAnimationHelper.TransformParams params = new AppWindowAnimationHelper.TransformParams()
.setSyncTransactionApplier(new SyncRtSurfaceTransactionApplierCompat(rootView));
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.setDuration(RECENTS_LAUNCH_DURATION);
@@ -183,8 +167,7 @@ final class AppToOverviewAnimationProvider imple
transaction.apply();
});
}
- anim.play(valueAnimator)
- .with(createBackgroundBlurAnimator(blurController));
+ anim.play(valueAnimator);
return anim;
}
@@ -196,15 +179,4 @@ final class AppToOverviewAnimationProvider imple
long getRecentsLaunchDuration() {
return RECENTS_LAUNCH_DURATION;
}
-
- private Animator createBackgroundBlurAnimator(BackgroundBlurController blurController) {
- if (blurController == null) {
- // Dummy animation
- return ValueAnimator.ofInt(0);
- }
- return ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR,
- BACKGROUND_APP.getBackgroundBlurRadius(mActivity),
- OVERVIEW.getBackgroundBlurRadius(mActivity))
- .setDuration(RECENTS_LAUNCH_DURATION);
- }
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java
index 7786a8f55b..9f19bb301e 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java
@@ -79,7 +79,6 @@ public abstract class BaseSwipeUpHandler 1 - UPDATE_SYSUI_FLAGS_THRESHOLD));
}
-
- if (!mInQuickSwitchMode && !mDeviceState.isFullyGesturalNavMode()) {
- updateOverviewThresholdPassed(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW);
- }
-
if (mRecentsAnimationTargets != null) {
applyTransformUnchecked();
}
@@ -281,25 +271,14 @@ public class FallbackSwipeHandler extends BaseSwipeUpHandler flingThreshold;
- if (mDeviceState.isFullyGesturalNavMode()) {
- if (isFling) {
- mGestureState.setEndTarget(endVelocity < 0 ? HOME : LAST_TASK);
- } else if (mOverviewThresholdPassed) {
- mGestureState.setEndTarget(RECENTS);
- } else {
- mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW
- ? HOME
- : LAST_TASK);
- }
+ if (isFling) {
+ mGestureState.setEndTarget(endVelocity < 0 ? HOME : LAST_TASK);
+ } else if (mIsMotionPaused) {
+ mGestureState.setEndTarget(RECENTS);
} else {
- GestureEndTarget startState = mSwipeUpOverHome ? HOME : LAST_TASK;
- if (isFling) {
- mGestureState.setEndTarget(endVelocity < 0 ? RECENTS : startState);
- } else {
- mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW
- ? RECENTS
- : startState);
- }
+ mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW
+ ? HOME
+ : LAST_TASK);
}
}
mStateCallback.setStateOnUiThread(STATE_GESTURE_COMPLETED);
@@ -374,7 +353,7 @@ public class FallbackSwipeHandler extends BaseSwipeUpHandler
}
setupRecentsViewUi();
- mActivityInterface.getBackgroundBlurController().setSurfaceToLauncher(mRecentsView);
if (mDeviceState.getNavMode() == TWO_BUTTONS) {
// If the device is in two button mode, swiping up will show overview with predictions
@@ -1000,7 +999,7 @@ public class LauncherSwipeHandler
mLauncherTransitionController.getAnimationPlayer().setDuration(Math.max(0, duration));
if (UNSTABLE_SPRINGS.get()) {
- mLauncherTransitionController.dispatchOnStart();
+ mLauncherTransitionController.dispatchOnStartWithVelocity(end, velocityPxPerMs.y);
}
mLauncherTransitionController.getAnimationPlayer().start();
mHasLauncherTransitionControllerStarted = true;
@@ -1016,9 +1015,7 @@ public class LauncherSwipeHandler
HomeAnimationFactory homeAnimationFactory) {
RectFSpringAnim anim =
super.createWindowAnimationToHome(startProgress, homeAnimationFactory);
- anim.addOnUpdateListener((r, p) -> {
- updateSysUiFlags(Math.max(p, mCurrentShift.value));
- });
+ anim.addOnUpdateListener((r, p) -> updateSysUiFlags(Math.max(p, mCurrentShift.value)));
anim.addAnimatorListener(new AnimationSuccessListener() {
@Override
public void onAnimationStart(Animator animation) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java
index 3ab0f19069..94b0051a51 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java
@@ -70,7 +70,7 @@ public final class RecentsActivity extends BaseRecentsActivity {
setContentView(R.layout.fallback_recents_activity);
mRecentsRootView = findViewById(R.id.drag_layer);
mFallbackRecentsView = findViewById(R.id.overview_panel);
- mRecentsRootView.recreateControllers();
+ mRecentsRootView.setup();
}
@Override
@@ -108,7 +108,7 @@ public final class RecentsActivity extends BaseRecentsActivity {
@Override
protected void onHandleConfigChanged() {
super.onHandleConfigChanged();
- mRecentsRootView.recreateControllers();
+ mRecentsRootView.setup();
}
@Override
@@ -185,10 +185,8 @@ public final class RecentsActivity extends BaseRecentsActivity {
boolean activityClosing = taskIsATargetWithMode(appTargets, getTaskId(), MODE_CLOSING);
AppWindowAnimationHelper helper = new AppWindowAnimationHelper(
mFallbackRecentsView.getPagedViewOrientedState(), this);
- Animator recentsAnimator = getRecentsWindowAnimator(taskView, !activityClosing, appTargets,
- wallpaperTargets, null /* backgroundBlurController */,
- helper);
- target.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION));
+ target.play(getRecentsWindowAnimator(taskView, !activityClosing, appTargets,
+ wallpaperTargets, helper).setDuration(RECENTS_LAUNCH_DURATION));
// Found a visible recents task that matches the opening app, lets launch the app from there
if (activityClosing) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java
index 38b86cea43..8d735915d9 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java
@@ -15,17 +15,13 @@
*/
package com.android.quickstep;
-import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
-import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.ComponentName;
import android.graphics.RectF;
@@ -35,7 +31,6 @@ import com.android.launcher3.BaseActivity;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Utilities;
-import com.android.launcher3.uioverrides.BackgroundBlurController;
import com.android.quickstep.util.AppWindowAnimationHelper;
import com.android.quickstep.util.MultiValueUpdateListener;
import com.android.quickstep.views.RecentsView;
@@ -120,11 +115,9 @@ public final class TaskViewUtils {
* @return Animator that controls the window of the opening targets for the recents launch
* animation.
*/
- public static Animator getRecentsWindowAnimator(TaskView v, boolean skipViewChanges,
+ public static ValueAnimator getRecentsWindowAnimator(TaskView v, boolean skipViewChanges,
RemoteAnimationTargetCompat[] appTargets,
- RemoteAnimationTargetCompat[] wallpaperTargets,
- BackgroundBlurController backgroundBlurController,
- final AppWindowAnimationHelper inOutHelper) {
+ RemoteAnimationTargetCompat[] wallpaperTargets, final AppWindowAnimationHelper inOutHelper) {
SyncRtSurfaceTransactionApplierCompat applier =
new SyncRtSurfaceTransactionApplierCompat(v);
final RemoteAnimationTargets targets =
@@ -136,7 +129,6 @@ public final class TaskViewUtils {
.setTargetSet(targets)
.setLauncherOnTop(true);
- AnimatorSet animatorSet = new AnimatorSet();
final RecentsView recentsView = v.getRecentsView();
final ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1);
appAnimator.setInterpolator(TOUCH_RESPONSE_INTERPOLATOR);
@@ -145,6 +137,8 @@ public final class TaskViewUtils {
// Defer fading out the view until after the app window gets faded in
final FloatProp mViewAlpha = new FloatProp(1f, 0f, 75, 75, LINEAR);
final FloatProp mTaskAlpha = new FloatProp(0f, 1f, 0, 75, LINEAR);
+
+
final RectF mThumbnailRect;
{
@@ -214,14 +208,6 @@ public final class TaskViewUtils {
targets.release();
}
});
-
- if (backgroundBlurController != null) {
- ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofInt(backgroundBlurController,
- BACKGROUND_BLUR, BACKGROUND_APP.getBackgroundBlurRadius(v.getContext()));
- animatorSet.playTogether(appAnimator, backgroundRadiusAnim);
- } else {
- animatorSet.play(appAnimator);
- }
- return animatorSet;
+ return appAnimator;
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
index 0269e4a138..0f6333693f 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
@@ -50,6 +50,8 @@ import androidx.annotation.UiThread;
import androidx.annotation.WorkerThread;
import com.android.launcher3.BaseDraggingActivity;
+import com.android.launcher3.Launcher;
+import com.android.launcher3.PagedView;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.DiscoveryBounce;
import com.android.launcher3.config.FeatureFlags;
@@ -349,6 +351,17 @@ public class TouchInteractionService extends Service implements PluginListener {
+ mTaskAnimationManager.finishRunningRecentsAnimation(true /* toHome */);
+ });
+ } else {
+ mTaskAnimationManager.finishRunningRecentsAnimation(true /* toHome */);
+ }
+ }
+
private void resetHomeBounceSeenOnQuickstepEnabledFirstTime() {
if (!mDeviceState.isUserUnlocked() || mDeviceState.isButtonNavMode()) {
// Skip if not yet unlocked (can't read user shared prefs) or if the current navigation
@@ -489,10 +502,8 @@ public class TouchInteractionService extends Service implements PluginListener {
private static final int MIN_SIZE = 10;
+ private final RecentsActivity mActivity;
private final Point mLastKnownSize = new Point(MIN_SIZE, MIN_SIZE);
public RecentsRootView(Context context, AttributeSet attrs) {
super(context, attrs, 1 /* alphaChannelCount */);
+ mActivity = BaseActivity.fromContext(context);
setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| SYSTEM_UI_FLAG_LAYOUT_STABLE);
@@ -44,8 +47,7 @@ public class RecentsRootView extends BaseDragLayer {
return mLastKnownSize;
}
- @Override
- public void recreateControllers() {
+ public void setup() {
mControllers = new TouchController[] {
new RecentsTaskController(mActivity),
new FallbackNavBarTouchController(mActivity),
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java
index b9ef57eaa3..b251f9e697 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/logging/UserEventDispatcherAppPredictionExtension.java
@@ -23,8 +23,6 @@ import com.android.launcher3.ItemInfo;
import com.android.launcher3.appprediction.PredictionUiStateManager;
import com.android.launcher3.userevent.nano.LauncherLogProto;
-import java.util.ArrayList;
-
/**
* This class handles AOSP MetricsLogger function calls and logging around
* quickstep interactions and app launches.
@@ -43,7 +41,7 @@ public class UserEventDispatcherAppPredictionExtension extends UserEventDispatch
@Override
protected void onFillInLogContainerData(
@NonNull ItemInfo itemInfo, @NonNull LauncherLogProto.Target target,
- @NonNull ArrayList targets) {
+ @NonNull LauncherLogProto.Target targetParent) {
PredictionUiStateManager.fillInPredictedRank(itemInfo, target);
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java
index 681ce0237b..91af1563d2 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java
@@ -17,7 +17,6 @@ package com.android.quickstep.util;
import android.annotation.TargetApi;
import android.content.Context;
-import android.content.res.Resources;
import android.graphics.Matrix;
import android.graphics.Matrix.ScaleToFit;
import android.graphics.Rect;
@@ -105,10 +104,9 @@ public class AppWindowAnimationHelper {
private TargetAlphaProvider mBaseAlphaCallback = (t, a) -> 1;
public AppWindowAnimationHelper(PagedViewOrientedState orientedState, Context context) {
- Resources res = context.getResources();
mOrientedState = orientedState;
- mWindowCornerRadius = getWindowCornerRadius(res);
- mSupportsRoundedCornersOnWindows = supportsRoundedCornersOnWindows(res);
+ mWindowCornerRadius = getWindowCornerRadius(context.getResources());
+ mSupportsRoundedCornersOnWindows = supportsRoundedCornersOnWindows(context.getResources());
mTaskCornerRadius = TaskCornerRadius.get(context);
mUseRoundedCornersOnWindows = mSupportsRoundedCornersOnWindows;
}
@@ -198,15 +196,14 @@ public class AppWindowAnimationHelper {
SurfaceParams[] surfaceParams = new SurfaceParams[params.mTargetSet.unfilteredApps.length];
for (int i = 0; i < params.mTargetSet.unfilteredApps.length; i++) {
RemoteAnimationTargetCompat app = params.mTargetSet.unfilteredApps[i];
- SurfaceParams.Builder builder = new SurfaceParams.Builder(app.leash);
mTmpMatrix.setTranslate(app.position.x, app.position.y);
Rect crop = mTmpRect;
crop.set(app.sourceContainerBounds);
crop.offsetTo(0, 0);
float alpha;
+ int layer = RemoteAnimationProvider.getLayer(app, mBoostModeTargetLayers);
float cornerRadius = 0f;
float scale = Math.max(mCurrentRect.width(), mTargetRect.width()) / crop.width();
- int layer = RemoteAnimationProvider.getLayer(app, mBoostModeTargetLayers);
if (app.mode == params.mTargetSet.targetMode) {
alpha = mTaskAlphaCallback.getAlpha(app, params.mTargetAlpha);
if (app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
@@ -242,14 +239,10 @@ public class AppWindowAnimationHelper {
layer = Integer.MAX_VALUE;
}
}
- builder.withAlpha(alpha)
- .withMatrix(mTmpMatrix)
- .withWindowCrop(crop)
- .withLayer(layer)
- // Since radius is in Surface space, but we draw the rounded corners in screen
- // space, we have to undo the scale
- .withCornerRadius(cornerRadius / scale);
- surfaceParams[i] = builder.build();
+ // Since radius is in Surface space, but we draw the rounded corners in screen space, we
+ // have to undo the scale.
+ surfaceParams[i] = new SurfaceParams(app.leash, alpha, mTmpMatrix, crop, layer,
+ cornerRadius / scale);
}
return surfaceParams;
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java
index 7e17fbf909..d2805ed431 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java
@@ -18,8 +18,7 @@ package com.android.quickstep.util;
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.NORMAL;
-import static com.android.launcher3.LauncherStateManager.ANIM_ALL_COMPONENTS;
-import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW;
+import static com.android.launcher3.LauncherStateManager.ANIM_ALL;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import android.animation.Animator;
@@ -33,6 +32,7 @@ import com.android.launcher3.CellLayout;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
+import com.android.launcher3.LauncherStateManager;
import com.android.launcher3.LauncherStateManager.AnimationConfig;
import com.android.launcher3.R;
import com.android.launcher3.ShortcutAndWidgetContainer;
@@ -143,10 +143,11 @@ public class StaggeredWorkspaceAnim {
* Setup workspace with 0 duration to prepare for our staggered animation.
*/
private void prepareToAnimate(Launcher launcher) {
+ LauncherStateManager stateManager = launcher.getStateManager();
AnimatorSetBuilder builder = new AnimatorSetBuilder();
// setRecentsAttachedToAppWindow() will animate recents out.
- launcher.getStateManager().createAtomicAnimation(
- BACKGROUND_APP, NORMAL, builder, ANIM_ALL_COMPONENTS | SKIP_OVERVIEW, 0);
+ builder.addFlag(AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW);
+ stateManager.createAtomicAnimation(BACKGROUND_APP, NORMAL, builder, ANIM_ALL, 0);
builder.build().start();
// Stop scrolling so that it doesn't interfere with the translation offscreen.
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
index 763f5beb10..d0819c187b 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
@@ -18,7 +18,7 @@ package com.android.quickstep.views;
import android.content.Context;
import android.util.AttributeSet;
-import android.util.FloatProperty;
+import android.util.Property;
import android.widget.Button;
import com.android.launcher3.touch.PagedOrientationHandler;
@@ -27,16 +27,16 @@ import com.android.quickstep.views.RecentsView.ScrollState;
public class ClearAllButton extends Button implements PageCallbacks {
- public static final FloatProperty VISIBILITY_ALPHA =
- new FloatProperty("visibilityAlpha") {
+ public static final Property VISIBILITY_ALPHA =
+ new Property(Float.class, "visibilityAlpha") {
@Override
public Float get(ClearAllButton view) {
return view.mVisibilityAlpha;
}
@Override
- public void setValue(ClearAllButton view, float v) {
- view.setVisibilityAlpha(v);
+ public void set(ClearAllButton view, Float visibilityAlpha) {
+ view.setVisibilityAlpha(visibilityAlpha);
}
};
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java
index 3ed7530e6c..ab8b02f5ff 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java
@@ -42,13 +42,12 @@ import com.android.launcher3.Hotseat;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherStateManager.StateListener;
+import com.android.launcher3.PagedView;
import com.android.launcher3.R;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.appprediction.PredictionUiStateManager;
import com.android.launcher3.appprediction.PredictionUiStateManager.Client;
import com.android.launcher3.states.RotationHelper;
-import com.android.launcher3.uioverrides.BackgroundBlurController;
-import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.TraceHelper;
import com.android.launcher3.views.ScrimView;
@@ -287,8 +286,7 @@ public class LauncherRecentsView extends RecentsView implements StateL
@Override
protected boolean supportsVerticalLandscape() {
- return FeatureFlags.ENABLE_FIXED_ROTATION_TRANSFORM.get()
- && !mOrientationState.areMultipleLayoutOrientationsDisabled();
+ return PagedView.sFlagForcedRotation;
}
@Override
@@ -407,9 +405,4 @@ public class LauncherRecentsView extends RecentsView implements StateL
mRecentsExtraViewContainer.setAlpha(alpha);
}
}
-
- @Override
- protected BackgroundBlurController getBackgroundBlurController() {
- return mActivity.getBackgroundBlurController();
- }
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
index b5e6af475d..872e690acc 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
@@ -16,10 +16,12 @@
package com.android.quickstep.views;
+import static androidx.dynamicanimation.animation.DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS;
+
import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS;
import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
-import static com.android.launcher3.LauncherState.BACKGROUND_APP;
+import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
import static com.android.launcher3.Utilities.EDGE_NAV_BAR;
import static com.android.launcher3.Utilities.squaredHypot;
import static com.android.launcher3.Utilities.squaredTouchSlop;
@@ -29,7 +31,7 @@ import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
-import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR;
+import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS;
import static com.android.launcher3.uioverrides.touchcontrollers.TaskViewTouchController.SUCCESS_TRANSITION_PROGRESS;
import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.TAP;
import static com.android.launcher3.userevent.nano.LauncherLogProto.ControlType.CLEAR_ALL_BUTTON;
@@ -37,10 +39,12 @@ import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId;
+import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition.TransitionListener;
import android.animation.ObjectAnimator;
+import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.app.ActivityManager;
@@ -84,29 +88,28 @@ import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.InvariantDeviceProfile;
+import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.PagedView;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimatorPlaybackController;
-import com.android.launcher3.anim.PendingAnimation;
-import com.android.launcher3.anim.PendingAnimation.EndState;
import com.android.launcher3.anim.PropertyListBuilder;
-import com.android.launcher3.anim.SpringProperty;
+import com.android.launcher3.anim.SpringObjectAnimator;
import com.android.launcher3.compat.AccessibilityManagerCompat;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.graphics.RotationMode;
import com.android.launcher3.states.RotationHelper;
import com.android.launcher3.touch.PagedOrientationHandler.CurveProperties;
-import com.android.launcher3.uioverrides.BackgroundBlurController;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.DynamicResource;
import com.android.launcher3.util.OverScroller;
+import com.android.launcher3.util.PendingAnimation;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.ViewPool;
import com.android.quickstep.RecentsAnimationController;
@@ -169,6 +172,7 @@ public abstract class RecentsView extends PagedView impl
}
};
+ private final OrientationEventListener mOrientationListener;
private int mPreviousRotation;
protected RecentsAnimationController mRecentsAnimationController;
protected RecentsAnimationTargets mRecentsAnimationTargets;
@@ -376,6 +380,22 @@ public abstract class RecentsView extends PagedView impl
// Initialize quickstep specific cache params here, as this is constructed only once
mActivity.getViewCache().setCacheSize(R.layout.digital_wellbeing_toast, 5);
+ mOrientationListener = new OrientationEventListener(getContext()) {
+ @Override
+ public void onOrientationChanged(int i) {
+ int rotation = RotationHelper.getRotationFromDegrees(i);
+ if (mPreviousRotation != rotation) {
+ animateRecentsRotationInPlace(rotation);
+ if (rotation == 0) {
+ showActionsView();
+ } else {
+ hideActionsView();
+ }
+ mPreviousRotation = rotation;
+ }
+ }
+ };
+
}
public OverScroller getScroller() {
@@ -459,7 +479,7 @@ public abstract class RecentsView extends PagedView impl
mIPinnedStackAnimationListener.setActivity(mActivity);
SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(
mIPinnedStackAnimationListener);
- setActionsView();
+ addActionsView();
}
@Override
@@ -504,6 +524,13 @@ public abstract class RecentsView extends PagedView impl
}
public void setOverviewStateEnabled(boolean enabled) {
+ if (supportsVerticalLandscape() && mOrientationListener.canDetectOrientation()) {
+ if (enabled) {
+ mOrientationListener.enable();
+ } else {
+ mOrientationListener.disable();
+ }
+ }
mOverviewStateEnabled = enabled;
updateTaskStackListenerState();
if (!enabled) {
@@ -594,7 +621,7 @@ public abstract class RecentsView extends PagedView impl
protected void applyLoadPlan(ArrayList tasks) {
if (mPendingAnimation != null) {
- mPendingAnimation.addEndListener((endState) -> applyLoadPlan(tasks));
+ mPendingAnimation.addEndListener((onEndListener) -> applyLoadPlan(tasks));
return;
}
@@ -675,21 +702,6 @@ public abstract class RecentsView extends PagedView impl
return taskViewCount;
}
- /**
- * Updates UI for a modal task, including hiding other tasks.
- */
- public void updateUiForModalTask(TaskView taskView, boolean isTaskOverlayModal) {
- int currentIndex = indexOfChild(taskView);
- TaskView previousTask = getTaskViewAt(currentIndex - 1);
- TaskView nextTask = getTaskViewAt(currentIndex + 1);
- if (previousTask != null) {
- previousTask.setVisibility(isTaskOverlayModal ? View.INVISIBLE : View.VISIBLE);
- }
- if (nextTask != null) {
- nextTask.setVisibility(isTaskOverlayModal ? View.INVISIBLE : View.VISIBLE);
- }
- }
-
protected void onTaskStackUpdated() { }
public void resetTaskVisuals() {
@@ -944,6 +956,38 @@ public abstract class RecentsView extends PagedView impl
setSwipeDownShouldLaunchApp(true);
}
+ private void animateRecentsRotationInPlace(int newRotation) {
+ if (!supportsVerticalLandscape()) {
+ return;
+ }
+
+ AnimatorSet pa = setRecentsChangedOrientation(true);
+ pa.addListener(new AnimationSuccessListener() {
+ @Override
+ public void onAnimationSuccess(Animator animator) {
+ updateLayoutRotation(newRotation);
+ ((DragLayer)mActivity.getDragLayer()).recreateControllers();
+ rotateAllChildTasks();
+ setRecentsChangedOrientation(false).start();
+ }
+ });
+ pa.start();
+ }
+
+ public AnimatorSet setRecentsChangedOrientation(boolean fadeInChildren) {
+ getRunningTaskIndex();
+ int runningIndex = getCurrentPage();
+ AnimatorSet as = new AnimatorSet();
+ for (int i = 0; i < getTaskViewCount(); i++) {
+ if (runningIndex == i) {
+ continue;
+ }
+ View taskView = getTaskViewAt(i);
+ as.play(ObjectAnimator.ofFloat(taskView, View.ALPHA, fadeInChildren ? 0 : 1));
+ }
+ return as;
+ }
+
abstract protected boolean supportsVerticalLandscape();
private void rotateAllChildTasks() {
@@ -1164,29 +1208,37 @@ public abstract class RecentsView extends PagedView impl
}
}
- private void addDismissedTaskAnimations(View taskView, long duration, PendingAnimation anim) {
- anim.add(ObjectAnimator.ofFloat(taskView, ALPHA, 0).setDuration(duration), ACCEL_2);
+ private void addDismissedTaskAnimations(View taskView, AnimatorSet anim, long duration) {
+ addAnim(ObjectAnimator.ofFloat(taskView, ALPHA, 0), duration, ACCEL_2, anim);
FloatProperty secondaryViewTranslate =
mOrientationHandler.getSecondaryViewTranslate();
int secondaryTaskDimension = mOrientationHandler.getSecondaryDimension(taskView);
int verticalFactor = mOrientationHandler.getTaskDismissDirectionFactor();
+ if (UNSTABLE_SPRINGS.get() && taskView instanceof TaskView) {
+ ResourceProvider rp = DynamicResource.provider(mActivity);
+ float dampingRatio = rp.getFloat(R.dimen.dismiss_task_trans_y_damping_ratio);
+ float stiffness = rp.getFloat(R.dimen.dismiss_task_trans_y_stiffness);
- ResourceProvider rp = DynamicResource.provider(mActivity);
- SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_START)
- .setDampingRatio(rp.getFloat(R.dimen.dismiss_task_trans_y_damping_ratio))
- .setStiffness(rp.getFloat(R.dimen.dismiss_task_trans_y_stiffness));
-
- anim.add(ObjectAnimator.ofFloat(taskView, secondaryViewTranslate,
- verticalFactor * secondaryTaskDimension).setDuration(duration), LINEAR, sp);
+ addAnim(new SpringObjectAnimator<>(taskView, secondaryViewTranslate,
+ MIN_VISIBLE_CHANGE_PIXELS, dampingRatio,
+ stiffness, 0, verticalFactor * secondaryTaskDimension),
+ duration, LINEAR, anim);
+ } else {
+ addAnim(ObjectAnimator.ofFloat(taskView, secondaryViewTranslate,
+ verticalFactor * secondaryTaskDimension), duration, LINEAR, anim);
+ }
}
- private void removeTask(Task task, int index, EndState endState) {
+ private void removeTask(Task task, int index, PendingAnimation.OnEndListener onEndListener,
+ boolean shouldLog) {
if (task != null) {
ActivityManagerWrapper.getInstance().removeTask(task.key.id);
- ComponentKey componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key);
- mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss(
- endState.logAction, Direction.UP, index, componentKey);
- mActivity.getStatsLogManager().logTaskDismiss(this, componentKey);
+ if (shouldLog) {
+ ComponentKey componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key);
+ mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss(
+ onEndListener.logAction, Direction.UP, index, componentKey);
+ mActivity.getStatsLogManager().logTaskDismiss(this, componentKey);
+ }
}
}
@@ -1195,11 +1247,12 @@ public abstract class RecentsView extends PagedView impl
if (mPendingAnimation != null) {
mPendingAnimation.finish(false, Touch.SWIPE);
}
- PendingAnimation anim = new PendingAnimation();
+ AnimatorSet anim = new AnimatorSet();
+ PendingAnimation pendingAnimation = new PendingAnimation(anim);
int count = getPageCount();
if (count == 0) {
- return anim;
+ return pendingAnimation;
}
int[] oldScroll = new int[count];
@@ -1218,7 +1271,7 @@ public abstract class RecentsView extends PagedView impl
View child = getChildAt(i);
if (child == taskView) {
if (animateTaskView) {
- addDismissedTaskAnimations(taskView, duration, anim);
+ addDismissedTaskAnimations(taskView, anim, duration);
}
} else {
// If we just take newScroll - oldScroll, everything to the right of dragged task
@@ -1242,15 +1295,20 @@ public abstract class RecentsView extends PagedView impl
}
int scrollDiff = newScroll[i] - oldScroll[i] + offset;
if (scrollDiff != 0) {
- Property translationProperty = mOrientationHandler.getPrimaryViewTranslate();
+ if (UNSTABLE_SPRINGS.get() && child instanceof TaskView) {
+ ResourceProvider rp = DynamicResource.provider(mActivity);
+ float damping = rp.getFloat(R.dimen.dismiss_task_trans_x_damping_ratio);
+ float stiffness = rp.getFloat(R.dimen.dismiss_task_trans_x_stiffness);
+
+ addAnim(new SpringObjectAnimator<>(child, VIEW_TRANSLATE_X,
+ MIN_VISIBLE_CHANGE_PIXELS, damping,
+ stiffness, 0, scrollDiff), duration, ACCEL, anim);
+ } else {
+ Property translationProperty = mOrientationHandler.getPrimaryViewTranslate();
+ addAnim(ObjectAnimator.ofFloat(child, translationProperty, scrollDiff),
+ duration, ACCEL, anim);
+ }
- ResourceProvider rp = DynamicResource.provider(mActivity);
- SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_END)
- .setDampingRatio(
- rp.getFloat(R.dimen.dismiss_task_trans_x_damping_ratio))
- .setStiffness(rp.getFloat(R.dimen.dismiss_task_trans_x_stiffness));
- anim.add(ObjectAnimator.ofFloat(child, translationProperty, scrollDiff)
- .setDuration(duration), ACCEL, sp);
needsCurveUpdates = true;
}
}
@@ -1259,7 +1317,7 @@ public abstract class RecentsView extends PagedView impl
if (needsCurveUpdates) {
ValueAnimator va = ValueAnimator.ofFloat(0, 1);
va.addUpdateListener((a) -> updateCurveProperties());
- anim.add(va);
+ anim.play(va);
}
// Add a tiny bit of translation Z, so that it draws on top of other views
@@ -1267,22 +1325,22 @@ public abstract class RecentsView extends PagedView impl
taskView.setTranslationZ(0.1f);
}
- mPendingAnimation = anim;
- mPendingAnimation.addEndListener(new Consumer() {
+ mPendingAnimation = pendingAnimation;
+ mPendingAnimation.addEndListener(new Consumer() {
@Override
- public void accept(EndState endState) {
+ public void accept(PendingAnimation.OnEndListener onEndListener) {
if (ENABLE_QUICKSTEP_LIVE_TILE.get() &&
- taskView.isRunningTask() && endState.isSuccess) {
- finishRecentsAnimation(true /* toHome */, () -> onEnd(endState));
+ taskView.isRunningTask() && onEndListener.isSuccess) {
+ finishRecentsAnimation(true /* toHome */, () -> onEnd(onEndListener));
} else {
- onEnd(endState);
+ onEnd(onEndListener);
}
}
- private void onEnd(EndState endState) {
- if (endState.isSuccess) {
+ private void onEnd(PendingAnimation.OnEndListener onEndListener) {
+ if (onEndListener.isSuccess) {
if (shouldRemoveTask) {
- removeTask(taskView.getTask(), draggedIndex, endState);
+ removeTask(taskView.getTask(), draggedIndex, onEndListener, true);
}
int pageToSnapTo = mCurrentPage;
@@ -1304,23 +1362,24 @@ public abstract class RecentsView extends PagedView impl
mPendingAnimation = null;
}
});
- return anim;
+ return pendingAnimation;
}
public PendingAnimation createAllTasksDismissAnimation(long duration) {
if (FeatureFlags.IS_STUDIO_BUILD && mPendingAnimation != null) {
throw new IllegalStateException("Another pending animation is still running");
}
- PendingAnimation anim = new PendingAnimation();
+ AnimatorSet anim = new AnimatorSet();
+ PendingAnimation pendingAnimation = new PendingAnimation(anim);
int count = getTaskViewCount();
for (int i = 0; i < count; i++) {
- addDismissedTaskAnimations(getTaskViewAt(i), duration, anim);
+ addDismissedTaskAnimations(getTaskViewAt(i), anim, duration);
}
- mPendingAnimation = anim;
- mPendingAnimation.addEndListener((endState) -> {
- if (endState.isSuccess) {
+ mPendingAnimation = pendingAnimation;
+ mPendingAnimation.addEndListener((onEndListener) -> {
+ if (onEndListener.isSuccess) {
// Remove all the task views now
ActivityManagerWrapper.getInstance().removeAllRecentTasks();
removeTasksViewsAndClearAllButton();
@@ -1328,7 +1387,13 @@ public abstract class RecentsView extends PagedView impl
}
mPendingAnimation = null;
});
- return anim;
+ return pendingAnimation;
+ }
+
+ private static void addAnim(Animator anim, long duration,
+ TimeInterpolator interpolator, AnimatorSet set) {
+ anim.setDuration(duration).setInterpolator(interpolator);
+ set.play(anim);
}
private boolean snapToPageRelative(int pageCount, int delta, boolean cycle) {
@@ -1345,8 +1410,8 @@ public abstract class RecentsView extends PagedView impl
}
private void runDismissAnimation(PendingAnimation pendingAnim) {
- AnimatorPlaybackController controller =
- AnimatorPlaybackController.wrap(pendingAnim, DISMISS_TASK_DURATION);
+ AnimatorPlaybackController controller = AnimatorPlaybackController.wrap(
+ pendingAnim.anim, DISMISS_TASK_DURATION);
controller.dispatchOnStart();
controller.setEndAction(() -> pendingAnim.finish(true, Touch.SWIPE));
controller.getAnimationPlayer().setInterpolator(FAST_OUT_SLOW_IN);
@@ -1467,7 +1532,7 @@ public abstract class RecentsView extends PagedView impl
@Override
public void setLayoutRotation(int touchRotation, int displayRotation) {
- if (!FeatureFlags.ENABLE_FIXED_ROTATION_TRANSFORM.get()) {
+ if (!sFlagForcedRotation) {
return;
}
@@ -1671,7 +1736,7 @@ public abstract class RecentsView extends PagedView impl
int count = getTaskViewCount();
if (count == 0) {
- return new PendingAnimation();
+ return new PendingAnimation(new AnimatorSet());
}
int targetSysUiFlags = tv.getThumbnail().getSysUiStatusNavFlags();
@@ -1702,23 +1767,16 @@ public abstract class RecentsView extends PagedView impl
appWindowAnimationHelper.fromTaskThumbnailView(tv.getThumbnail(), this);
appWindowAnimationHelper.prepareAnimation(mActivity.getDeviceProfile(), true /* isOpening */);
AnimatorSet anim = createAdjacentPageAnimForTaskLaunch(tv, appWindowAnimationHelper);
-
- BackgroundBlurController blurController = getBackgroundBlurController();
- if (blurController != null) {
- ObjectAnimator backgroundBlur = ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR,
- BACKGROUND_APP.getBackgroundBlurRadius(mActivity));
- anim.play(backgroundBlur);
- }
anim.play(progressAnim);
- anim.setDuration(duration)
- .setInterpolator(interpolator);
+ anim.setDuration(duration).setInterpolator(interpolator);
- mPendingAnimation = new PendingAnimation();
- mPendingAnimation.add(anim);
- mPendingAnimation.addEndListener((endState) -> {
- if (endState.isSuccess) {
+ Consumer onTaskLaunchFinish = this::onTaskLaunched;
+
+ mPendingAnimation = new PendingAnimation(anim);
+ mPendingAnimation.addEndListener((onEndListener) -> {
+ if (onEndListener.isSuccess) {
Consumer onLaunchResult = (result) -> {
- onTaskLaunched(result);
+ onTaskLaunchFinish.accept(result);
if (!result) {
tv.notifyTaskLaunchFailed(TAG);
}
@@ -1727,11 +1785,11 @@ public abstract class RecentsView extends PagedView impl
Task task = tv.getTask();
if (task != null) {
mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss(
- endState.logAction, Direction.DOWN, indexOfChild(tv),
+ onEndListener.logAction, Direction.DOWN, indexOfChild(tv),
TaskUtils.getLaunchComponentKeyForTask(task.key));
}
} else {
- onTaskLaunched(false);
+ onTaskLaunchFinish.accept(false);
}
mPendingAnimation = null;
});
@@ -1919,8 +1977,7 @@ public abstract class RecentsView extends PagedView impl
public Consumer getEventDispatcher(RotationMode navBarRotationMode) {
float degreesRotated;
if (navBarRotationMode == RotationMode.NORMAL) {
- degreesRotated = mOrientationState.areMultipleLayoutOrientationsDisabled() ? 0 :
- RotationHelper.getDegreesFromRotation(mLayoutRotation);
+ degreesRotated = RotationHelper.getDegreesFromRotation(mLayoutRotation);
} else {
degreesRotated = -navBarRotationMode.surfaceRotation;
}
@@ -1932,13 +1989,6 @@ public abstract class RecentsView extends PagedView impl
// undo that transformation since PagedView also accommodates for the transformation via
// PagedOrientationHandler
return e -> {
- if (navBarRotationMode != RotationMode.NORMAL
- && !mOrientationState.areMultipleLayoutOrientationsDisabled()) {
- RotationHelper.transformEventForNavBar(e, true);
- super.onTouchEvent(e);
- RotationHelper.transformEventForNavBar(e, false);
- return;
- }
RotationHelper.transformEvent(-degreesRotated, e, true);
super.onTouchEvent(e);
RotationHelper.transformEvent(-degreesRotated, e, false);
@@ -2010,11 +2060,6 @@ public abstract class RecentsView extends PagedView impl
super.removeView(view);
}
- @Nullable
- protected BackgroundBlurController getBackgroundBlurController() {
- return null;
- }
-
private boolean isExtraCardView(View view, int index) {
return !(view instanceof TaskView) && !(view instanceof ClearAllButton)
&& index <= mTaskViewStartIndex;
@@ -2060,7 +2105,7 @@ public abstract class RecentsView extends PagedView impl
}
}
- private void setActionsView() {
+ private void addActionsView() {
if (mActionsView == null && ENABLE_OVERVIEW_ACTIONS.get()
&& SysUINavigationMode.removeShelfFromOverview(mActivity)) {
mActionsView = ((ViewGroup) getParent()).findViewById(R.id.overview_actions_view);
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
index 0e1640edb1..e09e01ff9f 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
@@ -58,7 +58,6 @@ import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.Interpolators;
-import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.states.RotationHelper;
@@ -68,6 +67,7 @@ import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
+import com.android.launcher3.util.PendingAnimation;
import com.android.launcher3.util.ViewPool.Reusable;
import com.android.quickstep.RecentsModel;
import com.android.quickstep.TaskIconCache;
@@ -245,13 +245,6 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
return mSnapshotView.getTaskOverlay().isOverlayModal();
}
- /** Updates UI based on whether the task is modal. */
- public void updateUiForModalTask() {
- if (getRecentsView() != null) {
- getRecentsView().updateUiForModalTask(this, isTaskOverlayModal());
- }
- }
-
public TaskMenuView getMenuView() {
return mMenuView;
}
@@ -285,8 +278,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
public AnimatorPlaybackController createLaunchAnimationForRunningTask() {
final PendingAnimation pendingAnimation = getRecentsView().createTaskLaunchAnimation(
this, RECENTS_LAUNCH_DURATION, TOUCH_RESPONSE_INTERPOLATOR);
- AnimatorPlaybackController currentAnimation =
- AnimatorPlaybackController.wrap(pendingAnimation, RECENTS_LAUNCH_DURATION);
+ AnimatorPlaybackController currentAnimation = AnimatorPlaybackController.wrap(
+ pendingAnimation.anim, RECENTS_LAUNCH_DURATION);
currentAnimation.setEndAction(() -> {
pendingAnimation.finish(true, Touch.SWIPE);
launchTask(false);
diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
index 809543ac98..e56eb6c5c8 100644
--- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
@@ -242,7 +242,6 @@ public abstract class BaseQuickstepLauncher extends Launcher
return new StateHandler[] {
getAllAppsController(),
getWorkspace(),
- getBackgroundBlurController(),
new RecentsViewStateController(this),
new BackButtonAlphaHandler(this)};
}
diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
index f69135937d..2df490eb7c 100644
--- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
@@ -21,7 +21,6 @@ import static com.android.launcher3.BaseActivity.INVISIBLE_BY_APP_TRANSITIONS;
import static com.android.launcher3.BaseActivity.INVISIBLE_BY_PENDING_FLAGS;
import static com.android.launcher3.BaseActivity.PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION;
import static com.android.launcher3.LauncherState.ALL_APPS;
-import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.Utilities.postAsyncCallback;
import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS_PROGRESS;
@@ -30,7 +29,6 @@ import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7;
import static com.android.launcher3.anim.Interpolators.EXAGGERATED_EASE;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS;
-import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR;
import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION;
import static com.android.quickstep.TaskUtils.taskIsATargetWithMode;
import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius;
@@ -68,7 +66,6 @@ import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.shortcuts.DeepShortcutView;
-import com.android.launcher3.uioverrides.BackgroundBlurController;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.launcher3.util.MultiValueAlpha.AlphaProperty;
import com.android.launcher3.views.FloatingIconView;
@@ -90,7 +87,7 @@ import java.lang.ref.WeakReference;
/**
* {@link LauncherAppTransitionManager} with Quickstep-specific app transitions for launching from
- * home and/or all-apps. Not used for 3p launchers.
+ * home and/or all-apps.
*/
@TargetApi(Build.VERSION_CODES.O)
@SuppressWarnings("unused")
@@ -139,7 +136,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
// Progress = 0: All apps is fully pulled up, Progress = 1: All apps is fully pulled down.
public static final float ALL_APPS_PROGRESS_OFF_SCREEN = 1.3059858f;
- protected final BaseQuickstepLauncher mLauncher;
+ protected final Launcher mLauncher;
private final DragLayer mDragLayer;
private final AlphaProperty mDragLayerAlpha;
@@ -171,7 +168,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
};
public QuickstepAppTransitionManagerImpl(Context context) {
- mLauncher = Launcher.cast(Launcher.getLauncher(context));
+ mLauncher = Launcher.getLauncher(context);
mDragLayer = mLauncher.getDragLayer();
mDragLayerAlpha = mDragLayer.getAlphaProperty(ALPHA_INDEX_TRANSITIONS);
mHandler = new Handler(Looper.getMainLooper());
@@ -405,9 +402,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
float[] alphas, float[] trans);
/**
- * @return Animator that controls the window of the opening targets from app icons.
+ * @return Animator that controls the window of the opening targets.
*/
- private Animator getOpeningWindowAnimators(View v,
+ private ValueAnimator getOpeningWindowAnimators(View v,
RemoteAnimationTargetCompat[] appTargets,
RemoteAnimationTargetCompat[] wallpaperTargets,
Rect windowTargetBounds, boolean toggleVisibility) {
@@ -461,7 +458,6 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
RectF currentBounds = new RectF();
RectF temp = new RectF();
- AnimatorSet animatorSet = new AnimatorSet();
ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1);
appAnimator.setDuration(APP_LAUNCH_DURATION);
appAnimator.setInterpolator(LINEAR);
@@ -546,10 +542,15 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
SurfaceParams[] params = new SurfaceParams[appTargets.length];
for (int i = appTargets.length - 1; i >= 0; i--) {
RemoteAnimationTargetCompat target = appTargets[i];
- SurfaceParams.Builder builder = new SurfaceParams.Builder(target.leash);
+ Rect targetCrop;
+ final float alpha;
+ final float cornerRadius;
if (target.mode == MODE_OPENING) {
matrix.setScale(scale, scale);
matrix.postTranslate(transX0, transY0);
+ targetCrop = crop;
+ alpha = 1f - mIconAlpha.value;
+ cornerRadius = mWindowRadius.value;
matrix.mapRect(currentBounds, targetBounds);
if (mDeviceProfile.isVerticalBarLayout()) {
currentBounds.right -= croppedWidth;
@@ -557,44 +558,22 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
currentBounds.bottom -= croppedHeight;
}
floatingView.update(currentBounds, mIconAlpha.value, percent, 0f,
- mWindowRadius.value * scale, true /* isOpening */);
- builder.withMatrix(matrix)
- .withWindowCrop(crop)
- .withAlpha(1f - mIconAlpha.value)
- .withCornerRadius(mWindowRadius.value);
+ cornerRadius * scale, true /* isOpening */);
} else {
matrix.setTranslate(target.position.x, target.position.y);
- builder.withMatrix(matrix)
- .withWindowCrop(target.sourceContainerBounds)
- .withAlpha(1f);
+ targetCrop = target.sourceContainerBounds;
+ alpha = 1f;
+ cornerRadius = 0;
}
- builder.withLayer(RemoteAnimationProvider.getLayer(target, MODE_OPENING));
- params[i] = builder.build();
+
+ params[i] = new SurfaceParams(target.leash, alpha, matrix, targetCrop,
+ RemoteAnimationProvider.getLayer(target, MODE_OPENING),
+ cornerRadius);
}
surfaceApplier.scheduleApply(params);
}
});
-
- // When launching an app from overview that doesn't map to a task, we still want to just
- // blur the wallpaper instead of the launcher surface as well
- boolean allowBlurringLauncher = mLauncher.getStateManager().getState() != OVERVIEW;
- BackgroundBlurController blurController = mLauncher.getBackgroundBlurController();
- ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR,
- BACKGROUND_APP.getBackgroundBlurRadius(mLauncher))
- .setDuration(APP_LAUNCH_DURATION);
- if (allowBlurringLauncher) {
- blurController.setSurfaceToApp(RemoteAnimationProvider.findLowestOpaqueLayerTarget(
- appTargets, MODE_OPENING));
- backgroundRadiusAnim.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- blurController.setSurfaceToLauncher(mLauncher.getDragLayer());
- }
- });
- }
-
- animatorSet.playTogether(appAnimator, backgroundRadiusAnim);
- return animatorSet;
+ return appAnimator;
}
/**
@@ -660,12 +639,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
SurfaceParams[] params = new SurfaceParams[appTargets.length];
for (int i = appTargets.length - 1; i >= 0; i--) {
RemoteAnimationTargetCompat target = appTargets[i];
- params[i] = new SurfaceParams.Builder(target.leash)
- .withAlpha(1f)
- .withWindowCrop(target.sourceContainerBounds)
- .withLayer(RemoteAnimationProvider.getLayer(target, MODE_OPENING))
- .withCornerRadius(cornerRadius)
- .build();
+ params[i] = new SurfaceParams(target.leash, 1f, null,
+ target.sourceContainerBounds,
+ RemoteAnimationProvider.getLayer(target, MODE_OPENING), cornerRadius);
}
surfaceApplier.scheduleApply(params);
}
@@ -696,25 +672,25 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
SurfaceParams[] params = new SurfaceParams[appTargets.length];
for (int i = appTargets.length - 1; i >= 0; i--) {
RemoteAnimationTargetCompat target = appTargets[i];
- SurfaceParams.Builder builder = new SurfaceParams.Builder(target.leash);
+ final float alpha;
+ final float cornerRadius;
if (target.mode == MODE_CLOSING) {
matrix.setScale(mScale.value, mScale.value,
target.sourceContainerBounds.centerX(),
target.sourceContainerBounds.centerY());
matrix.postTranslate(0, mDy.value);
matrix.postTranslate(target.position.x, target.position.y);
- builder.withMatrix(matrix)
- .withAlpha(mAlpha.value)
- .withCornerRadius(windowCornerRadius);
+ alpha = mAlpha.value;
+ cornerRadius = windowCornerRadius;
} else {
matrix.setTranslate(target.position.x, target.position.y);
- builder.withMatrix(matrix)
- .withAlpha(1f);
+ alpha = 1f;
+ cornerRadius = 0f;
}
- params[i] = builder
- .withWindowCrop(target.sourceContainerBounds)
- .withLayer(RemoteAnimationProvider.getLayer(target, MODE_CLOSING))
- .build();
+ params[i] = new SurfaceParams(target.leash, alpha, matrix,
+ target.sourceContainerBounds,
+ RemoteAnimationProvider.getLayer(target, MODE_CLOSING),
+ cornerRadius);
}
surfaceApplier.scheduleApply(params);
}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java b/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java
index 671aab00d9..43dc882400 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java
@@ -40,7 +40,7 @@ public class BackButtonAlphaHandler implements LauncherStateManager.StateHandler
@Override
public void setStateWithAnimation(LauncherState toState,
AnimatorSetBuilder builder, LauncherStateManager.AnimationConfig config) {
- if (config.onlyPlayAtomicComponent()) {
+ if (!config.playNonAtomicComponent()) {
return;
}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java b/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java
deleted file mode 100644
index 022a5f7f8a..0000000000
--- a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3.uioverrides;
-
-import static com.android.launcher3.anim.Interpolators.LINEAR;
-
-import android.util.IntProperty;
-import android.view.View;
-
-import com.android.launcher3.Launcher;
-import com.android.launcher3.LauncherState;
-import com.android.launcher3.LauncherStateManager;
-import com.android.launcher3.R;
-import com.android.launcher3.Utilities;
-import com.android.launcher3.anim.AnimatorSetBuilder;
-import com.android.launcher3.anim.PropertySetter;
-import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
-import com.android.systemui.shared.system.SurfaceControlCompat;
-import com.android.systemui.shared.system.TransactionCompat;
-
-/**
- * Controls the blur, for the Launcher surface only.
- */
-public class BackgroundBlurController implements LauncherStateManager.StateHandler {
-
- public static final IntProperty BACKGROUND_BLUR =
- new IntProperty("backgroundBlur") {
- @Override
- public void setValue(BackgroundBlurController blurController, int blurRadius) {
- blurController.setBackgroundBlurRadius(blurRadius);
- }
-
- @Override
- public Integer get(BackgroundBlurController blurController) {
- return blurController.mBackgroundBlurRadius;
- }
- };
-
- /**
- * A property that updates the background blur within a given range of values (ie. even if the
- * animator goes beyond 0..1, the interpolated value will still be bounded).
- */
- public static class ClampedBlurProperty extends IntProperty {
- private final int mMinValue;
- private final int mMaxValue;
-
- public ClampedBlurProperty(int minValue, int maxValue) {
- super(("backgroundBlurClamped"));
- mMinValue = minValue;
- mMaxValue = maxValue;
- }
-
- @Override
- public void setValue(BackgroundBlurController blurController, int blurRadius) {
- blurController.setBackgroundBlurRadius(Utilities.boundToRange(blurRadius,
- mMinValue, mMaxValue));
- }
-
- @Override
- public Integer get(BackgroundBlurController blurController) {
- return blurController.mBackgroundBlurRadius;
- }
- }
-
- private final Launcher mLauncher;
- private SurfaceControlCompat mSurface;
- private int mBackgroundBlurRadius;
-
- public BackgroundBlurController(Launcher l) {
- mLauncher = l;
- }
-
- /**
- * @return the background blur adjustment for folders
- */
- public int getFolderBackgroundBlurAdjustment() {
- return mLauncher.getResources().getInteger(
- R.integer.folder_background_blur_radius_adjustment);
- }
-
- /**
- * Sets the specified app target surface to apply the blur to.
- */
- public void setSurfaceToApp(RemoteAnimationTargetCompat target) {
- if (target != null) {
- setSurface(target.leash);
- }
- }
-
- /**
- * Sets the surface to apply the blur to as the launcher surface.
- */
- public void setSurfaceToLauncher(View v) {
- setSurface(v != null ? new SurfaceControlCompat(v) : null);
- }
-
- private void setSurface(SurfaceControlCompat surface) {
- if (mSurface != surface) {
- mSurface = surface;
- if (surface != null) {
- setBackgroundBlurRadius(mBackgroundBlurRadius);
- } else {
- // If there is no surface, then reset the blur radius
- setBackgroundBlurRadius(0);
- }
- }
- }
-
- @Override
- public void setState(LauncherState toState) {
- if (mSurface == null) {
- return;
- }
-
- int toBackgroundBlurRadius = toState.getBackgroundBlurRadius(mLauncher);
- if (mBackgroundBlurRadius != toBackgroundBlurRadius) {
- setBackgroundBlurRadius(toBackgroundBlurRadius);
- }
- }
-
- @Override
- public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder,
- LauncherStateManager.AnimationConfig config) {
- if (mSurface == null || config.onlyPlayAtomicComponent()) {
- return;
- }
-
- int toBackgroundBlurRadius = toState.getBackgroundBlurRadius(mLauncher);
- if (mBackgroundBlurRadius != toBackgroundBlurRadius) {
- PropertySetter propertySetter = config.getPropertySetter(builder);
- propertySetter.setInt(this, BACKGROUND_BLUR, toBackgroundBlurRadius, LINEAR);
- }
- }
-
- private void setBackgroundBlurRadius(int blurRadius) {
- // TODO: Do nothing if the shadows are not enabled
- // Always update the background blur as it will be reapplied when a surface is next
- // available
- mBackgroundBlurRadius = blurRadius;
- if (mSurface == null || !mSurface.isValid()) {
- return;
- }
- new TransactionCompat()
- .setBackgroundBlurRadius(mSurface, blurRadius)
- .apply();
- }
-}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
index 94e67f06c7..7481445600 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
@@ -17,17 +17,12 @@
package com.android.launcher3.uioverrides;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
-import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
-import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
-import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
-import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_PEEK;
-import static com.android.launcher3.LauncherStateManager.PLAY_ATOMIC_OVERVIEW_SCALE;
-import static com.android.launcher3.LauncherStateManager.SKIP_OVERVIEW;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCRIM_FADE;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_TRANSLATE_X;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_TRANSLATE_Y;
+import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW;
import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.graphics.Scrim.SCRIM_PROGRESS;
@@ -88,11 +83,13 @@ public abstract class BaseRecentsViewStateController
@Override
public final void setStateWithAnimation(@NonNull final LauncherState toState,
@NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) {
- if (!config.hasAnimationFlag(PLAY_ATOMIC_OVERVIEW_PEEK | PLAY_ATOMIC_OVERVIEW_SCALE)) {
+ boolean playAtomicOverviewComponent = config.playAtomicOverviewScaleComponent()
+ || config.playAtomicOverviewPeekComponent();
+ if (!playAtomicOverviewComponent) {
// The entire recents animation is played atomically.
return;
}
- if (config.hasAnimationFlag(SKIP_OVERVIEW)) {
+ if (builder.hasFlag(FLAG_DONT_ANIMATE_OVERVIEW)) {
return;
}
setStateWithAnimationInternal(toState, builder, config);
@@ -119,8 +116,8 @@ public abstract class BaseRecentsViewStateController