diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml index dd6ad484d0..ac10cc8d92 100644 --- a/quickstep/res/values-af/strings.xml +++ b/quickstep/res/values-af/strings.xml @@ -25,8 +25,7 @@ "Programgebruikinstellings" "Vee alles uit" "Onlangse programme" - - + "Taak is toegemaak" "%1$s, %2$s" "< 1 minuut" "%1$s oor vandag" @@ -103,6 +102,8 @@ "Terug" "IME-wisselaar" "Onlangs" + "Kennisgewings" + "Kitsinstellings" "Skuif na links bo" "Skuif na regs onder" diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml index 1577335d9c..dfa8532870 100644 --- a/quickstep/res/values-am/strings.xml +++ b/quickstep/res/values-am/strings.xml @@ -25,8 +25,7 @@ "የመተግበሪያ አጠቃቀም ቅንብሮች" "ሁሉንም አጽዳ" "የቅርብ ጊዜ መተግበሪያዎች" - - + "ተግባር ተዘግቷል" "%1$s%2$s" "< 1 ደቂቃ" "ዛሬ %1$s ቀርቷል" @@ -103,6 +102,8 @@ "ተመለስ" "አይኤምኢ መቀየሪያ" "የቅርብ ጊዜዎቹ" + "ማሳወቂያዎች" + "ፈጣን ቅንብሮች" "ወደ ላይ/ግራ ይውሰዱ" "ወደ ታች/ቀኝ ይውሰዱ" diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml index 602b3e110c..58b26d1cd3 100644 --- a/quickstep/res/values-ar/strings.xml +++ b/quickstep/res/values-ar/strings.xml @@ -25,8 +25,7 @@ "إعدادات استخدام التطبيق" "محو الكل" "التطبيقات المستخدمة مؤخرًا" - - + "تم إغلاق المهمة." "%1$s، %2$s" "أقل من دقيقة" "يتبقى اليوم %1$s." @@ -103,6 +102,10 @@ "رجوع" "‏مفتاح التبديل إلى IME" "الأحدث" + + + + "الانتقال إلى يمين الشاشة أو أعلاها" "الانتقال إلى يسار الشاشة أو أسفلها" diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml index adb4bae497..38a506f265 100644 --- a/quickstep/res/values-as/strings.xml +++ b/quickstep/res/values-as/strings.xml @@ -25,8 +25,7 @@ "এপে ব্যৱহাৰ কৰা ডেটাৰ ছেটিং" "আটাইবোৰ মচক" "শেহতীয়া এপসমূহ" - - + "কাৰ্য বন্ধ কৰা হ’ল" "%1$s, %2$s" "< ১ মিনিট" "আজি %1$s বাকী আছ" @@ -103,6 +102,10 @@ "উভতি যাওক" "IME ছুইচ্চাৰ" "শেহতীয়া" + + + + "ওপৰৰ বাঁওফাললৈ নিয়ক" "তলৰ সোঁফাললৈ নিয়ক" diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml index a2050f3acc..74fcb63faf 100644 --- a/quickstep/res/values-az/strings.xml +++ b/quickstep/res/values-az/strings.xml @@ -25,8 +25,7 @@ "Tətbiq istifadə ayarları" "Hamısını silin" "Son tətbiqlər" - - + "Tapşırıq bağlanıb" "%1$s, %2$s" "< 1 dəq" "Bu gün %1$s qaldı" @@ -103,6 +102,10 @@ "Geriyə" "IME keçiricisi" "Sonuncular" + + + + "Yuxarı/sola köçürün" "Aşağı/sağa köçürün" diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml index b064af96e0..f495b00cbe 100644 --- a/quickstep/res/values-b+sr+Latn/strings.xml +++ b/quickstep/res/values-b+sr+Latn/strings.xml @@ -25,8 +25,7 @@ "Podešavanja korišćenja aplikacije" "Obriši sve" "Nedavne aplikacije" - - + "Zadatak je zatvoren" "%1$s, %2$s" "< 1 min" "Još %1$s danas" @@ -103,6 +102,8 @@ "Nazad" "IME prebacivač" "Nedavno" + "Obaveštenja" + "Brza podešavanja" "Premesti gore levo" "Premesti dole desno" diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml index 672e901126..4872f7d61b 100644 --- a/quickstep/res/values-be/strings.xml +++ b/quickstep/res/values-be/strings.xml @@ -25,8 +25,7 @@ "Налады выкарыстання праграмы" "Ачысціць усё" "Нядаўнія праграмы" - - + "Задача закрыта" "%1$s, %2$s" "< 1 хв" "Сёння засталося %1$s" @@ -103,6 +102,10 @@ "Назад" "Выключальнік IME" "Нядаўнія" + + + + "Перамясціць уверх/улева" "Перамясціць уніз/управа" diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml index 65a1f07243..3fea5ee55e 100644 --- a/quickstep/res/values-bg/strings.xml +++ b/quickstep/res/values-bg/strings.xml @@ -25,8 +25,7 @@ "Настройки за използването на приложенията" "Изчистване на всички" "Скорошни приложения" - - + "Задачата е затворена" "%1$s, %2$s" "< 1 мин" "Оставащо време днес: %1$s" @@ -103,6 +102,10 @@ "Назад" "Редактор за метода на въвежд.: Превключвател" "Скорошни" + + + + "Преместване горе/вляво" "Преместване долу/вдясно" diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml index 5f05f4edc0..ddd0edd77e 100644 --- a/quickstep/res/values-bn/strings.xml +++ b/quickstep/res/values-bn/strings.xml @@ -25,8 +25,7 @@ "অ্যাপ ব্যবহারের সেটিংস" "সবকিছু খালি করুন" "সম্প্রতি ব্যবহৃত অ্যাপ" - - + "টাস্ক বন্ধ করা হয়েছে" "%1$s, %2$s" "< ১ মি." "আজকে %1$s বাকি আছে" @@ -103,6 +102,8 @@ "ফিরে যান" "IME সুইচার" "সম্প্রতি" + "বিজ্ঞপ্তি" + "দ্রুত সেটিংস" "উপরে/বাঁদিকে সরান" "নিচে/ডানদিকে সরান" diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml index 7de9d91c59..2cf2ef4878 100644 --- a/quickstep/res/values-bs/strings.xml +++ b/quickstep/res/values-bs/strings.xml @@ -25,8 +25,7 @@ "Postavke korištenja aplikacije" "Obriši sve" "Nedavne aplikacije" - - + "Zadatak je zatvoren" "%1$s, %2$s" "< 1 min" "Preostalo vrijeme: %1$s" @@ -103,6 +102,8 @@ "Nazad" "IME prebacivač" "Nedavno" + "Obavještenja" + "Brze postavke" "Premjesti gore lijevo" "Premjesti dolje desno" diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml index a83c8d900e..0f6c4862dd 100644 --- a/quickstep/res/values-ca/strings.xml +++ b/quickstep/res/values-ca/strings.xml @@ -25,8 +25,7 @@ "Configuració d\'ús d\'aplicacions" "Esborra-ho tot" "Aplicacions recents" - - + "Tasca tancada" "%1$s; %2$s" "< 1 minut" "temps restant avui: %1$s" @@ -103,6 +102,10 @@ "Enrere" "Selector d\'IME" "Recents" + + + + "Mou a la part superior o a l\'esquerra" "Mou a la part inferior o a la dreta" diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index 92f8cc4fa4..6aef1a48e5 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -25,8 +25,7 @@ "Nastavení využití aplikací" "Vymazat vše" "Poslední aplikace" - - + "Úkol byl zavřen" "%1$s, %2$s" "< 1 minuta" "dnes zbývá: %1$s" @@ -103,6 +102,10 @@ "Zpět" "Přepínač IME" "Poslední" + + + + "Přesunout doleva nahoru" "Přesunout doprava dolů" diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml index 9f2af7f133..c2e66812cb 100644 --- a/quickstep/res/values-da/strings.xml +++ b/quickstep/res/values-da/strings.xml @@ -25,8 +25,7 @@ "Indstillinger for appforbrug" "Ryd alt" "Seneste apps" - - + "Opgaven er lukket" "%1$s, %2$s" "< 1 min" "%1$s tilbage i dag" @@ -103,6 +102,10 @@ "Tilbage" "IME-vælger" "Seneste" + + + + "Flyt til toppen eller venstre side" "Flyt til bunden eller højre side" diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 75fee4b49e..8d5aa7a07d 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -25,8 +25,7 @@ "Einstellungen zur App-Nutzung" "Alle Apps schließen" "Kürzlich geöffnete Apps" - - + "Aufgabe geschlossen" "%1$s, %2$s" "< 1 Min." "Heute noch %1$s" @@ -103,6 +102,8 @@ "Zurück" "IME-Wechsler" "Letzte Apps" + "Benachrichtigungen" + "Schnelleinstellungen" "Nach oben / Nach links verschieben" "Nach unten / Nach rechts verschieben" diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml index 9f49b99279..10c39b40d9 100644 --- a/quickstep/res/values-el/strings.xml +++ b/quickstep/res/values-el/strings.xml @@ -25,8 +25,7 @@ "Ρυθμίσεις χρήσης εφαρμογής" "Διαγραφή όλων" "Πρόσφατες εφαρμογές" - - + "Η εργασία έκλεισε" "%1$s, %2$s" "< 1 λ." "Απομένουν %1$s σήμερα" @@ -103,6 +102,8 @@ "Πίσω" "Εναλλαγή IME" "Πρόσφατα" + "Ειδοποιήσεις" + "Γρήγορες ρυθμ." "Μετακίνηση επάνω/αριστερά" "Μετακίνηση κάτω/δεξιά" diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml index 9acc708ffa..c67f4c92a7 100644 --- a/quickstep/res/values-en-rAU/strings.xml +++ b/quickstep/res/values-en-rAU/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" @@ -103,6 +102,8 @@ "Back" "IME switcher" "Recents" + "Notifications" + "Quick Settings" "Move to top/left" "Move to bottom/right" diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml index 9acc708ffa..c67f4c92a7 100644 --- a/quickstep/res/values-en-rCA/strings.xml +++ b/quickstep/res/values-en-rCA/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" @@ -103,6 +102,8 @@ "Back" "IME switcher" "Recents" + "Notifications" + "Quick Settings" "Move to top/left" "Move to bottom/right" diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml index 9acc708ffa..c67f4c92a7 100644 --- a/quickstep/res/values-en-rGB/strings.xml +++ b/quickstep/res/values-en-rGB/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" @@ -103,6 +102,8 @@ "Back" "IME switcher" "Recents" + "Notifications" + "Quick Settings" "Move to top/left" "Move to bottom/right" diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml index 9acc708ffa..c67f4c92a7 100644 --- a/quickstep/res/values-en-rIN/strings.xml +++ b/quickstep/res/values-en-rIN/strings.xml @@ -25,8 +25,7 @@ "App usage settings" "Clear all" "Recent apps" - - + "Task closed" "%1$s, %2$s" "< 1 minute" "%1$s left today" @@ -103,6 +102,8 @@ "Back" "IME switcher" "Recents" + "Notifications" + "Quick Settings" "Move to top/left" "Move to bottom/right" diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml index 9f1cfe2fa3..c3007f04e0 100644 --- a/quickstep/res/values-en-rXC/strings.xml +++ b/quickstep/res/values-en-rXC/strings.xml @@ -102,6 +102,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎Back‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎IME switcher‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‎‎Recents‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎Notifications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎Quick Settings‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎Move to top/left‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎Move to bottom/right‎‏‎‎‏‎" diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml index 0fe634c421..69b6015a2a 100644 --- a/quickstep/res/values-es-rUS/strings.xml +++ b/quickstep/res/values-es-rUS/strings.xml @@ -25,8 +25,7 @@ "Configuración de uso de la app" "Borrar todo" "Apps recientes" - - + "Se cerró la tarea" "%1$s (%2$s)" "< 1 minuto" "Tiempo restante: %1$s" @@ -103,6 +102,8 @@ "Atrás" "Botón de IME" "Recientes" + "Notificaciones" + "Config. rápida" "Mover a la parte superior o izquierda" "Mover a la parte inferior o derecha" diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 667dd9973e..b5dc6e610d 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -25,8 +25,7 @@ "Ajustes de uso de la aplicación" "Borrar todo" "Aplicaciones recientes" - - + "Tarea cerrada" "%1$s (%2$s)" "<1 minuto" "tiempo restante: %1$s" @@ -103,6 +102,10 @@ "Atrás" "Interruptor IME" "Recientes" + + + + "Mover arriba/a la izquierda" "Mover abajo/a la derecha" diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml index 212976c813..950263f263 100644 --- a/quickstep/res/values-et/strings.xml +++ b/quickstep/res/values-et/strings.xml @@ -25,8 +25,7 @@ "Rakenduse kasutuse seaded" "Sule kõik" "Hiljutised rakendused" - - + "Ülesanne suleti" "%1$s %2$s" "< 1 minut" "Tääna jäänud %1$s" @@ -103,6 +102,10 @@ "Tagasi" "IME vahetaja" "Hiljutised" + + + + "Teisalda üles/vasakule" "Teisalda alla/paremale" diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml index c6b0688ce6..6193e359fd 100644 --- a/quickstep/res/values-eu/strings.xml +++ b/quickstep/res/values-eu/strings.xml @@ -25,8 +25,7 @@ "Aplikazioen erabileraren ezarpenak" "Garbitu guztiak" "Azken aplikazioak" - - + "Itxi da zeregina" "%1$s (%2$s)" "< 1 min" "%1$s gelditzen dira gaur" @@ -103,6 +102,8 @@ "Atzera" "IMEaren etengailua" "Azkenak" + "Jakinarazpenak" + "Ezarpen bizkorrak" "Eraman gora, ezkerretara" "Eraman behera, eskuinetara" diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index 5f6b2785e6..2323b3b657 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -25,8 +25,7 @@ "تنظیمات استفاده از برنامه" "پاک کردن همه" "برنامه‌های اخیر" - - + "تکلیف بسته شد" "%1$s، %2$s" "< ۱ دقیقه" "%1$s باقی‌مانده برای امروز" @@ -103,6 +102,8 @@ "برگشت" "‏تعویض‌کننده IME" "موارد اخیر" + "اعلان‌ها" + "تنظیمات فوری" "انتقال به بالا/ چپ" "انتقال به پایین/ راست" diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index 866e2d0906..9505039bf0 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -25,8 +25,7 @@ "Sovelluksen käyttöasetukset" "Poista kaikki" "Viimeisimmät sovellukset" - - + "Tehtävä suljettu" "%1$s, %2$s" "< 1 min" "%1$s jäljellä tänään" @@ -103,6 +102,10 @@ "Takaisin" "IME-vaihtopalvelu" "Viimeaikaiset" + + + + "Siirrä ylös tai vasemmalle" "Siirrä alas tai oikealle" diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml index 27b22ee43c..e34cb5d328 100644 --- a/quickstep/res/values-fr-rCA/strings.xml +++ b/quickstep/res/values-fr-rCA/strings.xml @@ -25,8 +25,7 @@ "Paramètres d\'utilisation de l\'application" "Tout effacer" "Applications récentes" - - + "Tâche fermée" "%1$s : %2$s" "< 1 min" "Il reste %1$s aujourd\'hui" @@ -103,6 +102,10 @@ "Retour" "Sélecteur IME" "Récents" + + + + "Déplacer vers le coin supérieur gauche de l\'écran" "Déplacer vers le coin inférieur droit de l\'écran" diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml index fdfb9f2770..3c28c4649e 100644 --- a/quickstep/res/values-fr/strings.xml +++ b/quickstep/res/values-fr/strings.xml @@ -25,8 +25,7 @@ "Paramètres de consommation de l\'application" "Tout effacer" "Applications récentes" - - + "Tâche fermée" "%1$s, %2$s" "< 1 min" "Encore %1$s aujourd\'hui" @@ -103,6 +102,10 @@ "Retour" "Sélecteur IME" "Récents" + + + + "Déplacer en haut ou à gauche" "Déplacer en bas ou à droite" diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml index ab3382fa57..4095f7d52c 100644 --- a/quickstep/res/values-gl/strings.xml +++ b/quickstep/res/values-gl/strings.xml @@ -25,8 +25,7 @@ "Configuración do uso de aplicacións" "Borrar todo" "Apps recentes" - - + "Tarefa pechada" "%1$s (%2$s)" "<1 min" "Tempo restante hoxe %1$s" @@ -103,6 +102,10 @@ "Atrás" "Selector do IME" "Recentes" + + + + "Mover á parte superior ou á esquerda" "Mover á parte inferior ou á dereita" diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml index d965ff8ff5..6bb100a060 100644 --- a/quickstep/res/values-gu/strings.xml +++ b/quickstep/res/values-gu/strings.xml @@ -25,8 +25,7 @@ "ઍપ વપરાશનું સેટિંગ" "બધું સાફ કરો" "તાજેતરની ઍપ" - - + "કાર્ય બંધ કર્યું" "%1$s, %2$s" "< 1 મિનિટ" "%1$s આજે બાકી" @@ -103,6 +102,8 @@ "પાછળ" "IME સ્વિચર" "તાજેતરના" + "નોટિફિકેશન" + "ઝડપી સેટિંગ" "સૌથી ઉપર ડાબી બાજુએ ખસેડો" "સૌથી નીચે જમણી બાજુએ ખસેડો" diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml index b79cb027cb..957125a54c 100644 --- a/quickstep/res/values-hi/strings.xml +++ b/quickstep/res/values-hi/strings.xml @@ -25,8 +25,7 @@ "ऐप्लिकेशन इस्तेमाल की सेटिंग" "सभी ऐप्लिकेशन बंद करें" "हाल ही में इस्तेमाल किए गए ऐप्लिकेशन" - - + "टास्क बंद किया गया" "%1$s, %2$s" "<1 मिनट" "आज %1$s और चलेगा" @@ -103,6 +102,8 @@ "वापस जाएं" "IME स्विचर" "हाल ही के" + "सूचनाएं" + "फटाफट सेटिंग" "ऊपर/बाईं तरफ़ ले जाएं" "नीचे/दाईं तरफ़ ले जाएं" diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml index 1767c8fb9c..6c29822c69 100644 --- a/quickstep/res/values-hr/strings.xml +++ b/quickstep/res/values-hr/strings.xml @@ -25,8 +25,7 @@ "Postavke upotrebe aplikacija" "Izbriši sve" "Nedavne aplikacije" - - + "Zadatak je zatvoren" "%1$s, %2$s" "< 1 min" "Još %1$s danas" @@ -103,6 +102,8 @@ "Natrag" "IME prekidač" "Najnovije" + "Obavijesti" + "Brze postavke" "Premjesti gore/lijevo" "Premjesti dolje/desno" diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml index 3ac0128543..5b1aff9896 100644 --- a/quickstep/res/values-hu/strings.xml +++ b/quickstep/res/values-hu/strings.xml @@ -25,8 +25,7 @@ "Alkalmazáshasználati beállítások" "Összes törlése" "Legutóbbi alkalmazások" - - + "A feladat bezárult" "%1$s, %2$s" "< 1 perc" "Ma még %1$s van hátra" @@ -103,6 +102,10 @@ "Vissza" "IME-váltó" "Legutóbbiak" + + + + "Mozgatás felülre vagy a bal oldalra" "Mozgatás alulra vagy a jobb oldalra" diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml index b478137199..df7307834a 100644 --- a/quickstep/res/values-hy/strings.xml +++ b/quickstep/res/values-hy/strings.xml @@ -25,8 +25,7 @@ "Հավելվածի օգտագործման կարգավորումներ" "Փակել բոլորը" "Վերջին օգտագործած հավելվածները" - - + "Առաջադրանքը փակված է" "%1$s, %2$s" "< 1 ր" "Այսօր մնացել է՝ %1$s" @@ -103,6 +102,8 @@ "Հետ" "IME փոխանջատիչ" "Վերջինները" + "Ծանուցումներ" + "Արագ կարգավորումներ" "Տեղափոխել վերևի ձախ անկյուն" "Տեղափոխել ներքևի աջ անկյուն" diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml index 1ac69c1e2f..61bdf31432 100644 --- a/quickstep/res/values-in/strings.xml +++ b/quickstep/res/values-in/strings.xml @@ -25,8 +25,7 @@ "Setelan penggunaan aplikasi" "Hapus semua" "Aplikasi terbaru" - - + "Tugas Ditutup" "%1$s, %2$s" "< 1 menit" "%1$s tersisa hari ini" @@ -103,6 +102,8 @@ "Kembali" "Pengalih IME" "Terbaru" + "Notifikasi" + "Setelan Cepat" "Pindahkan ke atas/kiri" "Pindahkan ke bawah/kanan" diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml index 3ef2f3146b..13275522a1 100644 --- a/quickstep/res/values-is/strings.xml +++ b/quickstep/res/values-is/strings.xml @@ -25,8 +25,7 @@ "Notkunarstillingar forrits" "Hreinsa allt" "Nýleg forrit" - - + "Verkefni lokað" "%1$s, %2$s" "< 1 mín." "%1$s eftir í dag" @@ -103,6 +102,10 @@ "Til baka" "Breyta innsláttaraðferð" "Nýlegt" + + + + "Færa efst/til vinstri" "Færa neðst/til hægri" diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index e44175dc89..a555636db1 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -25,8 +25,7 @@ "Impostazioni di utilizzo delle app" "Cancella tutto" "App recenti" - - + "Attività chiusa" "%1$s, %2$s" "< 1 min" "Rimanente oggi: %1$s" @@ -103,6 +102,10 @@ "Indietro" "Selettore IME" "Recenti" + + + + "Sposta in alto/a sinistra" "Sposta in basso/a destra" diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml index 5313280c42..cd97903de4 100644 --- a/quickstep/res/values-iw/strings.xml +++ b/quickstep/res/values-iw/strings.xml @@ -25,8 +25,7 @@ "הגדרות שימוש באפליקציה" "ניקוי הכול" "אפליקציות אחרונות" - - + "המשימה סגורה" "%1$s, %2$s" "‏< דקה" "הזמן שנותר להיום: %1$s" @@ -103,6 +102,10 @@ "חזרה" "‏כלי להחלפת IME" "לאחרונה" + + + + "העברה לפינה השמאלית/העליונה" "העברה לפינה הימנית/התחתונה" diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml index 3d91d0575d..9a4ce01544 100644 --- a/quickstep/res/values-ja/strings.xml +++ b/quickstep/res/values-ja/strings.xml @@ -25,8 +25,7 @@ "アプリの使用状況の設定" "すべてクリア" "最近使ったアプリ" - - + "タスクを閉じました" "%1$s%2$s" "1 分未満" "今日はあと %1$sです" @@ -103,6 +102,8 @@ "戻る" "IME の切り替え" "最近" + "通知" + "クイック設定" "上 / 左に移動" "下 / 右に移動" diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml index eb2dc94088..250148911f 100644 --- a/quickstep/res/values-ka/strings.xml +++ b/quickstep/res/values-ka/strings.xml @@ -25,8 +25,7 @@ "აპების გამოყენების პარამეტრები" "ყველას გასუფთავება" "ბოლოდროინდელი აპები" - - + "ამოცანა დაიხურა" "%1$s, %2$s" "< 1 წუთი" "დღეს დარჩენილია %1$s" @@ -103,6 +102,8 @@ "უკან" "IME გადამრთველი" "ბოლოდროინდელი" + "შეტყობინებები" + "სწრაფი პარამეტრები" "ზემოთ/მარცხნივ გადატანა" "ქვემოთ/მარჯვნივ გადატანა" diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index 538fb59bb4..9d3ca2d17a 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -25,8 +25,7 @@ "Қолданбаны пайдалану параметрлері" "Барлығын өшіру" "Соңғы пайдаланылған қолданбалар" - - + "Тапсырма жабылды." "%1$s, %2$s" "< 1 мин" "Бүгін %1$s қалды" @@ -103,6 +102,8 @@ "Артқа" "IME ауыстырғышы" "Соңғылары" + "Хабарландырулар" + "Жылдам параметрлер" "Жоғары/солға жылжыту" "Төмен/оңға жылжыту" diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml index 740277621d..3295a636ef 100644 --- a/quickstep/res/values-km/strings.xml +++ b/quickstep/res/values-km/strings.xml @@ -25,8 +25,7 @@ "ការកំណត់​ការប្រើប្រាស់​កម្មវិធី" "សម្អាត​ទាំងអស់" "កម្មវិធី​ថ្មីៗ" - - + "បានបិទ​កិច្ចការ" "%1$s, %2$s" "< 1 នាទី" "នៅសល់ %1$s ទៀត​នៅថ្ងៃនេះ" @@ -103,6 +102,10 @@ "ថយក្រោយ" "ប៊ូតុងប្ដូរ IME" "ថ្មីៗ" + + + + "ផ្លាស់ទីទៅខាងលើ/ឆ្វេង" "ផ្លាស់ទីទៅខាងក្រោម/ស្ដាំ" diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 5ec6df7916..01c7dd5bbb 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -25,8 +25,7 @@ "ಆ್ಯಪ್‌ ಬಳಕೆಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು" "ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ" "ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು" - - + "ಕಾರ್ಯವನ್ನು ಮುಚ್ಚಲಾಗಿದೆ" "%1$s, %2$s" "< 1 ನಿ" "ಇಂದು %1$s ಸಮಯ ಉಳಿದಿದೆ" @@ -103,6 +102,8 @@ "ಹಿಂದೆ" "IME ಪರಿವರ್ತಕ" "ಇತ್ತೀಚಿನವು" + "ಅಧಿಸೂಚನೆಗಳು" + "ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‍ಗಳು" "ಮೇಲಿನ/ಎಡಭಾಗಕ್ಕೆ ಸರಿಸಿ" "ಕೆಳಗಿನ/ಬಲಭಾಗಕ್ಕೆ ಸರಿಸಿ" diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index 45643e75cb..08e5642068 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -25,8 +25,7 @@ "앱 사용 설정" "모두 삭제" "최근 앱" - - + "작업 종료됨" "%1$s, %2$s" "< 1분" "오늘 %1$s 남음" @@ -103,6 +102,10 @@ "뒤로" "IME 전환기" "최근 항목" + + + + "상단/왼쪽으로 이동" "하단/오른쪽으로 이동" diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index e562f93317..c1ca8b3cc6 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -25,8 +25,7 @@ "Колдонмону пайдалануу жөндөөлөрү" "Баарын тазалоо" "Акыркы колдонмолор" - - + "Тапшырма жабылды" "%1$s, %2$s" "< 1 мүнөт" "Бүгүн %1$s мүнөт калды" @@ -103,6 +102,8 @@ "Артка" "IME которгучу" "Акыркылар" + "Билдирмелер" + "Ыкчам жөндөөлөр" "Жогорку/сол бурчка жылдыруу" "Төмөнкү/оң бурчка жылдыруу" diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml index 04939fcd6f..4c1791f112 100644 --- a/quickstep/res/values-lo/strings.xml +++ b/quickstep/res/values-lo/strings.xml @@ -25,8 +25,7 @@ "ການຕັ້ງຄ່າການນຳໃຊ້ແອັບ" "ລຶບລ້າງທັງໝົດ" "ແອັບຫຼ້າສຸດ" - - + "ປິດໜ້າວຽກແລ້ວ" "%1$s, %2$s" "< 1 ນາທີ" "ເຫຼືອ %1$s ມື້ນີ້" @@ -103,6 +102,10 @@ "ກັບຄືນ" "ຕົວສະຫຼັບ IME" "ຫຼ້າສຸດ" + + + + "ຍ້າຍໄປຊ້າຍ/ເທິງ" "ຍ້າຍໄປຂວາ/ລຸ່ມ" diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml index c9b0919ce4..95a7e86a9a 100644 --- a/quickstep/res/values-lt/strings.xml +++ b/quickstep/res/values-lt/strings.xml @@ -25,8 +25,7 @@ "Programos naudojimo nustatymai" "Išvalyti viską" "Naujausios programos" - - + "Užduotis uždaryta" "%1$s, %2$s" "< 1 min." "Šiandien liko: %1$s" @@ -103,6 +102,10 @@ "Atgal" "IMRP perjungiklis" "Naujausi" + + + + "Perkelti aukštyn, kairėn" "Perkelti žemyn, dešinėn" diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml index 6bd8f5e1b1..f3de0b7f5c 100644 --- a/quickstep/res/values-lv/strings.xml +++ b/quickstep/res/values-lv/strings.xml @@ -25,8 +25,7 @@ "Lietotņu izmantošanas iestatījumi" "Notīrīt visu" "Pēdējās izmantotās lietotnes" - - + "Uzdevums ir aizvērts" "%1$s, %2$s" "<1 minūte" "Šodien atlicis: %1$s" @@ -103,6 +102,10 @@ "Atpakaļ" "IME pārslēdzējs" "Nesenie" + + + + "Pārvietot uz augšējo/kreiso stūri" "Pārvietot uz apakšējo/labo stūri" diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 250c11c8ce..dc0732f24c 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -25,8 +25,7 @@ "Поставки за користење на апликациите" "Избриши ги сите" "Неодамнешни апликации" - - + "Задачата е затворена" "%1$s, %2$s" "< 1 минута" "Уште %1$s за денес" @@ -103,6 +102,8 @@ "Назад" "IME менувач" "Неодамнешни" + "Известувања" + "Брзи поставки" "Премести горе лево" "Премести долу десно" diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml index 19c398570d..4ac251c97d 100644 --- a/quickstep/res/values-ml/strings.xml +++ b/quickstep/res/values-ml/strings.xml @@ -25,8 +25,7 @@ "ആപ്പ് ഉപയോഗ ക്രമീകരണം" "എല്ലാം മായ്‌ക്കുക" "സമീപകാല ആപ്പുകൾ" - - + "ടാസ്ക്ക് അടച്ചു" "%1$s, %2$s" "< 1 മിനിറ്റ്" "ഇന്ന് %1$s ശേഷിക്കുന്നു" @@ -103,6 +102,8 @@ "മടങ്ങുക" "IME സ്വിച്ചർ" "അടുത്തിടെയുള്ളവ" + "അറിയിപ്പുകൾ" + "ദ്രുത ക്രമീകരണം" "മുകളിലേക്കോ ഇടത്തേക്കോ നീക്കുക" "താഴേക്കോ വലത്തേക്കോ നീക്കുക" diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index 4ac7c170e2..6d918f6eef 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -25,8 +25,7 @@ "Апп ашиглалтын тохиргоо" "Бүгдийг устгах" "Саяхны аппууд" - - + "Ажлыг хаасан" "%1$s, %2$s" "< 1 минут" "Өнөөдөр %1$s үлдсэн" @@ -103,6 +102,8 @@ "Буцах" "IME сэлгэгч" "Саяхны" + "Мэдэгдэл" + "Шуурхай тохиргоо" "Зүүн дээд хэсэг рүү зөөх" "Баруун доод хэсэг рүү зөөх" diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml index 8b505dd4e5..aa374b4fc5 100644 --- a/quickstep/res/values-mr/strings.xml +++ b/quickstep/res/values-mr/strings.xml @@ -25,8 +25,7 @@ "अ‍ॅप वापर सेटिंग्ज" "सर्व साफ करा" "अलीकडील अ‍ॅप्स" - - + "टास्क बंद केली" "%1$s, %2$s" "१मिहून कमी" "आज %1$sशिल्लक आहे" @@ -103,6 +102,8 @@ "मागे जा" "IME स्विचर" "अलीकडील" + "सूचना" + "क्विक सेटिंग्ज" "सर्वात वरती/डावीकडे हलवा" "तळाशी/उजवीकडे हलवा" diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml index da813820bd..8b9165dea6 100644 --- a/quickstep/res/values-ms/strings.xml +++ b/quickstep/res/values-ms/strings.xml @@ -25,8 +25,7 @@ "Tetapan penggunaan apl" "Kosongkan semua" "Apl terbaharu" - - + "Tugas Ditutup" "%1$s, %2$s" "< 1 minit" "%1$s lagi hari ini" @@ -103,6 +102,8 @@ "Kembali" "Penukar IME" "Terbaharu" + "Pemberitahuan" + "Tetapan Pantas" "Alihkan ke atas/kiri" "Alihkan ke bawah/kanan" diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml index 675a53e7bb..d09165aa02 100644 --- a/quickstep/res/values-my/strings.xml +++ b/quickstep/res/values-my/strings.xml @@ -25,8 +25,7 @@ "အက်ပ်အသုံးပြုမှု ဆက်တင်များ" "အားလုံးရှင်းရန်" "လတ်တလောသုံး အက်ပ်များ" - - + "လုပ်ဆောင်စရာ ပိတ်ထားသည်" "%1$s%2$s" "< ၁ မိနစ်" "ယနေ့ %1$s ခု ကျန်သည်" @@ -103,6 +102,10 @@ "နောက်သို့" "IME ပြောင်းစနစ်" "လတ်တလောများ" + + + + "အပေါ်/ဘယ်ဘက်သို့ ရွှေ့ရန်" "အောက်ခြေ/ညာဘက်သို့ ရွှေ့ရန်" diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml index 8a789e13d4..6d143bdc7f 100644 --- a/quickstep/res/values-nb/strings.xml +++ b/quickstep/res/values-nb/strings.xml @@ -25,8 +25,7 @@ "Innstillinger for appbruk" "Fjern alt" "Nylige apper" - - + "Oppgaven er lukket" "%1$s, %2$s" "< 1 minutt" "%1$s gjenstår i dag" @@ -103,6 +102,10 @@ "Tilbake" "IME-veksler" "Nylige" + + + + "Flytt til øverst/venstre" "Flytt til nederst/høyre" diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml index 6e7e6e8bdd..cd3383b5fe 100644 --- a/quickstep/res/values-ne/strings.xml +++ b/quickstep/res/values-ne/strings.xml @@ -25,8 +25,7 @@ "एपको उपयोगका सेटिङहरू" "सबै मेटाउनुहोस्" "हालसालैका एपहरू" - - + "कार्य बन्द गरियो" "%1$s, %2$s" "< १ मिनेट" "आज: %1$s बाँकी" @@ -103,6 +102,10 @@ "पछाडि जानुहोस्" "IME स्विचर" "हालसालैका बटनहरू" + + + + "सिरान/बायाँतिर सार्नुहोस्" "फेद/दायाँतिर सार्नुहोस्" diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml index e7af211a13..7772aae71c 100644 --- a/quickstep/res/values-nl/strings.xml +++ b/quickstep/res/values-nl/strings.xml @@ -25,8 +25,7 @@ "Instellingen voor app-gebruik" "Alles wissen" "Recente apps" - - + "Taak gesloten" "%1$s, %2$s" "< 1 minuut" "Nog %1$s vandaag" @@ -103,6 +102,8 @@ "Terug" "IME-schakelaar" "Recent" + "Meldingen" + "Snelle instellingen" "Naar boven/links verplaatsen" "Naar beneden/rechts verplaatsen" diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index e3f1f77963..77407833f3 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -25,8 +25,7 @@ "ଆପ୍‍ ବ୍ୟବହାର ସେଟିଂସ୍‍" "ସବୁ ଖାଲି କରନ୍ତୁ" "ବର୍ତ୍ତମାନର ଆପ୍‌" - - + "ଟାସ୍କ ବନ୍ଦ ହୋଇଯାଇଛି" "%1$s %2$s" "< 1 ମିନିଟ୍" "ଆଜି %1$s ବାକି ଅଛି" @@ -103,6 +102,10 @@ "ପଛକୁ ଫେରନ୍ତୁ" "IME ସ୍ୱିଚର" "ବର୍ତ୍ତମାନର" + + + + "ଶୀର୍ଷ/ବାମକୁ ମୁଭ କରନ୍ତୁ" "ନିମ୍ନ/ଡାହାଣକୁ ମୁଭ କରନ୍ତୁ" diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml index 48098a5723..0173ee2f5e 100644 --- a/quickstep/res/values-pa/strings.xml +++ b/quickstep/res/values-pa/strings.xml @@ -25,8 +25,7 @@ "ਐਪ ਵਰਤੋਂ ਦੀਆਂ ਸੈਟਿੰਗਾਂ" "ਸਭ ਕਲੀਅਰ ਕਰੋ" "ਹਾਲੀਆ ਐਪਾਂ" - - + "ਕਾਰਜ ਬੰਦ" "%1$s, %2$s" "< 1 ਮਿੰਟ" "ਅੱਜ %1$s ਬਾਕੀ" @@ -103,6 +102,8 @@ "ਪਿੱਛੇ" "IME ਸਵਿੱਚਰ" "ਹਾਲੀਆ" + "ਸੂਚਨਾਵਾਂ" + "ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ" "ਸਿਖਰਲੇ/ਖੱਬੇ ਪਾਸੇ ਲੈ ਕੇ ਜਾਓ" "ਹੇਠਾਂ/ਸੱਜੇ ਪਾਸੇ ਲੈ ਕੇ ਜਾਓ" diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml index f0b9566a84..19b666a704 100644 --- a/quickstep/res/values-pl/strings.xml +++ b/quickstep/res/values-pl/strings.xml @@ -25,8 +25,7 @@ "Ustawienia użycia aplikacji" "Wyczyść wszystko" "Ostatnie aplikacje" - - + "Zadanie zamknięte" "%1$s, %2$s" "> 1 min" "Na dziś zostało %1$s" @@ -103,6 +102,8 @@ "Wstecz" "Przełącznik IME" "Ostatnie" + "Powiadomienia" + "Szybkie ustawienia" "Przesuń w górny lewy róg" "Przesuń w dolny prawy róg" diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index 407edb7d15..4e7b7a6351 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -25,8 +25,7 @@ "Definições de utilização de aplicações" "Limpar tudo" "Apps recentes" - - + "Tarefa fechada" "%1$s, %2$s" "< 1 minuto" "Resta(m) %1$s hoje." @@ -103,6 +102,8 @@ "Voltar" "Comutador IME" "Recentes" + "Notificações" + "Definiç. rápidas" "Mover para a parte superior esquerda" "Mover para a part superior direita" diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml index eb9e79405a..d4a56acb20 100644 --- a/quickstep/res/values-pt/strings.xml +++ b/quickstep/res/values-pt/strings.xml @@ -25,8 +25,7 @@ "Configurações de uso do app" "Limpar tudo" "Apps recentes" - - + "Tarefa encerrada" "%1$s, %2$s" "< 1 min" "%1$s restante(s) hoje" @@ -103,6 +102,8 @@ "Voltar" "Alternador do IME" "Recentes" + "Notificações" + "Config. rápidas" "Mover para cima/para a esquerda" "Mover para baixo/para a direita" diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml index 89589a1c0c..38d596cd4b 100644 --- a/quickstep/res/values-ro/strings.xml +++ b/quickstep/res/values-ro/strings.xml @@ -25,8 +25,7 @@ "Setări de utilizare a aplicației" "Ștergeți tot" "Aplicații recente" - - + "Activitatea s-a încheiat" "%1$s, %2$s" "< 1 minut" "Au mai rămas %1$s astăzi" @@ -103,6 +102,8 @@ "Înapoi" "Comutator IME" "Recente" + "Notificări" + "Setări rapide" "Mutați în stânga sus" "Mutați în dreapta jos" diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml index 0baa02c9c5..7d27436abf 100644 --- a/quickstep/res/values-ru/strings.xml +++ b/quickstep/res/values-ru/strings.xml @@ -25,8 +25,7 @@ "Настройки использования приложения" "Очистить все" "Недавние приложения" - - + "Задача закрыта" "%1$s: %2$s" "< 1 мин." "Осталось сегодня: %1$s" @@ -103,6 +102,8 @@ "Назад" "Переключат. IME" "Недавние" + "Уведомления" + "Быстрые настройки" "Переместить вверх или влево" "Переместить вниз или вправо" diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml index b72aca4a94..990017e0ce 100644 --- a/quickstep/res/values-si/strings.xml +++ b/quickstep/res/values-si/strings.xml @@ -25,8 +25,7 @@ "යෙදුම් භාවිත සැකසීම්" "සියල්ල හිස් කරන්න" "මෑත යෙදුම්" - - + "කාර්යය අවසන් කරන ලදි" "%1$s, %2$s" "< 1 විනාඩියක්" "අද %1$sක් ඉතුරුයි" @@ -103,6 +102,10 @@ "ආපසු" "IME මාරුව" "මෑත" + + + + "ඉහළ/වම වෙත ගෙන යන්න" "පහළ/දකුණ වෙත ගෙන යන්න" diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml index c03ffd52bc..a18f72ca6d 100644 --- a/quickstep/res/values-sk/strings.xml +++ b/quickstep/res/values-sk/strings.xml @@ -25,8 +25,7 @@ "Nastavenia využívania aplikácie" "Vymazať všetko" "Nedávne aplikácie" - - + "Úloha bola zavretá" "%1$s, %2$s" "Menej ako 1 minúta" "Dnes ešte zostáva: %1$s" @@ -103,6 +102,10 @@ "Späť" "Prepínač IME" "Nedávne" + + + + "Presunúť hore alebo doľava" "Presunúť dole alebo doprava" diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml index 61368f571f..82035280b6 100644 --- a/quickstep/res/values-sl/strings.xml +++ b/quickstep/res/values-sl/strings.xml @@ -25,8 +25,7 @@ "Nastavitve uporabe aplikacij" "Počisti vse" "Nedavne aplikacije" - - + "Opravilo je zaprto" "%1$s, %2$s" "< 1 min" "Danes je ostalo še %1$s" @@ -103,6 +102,8 @@ "Nazaj" "Menjava UNV" "Nedavno" + "Obvestila" + "Hitre nastavitve" "Premakni na vrh/levo" "Premakni na dno/desno" diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml index 6dbf712657..f2b2fa8520 100644 --- a/quickstep/res/values-sq/strings.xml +++ b/quickstep/res/values-sq/strings.xml @@ -25,8 +25,7 @@ "Cilësimet e përdorimit të aplikacionit" "Pastroji të gjitha" "Aplikacionet e fundit" - - + "Detyra u mbyll" "%1$s, %2$s" "< 1 minutë" "%1$s të mbetura sot" @@ -103,6 +102,10 @@ "Pas" "Çelësi IME" "Të fundit" + + + + "Lëviz në krye/majtas" "Lëviz në fund/djathtas" diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml index db6c2b42b5..309aaeb75a 100644 --- a/quickstep/res/values-sr/strings.xml +++ b/quickstep/res/values-sr/strings.xml @@ -25,8 +25,7 @@ "Подешавања коришћења апликације" "Обриши све" "Недавне апликације" - - + "Задатак је затворен" "%1$s, %2$s" "< 1 мин" "Још %1$s данас" @@ -103,6 +102,8 @@ "Назад" "IME пребацивач" "Недавно" + "Обавештења" + "Брза подешавања" "Премести горе лево" "Премести доле десно" diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index 0ae3ca0790..2f1b75af4e 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -25,8 +25,7 @@ "Inställningar för appanvändning" "Rensa alla" "Senaste apparna" - - + "Uppgiften har stängts" "%1$s, %2$s" "< 1 min" "%1$s kvar i dag" @@ -103,6 +102,10 @@ "Tillbaka" "IME-väljare" "Senaste" + + + + "Flytta högst upp/till vänster" "Flytta längst ned/till höger" diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml index 287635a0f4..e10d447a38 100644 --- a/quickstep/res/values-sw/strings.xml +++ b/quickstep/res/values-sw/strings.xml @@ -25,8 +25,7 @@ "Mipangilio ya matumizi ya programu" "Ondoa zote" "Programu za hivi karibuni" - - + "Jukumu Limefungwa" "%1$s, %2$s" "< dak 1" "Umebakisha %1$s leo" @@ -103,6 +102,8 @@ "Nyuma" "Kibadilishaji cha IME" "Vilivyotumika majuzi" + "Arifa" + "Mipangilio ya Haraka" "Sogeza juu/kushoto" "Sogeza chini/kulia" diff --git a/quickstep/res/values-sw600dp-land/dimens.xml b/quickstep/res/values-sw600dp-land/dimens.xml new file mode 100644 index 0000000000..4e3c02cd77 --- /dev/null +++ b/quickstep/res/values-sw600dp-land/dimens.xml @@ -0,0 +1,22 @@ + + + 19.1dp + 10dp + 52dp + 38dp + diff --git a/quickstep/res/values-sw600dp/dimens.xml b/quickstep/res/values-sw600dp/dimens.xml index 5d9e0596b5..223a5e994d 100644 --- a/quickstep/res/values-sw600dp/dimens.xml +++ b/quickstep/res/values-sw600dp/dimens.xml @@ -16,4 +16,14 @@ --> 25dp + + 12dp + 4dp + 36dp + 19.37dp + 22dp + 60dp + 36dp + 36dp + 32dp diff --git a/quickstep/res/values-sw720dp/dimens.xml b/quickstep/res/values-sw720dp/dimens.xml index 2831a6f7f5..05e269b17d 100644 --- a/quickstep/res/values-sw720dp/dimens.xml +++ b/quickstep/res/values-sw720dp/dimens.xml @@ -16,6 +16,5 @@ --> 44dp - 44dp - 44dp + 44dp diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index c67b6b7da7..ebf5eb2627 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -25,8 +25,7 @@ "ஆப்ஸ் உபயோக அமைப்புகள்" "எல்லாம் அழி" "சமீபத்திய ஆப்ஸ்" - - + "பணி முடிந்தது" "%1$s, %2$s" "< 1 நி" "இன்று %1$s மீதமுள்ளது" @@ -103,6 +102,8 @@ "பின்செல்லும்" "IME சுவிட்ச்சர்" "சமீபத்தியவை" + "அறிவிப்புகள்" + "விரைவு அமைப்புகள்" "மேலே/இடதுபுறம் நகர்த்தும்" "கீழே/வலதுபுறம் நகர்த்தும்" diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml index 19236e9129..8f43b3c385 100644 --- a/quickstep/res/values-te/strings.xml +++ b/quickstep/res/values-te/strings.xml @@ -25,8 +25,7 @@ "యాప్ వినియోగ సెట్టింగ్‌లు" "అన్నీ తీసివేయండి" "ఇటీవలి యాప్‌లు" - - + "టాస్క్ మూసివేయబడింది" "%1$s, %2$s" "< 1 నిమిషం" "నేటికి %1$s మిగిలి ఉంది" @@ -103,6 +102,8 @@ "వెనుకకు" "IME స్విచ్చర్" "ఇటీవలివి" + "నోటిఫికేషన్‌లు" + "క్విక్ సెట్టింగ్‌లు" "ఎగువ/ఎడమ వైపునకు తరలించండి" "దిగువ/కుడి వైపునకు తరలించండి" diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml index d91c016e29..62ab2d2c6c 100644 --- a/quickstep/res/values-th/strings.xml +++ b/quickstep/res/values-th/strings.xml @@ -25,8 +25,7 @@ "การตั้งค่าการใช้แอป" "ล้างทั้งหมด" "แอปล่าสุด" - - + "ปิดงานแล้ว" "%1$s %2$s" "<1 นาที" "วันนี้เหลืออีก %1$s" @@ -103,6 +102,8 @@ "กลับ" "ตัวเปลี่ยน IME" "ล่าสุด" + "การแจ้งเตือน" + "การตั้งค่าด่วน" "ย้ายไปที่ด้านบนหรือด้านซ้าย" "ย้ายไปที่ด้านล่างหรือด้านขวา" diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml index cc457c0cfb..3ecae96b30 100644 --- a/quickstep/res/values-tl/strings.xml +++ b/quickstep/res/values-tl/strings.xml @@ -25,8 +25,7 @@ "Mga setting ng paggamit ng app" "I-clear lahat" "Mga kamakailang app" - - + "Isinara ang Gawain" "%1$s, %2$s" "< 1 min" "%1$s na lang ngayon" @@ -103,6 +102,10 @@ "Bumalik" "IME switcher" "Mga Kamakailan" + + + + "Ilipat sa itaas/kaliwa" "Ilipat sa ibaba/kanan" diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml index e0ef9b72f7..19ced47d01 100644 --- a/quickstep/res/values-tr/strings.xml +++ b/quickstep/res/values-tr/strings.xml @@ -25,8 +25,7 @@ "Uygulama kullanım ayarları" "Tümünü temizle" "Son uygulamalar" - - + "Görev Kapatıldı" "%1$s, %2$s" "< 1 dk." "Bugün %1$s kaldı" @@ -103,6 +102,10 @@ "Geri" "IME değiştirici" "Son Kullanılanlar" + + + + "Sol üste taşı" "Sağ alta taşı" diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml index e376938780..231d128aca 100644 --- a/quickstep/res/values-uk/strings.xml +++ b/quickstep/res/values-uk/strings.xml @@ -25,8 +25,7 @@ "Налаштування використання додатка" "Очистити все" "Нещодавні додатки" - - + "Завдання закрито" "%1$s, %2$s" "< 1 хв" "Сьогодні залишилося %1$s" @@ -103,6 +102,10 @@ "Назад" "Перемикач IME" "Нещодавні" + + + + "Перемістити вгору або вліво" "Перемістити вниз або вправо" diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml index 380d470b31..2b055acf02 100644 --- a/quickstep/res/values-ur/strings.xml +++ b/quickstep/res/values-ur/strings.xml @@ -25,8 +25,7 @@ "ایپ کے استعمال کی ترتیبات" "سبھی کو صاف کریں" "حالیہ ایپس" - - + "ٹاسک بند ہے" "%1$s،%2$s" "‏< 1 منٹ" "آج %1$s بچا ہے" @@ -103,6 +102,8 @@ "پیچھے" "‏IME سوئچر" "حالیہ" + "اطلاعات" + "فوری ترتیبات" "اوپر/بائیں طرف منتقل کریں" "نیچے/دائیں طرف منتقل کریں" diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml index 9374fc75f3..3b9853f787 100644 --- a/quickstep/res/values-uz/strings.xml +++ b/quickstep/res/values-uz/strings.xml @@ -25,8 +25,7 @@ "Ilovadan foydalanish sozlamalari" "Hammasini tozalash" "Yaqinda ishlatilgan ilovalar" - - + "Vazifalar yopildi" "%1$s, %2$s" "< 1 daqiqa" "Bugun %1$s qoldi" @@ -103,6 +102,8 @@ "Orqaga" "IME tugmasi" "Oxirgilar" + "Bildirishnomalar" + "Tezkor sozlamalar" "Yuqoriga yoki chapga oʻtkazish" "Pastga yoki oʻngga oʻtkazish" diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml index 12cf3cbaa7..1072c3a17a 100644 --- a/quickstep/res/values-vi/strings.xml +++ b/quickstep/res/values-vi/strings.xml @@ -25,8 +25,7 @@ "Cài đặt mức sử dụng ứng dụng" "Xóa tất cả" "Ứng dụng gần đây" - - + "Đã đóng tác vụ" "%1$s, %2$s" "< 1 phút" "Hôm nay còn %1$s" @@ -103,6 +102,10 @@ "Quay lại" "Trình chuyển đổi IME" "Gần đây" + + + + "Chuyển lên trên cùng/sang bên trái" "Chuyển xuống dưới cùng/sang bên phải" diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml index 8c0549924f..4587d58778 100644 --- a/quickstep/res/values-zh-rCN/strings.xml +++ b/quickstep/res/values-zh-rCN/strings.xml @@ -25,8 +25,7 @@ "应用使用设置" "全部清除" "最近用过的应用" - - + "任务已关闭" "%1$s%2$s)" "不到 1 分钟" "今天还可使用 %1$s" @@ -103,6 +102,10 @@ "返回" "IME 切换器" "最近用过" + + + + "移到顶部/左侧" "移到底部/右侧" diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml index a0d95c9f65..2810771d2f 100644 --- a/quickstep/res/values-zh-rHK/strings.xml +++ b/quickstep/res/values-zh-rHK/strings.xml @@ -25,8 +25,7 @@ "應用程式使用情況設定" "全部清除" "最近使用的應用程式" - - + "閂咗工作" "%1$s%2$s" "少於 1 分鐘" "今天剩餘時間:%1$s" @@ -103,6 +102,10 @@ "返回" "輸入法編輯器切換工具" "最近" + + + + "移至上方/左側" "移至底部/右側" diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml index 45e2f75631..847cb91507 100644 --- a/quickstep/res/values-zh-rTW/strings.xml +++ b/quickstep/res/values-zh-rTW/strings.xml @@ -25,8 +25,7 @@ "應用程式使用情況設定" "全部清除" "最近使用的應用程式" - - + "工作已關閉" "%1$s (%2$s)" "< 1 分鐘" "今天還能使用 %1$s" @@ -103,6 +102,10 @@ "返回" "輸入法編輯器切換器" "最近使用" + + + + "移到上方/左側" "移到底部/右側" diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml index 85c43ede80..98ea6d7b96 100644 --- a/quickstep/res/values-zu/strings.xml +++ b/quickstep/res/values-zu/strings.xml @@ -25,8 +25,7 @@ "Izilungiselelo zokusetshenziswa kohlelo lokusebenza" "Sula konke" "Izinhlelo zokusebenza zakamuva" - - + "Umsebenzi Uvaliwe" "%1$s, %2$s" "< 1 iminithi" "%1$s esele namhlanje" @@ -103,6 +102,8 @@ "Emuva" "Isishintshi se-IME" "Okwakamuva" + "Izaziso" + "Amasethingi Asheshayo" "Hamba phezulu/kwesokunxele" "Hamba phansi/kwesokudla" diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index a52e480476..926e10c8b7 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -17,7 +17,6 @@ 48dp 48dp - 32dp 2dp @@ -34,28 +33,18 @@ 50dp 16dp - 12dp - 4dp + 0dp 0.7 48dp 32dp - 36dp - 28dp - 19.37dp - 22dp - 19.1dp - 10dp + 28dp + 28dp 8dp 16dp - 60dp - 52dp - 36dp 16dp - 36dp - 38dp 2.25dp diff --git a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java index 0e534f4ea9..8424564459 100644 --- a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java +++ b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java @@ -15,6 +15,20 @@ */ package com.android.launcher3.model; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.ALL_APPS_PERSONAL_TAB; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.ALL_APPS_PERSONAL_TAB_ACCESSIBILITY; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.ALL_APPS_WORK_TAB; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.ALL_APPS_WORK_TAB_ACCESSIBILITY; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.DISABLED_BY_ADMIN_MESSAGE; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WIDGETS_PERSONAL_TAB; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WIDGETS_WORK_TAB; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_FOLDER_NAME; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_PROFILE_EDU; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_PROFILE_EDU_ACCEPT; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_PROFILE_ENABLE_BUTTON; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_PROFILE_PAUSED_DESCRIPTION; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_PROFILE_PAUSED_TITLE; +import static android.app.admin.DevicePolicyResources.Strings.Launcher.WORK_PROFILE_PAUSE_BUTTON; import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.text.format.DateUtils.formatElapsedTime; @@ -32,6 +46,7 @@ import static com.android.launcher3.util.Executors.MODEL_EXECUTOR; import static java.util.stream.Collectors.toCollection; import android.app.StatsManager; +import android.app.admin.DevicePolicyManager; import android.app.prediction.AppPredictionContext; import android.app.prediction.AppPredictionManager; import android.app.prediction.AppPredictor; @@ -135,6 +150,42 @@ public class QuickstepModelDelegate extends ModelDelegate { mActive = true; } + @Override + @WorkerThread + public void loadStringCache(StringCache cache) { + cache.loadDefaultStrings(mContext); + + cache.workProfileEdu = getEnterpriseString(WORK_PROFILE_EDU, cache.workProfileEdu); + cache.workProfileEduAccept = getEnterpriseString( + WORK_PROFILE_EDU_ACCEPT, cache.workProfileEduAccept); + cache.workProfilePausedTitle = getEnterpriseString( + WORK_PROFILE_PAUSED_TITLE, cache.workProfilePausedTitle); + cache.workProfilePausedDescription = getEnterpriseString( + WORK_PROFILE_PAUSED_DESCRIPTION, cache.workProfilePausedDescription); + cache.workProfilePauseButton = getEnterpriseString( + WORK_PROFILE_PAUSE_BUTTON, cache.workProfilePauseButton); + cache.workProfileEnableButton = getEnterpriseString( + WORK_PROFILE_ENABLE_BUTTON, cache.workProfileEnableButton); + cache.allAppsWorkTab = getEnterpriseString(ALL_APPS_WORK_TAB, cache.allAppsWorkTab); + cache.allAppsPersonalTab = getEnterpriseString( + ALL_APPS_PERSONAL_TAB, cache.allAppsPersonalTab); + cache.allAppsWorkTabAccessibility = getEnterpriseString( + ALL_APPS_WORK_TAB_ACCESSIBILITY, cache.allAppsWorkTabAccessibility); + cache.allAppsPersonalTabAccessibility = getEnterpriseString( + ALL_APPS_PERSONAL_TAB_ACCESSIBILITY, cache.allAppsPersonalTabAccessibility); + cache.workFolderName = getEnterpriseString(WORK_FOLDER_NAME, cache.workFolderName); + cache.widgetsWorkTab = getEnterpriseString(WIDGETS_WORK_TAB, cache.widgetsWorkTab); + cache.widgetsPersonalTab = getEnterpriseString( + WIDGETS_PERSONAL_TAB, cache.widgetsPersonalTab); + cache.disabledByAdminMessage = getEnterpriseString( + DISABLED_BY_ADMIN_MESSAGE, cache.disabledByAdminMessage); + } + + private String getEnterpriseString(String updatableStringId, String defaultString) { + DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class); + return dpm.getString(updatableStringId, () -> defaultString); + } + @Override public void workspaceLoadComplete() { super.workspaceLoadComplete(); diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index 224c05e89e..650d4ce376 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -106,6 +106,10 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT private static final String NAV_BUTTONS_SEPARATE_WINDOW_TITLE = "Taskbar Nav Buttons"; + public static final int ALPHA_INDEX_IMMERSIVE_MODE = 0; + public static final int ALPHA_INDEX_KEYGUARD_OR_DISABLE = 1; + private static final int NUM_ALPHA_CHANNELS = 2; + private final ArrayList mPropertyHolders = new ArrayList<>(); private final ArrayList mAllButtons = new ArrayList<>(); private int mState; @@ -136,10 +140,13 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT // Initialized in init. private TaskbarControllers mControllers; + private boolean mIsImeRenderingNavButtons; private View mA11yButton; private int mSysuiStateFlags; private View mBackButton; private View mHomeButton; + private MultiValueAlpha mBackButtonAlpha; + private MultiValueAlpha mHomeButtonAlpha; private FloatingRotationButton mFloatingRotationButton; // Variables for moving nav buttons to a separate window above IME @@ -168,20 +175,23 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mNavButtonTranslationYMultiplier.value = 1; boolean isThreeButtonNav = mContext.isThreeButtonNav(); - // IME switcher - View imeSwitcherButton = addButton(R.drawable.ic_ime_switcher, BUTTON_IME_SWITCH, - isThreeButtonNav ? mStartContextualContainer : mEndContextualContainer, - mControllers.navButtonController, R.id.ime_switcher); - mPropertyHolders.add(new StatePropertyHolder(imeSwitcherButton, - flags -> ((flags & MASK_IME_SWITCHER_VISIBLE) == MASK_IME_SWITCHER_VISIBLE) - && ((flags & FLAG_ROTATION_BUTTON_VISIBLE) == 0))); + mIsImeRenderingNavButtons = + InputMethodService.canImeRenderGesturalNavButtons() && mContext.isGestureNav(); + if (!mIsImeRenderingNavButtons) { + // IME switcher + View imeSwitcherButton = addButton(R.drawable.ic_ime_switcher, BUTTON_IME_SWITCH, + isThreeButtonNav ? mStartContextualContainer : mEndContextualContainer, + mControllers.navButtonController, R.id.ime_switcher); + mPropertyHolders.add(new StatePropertyHolder(imeSwitcherButton, + flags -> ((flags & MASK_IME_SWITCHER_VISIBLE) == MASK_IME_SWITCHER_VISIBLE) + && ((flags & FLAG_ROTATION_BUTTON_VISIBLE) == 0))); + } mPropertyHolders.add(new StatePropertyHolder( mControllers.taskbarViewController.getTaskbarIconAlpha() .getProperty(ALPHA_INDEX_KEYGUARD), flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0 - && (flags & FLAG_SCREEN_PINNING_ACTIVE) == 0, - MultiValueAlpha.VALUE, 1, 0)); + && (flags & FLAG_SCREEN_PINNING_ACTIVE) == 0)); mPropertyHolders.add(new StatePropertyHolder(mControllers.taskbarDragLayerController .getKeyguardBgTaskbar(), @@ -204,8 +214,8 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT // For gesture nav, nav buttons only show for IME anyway so keep them translated down. float defaultButtonTransY = alwaysShowButtons ? 0 : transForIme; mPropertyHolders.add(new StatePropertyHolder(mTaskbarNavButtonTranslationYForIme, - flags -> (flags & FLAG_IME_VISIBLE) != 0, AnimatedFloat.VALUE, transForIme, - defaultButtonTransY)); + flags -> (flags & FLAG_IME_VISIBLE) != 0 && !isInKidsMode, AnimatedFloat.VALUE, + transForIme, defaultButtonTransY)); if (alwaysShowButtons) { initButtons(mNavButtonContainer, mEndContextualContainer, @@ -314,12 +324,14 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mControllers.rotationButtonController.setRotationButton(mFloatingRotationButton, mRotationButtonListener); - View imeDownButton = addButton(R.drawable.ic_sysbar_back, BUTTON_BACK, - mStartContextualContainer, mControllers.navButtonController, R.id.back); - imeDownButton.setRotation(Utilities.isRtl(mContext.getResources()) ? 90 : -90); - // Rotate when Ime visible - mPropertyHolders.add(new StatePropertyHolder(imeDownButton, - flags -> (flags & FLAG_IME_VISIBLE) != 0)); + if (!mIsImeRenderingNavButtons) { + View imeDownButton = addButton(R.drawable.ic_sysbar_back, BUTTON_BACK, + mStartContextualContainer, mControllers.navButtonController, R.id.back); + imeDownButton.setRotation(Utilities.isRtl(mContext.getResources()) ? 90 : -90); + // Only show when IME is visible. + mPropertyHolders.add(new StatePropertyHolder(imeDownButton, + flags -> (flags & FLAG_IME_VISIBLE) != 0)); + } } applyState(); @@ -347,7 +359,10 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mBackButton = addButton(R.drawable.ic_sysbar_back, BUTTON_BACK, mNavButtonContainer, mControllers.navButtonController, R.id.back); - mPropertyHolders.add(new StatePropertyHolder(mBackButton, + mBackButtonAlpha = new MultiValueAlpha(mBackButton, NUM_ALPHA_CHANNELS); + mBackButtonAlpha.setUpdateVisibility(true); + mPropertyHolders.add(new StatePropertyHolder( + mBackButtonAlpha.getProperty(ALPHA_INDEX_KEYGUARD_OR_DISABLE), flags -> { // Show only if not disabled, and if not on the keyguard or otherwise only when // the bouncer or a lockscreen app is showing above the keyguard @@ -373,7 +388,11 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT // home and recents buttons mHomeButton = addButton(R.drawable.ic_sysbar_home, BUTTON_HOME, navContainer, navButtonController, R.id.home); - mPropertyHolders.add(new StatePropertyHolder(mHomeButton, + mHomeButtonAlpha = new MultiValueAlpha(mHomeButton, NUM_ALPHA_CHANNELS); + mHomeButtonAlpha.setUpdateVisibility(true); + mPropertyHolders.add( + new StatePropertyHolder(mHomeButtonAlpha.getProperty( + ALPHA_INDEX_KEYGUARD_OR_DISABLE), flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0 && (flags & FLAG_DISABLE_HOME) == 0)); View recentsButton = addButton(R.drawable.ic_sysbar_recent, BUTTON_RECENTS, @@ -486,6 +505,20 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT } } + /** + * Returns multi-value alpha controller for back button. + */ + public MultiValueAlpha getBackButtonAlpha() { + return mBackButtonAlpha; + } + + /** + * Returns multi-value alpha controller for home button. + */ + public MultiValueAlpha getHomeButtonAlpha() { + return mHomeButtonAlpha; + } + /** Use to set the translationY for the all nav+contextual buttons */ public AnimatedFloat getTaskbarNavButtonTranslationY() { return mTaskbarNavButtonTranslationY; @@ -592,7 +625,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT return; } - if (InputMethodService.canImeRenderGesturalNavButtons() && mContext.isGestureNav()) { + if (mIsImeRenderingNavButtons) { // IME is rendering the nav buttons, so we don't need to create a new layer for them. return; } @@ -778,6 +811,11 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mAnimator.addListener(new AlphaUpdateListener(view)); } + StatePropertyHolder(MultiValueAlpha.AlphaProperty alphaProperty, + IntPredicate enableCondition) { + this(alphaProperty, enableCondition, MultiValueAlpha.VALUE, 1, 0); + } + StatePropertyHolder(T target, IntPredicate enabledCondition, Property property, float enabledValue, float disabledValue) { mEnableCondition = enabledCondition; diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index e37bd21a68..6a59bc2a2d 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -188,7 +188,8 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ new TaskbarStashController(this), new TaskbarEduController(this), new TaskbarAutohideSuspendController(this), - new TaskbarPopupController(this)); + new TaskbarPopupController(this), + new TaskbarForceVisibleImmersiveController(this)); } public void init(TaskbarSharedState sharedState) { @@ -417,6 +418,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ mControllers.taskbarScrimViewController.updateStateForSysuiFlags(systemUiStateFlags, fromInit); mControllers.navButtonController.updateSysuiFlags(systemUiStateFlags); + mControllers.taskbarForceVisibleImmersiveController.updateSysuiFlags(systemUiStateFlags); } /** diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java index f4916698d9..8364137a82 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java @@ -47,6 +47,7 @@ public class TaskbarControllers { public final TaskbarEduController taskbarEduController; public final TaskbarAutohideSuspendController taskbarAutohideSuspendController; public final TaskbarPopupController taskbarPopupController; + public final TaskbarForceVisibleImmersiveController taskbarForceVisibleImmersiveController; @Nullable private LoggableTaskbarController[] mControllersToLog = null; @@ -70,7 +71,8 @@ public class TaskbarControllers { TaskbarStashController taskbarStashController, TaskbarEduController taskbarEduController, TaskbarAutohideSuspendController taskbarAutoHideSuspendController, - TaskbarPopupController taskbarPopupController) { + TaskbarPopupController taskbarPopupController, + TaskbarForceVisibleImmersiveController taskbarForceVisibleImmersiveController) { this.taskbarActivityContext = taskbarActivityContext; this.taskbarDragController = taskbarDragController; this.navButtonController = navButtonController; @@ -86,6 +88,7 @@ public class TaskbarControllers { this.taskbarEduController = taskbarEduController; this.taskbarAutohideSuspendController = taskbarAutoHideSuspendController; this.taskbarPopupController = taskbarPopupController; + this.taskbarForceVisibleImmersiveController = taskbarForceVisibleImmersiveController; } /** @@ -108,6 +111,7 @@ public class TaskbarControllers { taskbarStashController.init(this, sharedState); taskbarEduController.init(this); taskbarPopupController.init(this); + taskbarForceVisibleImmersiveController.init(this); mControllersToLog = new LoggableTaskbarController[] { taskbarDragController, navButtonController, navbarButtonsViewController, @@ -142,6 +146,7 @@ public class TaskbarControllers { stashedHandleViewController.onDestroy(); taskbarAutohideSuspendController.onDestroy(); taskbarPopupController.onDestroy(); + taskbarForceVisibleImmersiveController.onDestroy(); mControllersToLog = null; } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java index df004ef6e4..4a806650a5 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java @@ -34,7 +34,6 @@ import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.R; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.TestProtocol; -import com.android.launcher3.util.TouchController; import com.android.launcher3.views.BaseDragLayer; import com.android.systemui.shared.system.ViewTreeObserverWrapper; import com.android.systemui.shared.system.ViewTreeObserverWrapper.InsetsInfo; @@ -105,7 +104,7 @@ public class TaskbarDragLayer extends BaseDragLayer { @Override public void recreateControllers() { - mControllers = new TouchController[] {mActivity.getDragController()}; + mControllers = mControllerCallbacks.getTouchControllers(); } private void onComputeTaskbarInsets(InsetsInfo insetsInfo) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java index fa409923c4..1bd76b99bb 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java @@ -26,6 +26,7 @@ import android.graphics.Rect; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.R; import com.android.launcher3.anim.AlphaUpdateListener; +import com.android.launcher3.util.TouchController; import com.android.quickstep.AnimatedFloat; import com.android.systemui.shared.system.ViewTreeObserverWrapper.InsetsInfo; @@ -181,7 +182,8 @@ public class TaskbarDragLayerController implements TaskbarControllers.LoggableTa // Let touches pass through us. insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION); } else if (mControllers.taskbarViewController.areIconsVisible() - || AbstractFloatingView.getOpenView(mActivity, TYPE_ALL) != null) { + || AbstractFloatingView.getOpenView(mActivity, TYPE_ALL) != null + || mActivity.isNavBarKidsModeActive()) { // Taskbar has some touchable elements, take over the full taskbar area insetsInfo.setTouchableInsets(mActivity.isTaskbarWindowFullscreen() ? TOUCHABLE_INSETS_FRAME : TOUCHABLE_INSETS_CONTENT); @@ -217,5 +219,13 @@ public class TaskbarDragLayerController implements TaskbarControllers.LoggableTa public int getTaskbarBackgroundHeight() { return mActivity.getDeviceProfile().taskbarSize; } + + /** + * Returns touch controllers. + */ + public TouchController[] getTouchControllers() { + return new TouchController[]{mActivity.getDragController(), + mControllers.taskbarForceVisibleImmersiveController}; + } } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarForceVisibleImmersiveController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarForceVisibleImmersiveController.java new file mode 100644 index 0000000000..66a927fdcc --- /dev/null +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarForceVisibleImmersiveController.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2022 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.taskbar; + +import static com.android.launcher3.taskbar.NavbarButtonsViewController.ALPHA_INDEX_IMMERSIVE_MODE; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IMMERSIVE_MODE; + +import android.os.Handler; +import android.os.Looper; +import android.view.MotionEvent; + +import com.android.launcher3.util.MultiValueAlpha; +import com.android.launcher3.util.TouchController; +import com.android.quickstep.AnimatedFloat; + +import java.util.Optional; +import java.util.function.Consumer; + +/** + * Controller for taskbar when force visible in immersive mode is set. + */ +public class TaskbarForceVisibleImmersiveController implements TouchController { + private static final int NAV_BAR_ICONS_DIM_ANIMATION_START_DELAY_MS = 4500; + private static final int NAV_BAR_ICONS_DIM_ANIMATION_DURATION_MS = 500; + private static final int NAV_BAR_ICONS_UNDIM_ANIMATION_DURATION_MS = 250; + private static final float NAV_BAR_ICONS_DIM_PCT = 0.15f; + private static final float NAV_BAR_ICONS_UNDIM_PCT = 1f; + + private final TaskbarActivityContext mContext; + private final Handler mHandler = new Handler(Looper.getMainLooper()); + private final Runnable mDimmingRunnable = this::dimIcons; + private final Runnable mUndimmingRunnable = this::undimIcons; + private final AnimatedFloat mIconAlphaForDimming = new AnimatedFloat( + this::updateIconDimmingAlpha); + private final Consumer mImmersiveModeAlphaUpdater = alpha -> alpha.getProperty( + ALPHA_INDEX_IMMERSIVE_MODE).setValue(mIconAlphaForDimming.value); + + // Initialized in init. + private TaskbarControllers mControllers; + private boolean mIsImmersiveMode; + + public TaskbarForceVisibleImmersiveController(TaskbarActivityContext context) { + mContext = context; + } + + /** + * Initialize controllers. + */ + public void init(TaskbarControllers controllers) { + mControllers = controllers; + } + + /** Update values tracked via sysui flags. */ + public void updateSysuiFlags(int sysuiFlags) { + mIsImmersiveMode = (sysuiFlags & SYSUI_STATE_IMMERSIVE_MODE) != 0; + if (mContext.isNavBarKidsModeActive()) { + if (mIsImmersiveMode) { + startIconDimming(); + } else { + startIconUndimming(); + } + } + } + + /** Clean up animations. */ + public void onDestroy() { + startIconUndimming(); + } + + private void startIconUndimming() { + mHandler.removeCallbacks(mDimmingRunnable); + mHandler.removeCallbacks(mUndimmingRunnable); + mHandler.post(mUndimmingRunnable); + } + + private void undimIcons() { + mIconAlphaForDimming.animateToValue(NAV_BAR_ICONS_UNDIM_PCT).setDuration( + NAV_BAR_ICONS_UNDIM_ANIMATION_DURATION_MS).start(); + } + + private void startIconDimming() { + mHandler.removeCallbacks(mDimmingRunnable); + mHandler.postDelayed(mDimmingRunnable, NAV_BAR_ICONS_DIM_ANIMATION_START_DELAY_MS); + } + + private void dimIcons() { + mIconAlphaForDimming.animateToValue(NAV_BAR_ICONS_DIM_PCT).setDuration( + NAV_BAR_ICONS_DIM_ANIMATION_DURATION_MS).start(); + } + + /** + * Returns whether the taskbar is always visible in immersive mode. + */ + private boolean isNavbarShownInImmersiveMode() { + return mIsImmersiveMode && mContext.isNavBarKidsModeActive(); + } + + private void updateIconDimmingAlpha() { + getBackButtonAlphaOptional().ifPresent(mImmersiveModeAlphaUpdater); + getHomeButtonAlphaOptional().ifPresent(mImmersiveModeAlphaUpdater); + } + + private Optional getBackButtonAlphaOptional() { + if (mControllers == null || mControllers.navbarButtonsViewController == null) { + return Optional.empty(); + } + return Optional.ofNullable(mControllers.navbarButtonsViewController.getBackButtonAlpha()); + } + + private Optional getHomeButtonAlphaOptional() { + if (mControllers == null || mControllers.navbarButtonsViewController == null) { + return Optional.empty(); + } + return Optional.ofNullable(mControllers.navbarButtonsViewController.getHomeButtonAlpha()); + } + + @Override + public boolean onControllerInterceptTouchEvent(MotionEvent ev) { + if (!isNavbarShownInImmersiveMode() + || mControllers.taskbarStashController.supportsManualStashing()) { + return false; + } + return onControllerTouchEvent(ev); + } + + @Override + public boolean onControllerTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + startIconUndimming(); + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + startIconDimming(); + break; + } + return false; + } +} diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 748557baeb..014e1727cf 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -197,7 +197,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba /** * Returns whether the user can manually stash the taskbar based on the current device state. */ - private boolean supportsManualStashing() { + protected boolean supportsManualStashing() { return supportsVisualStashing() && (!Utilities.IS_RUNNING_IN_TEST_HARNESS || supportsStashingForTests()); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java index 08d0a80f03..bb133293dd 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java @@ -103,7 +103,7 @@ public class OverviewState extends LauncherState { @Override public boolean displayOverviewTasksAsGrid(DeviceProfile deviceProfile) { - return deviceProfile.overviewShowAsGrid; + return deviceProfile.isTablet; } @Override diff --git a/quickstep/src/com/android/quickstep/AnimatedFloat.java b/quickstep/src/com/android/quickstep/AnimatedFloat.java index 6a7d066cd8..6c7a885a1f 100644 --- a/quickstep/src/com/android/quickstep/AnimatedFloat.java +++ b/quickstep/src/com/android/quickstep/AnimatedFloat.java @@ -98,6 +98,15 @@ public class AnimatedFloat { } } + /** + * Starts the animation. + */ + public void startAnimation() { + if (mValueAnimator != null) { + mValueAnimator.start(); + } + } + public void cancelAnimation() { if (mValueAnimator != null) { mValueAnimator.cancel(); diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index 0cf9b4c6e2..0f707c0223 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -215,7 +215,7 @@ public abstract class BaseActivityInterface mGestureBlockedActivities; + // Cache for better performance since it doesn't change at runtime. + private final boolean mCanImeRenderGesturalNavButtons = + InputMethodService.canImeRenderGesturalNavButtons(); private final ArrayList mOnDestroyActions = new ArrayList<>(); @@ -596,7 +599,7 @@ public class RecentsAnimationDeviceState implements /** Returns whether IME is rendering nav buttons, and IME is currently showing. */ public boolean isImeRenderingNavButtons() { - return InputMethodService.canImeRenderGesturalNavButtons() && mMode == NO_BUTTON + return mCanImeRenderGesturalNavButtons && mMode == NO_BUTTON && ((mSystemUiStateFlags & SYSUI_STATE_IME_SHOWING) != 0); } diff --git a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java index 276e1c2a6f..2d1f17c924 100644 --- a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java +++ b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java @@ -55,7 +55,6 @@ import com.android.quickstep.views.TaskView; import com.android.quickstep.views.TaskView.TaskIdAttributeContainer; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; -import com.android.systemui.shared.system.ActivityManagerWrapper; import java.util.ArrayList; import java.util.List; @@ -130,7 +129,7 @@ public class TaskOverlayFactory implements ResourceBasedOverride { boolean taskViewHasMultipleTasks = taskViewTaskIds[0] != -1 && taskViewTaskIds[1] != -1; boolean notEnoughTasksToSplit = recentsView.getTaskViewCount() < 2; - boolean isFocusedTask = deviceProfile.overviewShowAsGrid && taskView.isFocusedTask(); + boolean isFocusedTask = deviceProfile.isTablet && taskView.isFocusedTask(); boolean isTaskInExpectedScrollPosition = recentsView.isTaskInExpectedScrollPosition(recentsView.indexOfChild(taskView)); ActivityManager activityManager = diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java index db1d7e7ea9..5afcdcb41c 100644 --- a/quickstep/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java @@ -196,7 +196,7 @@ public final class TaskViewUtils { int taskIndex = recentsView.indexOfChild(v); Context context = v.getContext(); DeviceProfile dp = BaseActivity.fromContext(context).getDeviceProfile(); - boolean showAsGrid = dp.overviewShowAsGrid; + boolean showAsGrid = dp.isTablet; boolean parallaxCenterAndAdjacentTask = taskIndex != recentsView.getCurrentPage() && !showAsGrid; int taskRectTranslationPrimary = recentsView.getScrollOffset(taskIndex); @@ -551,7 +551,7 @@ public final class TaskViewUtils { if (launcherClosing) { Context context = v.getContext(); DeviceProfile dp = BaseActivity.fromContext(context).getDeviceProfile(); - launcherAnim = dp.overviewShowAsGrid + launcherAnim = dp.isTablet ? ObjectAnimator.ofFloat(recentsView, RecentsView.CONTENT_ALPHA, 0) : recentsView.createAdjacentPageAnimForTaskLaunch(taskView); launcherAnim.setInterpolator(Interpolators.TOUCH_RESPONSE_INTERPOLATOR); diff --git a/quickstep/src/com/android/quickstep/fallback/RecentsState.java b/quickstep/src/com/android/quickstep/fallback/RecentsState.java index 15feb18367..9705bb6fd5 100644 --- a/quickstep/src/com/android/quickstep/fallback/RecentsState.java +++ b/quickstep/src/com/android/quickstep/fallback/RecentsState.java @@ -135,7 +135,7 @@ public class RecentsState implements BaseState { * For this state, whether tasks should layout as a grid rather than a list. */ public boolean displayOverviewTasksAsGrid(DeviceProfile deviceProfile) { - return hasFlag(FLAG_SHOW_AS_GRID) && deviceProfile.overviewShowAsGrid; + return hasFlag(FLAG_SHOW_AS_GRID) && deviceProfile.isTablet; } /** diff --git a/quickstep/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/src/com/android/quickstep/views/ClearAllButton.java index 4f2ed4cd82..332cbeb397 100644 --- a/quickstep/src/com/android/quickstep/views/ClearAllButton.java +++ b/quickstep/src/com/android/quickstep/views/ClearAllButton.java @@ -247,7 +247,7 @@ public class ClearAllButton extends Button { */ private float getOriginalTranslationY() { DeviceProfile deviceProfile = mActivity.getDeviceProfile(); - return deviceProfile.overviewShowAsGrid + return deviceProfile.isTablet ? deviceProfile.overviewRowSpacing : deviceProfile.overviewTaskThumbnailTopMarginPx / 2.0f; } diff --git a/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java b/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java index e4f616025f..3757cd9a92 100644 --- a/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java +++ b/quickstep/src/com/android/quickstep/views/DigitalWellBeingToast.java @@ -17,9 +17,6 @@ package com.android.quickstep.views; import static android.provider.Settings.ACTION_APP_USAGE_SETTINGS; -import static android.view.Gravity.BOTTOM; -import static android.view.Gravity.CENTER_HORIZONTAL; -import static android.view.Gravity.START; import static com.android.launcher3.Utilities.prefixTextWithIcon; import static com.android.launcher3.util.Executors.THREAD_POOL_EXECUTOR; @@ -170,9 +167,9 @@ public final class DigitalWellBeingToast { public void setSplitConfiguration(StagedSplitBounds stagedSplitBounds) { mStagedSplitBounds = stagedSplitBounds; - if (mStagedSplitBounds == null || - !mActivity.getDeviceProfile().overviewShowAsGrid || - mTaskView.isFocusedTask()) { + if (mStagedSplitBounds == null + || !mActivity.getDeviceProfile().isTablet + || mTaskView.isFocusedTask()) { mSplitBannerConfig = SPLIT_BANNER_FULLSCREEN; return; } diff --git a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java index 7e4f9d0abc..718effe39f 100644 --- a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java +++ b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java @@ -236,7 +236,7 @@ public class GroupedTaskView extends TaskView { public void setOrientationState(RecentsOrientedState orientationState) { super.setOrientationState(orientationState); DeviceProfile deviceProfile = mActivity.getDeviceProfile(); - boolean isGridTask = deviceProfile.overviewShowAsGrid && !isFocusedTask(); + boolean isGridTask = deviceProfile.isTablet && !isFocusedTask(); int iconDrawableSize = isGridTask ? deviceProfile.overviewTaskIconDrawableSizeGridPx : deviceProfile.overviewTaskIconDrawableSizePx; mIconView2.setDrawableSize(iconDrawableSize, iconDrawableSize); diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 13a2bda048..aadf67c60b 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1322,7 +1322,7 @@ public abstract class RecentsView 1); + mActivity.getDeviceProfile().isTablet && getTaskViewCount() > 1); } /** @@ -3986,7 +3986,7 @@ public abstract class RecentsView 32dp + + + 75dp + 62dp + 13dp + 32dp + + + 7dp + + + 0dp diff --git a/res/values/dimens.xml b/res/values/dimens.xml index e215db99bf..a6c5ed8d75 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -340,22 +340,15 @@ 0dp 0dp 0dp - 0dp 0dp 0dp - 0dp 0dp - 0dp - 0dp - 0dp - 0dp + 0dp + 0dp 0dp - 0dp - 0dp + 0dp 0dp 0dp - 0dp - 0dp 110dp 200dp diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 5d41741d6c..041bee95a2 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -37,6 +37,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.icu.text.MessageFormat; import android.text.TextPaint; +import android.text.TextUtils; import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import android.util.Property; @@ -805,7 +806,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, invalidate(); } } - if (itemInfo.contentDescription != null) { + if (!TextUtils.isEmpty(itemInfo.contentDescription)) { if (itemInfo.isDisabled()) { setContentDescription(getContext().getString(R.string.disabled_app_label, itemInfo.contentDescription)); diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index d3486027dd..572b3c2d97 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -181,7 +181,6 @@ public class DeviceProfile { public float allAppsIconTextSizePx; // Overview - public final boolean overviewShowAsGrid; public int overviewTaskMarginPx; public int overviewTaskMarginGridPx; public int overviewTaskIconSizePx; @@ -247,7 +246,7 @@ public class DeviceProfile { && FeatureFlags.ENABLE_TASKBAR.get(); // Some more constants. - context = getContext(context, info, isVerticalBarLayout() + context = getContext(context, info, isVerticalBarLayout() || (isTablet && isLandscape) ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT); final Resources res = context.getResources(); @@ -376,10 +375,7 @@ public class DeviceProfile { ? res.getDimensionPixelSize(R.dimen.scalable_grid_qsb_bottom_margin) : 0; - overviewShowAsGrid = isTablet && FeatureFlags.ENABLE_OVERVIEW_GRID.get(); - overviewTaskMarginPx = overviewShowAsGrid - ? res.getDimensionPixelSize(R.dimen.overview_task_margin_focused) - : res.getDimensionPixelSize(R.dimen.overview_task_margin); + overviewTaskMarginPx = res.getDimensionPixelSize(R.dimen.overview_task_margin); overviewTaskMarginGridPx = res.getDimensionPixelSize(R.dimen.overview_task_margin_grid); overviewTaskIconSizePx = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_size); overviewTaskIconDrawableSizePx = @@ -387,32 +383,13 @@ public class DeviceProfile { overviewTaskIconDrawableSizeGridPx = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_drawable_size_grid); overviewTaskThumbnailTopMarginPx = overviewTaskIconSizePx + overviewTaskMarginPx * 2; - if (overviewShowAsGrid) { - if (isLandscape) { - overviewActionsTopMarginGesturePx = res.getDimensionPixelSize( - R.dimen.overview_actions_top_margin_gesture_grid_landscape); - overviewActionsBottomMarginGesturePx = res.getDimensionPixelSize( - R.dimen.overview_actions_bottom_margin_gesture_grid_landscape); - overviewPageSpacing = res.getDimensionPixelSize( - R.dimen.overview_page_spacing_grid_landscape); - } else { - overviewActionsTopMarginGesturePx = res.getDimensionPixelSize( - R.dimen.overview_actions_top_margin_gesture_grid_portrait); - overviewActionsBottomMarginGesturePx = res.getDimensionPixelSize( - R.dimen.overview_actions_bottom_margin_gesture_grid_portrait); - overviewPageSpacing = res.getDimensionPixelSize( - R.dimen.overview_page_spacing_grid_portrait); - } - overviewActionsButtonSpacing = res.getDimensionPixelSize( - R.dimen.overview_actions_button_spacing_grid); - } else { - overviewActionsTopMarginGesturePx = res.getDimensionPixelSize( - R.dimen.overview_actions_margin_gesture); - overviewActionsBottomMarginGesturePx = overviewActionsTopMarginGesturePx; - overviewPageSpacing = res.getDimensionPixelSize(R.dimen.overview_page_spacing); - overviewActionsButtonSpacing = res.getDimensionPixelSize( - R.dimen.overview_actions_button_spacing); - } + overviewActionsTopMarginGesturePx = res.getDimensionPixelSize( + R.dimen.overview_actions_top_margin_gesture); + overviewActionsBottomMarginGesturePx = res.getDimensionPixelSize( + R.dimen.overview_actions_bottom_margin_gesture); + overviewPageSpacing = res.getDimensionPixelSize(R.dimen.overview_page_spacing); + overviewActionsButtonSpacing = res.getDimensionPixelSize( + R.dimen.overview_actions_button_spacing); overviewActionsMarginThreeButtonPx = res.getDimensionPixelSize( R.dimen.overview_actions_margin_three_button); // Grid task's top margin is only overviewTaskIconSizePx + overviewTaskMarginGridPx, but @@ -422,9 +399,7 @@ public class DeviceProfile { - overviewTaskMarginGridPx; overviewRowSpacing = res.getDimensionPixelSize(R.dimen.overview_grid_row_spacing) - extraTopMargin; - overviewGridSideMargin = isLandscape - ? res.getDimensionPixelSize(R.dimen.overview_grid_side_margin_landscape) - : res.getDimensionPixelSize(R.dimen.overview_grid_side_margin_portrait); + overviewGridSideMargin = res.getDimensionPixelSize(R.dimen.overview_grid_side_margin); // Calculate all of the remaining variables. extraSpace = updateAvailableDimensions(res); @@ -1196,6 +1171,27 @@ public class DeviceProfile { writer.println(prefix + pxToDpStr("workspaceTopPadding", workspaceTopPadding)); writer.println(prefix + pxToDpStr("workspaceBottomPadding", workspaceBottomPadding)); writer.println(prefix + pxToDpStr("extraHotseatBottomPadding", extraHotseatBottomPadding)); + + writer.println(prefix + pxToDpStr("overviewTaskMarginPx", overviewTaskMarginPx)); + writer.println(prefix + pxToDpStr("overviewTaskMarginGridPx", overviewTaskMarginGridPx)); + writer.println(prefix + pxToDpStr("overviewTaskIconSizePx", overviewTaskIconSizePx)); + writer.println(prefix + pxToDpStr("overviewTaskIconDrawableSizePx", + overviewTaskIconDrawableSizePx)); + writer.println(prefix + pxToDpStr("overviewTaskIconDrawableSizeGridPx", + overviewTaskIconDrawableSizeGridPx)); + writer.println(prefix + pxToDpStr("overviewTaskThumbnailTopMarginPx", + overviewTaskThumbnailTopMarginPx)); + writer.println(prefix + pxToDpStr("overviewActionsMarginThreeButtonPx", + overviewActionsMarginThreeButtonPx)); + writer.println(prefix + pxToDpStr("overviewActionsTopMarginGesturePx", + overviewActionsTopMarginGesturePx)); + writer.println(prefix + pxToDpStr("overviewActionsBottomMarginGesturePx", + overviewActionsBottomMarginGesturePx)); + writer.println(prefix + pxToDpStr("overviewActionsButtonSpacing", + overviewActionsButtonSpacing)); + writer.println(prefix + pxToDpStr("overviewPageSpacing", overviewPageSpacing)); + writer.println(prefix + pxToDpStr("overviewRowSpacing", overviewRowSpacing)); + writer.println(prefix + pxToDpStr("overviewGridSideMargin", overviewGridSideMargin)); } private static Context getContext(Context c, Info info, int orientation) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 84c4783060..59c40ccbe3 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -149,6 +149,7 @@ import com.android.launcher3.model.BgDataModel.Callbacks; import com.android.launcher3.model.ItemInstallQueue; import com.android.launcher3.model.ModelUtils; import com.android.launcher3.model.ModelWriter; +import com.android.launcher3.model.StringCache; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; @@ -379,6 +380,8 @@ public class Launcher extends StatefulActivity implements Launche protected InstanceId mAllAppsSessionLogId; private LauncherState mPrevLauncherState; + private StringCache mStringCache; + @Override @TargetApi(Build.VERSION_CODES.S) protected void onCreate(Bundle savedInstanceState) { @@ -2872,6 +2875,16 @@ public class Launcher extends StatefulActivity implements Launche mPopupDataProvider.setAllWidgets(allWidgets); } + @Override + public void bindStringCache(StringCache cache) { + mStringCache = cache; + } + + @Override + public StringCache getStringCache() { + return mStringCache; + } + /** * @param packageUser if null, refreshes all widgets and shortcuts, otherwise only * refreshes the widgets and shortcuts associated with the given package/user diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 225460dc98..cbc21eb352 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -458,9 +458,10 @@ public final class Utilities { * Trims the string, removing all whitespace at the beginning and end of the string. * Non-breaking whitespaces are also removed. */ + @NonNull public static String trim(CharSequence s) { if (s == null) { - return null; + return ""; } // Just strip any sequence of whitespace or java space characters from the beginning and end diff --git a/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java b/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java index c1f0e068eb..1253863893 100644 --- a/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/BaseAllAppsContainerView.java @@ -38,10 +38,10 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.WindowInsets; +import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; import androidx.core.graphics.ColorUtils; import androidx.recyclerview.widget.LinearLayoutManager; @@ -57,6 +57,7 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.allapps.search.SearchAdapterProvider; import com.android.launcher3.keyboard.FocusedItemDecorator; +import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.util.ItemInfoMatcher; import com.android.launcher3.util.Themes; @@ -298,27 +299,34 @@ public abstract class BaseAllAppsContainerView users = workspaceItemInfos.stream().map(w -> w.user) .collect(Collectors.toSet()); if (users.size() == 1 && !users.contains(Process.myUserHandle())) { - setAsLastSuggestion(nameInfos, - context.getResources().getString(R.string.work_folder_name)); + StringCache cache = ActivityContext.lookupContext(context).getStringCache(); + String workFolderName = cache != null + ? cache.workFolderName : context.getString(R.string.work_folder_name); + setAsLastSuggestion(nameInfos, workFolderName); } // If all the icons are from same package (e.g., main icon, shortcut, shortcut) diff --git a/src/com/android/launcher3/model/BaseLoaderResults.java b/src/com/android/launcher3/model/BaseLoaderResults.java index d270cc56a1..5b278ab4cf 100644 --- a/src/com/android/launcher3/model/BaseLoaderResults.java +++ b/src/com/android/launcher3/model/BaseLoaderResults.java @@ -226,6 +226,8 @@ public abstract class BaseLoaderResults { MODEL_EXECUTOR.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); c.onInitialBindComplete(currentScreenIds, pendingTasks); }, mUiExecutor); + + mCallbacks.bindStringCache(mBgDataModel.stringCache.clone()); } private void bindWorkspaceItems( diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java index 84612def6c..866d18a86b 100644 --- a/src/com/android/launcher3/model/BgDataModel.java +++ b/src/com/android/launcher3/model/BgDataModel.java @@ -113,6 +113,11 @@ public class BgDataModel { */ public final WidgetsModel widgetsModel = new WidgetsModel(); + /** + * Cache for strings used in launcher + */ + public final StringCache stringCache = new StringCache(); + /** * Id when the model was last bound */ @@ -505,5 +510,10 @@ public class BgDataModel { default void bindExtraContainerItems(FixedContainerItems item) { } default void bindAllApplications(AppInfo[] apps, int flags) { } + + /** + * Binds the cache of string resources + */ + default void bindStringCache(StringCache cache) { } } } diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 739a64ac04..ae5b66ad88 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -202,8 +202,7 @@ public class LoaderCursor extends CursorWrapper { * Returns the title or empty string */ private String getTitle() { - String title = getString(titleIndex); - return TextUtils.isEmpty(title) ? "" : Utilities.trim(title); + return Utilities.trim(getString(titleIndex)); } /** diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 2a0f9a6f67..b9fa21d10d 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -857,6 +857,9 @@ public class LoaderTask implements Runnable { // Load delegate items mModelDelegate.loadItems(mUserManagerState, shortcutKeyToPinnedShortcuts); + // Load string cache + mModelDelegate.loadStringCache(mBgDataModel.stringCache); + // Break early if we've stopped loading if (mStopped) { mBgDataModel.clear(); diff --git a/src/com/android/launcher3/model/ModelDelegate.java b/src/com/android/launcher3/model/ModelDelegate.java index 765141a0e2..60ca63bba7 100644 --- a/src/com/android/launcher3/model/ModelDelegate.java +++ b/src/com/android/launcher3/model/ModelDelegate.java @@ -48,9 +48,11 @@ public class ModelDelegate implements ResourceBasedOverride { delegate.mAppsList = appsList; delegate.mDataModel = dataModel; delegate.mIsPrimaryInstance = isPrimaryInstance; + delegate.mContext = context; return delegate; } + protected Context mContext; protected LauncherAppState mApp; protected AllAppsList mAppsList; protected BgDataModel mDataModel; @@ -75,6 +77,15 @@ public class ModelDelegate implements ResourceBasedOverride { @WorkerThread public void loadItems(UserManagerState ums, Map pinnedShortcuts) { } + /** + * Load String cache + */ + @WorkerThread + public void loadStringCache(StringCache cache) { + cache.loadDefaultStrings(mContext); + } + + /** * Called during loader after workspace loading is complete */ diff --git a/src/com/android/launcher3/model/StringCache.java b/src/com/android/launcher3/model/StringCache.java new file mode 100644 index 0000000000..11d3e70f5f --- /dev/null +++ b/src/com/android/launcher3/model/StringCache.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2022 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.model; + +import android.content.Context; + +import com.android.launcher3.R; + +/** + * + * Cache for some of the string used in Launcher. + */ +public class StringCache { + + /** + * User on-boarding title for work profile apps. + */ + public String workProfileEdu; + + /** + * Action label to finish work profile edu. + */ + public String workProfileEduAccept; + + /** + * Title shown when user opens work apps tab while work profile is paused. + */ + public String workProfilePausedTitle; + + /** + * Description shown when user opens work apps tab while work profile is paused. + */ + public String workProfilePausedDescription; + + /** + * Shown on the button to pause work profile. + */ + public String workProfilePauseButton; + + /** + * Shown on the button to enable work profile. + */ + public String workProfileEnableButton; + + /** + * Label on launcher tab to indicate work apps. + */ + public String allAppsWorkTab; + + /** + * Label on launcher tab to indicate personal apps. + */ + public String allAppsPersonalTab; + + /** + * Accessibility description for launcher tab to indicate work apps. + */ + public String allAppsWorkTabAccessibility; + + /** + * Accessibility description for launcher tab to indicate personal apps. + */ + public String allAppsPersonalTabAccessibility; + + /** + * Work folder name. + */ + public String workFolderName; + + /** + * Label on widget tab to indicate work app widgets. + */ + public String widgetsWorkTab; + + /** + * Label on widget tab to indicate personal app widgets. + */ + public String widgetsPersonalTab; + + /** + * Message shown when a feature is disabled by the admin (e.g. changing wallpaper). + */ + public String disabledByAdminMessage; + + /** + * Sets the default values for the strings. + */ + public void loadDefaultStrings(Context context) { + workProfileEdu = context.getString(R.string.work_profile_edu_work_apps); + workProfileEduAccept = context.getString(R.string.work_profile_edu_accept); + workProfilePausedTitle = context.getString(R.string.work_apps_paused_title); + workProfilePausedDescription = context.getString(R.string.work_apps_paused_body); + workProfilePauseButton = context.getString(R.string.work_apps_pause_btn_text); + workProfileEnableButton = context.getString(R.string.work_apps_enable_btn_text); + allAppsWorkTab = context.getString(R.string.all_apps_work_tab); + allAppsPersonalTab = context.getString(R.string.all_apps_personal_tab); + allAppsWorkTabAccessibility = context.getString(R.string.all_apps_button_work_label); + allAppsPersonalTabAccessibility = context.getString( + R.string.all_apps_button_personal_label); + workFolderName = context.getString(R.string.work_folder_name); + widgetsWorkTab = context.getString(R.string.widgets_full_sheet_work_tab); + widgetsPersonalTab = context.getString(R.string.widgets_full_sheet_personal_tab); + disabledByAdminMessage = context.getString(R.string.msg_disabled_by_admin); + } + + @Override + public StringCache clone() { + StringCache clone = new StringCache(); + clone.workProfileEdu = this.workProfileEdu; + clone.workProfileEduAccept = this.workProfileEduAccept; + clone.workProfilePausedTitle = this.workProfilePausedTitle; + clone.workProfilePausedDescription = this.workProfilePausedDescription; + clone.workProfilePauseButton = this.workProfilePauseButton; + clone.workProfileEnableButton = this.workProfileEnableButton; + clone.allAppsWorkTab = this.allAppsWorkTab; + clone.allAppsPersonalTab = this.allAppsPersonalTab; + clone.allAppsWorkTabAccessibility = this.allAppsWorkTabAccessibility; + clone.allAppsPersonalTabAccessibility = this.allAppsPersonalTabAccessibility; + clone.workFolderName = this.workFolderName; + clone.widgetsWorkTab = this.widgetsWorkTab; + clone.widgetsPersonalTab = this.widgetsPersonalTab; + clone.disabledByAdminMessage = this.disabledByAdminMessage; + return clone; + } +} diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java index cba0655b24..73aa296001 100644 --- a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java +++ b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java @@ -32,6 +32,7 @@ import com.android.launcher3.LauncherModel; import com.android.launcher3.R; import com.android.launcher3.allapps.ActivityAllAppsContainerView; import com.android.launcher3.model.BgDataModel; +import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.ItemInfoWithIcon; @@ -60,6 +61,8 @@ public class SecondaryDisplayLauncher extends BaseDraggingActivity private boolean mAppDrawerShown = false; + private StringCache mStringCache; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -227,6 +230,16 @@ public class SecondaryDisplayLauncher extends BaseDraggingActivity PopupContainerWithArrow.dismissInvalidPopup(this); } + @Override + public StringCache getStringCache() { + return mStringCache; + } + + @Override + public void bindStringCache(StringCache cache) { + mStringCache = cache; + } + public PopupDataProvider getPopupDataProvider() { return mPopupDataProvider; } diff --git a/src/com/android/launcher3/touch/PortraitPagedViewHandler.java b/src/com/android/launcher3/touch/PortraitPagedViewHandler.java index 627aa11a3a..01aea05366 100644 --- a/src/com/android/launcher3/touch/PortraitPagedViewHandler.java +++ b/src/com/android/launcher3/touch/PortraitPagedViewHandler.java @@ -289,9 +289,9 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler { @Override public int getTaskMenuWidth(View view, DeviceProfile deviceProfile) { - return deviceProfile.isLandscape && !deviceProfile.overviewShowAsGrid ? - view.getMeasuredHeight() : - view.getMeasuredWidth(); + return deviceProfile.isLandscape && !deviceProfile.isTablet + ? view.getMeasuredHeight() + : view.getMeasuredWidth(); } @Override diff --git a/src/com/android/launcher3/touch/WorkspaceTouchListener.java b/src/com/android/launcher3/touch/WorkspaceTouchListener.java index 20d2ad36a5..93387adb13 100644 --- a/src/com/android/launcher3/touch/WorkspaceTouchListener.java +++ b/src/com/android/launcher3/touch/WorkspaceTouchListener.java @@ -21,6 +21,7 @@ import static android.view.MotionEvent.ACTION_MOVE; import static android.view.MotionEvent.ACTION_POINTER_UP; import static android.view.MotionEvent.ACTION_UP; +import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WORKSPACE_LONGPRESS; @@ -150,6 +151,11 @@ public class WorkspaceTouchListener extends GestureDetector.SimpleOnGestureListe if (action == ACTION_UP || action == ACTION_CANCEL) { cancelLongPress(); } + if (action == ACTION_UP + && mLauncher.isInState(ALL_APPS) + && mLauncher.getDeviceProfile().isTablet) { + mLauncher.getStateManager().goToState(NORMAL); + } return result; } diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java index 8b48baeab7..a318363af3 100644 --- a/src/com/android/launcher3/views/ActivityContext.java +++ b/src/com/android/launcher3/views/ActivityContext.java @@ -31,6 +31,7 @@ import com.android.launcher3.dragndrop.DragController; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.logging.StatsLogManager; +import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.popup.PopupDataProvider; import com.android.launcher3.util.ViewCache; @@ -173,4 +174,9 @@ public interface ActivityContext { default PopupDataProvider getPopupDataProvider() { return null; } + + @Nullable + default StringCache getStringCache() { + return null; + } } diff --git a/src/com/android/launcher3/views/OptionsPopupView.java b/src/com/android/launcher3/views/OptionsPopupView.java index fc8b4b7edb..95bce31796 100644 --- a/src/com/android/launcher3/views/OptionsPopupView.java +++ b/src/com/android/launcher3/views/OptionsPopupView.java @@ -240,7 +240,10 @@ public class OptionsPopupView extends ArrowPopup private static boolean startWallpaperPicker(View v) { Launcher launcher = Launcher.getLauncher(v.getContext()); if (!Utilities.isWallpaperAllowed(launcher)) { - Toast.makeText(launcher, R.string.msg_disabled_by_admin, Toast.LENGTH_SHORT).show(); + String message = launcher.getStringCache() != null + ? launcher.getStringCache().disabledByAdminMessage + : launcher.getString(R.string.msg_disabled_by_admin); + Toast.makeText(launcher, message, Toast.LENGTH_SHORT).show(); return false; } Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER) diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index 894c4c9cd3..daa8fb7889 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -41,6 +41,7 @@ import android.view.ViewGroup; import android.view.WindowInsets; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; +import android.widget.Button; import android.widget.TextView; import androidx.annotation.Nullable; @@ -199,6 +200,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet findViewById(R.id.tab_work) .setOnClickListener((View view) -> mViewPager.snapToPage(1)); mAdapters.get(AdapterHolder.WORK).setup(findViewById(R.id.work_widgets_list_view)); + setDeviceManagementResources(); } else { mViewPager = null; } @@ -220,6 +222,16 @@ public class WidgetsFullSheet extends BaseWidgetSheet setUpEducationViewsIfNeeded(); } + private void setDeviceManagementResources() { + if (mActivityContext.getStringCache() != null) { + Button personalTab = findViewById(R.id.tab_personal); + personalTab.setText(mActivityContext.getStringCache().widgetsPersonalTab); + + Button workTab = findViewById(R.id.tab_work); + workTab.setText(mActivityContext.getStringCache().widgetsWorkTab); + } + } + @Override public void onActivePageChanged(int currentActivePage) { AdapterHolder currentAdapterHolder = mAdapters.get(currentActivePage); diff --git a/tests/src/com/android/launcher3/folder/FolderNameProviderTest.java b/tests/src/com/android/launcher3/folder/FolderNameProviderTest.java index 23e62356c4..9c15309f82 100644 --- a/tests/src/com/android/launcher3/folder/FolderNameProviderTest.java +++ b/tests/src/com/android/launcher3/folder/FolderNameProviderTest.java @@ -30,6 +30,7 @@ import androidx.test.filters.SmallTest; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; +import com.android.launcher3.util.ActivityContextWrapper; import com.android.launcher3.util.Executors; import org.junit.Before; @@ -47,7 +48,7 @@ public final class FolderNameProviderTest { @Before public void setUp() { - mContext = getApplicationContext(); + mContext = new ActivityContextWrapper(getApplicationContext()); mItem1 = new WorkspaceItemInfo(new AppInfo( new ComponentName("a.b.c", "a.b.c/a.b.c.d"), "title1", diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index 4740097f36..2c9785c93d 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -33,7 +33,6 @@ import com.android.launcher3.tapl.Widgets; import com.android.launcher3.testcomponent.WidgetConfigActivity; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.ui.TestViewHelpers; -import com.android.launcher3.util.rule.ScreenRecordRule.ScreenRecord; import com.android.launcher3.util.rule.ShellCommandRule; import com.android.launcher3.widget.LauncherAppWidgetProviderInfo; @@ -73,7 +72,6 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape - @ScreenRecord // b/215672979 public void testConfigCancelled() throws Throwable { runTest(false); }