diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml index 6a749d1ecb..ab1dd78297 100644 --- a/quickstep/res/values-af/strings.xml +++ b/quickstep/res/values-af/strings.xml @@ -138,6 +138,8 @@ "Skuif na links bo" "Skuif na regs onder" "{count,plural, =1{Wys nog # app.}other{Wys nog # apps.}}" + + "%1$s en %2$s" "Voeg nou app by werkskerm" "Kanselleer" diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml index 500cc3d46f..e7fe0fa6da 100644 --- a/quickstep/res/values-am/strings.xml +++ b/quickstep/res/values-am/strings.xml @@ -138,6 +138,8 @@ "ወደ ላይ/ግራ ይውሰዱ" "ወደ ታች/ቀኝ ይውሰዱ" "{count,plural, =1{ተጨማሪ # መተግበሪያ አሳይ።}one{ተጨማሪ # መተግበሪያ አሳይ።}other{ተጨማሪ # መተግበሪያዎች አሳይ።}}" + + "%1$s እና %2$s" "መተግበሪያን ወደ ዴስክቶፕ በማከል ላይ" "ይቅር" diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml index de2c8b1df2..e98fc2ffbf 100644 --- a/quickstep/res/values-ar/strings.xml +++ b/quickstep/res/values-ar/strings.xml @@ -138,6 +138,8 @@ "الانتقال إلى يمين الشاشة أو أعلاها" "الانتقال إلى يسار الشاشة أو أسفلها" "{count,plural, =1{إظهار تطبيق واحد آخر}zero{إظهار # تطبيق آخر}two{إظهار تطبيقَين آخرَين}few{إظهار # تطبيقات أخرى}many{إظهار # تطبيقًا آخر}other{إظهار # تطبيق آخر}}" + + "\"%1$s\" و\"%2$s\"" "إضافة تطبيق إلى سطح المكتب" "إلغاء" diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml index c483fb1b49..9b75dad3a4 100644 --- a/quickstep/res/values-as/strings.xml +++ b/quickstep/res/values-as/strings.xml @@ -138,6 +138,8 @@ "ওপৰৰ বাঁওফাললৈ নিয়ক" "তলৰ সোঁফাললৈ নিয়ক" "{count,plural, =1{আৰু # টা এপ্‌ দেখুৱাওক।}one{আৰু # টা এপ্‌ দেখুৱাওক।}other{আৰু # টা এপ্‌ দেখুৱাওক।}}" + + "%1$s আৰু %2$s" "ডেস্কটপত এপ্ যোগ দি থকা হৈছে" "বাতিল কৰক" diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml index 1500e827a4..25a0fc8578 100644 --- a/quickstep/res/values-az/strings.xml +++ b/quickstep/res/values-az/strings.xml @@ -138,6 +138,8 @@ "Yuxarı/sola köçürün" "Aşağı/sağa köçürün" "{count,plural, =1{Daha # tətbiqi göstərin.}other{Daha # tətbiqi göstərin.}}" + + "%1$s%2$s" "Tətbiqin masaüstünə əlavə edilməsi" "Ləğv edin" diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml index 9529776233..aaa7d8c50a 100644 --- a/quickstep/res/values-b+sr+Latn/strings.xml +++ b/quickstep/res/values-b+sr+Latn/strings.xml @@ -138,6 +138,8 @@ "Premesti gore levo" "Premesti dole desno" "{count,plural, =1{Prikaži još # aplikaciju.}one{Prikaži još # aplikaciju.}few{Prikaži još # aplikacije.}other{Prikaži još # aplikacija.}}" + + "%1$s i %2$s" "Dodaje se aplikacija na radnu povrršinu" "Otkaži" diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml index 6b20866e58..4d65ecd52e 100644 --- a/quickstep/res/values-be/strings.xml +++ b/quickstep/res/values-be/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Замацаваць" "Адвольная форма" - - + "Працоўны стол" "Няма новых элементаў" "Налады выкарыстання праграмы" "Ачысціць усё" @@ -139,6 +138,8 @@ "Перамясціць уверх/улева" "Перамясціць уніз/управа" "{count,plural, =1{Паказаць ячшэ # праграму.}one{Паказаць ячшэ # праграму.}few{Паказаць ячшэ # праграмы.}many{Паказаць ячшэ # праграм.}other{Паказаць ячшэ # праграмы.}}" + + "%1$s і %2$s" "Дадаванне праграмы на камп\'ютар" "Скасаваць" diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml index 8631d8b292..bf42a231ce 100644 --- a/quickstep/res/values-bg/strings.xml +++ b/quickstep/res/values-bg/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Фиксиране" "Свободна форма" - - + "За компютър" "Няма скорошни елементи" "Настройки за използването на приложенията" "Изчистване на всички" @@ -139,6 +138,8 @@ "Преместване горе/вляво" "Преместване долу/вдясно" "{count,plural, =1{Показване на още # приложение.}other{Показване на още # приложения.}}" + + "%1$s и %2$s" "Приложението се добавя на настолния компютър" "Отказ" diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml index 948d07de94..89a5e76d21 100644 --- a/quickstep/res/values-bn/strings.xml +++ b/quickstep/res/values-bn/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "পিন করুন" "ফ্রি-ফর্ম" - - + "ডেস্কটপ" "কোনও সাম্প্রতিক আইটেম নেই" "অ্যাপ ব্যবহারের সেটিংস" "সবকিছু খালি করুন" @@ -139,6 +138,8 @@ "উপরে/বাঁদিকে সরান" "নিচে/ডানদিকে সরান" "{count,plural, =1{আরও #টি অ্যাপ দেখুন।}one{আরও #টি অ্যাপ দেখুন।}other{আরও #টি অ্যাপ দেখুন।}}" + + "%1$s%2$s" "ডেস্কটপে অ্যাপ যোগ করা হচ্ছে" "বাতিল করুন" diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml index 15da445547..059c14cf00 100644 --- a/quickstep/res/values-bs/strings.xml +++ b/quickstep/res/values-bs/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Zakači" "Slobodan oblik" - - + "Radna površina" "Nema nedavnih stavki" "Postavke korištenja aplikacije" "Obriši sve" @@ -139,6 +138,8 @@ "Premjesti gore lijevo" "Premjesti dolje desno" "{count,plural, =1{Prikaži još # aplikaciju.}one{Prikaži još # aplikaciju.}few{Prikaži još # aplikacije.}other{Prikaži još # aplikacija.}}" + + "%1$s i %2$s" "Dodavanje aplikacije na radnu površinu" "Otkaži" diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml index 62ae01b48d..f2118ebe9f 100644 --- a/quickstep/res/values-ca/strings.xml +++ b/quickstep/res/values-ca/strings.xml @@ -138,6 +138,8 @@ "Mou a la part superior o a l\'esquerra" "Mou a la part inferior o a la dreta" "{count,plural, =1{Mostra # aplicació més.}other{Mostra # aplicacions més.}}" + + "%1$s i %2$s" "S\'està afegint l\'aplicació a l\'ordinador" "Cancel·la" diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml index a07ffc568c..0771ace367 100644 --- a/quickstep/res/values-cs/strings.xml +++ b/quickstep/res/values-cs/strings.xml @@ -138,6 +138,8 @@ "Přesunout doleva nahoru" "Přesunout doprava dolů" "{count,plural, =1{Zobrazit # další aplikaci.}few{Zobrazit # další aplikace.}many{Zobrazit # další aplikace.}other{Zobrazit # dalších aplikací.}}" + + "%1$s%2$s" "Přidání aplikace na plochu" "Zrušit" diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml index a1ca3c5ef4..a805762e8a 100644 --- a/quickstep/res/values-da/strings.xml +++ b/quickstep/res/values-da/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fastgør" "Frit format" - - + "Computertilstand" "Ingen nye elementer" "Indstillinger for appforbrug" "Ryd alt" @@ -139,6 +138,8 @@ "Flyt til toppen eller venstre side" "Flyt til bunden eller højre side" "{count,plural, =1{Vis # app mere.}one{Vis # app mere.}other{Vis # apps mere.}}" + + "%1$s og %2$s" "Appen føjes til computeren" "Annuller" diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 73c3f04821..b1ce2d5be6 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fixieren" "Freeform-Modus" - - + "Desktopmodus" "Keine kürzlich verwendeten Elemente" "Einstellungen zur App-Nutzung" "Alle Apps schließen" @@ -139,6 +138,8 @@ "Nach oben / Nach links verschieben" "Nach unten / Nach rechts verschieben" "{count,plural, =1{# weitere App anzeigen}other{# weitere Apps anzeigen}}" + + "%1$s und %2$s" "Hinzufügen einer App zum Desktop" "Abbrechen" diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml index 55e535b149..030d834e9e 100644 --- a/quickstep/res/values-el/strings.xml +++ b/quickstep/res/values-el/strings.xml @@ -138,6 +138,8 @@ "Μετακίνηση επάνω/αριστερά" "Μετακίνηση κάτω/δεξιά" "{count,plural, =1{Εμφάνιση # ακόμα εφαρμογής.}other{Εμφάνιση # ακόμα εφαρμογών.}}" + + "%1$s και %2$s" "Γίνεται προσθήκη εφαρμογής στον υπολογιστή" "Ακύρωση" diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml index 64c68e05cc..a083fa4af3 100644 --- a/quickstep/res/values-en-rAU/strings.xml +++ b/quickstep/res/values-en-rAU/strings.xml @@ -138,6 +138,8 @@ "Move to top/left" "Move to bottom/right" "{count,plural, =1{Show # more app.}other{Show # more apps.}}" + + "%1$s and %2$s" "Adding app to desktop" "Cancel" diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml index 4daaa90be4..cadf7eedf7 100644 --- a/quickstep/res/values-en-rCA/strings.xml +++ b/quickstep/res/values-en-rCA/strings.xml @@ -138,6 +138,7 @@ "Move to top/left" "Move to bottom/right" "{count,plural, =1{Show # more app.}other{Show # more apps.}}" + "{count,plural, =1{Show # desktop app.}other{Show # desktop apps.}}" "%1$s and %2$s" "Adding app to Desktop" "Cancel" diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml index 64c68e05cc..a083fa4af3 100644 --- a/quickstep/res/values-en-rGB/strings.xml +++ b/quickstep/res/values-en-rGB/strings.xml @@ -138,6 +138,8 @@ "Move to top/left" "Move to bottom/right" "{count,plural, =1{Show # more app.}other{Show # more apps.}}" + + "%1$s and %2$s" "Adding app to desktop" "Cancel" diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml index 64c68e05cc..a083fa4af3 100644 --- a/quickstep/res/values-en-rIN/strings.xml +++ b/quickstep/res/values-en-rIN/strings.xml @@ -138,6 +138,8 @@ "Move to top/left" "Move to bottom/right" "{count,plural, =1{Show # more app.}other{Show # more apps.}}" + + "%1$s and %2$s" "Adding app to desktop" "Cancel" diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml index 19e6aa0255..7f1aa13760 100644 --- a/quickstep/res/values-en-rXC/strings.xml +++ b/quickstep/res/values-en-rXC/strings.xml @@ -138,6 +138,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎Move to top/left‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎Move to bottom/right‎‏‎‎‏‎" "{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎Show # more app.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎Show # more apps.‎‏‎‎‏‎}}" + "{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎Show # desktop app.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎Show # desktop apps.‎‏‎‎‏‎}}" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ and ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎Adding app to Desktop‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎Cancel‎‏‎‎‏‎" diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml index aa568f39f9..0a92029deb 100644 --- a/quickstep/res/values-es-rUS/strings.xml +++ b/quickstep/res/values-es-rUS/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fijar" "Formato libre" - - + "Escritorio" "No hay elementos recientes" "Configuración de uso de la app" "Cerrar todo" @@ -139,6 +138,8 @@ "Mover a la parte superior o izquierda" "Mover a la parte inferior o derecha" "{count,plural, =1{Mostrar # app más.}other{Mostrar # apps más.}}" + + "%1$s y %2$s" "Agregando app al escritorio" "Cancelar" diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml index 27eceb8bed..0d1ebe09ea 100644 --- a/quickstep/res/values-es/strings.xml +++ b/quickstep/res/values-es/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fijar" "Formato libre" - - + "Ordenador" "No hay nada reciente" "Ajustes de uso de la aplicación" "Borrar todo" @@ -139,6 +138,8 @@ "Mover arriba/a la izquierda" "Mover abajo/a la derecha" "{count,plural, =1{Mostrar # aplicación más.}other{Mostrar # aplicaciones más.}}" + + "%1$s y %2$s" "Añadiendo aplicación al ordenador" "Cancelar" diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml index bffce79a27..77529cb1e9 100644 --- a/quickstep/res/values-et/strings.xml +++ b/quickstep/res/values-et/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Kinnita" "Vabavorm" - - + "Lauaarvuti režiim" "Hiljutisi üksusi pole" "Rakenduse kasutuse seaded" "Sule kõik" @@ -139,6 +138,8 @@ "Teisalda üles/vasakule" "Teisalda alla/paremale" "{count,plural, =1{Kuva veel # rakendus.}other{Kuva veel # rakendust.}}" + + "%1$s ja %2$s" "Rakenduse lisamine arvutisse" "Tühista" diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml index 39fc48974d..8a504ec077 100644 --- a/quickstep/res/values-eu/strings.xml +++ b/quickstep/res/values-eu/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Ainguratu" "Modu librea" - - + "Ordenagailua" "Ez dago azkenaldi honetako ezer" "Aplikazioen erabileraren ezarpenak" "Garbitu guztiak" @@ -139,6 +138,8 @@ "Eraman gora, ezkerretara" "Eraman behera, eskuinetara" "{count,plural, =1{Erakutsi beste # aplikazio.}other{Erakutsi beste # aplikazio.}}" + + "%1$s eta %2$s" "Aplikazioa mahaigainean gehitzen" "Utzi" diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml index a3e5b7fc0e..814104509a 100644 --- a/quickstep/res/values-fa/strings.xml +++ b/quickstep/res/values-fa/strings.xml @@ -138,6 +138,8 @@ "انتقال به بالا/ چپ" "انتقال به پایین/ راست" "{count,plural, =1{نمایش # برنامه دیگر.}one{نمایش # برنامه دیگر.}other{نمایش # برنامه دیگر.}}" + + "%1$s و %2$s" "درحال افزودن برنامه به رایانه" "لغو" diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml index 40c4fc270d..18331a29d2 100644 --- a/quickstep/res/values-fi/strings.xml +++ b/quickstep/res/values-fi/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Kiinnitä" "Vapaamuotoinen" - - + "Tietokone" "Ei viimeaikaisia kohteita" "Sovelluksen käyttöasetukset" "Poista kaikki" @@ -139,6 +138,8 @@ "Siirrä ylös tai vasemmalle" "Siirrä alas tai oikealle" "{count,plural, =1{Näytä # muu sovellus.}other{Näytä # muuta sovellusta.}}" + + "%1$s ja %2$s" "Sovelluksen lisääminen työpöydälle" "Peru" diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml index 10aa359098..467a72a766 100644 --- a/quickstep/res/values-fr-rCA/strings.xml +++ b/quickstep/res/values-fr-rCA/strings.xml @@ -138,6 +138,8 @@ "Déplacer vers le coin supérieur gauche de l\'écran" "Déplacer vers le coin inférieur droit de l\'écran" "{count,plural, =1{Afficher # autre application.}one{Afficher # autre application.}other{Afficher # autres applications.}}" + + "%1$s et %2$s" "Ajout de l\'application au bureau en cours…" "Annuler" diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml index 457d425b20..20b9bab218 100644 --- a/quickstep/res/values-fr/strings.xml +++ b/quickstep/res/values-fr/strings.xml @@ -138,6 +138,8 @@ "Déplacer en haut ou à gauche" "Déplacer en bas ou à droite" "{count,plural, =1{Afficher # autre appli}one{Afficher # autre appli}other{Afficher # autre applis}}" + + "%1$s et %2$s" "Ajout de l\'appli au bureau" "Annuler" diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml index 0be8958eb7..71ebcf7ca0 100644 --- a/quickstep/res/values-gl/strings.xml +++ b/quickstep/res/values-gl/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fixar" "Forma libre" - - + "Escritorio" "Non hai elementos recentes" "Configuración do uso de aplicacións" "Borrar todo" @@ -139,6 +138,8 @@ "Mover á parte superior ou á esquerda" "Mover á parte inferior ou á dereita" "{count,plural, =1{Mostrar # aplicación máis.}other{Mostrar # aplicacións máis.}}" + + "%1$s e %2$s" "Engadindo aplicación ao ordenador" "Cancelar" diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml index 644240aaad..cb3c03f901 100644 --- a/quickstep/res/values-gu/strings.xml +++ b/quickstep/res/values-gu/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "પિન કરો" "ફ્રિફોર્મ" - - + "ડેસ્કટૉપ" "તાજેતરની કોઈ આઇટમ નથી" "ઍપ વપરાશનું સેટિંગ" "બધું સાફ કરો" @@ -139,6 +138,8 @@ "સૌથી ઉપર ડાબી બાજુએ ખસેડો" "સૌથી નીચે જમણી બાજુએ ખસેડો" "{count,plural, =1{વધુ # ઍપ બતાવો.}one{વધુ # ઍપ બતાવો.}other{વધુ # ઍપ બતાવો.}}" + + "%1$s અને %2$s" "ડેસ્કટૉપ પર ઍપ ઉમેરી રહ્યાં છીએ" "રદ કરો" diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml index b2da5dba7d..ebe7d89133 100644 --- a/quickstep/res/values-hi/strings.xml +++ b/quickstep/res/values-hi/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "पिन करें" "फ़्रीफ़ॉर्म" - - + "डेस्कटॉप" "हाल ही का कोई आइटम नहीं है" "ऐप्लिकेशन इस्तेमाल की सेटिंग" "सभी हटाएं" @@ -139,6 +138,8 @@ "ऊपर/बाईं तरफ़ ले जाएं" "नीचे/दाईं तरफ़ ले जाएं" "{count,plural, =1{# और ऐप्लिकेशन दिखाएं.}one{# और ऐप्लिकेशन दिखाएं.}other{# और ऐप्लिकेशन दिखाएं.}}" + + "%1$s और %2$s" "डेस्कटॉप पर ऐप्लिकेशन जोड़ा जा रहा है" "रद्द करें" diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml index b68d9611cf..a8875ad1da 100644 --- a/quickstep/res/values-hr/strings.xml +++ b/quickstep/res/values-hr/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Prikvači" "Slobodni oblik" - - + "Računalo" "Nema nedavnih stavki" "Postavke upotrebe aplikacija" "Izbriši sve" @@ -139,6 +138,8 @@ "Premjesti gore/lijevo" "Premjesti dolje/desno" "{count,plural, =1{Prikaži još # aplikaciju}one{Prikaži još # aplikaciju}few{Prikaži još # aplikacije}other{Prikaži još # aplikacija}}" + + "%1$s i %2$s" "Dodavanje aplikacije na radnu površinu" "Odustani" diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml index 006184b713..4650f4d606 100644 --- a/quickstep/res/values-hu/strings.xml +++ b/quickstep/res/values-hu/strings.xml @@ -138,6 +138,8 @@ "Mozgatás felülre vagy a bal oldalra" "Mozgatás alulra vagy a jobb oldalra" "{count,plural, =1{# további alkalmazás megjelenítése.}other{# további alkalmazás megjelenítése.}}" + + "%1$s és %2$s" "Alkalmazás hozzáadása az asztalhoz" "Mégse" diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml index e0646aa972..04049a9c6c 100644 --- a/quickstep/res/values-hy/strings.xml +++ b/quickstep/res/values-hy/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Ամրացնել" "Կամայական ձև" - - + "Համակարգիչ" "Այստեղ դեռ ոչինչ չկա" "Հավելվածի օգտագործման կարգավորումներ" "Փակել բոլորը" @@ -139,6 +138,8 @@ "Տեղափոխել վերևի ձախ անկյուն" "Տեղափոխել ներքևի աջ անկյուն" "{count,plural, =1{Ցուցադրել ևս # հավելված։}one{Ցուցադրել ևս # հավելված։}other{Ցուցադրել ևս # հավելված։}}" + + "%1$s և %2$s" "Հավելվածն ավելացվում է աշխատասեղանին" "Չեղարկել" diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml index 34a8b2ba95..833a568497 100644 --- a/quickstep/res/values-in/strings.xml +++ b/quickstep/res/values-in/strings.xml @@ -138,6 +138,8 @@ "Pindahkan ke atas/kiri" "Pindahkan ke bawah/kanan" "{count,plural, =1{Tampilkan # aplikasi lainnya.}other{Tampilkan # aplikasi lainnya.}}" + + "%1$s dan %2$s" "Menambahkan aplikasi ke Desktop" "Batalkan" diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml index d5f24880bb..5d3693db18 100644 --- a/quickstep/res/values-is/strings.xml +++ b/quickstep/res/values-is/strings.xml @@ -138,6 +138,8 @@ "Færa efst/til vinstri" "Færa neðst/til hægri" "{count,plural, =1{Sýna # forrit í viðbót.}one{Sýna # forrit í viðbót.}other{Sýna # forrit í viðbót.}}" + + "%1$s og %2$s" "Forriti bætt við skjáborð" "Hætta við" diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml index c38243f124..a9391f6949 100644 --- a/quickstep/res/values-it/strings.xml +++ b/quickstep/res/values-it/strings.xml @@ -138,6 +138,8 @@ "Sposta in alto/a sinistra" "Sposta in basso/a destra" "{count,plural, =1{Mostra # altra app.}other{Mostra altre # app.}}" + + "%1$s e %2$s" "Aggiunta app a desktop in corso…" "Annulla" diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml index 9d6b246083..7514ba1bfe 100644 --- a/quickstep/res/values-iw/strings.xml +++ b/quickstep/res/values-iw/strings.xml @@ -138,6 +138,8 @@ "העברה לפינה השמאלית/העליונה" "העברה לפינה הימנית/התחתונה" "{count,plural, =1{הצגת אפליקציה אחת (#) נוספת.}one{הצגת # אפליקציות נוספות.}two{הצגת # אפליקציות נוספות.}other{הצגת # אפליקציות נוספות.}}" + + "%1$s ו-%2$s" "האפליקציה מתווספת לשולחן העבודה" "ביטול" diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml index 69b39547da..0cc9f89e9f 100644 --- a/quickstep/res/values-ja/strings.xml +++ b/quickstep/res/values-ja/strings.xml @@ -138,6 +138,8 @@ "上 / 左に移動" "下 / 右に移動" "{count,plural, =1{他 # 件のアプリを表示できます。}other{他 # 件のアプリを表示できます。}}" + + "%1$s%2$s" "アプリをデスクトップに追加する" "キャンセル" diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml index 4306f1fc5f..d24a698dde 100644 --- a/quickstep/res/values-ka/strings.xml +++ b/quickstep/res/values-ka/strings.xml @@ -138,6 +138,8 @@ "ზემოთ/მარცხნივ გადატანა" "ქვემოთ/მარჯვნივ გადატანა" "{count,plural, =1{#-ით მეტი აპის ჩენება}other{#-ით მეტი აპის ჩვენება.}}" + + "%1$s და %2$s" "მიმდინარეობს აპის დესკტოპზე დამატება" "გაუქმება" diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml index 2a124526ae..5073a3fe12 100644 --- a/quickstep/res/values-kk/strings.xml +++ b/quickstep/res/values-kk/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Бекіту" "Еркін форма" - - + "Компьютер" "Соңғы элементтер жоқ" "Қолданбаны пайдалану параметрлері" "Барлығын өшіру" @@ -139,6 +138,8 @@ "Жоғары/солға жылжыту" "Төмен/оңға жылжыту" "{count,plural, =1{Тағы # қолданбаны көрсету.}other{Тағы # қолданбаны көрсету.}}" + + "%1$s және %2$s" "Жұмыс үстеліне қолданба қосу" "Бас тарту" diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml index bcec9558ad..0d9aa52e1b 100644 --- a/quickstep/res/values-km/strings.xml +++ b/quickstep/res/values-km/strings.xml @@ -138,6 +138,8 @@ "ផ្លាស់ទីទៅខាងលើ/ឆ្វេង" "ផ្លាស់ទីទៅខាងក្រោម/ស្ដាំ" "{count,plural, =1{បង្ហាញកម្មវិធី # ទៀត។}other{បង្ហាញ​កម្មវិធី # ទៀត។}}" + + "%1$s និង %2$s" "កំពុងបញ្ចូល​កម្មវិធីទៅកុំព្យូទ័រ" "បោះបង់" diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml index 4df7f3abfc..e4ff655728 100644 --- a/quickstep/res/values-kn/strings.xml +++ b/quickstep/res/values-kn/strings.xml @@ -138,6 +138,8 @@ "ಮೇಲಿನ/ಎಡಭಾಗಕ್ಕೆ ಸರಿಸಿ" "ಕೆಳಗಿನ/ಬಲಭಾಗಕ್ಕೆ ಸರಿಸಿ" "{count,plural, =1{ಇನ್ನೂ # ಆ್ಯಪ್ ಅನ್ನು ತೋರಿಸಿ.}one{ಇನ್ನೂ # ಆ್ಯಪ್‌ಗಳನ್ನು ತೋರಿಸಿ.}other{ಇನ್ನೂ # ಆ್ಯಪ್‌ಗಳನ್ನು ತೋರಿಸಿ.}}" + + "%1$s ಮತ್ತು %2$s" "ಡೆಸ್ಕ್‌ಟಾಪ್‌ಗೆ ಆ್ಯಪ್ ಅನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ" "ರದ್ದುಮಾಡಿ" diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml index 0fba87d103..90486bde4d 100644 --- a/quickstep/res/values-ko/strings.xml +++ b/quickstep/res/values-ko/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "고정" "자유 형식" - - + "데스크톱" "최근 항목이 없습니다." "앱 사용 설정" "모두 삭제" @@ -139,6 +138,8 @@ "상단/왼쪽으로 이동" "하단/오른쪽으로 이동" "{count,plural, =1{앱 #개 더 표시}other{앱 #개 더 표시}}" + + "%1$s%2$s" "데스크톱에 앱 추가하기" "취소" diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml index 061952c953..00573c38b0 100644 --- a/quickstep/res/values-ky/strings.xml +++ b/quickstep/res/values-ky/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Кадап коюу" "Эркин форма режими" - - + "Компьютер" "Акыркы колдонмолор жок" "Колдонмону пайдалануу параметрлери" "Баарын тазалоо" @@ -139,6 +138,8 @@ "Жогорку/сол бурчка жылдыруу" "Төмөнкү/оң бурчка жылдыруу" "{count,plural, =1{Дагы # колдонмону көрсөтүү.}other{Дагы # колдонмону көрсөтүү.}}" + + "%1$s жана %2$s" "Колдонмону иш тактага кошуу" "Жокко чыгаруу" diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml index 9496dd53ea..c2ec34fb9d 100644 --- a/quickstep/res/values-lo/strings.xml +++ b/quickstep/res/values-lo/strings.xml @@ -138,6 +138,8 @@ "ຍ້າຍໄປຊ້າຍ/ເທິງ" "ຍ້າຍໄປຂວາ/ລຸ່ມ" "{count,plural, =1{ສະແດງອີກ # ແອັບ.}other{ສະແດງອີກ # ແອັບ.}}" + + "%1$s ແລະ %2$s" "ການເພີ່ມແອັບໄປໃສ່ເດັສທັອບ" "ຍົກເລີກ" diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml index 47c36707e4..a4ca18787a 100644 --- a/quickstep/res/values-lt/strings.xml +++ b/quickstep/res/values-lt/strings.xml @@ -138,6 +138,8 @@ "Perkelti aukštyn, kairėn" "Perkelti žemyn, dešinėn" "{count,plural, =1{Rodyti dar # programą.}one{Rodyti dar # programą.}few{Rodyti dar # programas.}many{Rodyti dar # programos.}other{Rodyti dar # programų.}}" + + "„%1$s“ ir „%2$s“" "Pridedama programa prie darbalaukio" "Atšaukti" diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml index 276120bd57..7fef8806b7 100644 --- a/quickstep/res/values-lv/strings.xml +++ b/quickstep/res/values-lv/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Piespraust" "Brīva forma" - - + "Dators" "Nav nesenu vienumu." "Lietotņu izmantošanas iestatījumi" "Notīrīt visu" @@ -139,6 +138,8 @@ "Pārvietot uz augšējo/kreiso stūri" "Pārvietot uz apakšējo/labo stūri" "{count,plural, =1{Rādīt vēl # lietotni}zero{Rādīt vēl # lietotnes}one{Rādīt vēl # lietotni}other{Rādīt vēl # lietotnes}}" + + "“%1$s” un “%2$s”" "Notiek lietotnes pievienošana datoram" "Atcelt" diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml index 539448d87c..832bd74b3b 100644 --- a/quickstep/res/values-mk/strings.xml +++ b/quickstep/res/values-mk/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Закачи" "Freeform" - - + "Компјутер" "Нема неодамнешни ставки" "Поставки за користење на апликациите" "Избриши ги сите" @@ -139,6 +138,8 @@ "Премести горе лево" "Премести долу десно" "{count,plural, =1{Прикажи уште # апликација.}one{Прикажи уште # апликација.}other{Прикажи уште # апликации.}}" + + "%1$s и %2$s" "Додавање на апликацијата во „Работна површина“" "Откажи" diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml index 90ceeffc26..6432438130 100644 --- a/quickstep/res/values-ml/strings.xml +++ b/quickstep/res/values-ml/strings.xml @@ -138,6 +138,8 @@ "മുകളിലേക്കോ ഇടത്തേക്കോ നീക്കുക" "താഴേക്കോ വലത്തേക്കോ നീക്കുക" "{count,plural, =1{# ആപ്പ് കൂടി കാണിക്കുക.}other{# ആപ്പുകൾ കൂടി കാണിക്കുക.}}" + + "%1$s, %2$s" "ആപ്പ് ഡെസ്ക്ടോപ്പിലേക്ക് ചേർക്കുന്നു" "റദ്ദാക്കുക" diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml index c021d21977..4ab619e2d8 100644 --- a/quickstep/res/values-mn/strings.xml +++ b/quickstep/res/values-mn/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Бэхлэх" "Чөлөөтэй хувьсах" - - + "Компьютер" "Сүүлийн үеийн зүйл алга" "Апп ашиглалтын тохиргоо" "Бүгдийг арилгах" @@ -139,6 +138,8 @@ "Зүүн дээд хэсэг рүү зөөх" "Баруун доод хэсэг рүү зөөх" "{count,plural, =1{Өөр # аппыг харуулна уу.}other{Өөр # аппыг харуулна уу.}}" + + "%1$s болон %2$s" "Компьютерт апп нэмж байна" "Цуцлах" diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml index 3fea03b9cf..cae868d791 100644 --- a/quickstep/res/values-mr/strings.xml +++ b/quickstep/res/values-mr/strings.xml @@ -138,6 +138,8 @@ "सर्वात वरती/डावीकडे हलवा" "तळाशी/उजवीकडे हलवा" "{count,plural, =1{आणखी # अ‍ॅप दाखवा.}other{आणखी # अ‍ॅप्स दाखवा.}}" + + "%1$s आणि %2$s" "डेस्कटॉपवर ॲप जोडत आहे" "रद्द करा" diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml index d998176d5d..92f6a643c5 100644 --- a/quickstep/res/values-ms/strings.xml +++ b/quickstep/res/values-ms/strings.xml @@ -138,6 +138,8 @@ "Alihkan ke atas/kiri" "Alihkan ke bawah/kanan" "{count,plural, =1{Tunjukkan # lagi apl.}other{Tunjukkan # lagi apl.}}" + + "%1$s dan %2$s" "Menambahkan apl pada Desktop" "Batal" diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml index 66c4e5fe21..f694c394d2 100644 --- a/quickstep/res/values-my/strings.xml +++ b/quickstep/res/values-my/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "ပင်ထိုးရန်" "အလွတ်ပုံစံ" - - + "ဒက်စ်တော့" "မကြာမီကဖွင့်ထားသည်များ မရှိပါ" "အက်ပ်အသုံးပြုမှု ဆက်တင်များ" "အားလုံးရှင်းရန်" @@ -139,6 +138,8 @@ "အပေါ်/ဘယ်ဘက်သို့ ရွှေ့ရန်" "အောက်ခြေ/ညာဘက်သို့ ရွှေ့ရန်" "{count,plural, =1{နောက်ထပ်အက်ပ် # ခု ပြပါ။}other{နောက်ထပ်အက်ပ် # ခု ပြပါ။}}" + + "%1$s နှင့် %2$s" "‘ဒက်စ်တော့’ တွင် အက်ပ်ကို ထည့်ခြင်း" "မလုပ်တော့" diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml index 6ee48dc639..54f259649b 100644 --- a/quickstep/res/values-nb/strings.xml +++ b/quickstep/res/values-nb/strings.xml @@ -138,6 +138,8 @@ "Flytt til øverst/venstre" "Flytt til nederst/høyre" "{count,plural, =1{Vis # app til.}other{Vis # apper til.}}" + + "%1$s og %2$s" "Legg til apper på datamaskin" "Avbryt" diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml index f6668c16d1..401e13b8e8 100644 --- a/quickstep/res/values-ne/strings.xml +++ b/quickstep/res/values-ne/strings.xml @@ -138,6 +138,8 @@ "सिरान/बायाँतिर सार्नुहोस्" "फेद/दायाँतिर सार्नुहोस्" "{count,plural, =1{थप # एप देखाउनुहोस्।}other{थप # वटा एप देखाउनुहोस्।}}" + + "%1$s%2$s" "डेस्कटपमा एप हालिँदै छ" "रद्द गर्नुहोस्" diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml index c2888685e2..e2e0dbede4 100644 --- a/quickstep/res/values-nl/strings.xml +++ b/quickstep/res/values-nl/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Vastzetten" "Vrije vorm" - - + "Desktop" "Geen recente items" "Instellingen voor app-gebruik" "Alles wissen" @@ -139,6 +138,8 @@ "Naar boven/links verplaatsen" "Naar beneden/rechts verplaatsen" "{count,plural, =1{Nog # app tonen.}other{Nog # apps tonen.}}" + + "%1$s en %2$s" "App toevoegen aan desktop" "Annuleren" diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml index a7c5d44738..d05fe1e199 100644 --- a/quickstep/res/values-or/strings.xml +++ b/quickstep/res/values-or/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "ପିନ୍‍" "ଫ୍ରିଫର୍ମ" - - + "ଡେସ୍କଟପ" "ବର୍ତ୍ତମାନର କୌଣସି ଆଇଟମ ନାହିଁ" "ଆପ ବ୍ୟବହାର ସେଟିଂସ" "ସବୁ ଖାଲି କରନ୍ତୁ" @@ -139,6 +138,8 @@ "ଶୀର୍ଷ/ବାମକୁ ମୁଭ କରନ୍ତୁ" "ନିମ୍ନ/ଡାହାଣକୁ ମୁଭ କରନ୍ତୁ" "{count,plural, =1{ଅଧିକ #ଟି ଆପ ଦେଖାନ୍ତୁ।}other{ଅଧିକ #ଟି ଆପ୍ସ ଦେଖାନ୍ତୁ।}}" + + "%1$s ଏବଂ %2$s" "ଡେସ୍କଟପରେ ଆପ ଯୋଗ କରାଯାଉଛି" "ବାତିଲ କରନ୍ତୁ" diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml index 15be242f5b..3256033302 100644 --- a/quickstep/res/values-pa/strings.xml +++ b/quickstep/res/values-pa/strings.xml @@ -138,6 +138,8 @@ "ਸਿਖਰਲੇ/ਖੱਬੇ ਪਾਸੇ ਲੈ ਕੇ ਜਾਓ" "ਹੇਠਾਂ/ਸੱਜੇ ਪਾਸੇ ਲੈ ਕੇ ਜਾਓ" "{count,plural, =1{# ਹੋਰ ਐਪ ਦਿਖਾਓ।}one{# ਹੋਰ ਐਪ ਦਿਖਾਓ।}other{# ਹੋਰ ਐਪਾਂ ਦਿਖਾਓ।}}" + + "%1$s ਅਤੇ %2$s" "ਐਪ ਨੂੰ ਡੈਸਕਟਾਪ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" "ਰੱਦ ਕਰੋ" diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml index 11f46bc28b..479273390a 100644 --- a/quickstep/res/values-pl/strings.xml +++ b/quickstep/res/values-pl/strings.xml @@ -138,6 +138,8 @@ "Przesuń w górny lewy róg" "Przesuń w dolny prawy róg" "{count,plural, =1{Pokaż jeszcze # aplikację.}few{Pokaż jeszcze # aplikacje.}many{Pokaż jeszcze # aplikacji.}other{Pokaż jeszcze # aplikacji.}}" + + "%1$s%2$s" "Dodaję aplikację do komputera" "Anuluj" diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml index 5af1bf63a5..4f96a38a0c 100644 --- a/quickstep/res/values-pt-rPT/strings.xml +++ b/quickstep/res/values-pt-rPT/strings.xml @@ -138,6 +138,8 @@ "Mover para a parte superior esquerda" "Mover para a part superior direita" "{count,plural, =1{Mostrar mais # app.}other{Mostrar mais # apps.}}" + + "%1$s e %2$s" "A adicionar a app ao computador" "Cancelar" diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml index 9ea746c6a0..2530361c8c 100644 --- a/quickstep/res/values-pt/strings.xml +++ b/quickstep/res/values-pt/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fixar" "Forma livre" - - + "Computador" "Nenhum item recente" "Configurações de uso do app" "Remover tudo" @@ -139,6 +138,8 @@ "Mover para cima/para a esquerda" "Mover para baixo/para a direita" "{count,plural, =1{Mostrar mais # app.}one{Mostrar mais # app.}other{Mostrar mais # apps.}}" + + "%1$s e %2$s" "Adicionando app ao computador" "Cancelar" diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml index e45e45aacd..0d54d0dd64 100644 --- a/quickstep/res/values-ro/strings.xml +++ b/quickstep/res/values-ro/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fixează" "Formă liberă" - - + "Computer" "Niciun element recent" "Setări de utilizare a aplicației" "Șterge tot" @@ -139,6 +138,8 @@ "Mută în stânga sus" "Mută în dreapta jos" "{count,plural, =1{Afișează încă # aplicație}few{Afișează încă # aplicații}other{Afișează încă # de aplicații}}" + + "%1$s și %2$s" "Se adaugă aplicația pe computer" "Anulează" diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml index 5369d1e468..41e0f35636 100644 --- a/quickstep/res/values-ru/strings.xml +++ b/quickstep/res/values-ru/strings.xml @@ -138,6 +138,8 @@ "Переместить вверх или влево" "Переместить вниз или вправо" "{count,plural, =1{Показать ещё # приложение}one{Показать ещё # приложение}few{Показать ещё # приложения}many{Показать ещё # приложений}other{Показать ещё # приложения}}" + + "%1$s и %2$s" "Добавление приложения на компьютер" "Отмена" diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml index 3b7598bccd..f90dd288f0 100644 --- a/quickstep/res/values-si/strings.xml +++ b/quickstep/res/values-si/strings.xml @@ -138,6 +138,8 @@ "ඉහළ/වම වෙත ගෙන යන්න" "පහළ/දකුණ වෙත ගෙන යන්න" "{count,plural, =1{තවත් # යෙදුමක් පෙන්වන්න.}one{තවත් යෙදුම් #ක් පෙන්වන්න.}other{තවත් යෙදුම් #ක් පෙන්වන්න.}}" + + "%1$s සහ %2$s" "ඩෙස්ක්ටොප් වෙත යෙදුම එක් කිරීම" "අවලංගු කරන්න" diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml index c01f2f03e5..3b5639c3cf 100644 --- a/quickstep/res/values-sk/strings.xml +++ b/quickstep/res/values-sk/strings.xml @@ -138,6 +138,8 @@ "Presunúť hore alebo doľava" "Presunúť dole alebo doprava" "{count,plural, =1{Zobraziť # ďalšiu aplikáciu.}few{Zobraziť # ďalšie aplikácie.}many{Show # more apps.}other{Zobraziť # ďalších aplikácií.}}" + + "%1$s%2$s" "Pridanie aplikácie na plochu" "Zrušiť" diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml index 58e34f28be..6714240f38 100644 --- a/quickstep/res/values-sl/strings.xml +++ b/quickstep/res/values-sl/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Pripni" "Prosta oblika" - - + "Namizni računalnik" "Ni nedavnih elementov" "Nastavitve uporabe aplikacij" "Počisti vse" @@ -139,6 +138,8 @@ "Premakni na vrh/levo" "Premakni na dno/desno" "{count,plural, =1{Pokaži še # aplikacijo.}one{Pokaži še # aplikacijo.}two{Pokaži še # aplikaciji.}few{Pokaži še # aplikacije.}other{Pokaži še # aplikacij.}}" + + "%1$s in %2$s" "Dodajanje aplikacije na namizje" "Prekliči" diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml index 7ae201f265..f67efb66be 100644 --- a/quickstep/res/values-sq/strings.xml +++ b/quickstep/res/values-sq/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Gozhdo" "Formë e lirë" - - + "Desktopi" "Nuk ka asnjë artikull të fundit" "Cilësimet e përdorimit të aplikacionit" "Pastroji të gjitha" @@ -139,6 +138,8 @@ "Lëviz në krye/majtas" "Lëviz në fund/djathtas" "{count,plural, =1{Shfaq # aplikacion tjetër.}other{Shfaq # aplikacione të tjera.}}" + + "%1$s dhe %2$s" "Shtimi i aplikacionit te desktopi" "Anulo" diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml index 2a7239e78c..5ad5c1f962 100644 --- a/quickstep/res/values-sr/strings.xml +++ b/quickstep/res/values-sr/strings.xml @@ -138,6 +138,8 @@ "Премести горе лево" "Премести доле десно" "{count,plural, =1{Прикажи још # апликацију.}one{Прикажи још # апликацију.}few{Прикажи још # апликације.}other{Прикажи још # апликација.}}" + + "%1$s и %2$s" "Додаје се апликација на радну поврршину" "Откажи" diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml index 808cfe9855..67f7928646 100644 --- a/quickstep/res/values-sv/strings.xml +++ b/quickstep/res/values-sv/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Fäst" "Fritt format" - - + "Dator" "Listan är tom" "Inställningar för appanvändning" "Rensa alla" @@ -139,6 +138,8 @@ "Flytta högst upp/till vänster" "Flytta längst ned/till höger" "{count,plural, =1{Visa # app till.}other{Visa # appar till.}}" + + "%1$s och %2$s" "Lägger till appen på skrivbordet" "Avbryt" diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml index ba960ecf69..8f4d3fd258 100644 --- a/quickstep/res/values-sw/strings.xml +++ b/quickstep/res/values-sw/strings.xml @@ -138,6 +138,8 @@ "Sogeza juu/kushoto" "Sogeza chini/kulia" "{count,plural, =1{Onyesha programu # zaidi.}other{Onyesha programu # zaidi.}}" + + "%1$s na %2$s" "Kuweka programu kwenye Eneo-kazi" "Ghairi" diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml index c5cbfcd303..5a4630ec2b 100644 --- a/quickstep/res/values-ta/strings.xml +++ b/quickstep/res/values-ta/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "பின் செய்தல்" "குறிப்பிட்ட வடிவமில்லாத பயன்முறை" - - + "டெஸ்க்டாப்" "சமீபத்தியவை எதுவுமில்லை" "ஆப்ஸ் உபயோக அமைப்புகள்" "எல்லாம் அழி" @@ -139,6 +138,8 @@ "மேலே/இடதுபுறம் நகர்த்தும்" "கீழே/வலதுபுறம் நகர்த்தும்" "{count,plural, =1{மேலும் # ஆப்ஸைக் காட்டு.}other{மேலும் # ஆப்ஸைக் காட்டு.}}" + + "%1$s மற்றும் %2$s" "ஆப்ஸை டெஸ்க்டாப்பில் சேர்க்கிறது" "ரத்துசெய்" diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml index f2c06b4a1a..ceee6e509b 100644 --- a/quickstep/res/values-te/strings.xml +++ b/quickstep/res/values-te/strings.xml @@ -138,6 +138,8 @@ "ఎగువ/ఎడమ వైపునకు తరలించండి" "దిగువ/కుడి వైపునకు తరలించండి" "{count,plural, =1{మరో # యాప్‌ను చూడండి.}other{మరో # యాప్‌లను చూడండి.}}" + + "%1$s, %2$s" "డెస్క్‌టాప్‌నకు యాప్‌ను జోడిస్తోంది" "రద్దు చేయండి" diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml index c5f0b3e7b3..71f9950952 100644 --- a/quickstep/res/values-th/strings.xml +++ b/quickstep/res/values-th/strings.xml @@ -138,6 +138,8 @@ "ย้ายไปที่ด้านบนหรือด้านซ้าย" "ย้ายไปที่ด้านล่างหรือด้านขวา" "{count,plural, =1{แสดงเพิ่มเติมอีก # แอป}other{แสดงเพิ่มเติมอีก # แอป}}" + + "%1$s และ %2$s" "การเพิ่มแอปไปยังเดสก์ท็อป" "ยกเลิก" diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml index 5fbc57b740..3c3acc1839 100644 --- a/quickstep/res/values-tl/strings.xml +++ b/quickstep/res/values-tl/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "I-pin" "Freeform" - - + "Desktop" "Walang kamakailang item" "Mga setting ng paggamit ng app" "I-clear lahat" @@ -139,6 +138,8 @@ "Ilipat sa itaas/kaliwa" "Ilipat sa ibaba/kanan" "{count,plural, =1{Magpakita ng # pang app.}one{Magpakita ng # pang app.}other{Magpakita ng # pang app.}}" + + "%1$s at %2$s" "Idinaragdag ang app sa Desktop" "Kanselahin" diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml index 79f8ad113e..45d2fc4302 100644 --- a/quickstep/res/values-tr/strings.xml +++ b/quickstep/res/values-tr/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Sabitle" "Serbest çalışma" - - + "Masaüstü" "Yeni öğe yok" "Uygulama kullanım ayarları" "Tümünü temizle" @@ -139,6 +138,8 @@ "Sol üste taşı" "Sağ alta taşı" "{count,plural, =1{# uygulama daha göster.}other{# uygulama daha göster}}" + + "%1$s ve %2$s" "Uygulama Masaüstü\'ne ekleniyor" "İptal" diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml index c1ef51d2fb..4838552771 100644 --- a/quickstep/res/values-uk/strings.xml +++ b/quickstep/res/values-uk/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Закріпити" "Довільна форма" - - + "Комп’ютер" "Немає нещодавніх додатків" "Налаштування використання додатка" "Очистити все" @@ -139,6 +138,8 @@ "Перемістити вгору або вліво" "Перемістити вниз або вправо" "{count,plural, =1{Показати ще # додаток.}one{Показати ще # додаток.}few{Показати ще # додатки.}many{Показати ще # додатків.}other{Показати ще # додатка.}}" + + "%1$s та %2$s" "Встановлення додатка на комп’ютер" "Скасувати" diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml index 69b4ba1177..ee96e5c45b 100644 --- a/quickstep/res/values-ur/strings.xml +++ b/quickstep/res/values-ur/strings.xml @@ -138,6 +138,8 @@ "اوپر/بائیں طرف منتقل کریں" "نیچے/دائیں طرف منتقل کریں" "{count,plural, =1{# مزید ایپ دکھائیں۔}other{# مزید ایپس دکھائیں۔}}" + + "%1$s اور %2$s" "ڈیسک ٹاپ پر ایپ شامل کرنا" "منسوخ کریں" diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml index f548c199c7..41e6d24f28 100644 --- a/quickstep/res/values-uz/strings.xml +++ b/quickstep/res/values-uz/strings.xml @@ -138,6 +138,8 @@ "Yuqoriga yoki chapga oʻtkazish" "Pastga yoki oʻngga oʻtkazish" "{count,plural, =1{Yana # ta ilovani chiqarish}other{Yana # ta ilovani chiqarish}}" + + "%1$s va %2$s" "Ilova kompyuterga qoʻshilmoqda" "Bekor qilish" diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml index 136e1d2af0..709fb10f5f 100644 --- a/quickstep/res/values-vi/strings.xml +++ b/quickstep/res/values-vi/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Ghim" "Dạng tự do" - - + "Máy tính" "Không có mục gần đây nào" "Cài đặt mức sử dụng ứng dụng" "Xóa tất cả" @@ -139,6 +138,8 @@ "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" "{count,plural, =1{Hiện thêm # ứng dụng.}other{Hiện thêm # ứng dụng.}}" + + "%1$s%2$s" "Đang thêm ứng dụng vào máy tính" "Huỷ" diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml index b90d6bf14d..d30fdfaeaa 100644 --- a/quickstep/res/values-zh-rCN/strings.xml +++ b/quickstep/res/values-zh-rCN/strings.xml @@ -21,8 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "固定" "自由窗口" - - + "桌面设备" "近期没有任何内容" "应用使用设置" "全部清除" @@ -139,6 +138,8 @@ "移到顶部/左侧" "移到底部/右侧" "{count,plural, =1{显示另外 # 个应用。}other{显示另外 # 个应用。}}" + + "%1$s%2$s" "将应用添加到桌面" "取消" diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml index 45cf781f69..d8e698c9ec 100644 --- a/quickstep/res/values-zh-rHK/strings.xml +++ b/quickstep/res/values-zh-rHK/strings.xml @@ -21,7 +21,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "固定" "自由形式" - "電腦" + "桌面" "最近沒有任何項目" "應用程式使用情況設定" "全部清除" @@ -138,6 +138,8 @@ "移至上方/左側" "移至底部/右側" "{count,plural, =1{顯示另外 # 個應用程式。}other{顯示另外 # 個應用程式。}}" + + "「%1$s」和「%2$s」" "正在新增應用程式至桌面" "取消" diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml index ef811c47b5..98465a6a60 100644 --- a/quickstep/res/values-zh-rTW/strings.xml +++ b/quickstep/res/values-zh-rTW/strings.xml @@ -138,6 +138,8 @@ "移到上方/左側" "移到底部/右側" "{count,plural, =1{再多顯示 # 個應用程式。}other{再多顯示 # 個應用程式。}}" + + "「%1$s」和「%2$s」" "新增應用程式至桌面" "取消" diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml index 71c9227cff..bbb6631125 100644 --- a/quickstep/res/values-zu/strings.xml +++ b/quickstep/res/values-zu/strings.xml @@ -138,6 +138,8 @@ "Hamba phezulu/kwesokunxele" "Hamba phansi/kwesokudla" "{count,plural, =1{Bonisa i-app e-# ngaphezulu.}one{Bonisa ama-app angu-# ngaphezulu.}other{Bonisa ama-app angu-# ngaphezulu.}}" + + "I-%1$s ne-%2$s" "Yengeza i-app ku-Deskithophu" "Khansela" diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java index 110c30f30b..db069d51f0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java @@ -120,6 +120,7 @@ public class BubbleBarView extends FrameLayout { // Whether the bar is expanded (i.e. the bubble activity is being displayed). private boolean mIsBarExpanded = false; // The currently selected bubble view. + @Nullable private BubbleView mSelectedBubbleView; private BubbleBarLocation mBubbleBarLocation = BubbleBarLocation.DEFAULT; // The click listener when the bubble bar is collapsed. @@ -205,6 +206,7 @@ public class BubbleBarView extends FrameLayout { // If the bar was just collapsed and the overflow was the last bubble that was // selected, set the first bubble as selected. if (!mIsBarExpanded && mUpdateSelectedBubbleAfterCollapse != null + && mSelectedBubbleView != null && mSelectedBubbleView.getBubble() instanceof BubbleBarOverflow) { BubbleView firstBubble = (BubbleView) getChildAt(0); mUpdateSelectedBubbleAfterCollapse.accept(firstBubble.getBubble().getKey()); @@ -534,6 +536,10 @@ public class BubbleBarView extends FrameLayout { @Override public void removeView(View view) { super.removeView(view); + if (view == mSelectedBubbleView) { + mSelectedBubbleView = null; + mBubbleBarBackground.showArrow(false); + } updateWidth(); } @@ -689,8 +695,12 @@ public class BubbleBarView extends FrameLayout { * Sets which bubble view should be shown as selected. */ public void setSelectedBubble(BubbleView view) { + BubbleView previouslySelectedBubble = mSelectedBubbleView; mSelectedBubbleView = view; - updateArrowForSelected(/* shouldAnimate= */ true); + mBubbleBarBackground.showArrow(view != null); + // TODO: (b/283309949) remove animation should be implemented first, so than arrow + // animation is adjusted, skip animation for now + updateArrowForSelected(previouslySelectedBubble != null); } /** @@ -715,6 +725,10 @@ public class BubbleBarView extends FrameLayout { // Find the center of the bubble when it's expanded, set the arrow position to it. final float tx = arrowPositionForSelectedWhenExpanded(); final float currentArrowPosition = mBubbleBarBackground.getArrowPositionX(); + if (tx == currentArrowPosition) { + // arrow position remains unchanged + return; + } if (shouldAnimate && currentArrowPosition > expandedWidth()) { Log.d(TAG, "arrow out of bounds of expanded view, skip animation"); shouldAnimate = false; diff --git a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java index 79b09fdbec..225b127d9d 100644 --- a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java +++ b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java @@ -220,6 +220,11 @@ public class LauncherBackAnimationController { } }); } + + @Override + public void setTriggerBack(boolean triggerBack) { + // TODO(b/261654570): track touch from the Launcher process. + } } private static class RemoteAnimationRunnerStub extends IRemoteAnimationRunner.Stub { diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index ab9840f645..b0b25897ad 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -460,10 +460,11 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle, SafeCloseable { } @Override - public void setOverrideHomeButtonLongPress(long duration, float slopMultiplier) { + public void setOverrideHomeButtonLongPress(long duration, float slopMultiplier, + boolean haptic) { if (mSystemUiProxy != null) { try { - mSystemUiProxy.setOverrideHomeButtonLongPress(duration, slopMultiplier); + mSystemUiProxy.setOverrideHomeButtonLongPress(duration, slopMultiplier, haptic); } catch (RemoteException e) { Log.w(TAG, "Failed call setOverrideHomeButtonLongPress", e); } diff --git a/quickstep/src/com/android/quickstep/util/AssistStateManager.java b/quickstep/src/com/android/quickstep/util/AssistStateManager.java index 4a35c3b947..42db65fbe4 100644 --- a/quickstep/src/com/android/quickstep/util/AssistStateManager.java +++ b/quickstep/src/com/android/quickstep/util/AssistStateManager.java @@ -33,11 +33,6 @@ public class AssistStateManager implements ResourceBasedOverride, SafeCloseable public AssistStateManager() {} - /** Whether search supports haptic on invocation. */ - public boolean supportsCommitHaptic() { - return false; - } - /** Whether search is available. */ public boolean isSearchAvailable() { return false; @@ -90,6 +85,11 @@ public class AssistStateManager implements ResourceBasedOverride, SafeCloseable return 0; } + /** Get the haptic bit overridden by AGSA. */ + public Optional getShouldPlayHapticOverride() { + return Optional.empty(); + } + /** Return {@code true} if the Settings toggle is enabled. */ public boolean isSettingsAllEntrypointsEnabled() { return false; diff --git a/quickstep/src/com/android/quickstep/views/DesktopTaskView.java b/quickstep/src/com/android/quickstep/views/DesktopTaskView.java index 964f531df9..93059b20b1 100644 --- a/quickstep/src/com/android/quickstep/views/DesktopTaskView.java +++ b/quickstep/src/com/android/quickstep/views/DesktopTaskView.java @@ -23,6 +23,7 @@ import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITIO import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Point; +import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; @@ -38,13 +39,13 @@ import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.desktop.DesktopRecentsTransitionController; import com.android.launcher3.icons.IconProvider; import com.android.launcher3.util.CancellableTask; import com.android.launcher3.util.RunnableList; +import com.android.quickstep.BaseContainerInterface; import com.android.quickstep.RecentsModel; import com.android.quickstep.TaskThumbnailCache; import com.android.quickstep.util.RecentsOrientedState; @@ -87,6 +88,8 @@ public class DesktopTaskView extends TaskView { private int mChildCountAtInflation; + private final PointF mTempPointF = new PointF(); + public DesktopTaskView(Context context) { this(context, null); } @@ -305,16 +308,7 @@ public class DesktopTaskView extends TaskView { @Override protected void setThumbnailOrientation(RecentsOrientedState orientationState) { - DeviceProfile deviceProfile = mContainer.getDeviceProfile(); - int thumbnailTopMargin = deviceProfile.overviewTaskThumbnailTopMarginPx; - - LayoutParams snapshotParams = (LayoutParams) mTaskThumbnailViewDeprecated.getLayoutParams(); - snapshotParams.topMargin = thumbnailTopMargin; - - for (int i = 0; i < mSnapshotViewMap.size(); i++) { - TaskThumbnailViewDeprecated thumbnailView = mSnapshotViewMap.valueAt(i); - thumbnailView.setLayoutParams(snapshotParams); - } + // no-op } @Override @@ -431,8 +425,10 @@ public class DesktopTaskView extends TaskView { return; } - int windowWidth = mContainer.getDeviceProfile().widthPx; - int windowHeight = mContainer.getDeviceProfile().heightPx; + BaseContainerInterface.getTaskDimension(mContext, mContainer.getDeviceProfile(), + mTempPointF); + int windowWidth = (int) mTempPointF.x; + int windowHeight = (int) mTempPointF.y; float scaleWidth = containerWidth / (float) windowWidth; float scaleHeight = containerHeight / (float) windowHeight; diff --git a/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java b/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java index ca5fb70bea..fc757b44c9 100644 --- a/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java +++ b/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java @@ -55,7 +55,7 @@ public class AbstractTaplTestsTaskbar extends AbstractQuickStepTest { "com.android.launcher3.testcomponent.BaseTestingActivity"); mLauncherLayout = TestUtil.setLauncherDefaultLayout(mTargetContext, layoutBuilder); AbstractLauncherUiTest.initialize(this); - startAppFastInFullscreen(CALCULATOR_APP_PACKAGE); + startAppFast(CALCULATOR_APP_PACKAGE); mLauncher.enableBlockTimeout(true); mLauncher.showTaskbarIfHidden(); } diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsKeyboardQuickSwitch.java b/quickstep/tests/src/com/android/quickstep/TaplTestsKeyboardQuickSwitch.java index 7ab72f28e2..43ebb1752a 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsKeyboardQuickSwitch.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsKeyboardQuickSwitch.java @@ -65,7 +65,7 @@ public class TaplTestsKeyboardQuickSwitch extends AbstractQuickStepTest { public void setUp() throws Exception { Assume.assumeTrue(mLauncher.isTablet()); super.setUp(); - startAppFastInFullscreen(CALCULATOR_APP_PACKAGE); + startAppFast(CALCULATOR_APP_PACKAGE); startTestActivity(2); } diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java b/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java index a9ff161cbc..df73e0913e 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java @@ -15,8 +15,6 @@ */ package com.android.quickstep; -import static com.android.launcher3.util.rule.TestStabilityRule.LOCAL; -import static com.android.launcher3.util.rule.TestStabilityRule.PLATFORM_POSTSUBMIT; import static com.android.quickstep.TaskbarModeSwitchRule.Mode.PERSISTENT; import android.graphics.Rect; @@ -25,7 +23,6 @@ import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; -import com.android.launcher3.util.rule.TestStabilityRule; import com.android.quickstep.NavigationModeSwitchRule.NavigationModeSwitch; import com.android.quickstep.TaskbarModeSwitchRule.TaskbarModeSwitch; @@ -48,7 +45,6 @@ public class TaplTestsPersistentTaskbar extends AbstractTaplTestsTaskbar { @Test @NavigationModeSwitch(mode = NavigationModeSwitchRule.Mode.THREE_BUTTON) - @TestStabilityRule.Stability(flavors = LOCAL | PLATFORM_POSTSUBMIT) public void testThreeButtonsTaskbarBoundsAfterConfigChangeDuringIme() { Rect taskbarBoundsBefore = getTaskbar().getVisibleBounds(); // Go home and to an IME activity (any configuration change would do, as long as it diff --git a/res/layout/private_space_header.xml b/res/layout/private_space_header.xml index 84554e48e6..cefe39430b 100644 --- a/res/layout/private_space_header.xml +++ b/res/layout/private_space_header.xml @@ -25,7 +25,9 @@ android:clipToOutline="true" android:gravity="center_vertical" android:textDirection="locale" - android:orientation="horizontal"> + android:orientation="horizontal" + android:contentDescription="@string/ps_container_lock_button_content_description" + android:importantForAccessibility="yes"> + android:contentDescription="@string/ps_container_lock_button_content_description"> + android:theme="@style/PrivateSpaceHeaderTextStyle" + android:importantForAccessibility="no"/> \ No newline at end of file diff --git a/res/layout/widget_cell_content.xml b/res/layout/widget_cell_content.xml index 12453a50c1..8f786bf973 100644 --- a/res/layout/widget_cell_content.xml +++ b/res/layout/widget_cell_content.xml @@ -78,7 +78,7 @@ android:gravity="center_horizontal" android:textSize="@dimen/widget_cell_font_size" android:textColor="?android:attr/textColorSecondary" - android:maxLines="2" + android:maxLines="3" android:ellipsize="end" android:fadingEdge="horizontal" android:alpha="0.7" /> diff --git a/res/layout/widgets_bottom_sheet_content.xml b/res/layout/widgets_bottom_sheet_content.xml index 065c2edf91..0a1407e098 100644 --- a/res/layout/widgets_bottom_sheet_content.xml +++ b/res/layout/widgets_bottom_sheet_content.xml @@ -25,11 +25,10 @@ android:layout_width="@dimen/bottom_sheet_handle_width" android:layout_height="@dimen/bottom_sheet_handle_height" android:layout_gravity="center_horizontal" - android:layout_marginBottom="@dimen/bottom_sheet_handle_margin" + android:layout_marginBottom="@dimen/widgets_bottom_sheet_handle_margin" android:visibility="gone" android:background="@drawable/bg_rounded_corner_bottom_sheet_handle"/> + android:layout_marginTop="24dp" + android:layout_marginBottom="24dp" + android:layout_marginHorizontal="@dimen/widget_bottom_sheet_horizontal_margin" + android:background="@drawable/widgets_surface_background" + android:scrollbarThumbVertical="@drawable/widget_picker_preview_pane_scroll_thumb" + android:clipToOutline="true" + android:clipChildren="true"> 0dp 24dp 24dp + + 16dp 0.5dp 1dp @@ -476,6 +478,7 @@ 32dp 4dp 16dp + 24dp 2dp diff --git a/res/values/strings.xml b/res/values/strings.xml index e1c7d64323..da5b70962f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -487,8 +487,10 @@ Private Private Space Settings - - Lock/Unlock Private Space + + Private, unlocked. + + Private, locked. Lock Private Space Transitioning diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 1c23644243..cc9f08eadc 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -485,7 +485,10 @@ public abstract class PagedView extends ViewGrou super.onVisibilityAggregated(isVisible); } - protected boolean isPageInTransition() { + /** + * Returns true if the page is in the middle of transition to another page + */ + public boolean isPageInTransition() { return mIsPageInTransition; } diff --git a/src/com/android/launcher3/allapps/PrivateProfileManager.java b/src/com/android/launcher3/allapps/PrivateProfileManager.java index 7e975df713..551fa944bb 100644 --- a/src/com/android/launcher3/allapps/PrivateProfileManager.java +++ b/src/com/android/launcher3/allapps/PrivateProfileManager.java @@ -112,6 +112,8 @@ public class PrivateProfileManager extends UserProfileManager { private Runnable mOnPSHeaderAdded; @Nullable private RelativeLayout mPSHeader; + private final String mLockedStateContentDesc; + private final String mUnLockedStateContentDesc; public PrivateProfileManager(UserManager userManager, ActivityAllAppsContainerView allApps, @@ -125,6 +127,10 @@ public class PrivateProfileManager extends UserProfileManager { UI_HELPER_EXECUTOR.post(() -> initializeInBackgroundThread(appContext)); mPsHeaderHeight = mAllApps.getContext().getResources().getDimensionPixelSize( R.dimen.ps_header_height); + mLockedStateContentDesc = mAllApps.getContext() + .getString(R.string.ps_container_lock_button_content_description); + mUnLockedStateContentDesc = mAllApps.getContext() + .getString(R.string.ps_container_unlock_button_content_description); } /** Adds Private Space Header to the layout. */ @@ -398,11 +404,13 @@ public class PrivateProfileManager extends UserProfileManager { lockText.setVisibility(VISIBLE); lockButton.setVisibility(VISIBLE); lockButton.setOnClickListener(view -> lockingAction(/* lock */ true)); + lockButton.setContentDescription(mUnLockedStateContentDesc); } case STATE_DISABLED -> { lockText.setVisibility(GONE); lockButton.setVisibility(VISIBLE); lockButton.setOnClickListener(view -> lockingAction(/* lock */ false)); + lockButton.setContentDescription(mLockedStateContentDesc); } default -> lockButton.setVisibility(GONE); } @@ -412,9 +420,14 @@ public class PrivateProfileManager extends UserProfileManager { if (getCurrentState() == STATE_DISABLED) { header.setOnClickListener(view -> lockingAction(/* lock */ false)); header.setClickable(true); + // Add header as accessibility target when disabled. + header.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); + header.setContentDescription(mLockedStateContentDesc); } else { header.setOnClickListener(null); header.setClickable(false); + // Remove header from accessibility target when enabled. + header.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO); } } diff --git a/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java b/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java index 456cde8d45..480e8f3e56 100644 --- a/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java +++ b/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java @@ -246,7 +246,8 @@ public abstract class ItemFocusIndicatorHelper implements AnimatorUpdateListe protected void setCurrentItem(T item) { mCurrentItem = item; - mShift = 0; + // Set it to end value directly to skip the animation for outline + mShift = Flags.enableFocusOutline() ? 1 : 0; mTargetItem = null; } diff --git a/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java b/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java index 4653bf12f3..21d157a41b 100644 --- a/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java +++ b/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java @@ -19,6 +19,7 @@ package com.android.launcher3.keyboard; import android.graphics.Rect; import android.view.View; +import com.android.launcher3.Flags; import com.android.launcher3.PagedView; /** @@ -34,6 +35,28 @@ public class ViewGroupFocusHelper extends FocusIndicatorHelper { mContainer = container; } + @Override + protected boolean shouldDraw(View item) { + if (Flags.enableFocusOutline()) { + // Not draw outline in page transition because the outline just remains fully + // persistent during the transition and does not look smooth + return super.shouldDraw(item) && !isInPageTransition(item); + } else { + return super.shouldDraw(item); + } + } + + private boolean isInPageTransition(View view) { + if (view == null || !(view.getParent() instanceof View)) { + return false; + } + boolean isInTransition = false; + if (view instanceof PagedView) { + isInTransition = ((PagedView) view).isPageInTransition(); + } + return isInTransition || isInPageTransition((View) view.getParent()); + } + @Override public void viewToRect(View v, Rect outRect) { // Using FocusedRect here allows views to provide their custom rect for drawing outline, diff --git a/src/com/android/launcher3/util/LockedUserState.kt b/src/com/android/launcher3/util/LockedUserState.kt index 0a87594fde..94f9e4fb69 100644 --- a/src/com/android/launcher3/util/LockedUserState.kt +++ b/src/com/android/launcher3/util/LockedUserState.kt @@ -56,12 +56,16 @@ class LockedUserState(private val mContext: Context) : SafeCloseable { private fun notifyUserUnlocked() { mUserUnlockedActions.executeAllAndDestroy() - mUserUnlockedReceiver.unregisterReceiverSafely(mContext) + Executors.THREAD_POOL_EXECUTOR.execute { + mUserUnlockedReceiver.unregisterReceiverSafely(mContext) + } } /** Stops the receiver from listening for ACTION_USER_UNLOCK broadcasts. */ override fun close() { - mUserUnlockedReceiver.unregisterReceiverSafely(mContext) + Executors.THREAD_POOL_EXECUTOR.execute { + mUserUnlockedReceiver.unregisterReceiverSafely(mContext) + } } /** diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java index b14ec4294e..3be6c68055 100644 --- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java @@ -21,7 +21,6 @@ import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_BOTTOM_ import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; -import android.util.IntProperty; import android.util.Pair; import android.view.Gravity; import android.view.LayoutInflater; @@ -50,22 +49,6 @@ import java.util.List; * Bottom sheet for the "Widgets" system shortcut in the long-press popup. */ public class WidgetsBottomSheet extends BaseWidgetSheet { - private static final String TAG = "WidgetsBottomSheet"; - - private static final IntProperty PADDING_BOTTOM = - new IntProperty("paddingBottom") { - @Override - public void setValue(View view, int paddingBottom) { - view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), - view.getPaddingRight(), paddingBottom); - } - - @Override - public Integer get(View view) { - return view.getPaddingBottom(); - } - }; - private static final int DEFAULT_CLOSE_DURATION = 200; private static final long EDUCATION_TIP_DELAY_MS = 300; @@ -119,9 +102,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet { mContent = findViewById(R.id.widgets_bottom_sheet); setContentBackgroundWithParent( getContext().getDrawable(R.drawable.bg_rounded_corner_bottom_sheet), mContent); - View scrollView = findViewById(R.id.widgets_table_scroll_view); - scrollView.setOutlineProvider(mViewOutlineProvider); - scrollView.setClipToOutline(true); } @Override diff --git a/src/com/android/launcher3/widget/util/WidgetsTableUtils.java b/src/com/android/launcher3/widget/util/WidgetsTableUtils.java index 5e0e203074..edaf4749b5 100644 --- a/src/com/android/launcher3/widget/util/WidgetsTableUtils.java +++ b/src/com/android/launcher3/widget/util/WidgetsTableUtils.java @@ -31,6 +31,7 @@ import java.util.stream.Collectors; /** An utility class which groups {@link WidgetItem}s into a table. */ public final class WidgetsTableUtils { + private static final int MAX_ITEMS_IN_ROW = 3; /** * Groups widgets in the following order: @@ -125,7 +126,8 @@ public final class WidgetsTableUtils { widgetItemsAtRow.add(widgetItem); containerSizeForRow = containerSize; currentRowWidth = containerWidth; - } else if ((currentRowWidth + containerWidth) <= rowPx + } else if (widgetItemsAtRow.size() < MAX_ITEMS_IN_ROW + && (currentRowWidth + containerWidth) <= rowPx && widgetItem.hasSameType(widgetItemsAtRow.get(numOfWidgetItems - 1)) && containerSize.equals(containerSizeForRow)) { // Group items in the same row if diff --git a/tests/src/com/android/launcher3/dragging/TaplDragTest.java b/tests/src/com/android/launcher3/dragging/TaplDragTest.java index d64d096c72..1c41ded1b9 100644 --- a/tests/src/com/android/launcher3/dragging/TaplDragTest.java +++ b/tests/src/com/android/launcher3/dragging/TaplDragTest.java @@ -21,8 +21,6 @@ import static com.android.launcher3.util.TestConstants.AppNames.MAPS_APP_NAME; import static com.android.launcher3.util.TestConstants.AppNames.PHOTOS_APP_NAME; import static com.android.launcher3.util.TestConstants.AppNames.STORE_APP_NAME; import static com.android.launcher3.util.TestConstants.AppNames.TEST_APP_NAME; -import static com.android.launcher3.util.rule.TestStabilityRule.LOCAL; -import static com.android.launcher3.util.rule.TestStabilityRule.PLATFORM_POSTSUBMIT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -43,8 +41,6 @@ import com.android.launcher3.tapl.Workspace; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; import com.android.launcher3.util.TestUtil; -import com.android.launcher3.util.rule.ScreenRecordRule.ScreenRecord; -import com.android.launcher3.util.rule.TestStabilityRule; import org.junit.Test; @@ -67,9 +63,6 @@ public class TaplDragTest extends AbstractLauncherUiTest { */ @Test @PortraitLandscape - @ScreenRecord - // Staging; will be promoted to presubmit if stable - @TestStabilityRule.Stability(flavors = LOCAL | PLATFORM_POSTSUBMIT) @PlatinumTest(focusArea = "launcher") public void testDragToFolder() { // TODO: add the use case to drag an icon to an existing folder. Currently it either fails diff --git a/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt b/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt index c2e73fcb15..6bbcf85187 100644 --- a/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt +++ b/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt @@ -24,18 +24,29 @@ import android.content.pm.LauncherApps import android.content.pm.PackageInstaller import android.content.pm.ShortcutInfo import android.os.UserHandle +import android.platform.test.annotations.EnableFlags import android.util.LongSparseArray +import com.android.dx.mockito.inline.extended.ExtendedMockito +import com.android.launcher3.Flags.FLAG_ENABLE_SUPPORT_FOR_ARCHIVING import com.android.launcher3.LauncherAppState import com.android.launcher3.LauncherSettings.Favorites +import com.android.launcher3.LauncherSettings.Favorites.CONTAINER_DESKTOP import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION +import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_FOLDER +import com.android.launcher3.Utilities import com.android.launcher3.Utilities.EMPTY_PERSON_ARRAY +import com.android.launcher3.backuprestore.LauncherRestoreEventLogger import com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RestoreError.Companion.MISSING_INFO +import com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RestoreError.Companion.MISSING_WIDGET_PROVIDER import com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RestoreError.Companion.PROFILE_DELETED import com.android.launcher3.model.data.FolderInfo import com.android.launcher3.model.data.IconRequestInfo import com.android.launcher3.model.data.ItemInfo +import com.android.launcher3.model.data.LauncherAppWidgetInfo +import com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_RESTORE_STARTED +import com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_UI_NOT_READY import com.android.launcher3.model.data.WorkspaceItemInfo import com.android.launcher3.pm.UserCache import com.android.launcher3.shortcuts.ShortcutKey @@ -43,11 +54,14 @@ import com.android.launcher3.util.ComponentKey import com.android.launcher3.util.PackageManagerHelper import com.android.launcher3.util.PackageUserKey import com.android.launcher3.util.UserIconInfo +import com.android.launcher3.widget.LauncherAppWidgetProviderInfo import com.android.launcher3.widget.WidgetInflater +import com.android.launcher3.widget.WidgetSections import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import org.junit.Before import org.junit.Test +import org.mockito.ArgumentCaptor import org.mockito.Mock import org.mockito.Mockito.RETURNS_DEEP_STUBS import org.mockito.Mockito.mock @@ -56,8 +70,10 @@ import org.mockito.Mockito.verify import org.mockito.kotlin.any import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.whenever +import org.mockito.quality.Strictness class WorkspaceItemProcessorTest { @@ -73,29 +89,31 @@ class WorkspaceItemProcessorTest { @Mock private lateinit var mockUserManagerState: UserManagerState @Mock private lateinit var mockWidgetInflater: WidgetInflater - private lateinit var intent: Intent - private lateinit var userHandle: UserHandle - private lateinit var iconRequestInfos: MutableList> - private lateinit var componentName: ComponentName - private lateinit var unlockedUsersArray: LongSparseArray - private lateinit var keyToPinnedShortcutsMap: MutableMap - private lateinit var installingPkgs: HashMap - private lateinit var allDeepShortcuts: MutableList + private var intent: Intent = Intent() + private var mUserHandle: UserHandle = UserHandle(0) + private var mIconRequestInfos: MutableList> = mutableListOf() + private var mComponentName: ComponentName = ComponentName("package", "class") + private var mUnlockedUsersArray: LongSparseArray = LongSparseArray() + private var mKeyToPinnedShortcutsMap: MutableMap = mutableMapOf() + private var mInstallingPkgs: HashMap = hashMapOf() + private var mAllDeepShortcuts: MutableList = mutableListOf() + private var mWidgetProvidersMap: MutableMap = + mutableMapOf() + private var mPendingPackages: MutableSet = mutableSetOf() private lateinit var itemProcessorUnderTest: WorkspaceItemProcessor @Before fun setup() { - userHandle = UserHandle(0) + mUserHandle = UserHandle(0) mockIconRequestInfo = mock>() - iconRequestInfos = mutableListOf(mockIconRequestInfo) mockWorkspaceInfo = mock() mockBgDataModel = mock() - componentName = ComponentName("package", "class") - unlockedUsersArray = LongSparseArray(1).apply { put(101, true) } + mComponentName = ComponentName("package", "class") + mUnlockedUsersArray = LongSparseArray(1).apply { put(101, true) } intent = Intent().apply { - component = componentName + component = mComponentName `package` = "pkg" putExtra(ShortcutKey.EXTRA_SHORTCUT_ID, "") } @@ -112,17 +130,17 @@ class WorkspaceItemProcessorTest { } mockPmHelper = mock().apply { - whenever(getAppLaunchIntent(componentName.packageName, userHandle)) + whenever(getAppLaunchIntent(mComponentName.packageName, mUserHandle)) .thenReturn(intent) } mockLauncherApps = mock().apply { - whenever(isPackageEnabled("package", userHandle)).thenReturn(true) - whenever(isActivityEnabled(componentName, userHandle)).thenReturn(true) + whenever(isPackageEnabled("package", mUserHandle)).thenReturn(true) + whenever(isActivityEnabled(mComponentName, mUserHandle)).thenReturn(true) } mockCursor = mock(LoaderCursor::class.java, RETURNS_DEEP_STUBS).apply { - user = userHandle + user = mUserHandle itemType = ITEM_TYPE_APPLICATION id = 1 restoreFlag = 1 @@ -137,15 +155,18 @@ class WorkspaceItemProcessorTest { mockUserCache = mock().apply { val userIconInfo = - mock().apply() { whenever(isPrivate).thenReturn(false) } + mock().apply { whenever(isPrivate).thenReturn(false) } whenever(getUserInfo(any())).thenReturn(userIconInfo) } mockUserManagerState = mock() mockWidgetInflater = mock() - keyToPinnedShortcutsMap = mutableMapOf() - installingPkgs = hashMapOf() - allDeepShortcuts = mutableListOf() + mKeyToPinnedShortcutsMap = mutableMapOf() + mInstallingPkgs = hashMapOf() + mAllDeepShortcuts = mutableListOf() + mWidgetProvidersMap = mutableMapOf() + mIconRequestInfos = mutableListOf() + mPendingPackages = mutableSetOf() } /** @@ -159,18 +180,18 @@ class WorkspaceItemProcessorTest { userCache: UserCache = mockUserCache, userManagerState: UserManagerState = mockUserManagerState, launcherApps: LauncherApps = mockLauncherApps, - shortcutKeyToPinnedShortcuts: Map = keyToPinnedShortcutsMap, + shortcutKeyToPinnedShortcuts: Map = mKeyToPinnedShortcutsMap, app: LauncherAppState = mockAppState, bgDataModel: BgDataModel = mockBgDataModel, - widgetProvidersMap: MutableMap = mutableMapOf(), + widgetProvidersMap: MutableMap = mWidgetProvidersMap, widgetInflater: WidgetInflater = mockWidgetInflater, pmHelper: PackageManagerHelper = mockPmHelper, - iconRequestInfos: MutableList> = mutableListOf(), + iconRequestInfos: MutableList> = mIconRequestInfos, isSdCardReady: Boolean = false, - pendingPackages: MutableSet = mutableSetOf(), - unlockedUsers: LongSparseArray = unlockedUsersArray, - installingPkgs: HashMap = hashMapOf(), - allDeepShortcuts: MutableList = mutableListOf() + pendingPackages: MutableSet = mPendingPackages, + unlockedUsers: LongSparseArray = mUnlockedUsersArray, + installingPkgs: HashMap = mInstallingPkgs, + allDeepShortcuts: MutableList = mAllDeepShortcuts ) = WorkspaceItemProcessor( c = cursor, @@ -241,8 +262,8 @@ class WorkspaceItemProcessorTest { fun `When app has empty String target package then mark deleted`() { // Given - componentName = ComponentName("", "") - intent.component = componentName + mComponentName = ComponentName("", "") + intent.component = mComponentName intent.`package` = "" // When @@ -267,7 +288,7 @@ class WorkspaceItemProcessorTest { .isEqualTo(0) // currently gets marked restored twice, although markRestore() has check for restoreFlag verify(mockCursor, times(2)).markRestored() - assertThat(iconRequestInfos).containsExactly(mockIconRequestInfo) + assertThat(mIconRequestInfos).containsExactly(mockIconRequestInfo) verify(mockCursor).checkAndAddItem(mockWorkspaceInfo, mockBgDataModel, null) } @@ -277,12 +298,12 @@ class WorkspaceItemProcessorTest { // Given mockLauncherApps = mock().apply { - whenever(isPackageEnabled("package", userHandle)).thenReturn(true) - whenever(isActivityEnabled(componentName, userHandle)).thenReturn(false) + whenever(isPackageEnabled("package", mUserHandle)).thenReturn(true) + whenever(isActivityEnabled(mComponentName, mUserHandle)).thenReturn(false) } mockPmHelper = mock().apply { - whenever(getAppLaunchIntent(componentName.packageName, userHandle)) + whenever(getAppLaunchIntent(mComponentName.packageName, mUserHandle)) .thenReturn(intent) } @@ -295,7 +316,7 @@ class WorkspaceItemProcessorTest { .that(mockCursor.restoreFlag) .isEqualTo(0) verify(mockCursor.updater().put(Favorites.INTENT, intent.toUri(0))).commit() - assertThat(iconRequestInfos).containsExactly(mockIconRequestInfo) + assertThat(mIconRequestInfos).containsExactly(mockIconRequestInfo) verify(mockCursor).checkAndAddItem(mockWorkspaceInfo, mockBgDataModel, null) } @@ -305,12 +326,13 @@ class WorkspaceItemProcessorTest { // Given mockLauncherApps = mock().apply { - whenever(isPackageEnabled("package", userHandle)).thenReturn(true) - whenever(isActivityEnabled(componentName, userHandle)).thenReturn(false) + whenever(isPackageEnabled("package", mUserHandle)).thenReturn(true) + whenever(isActivityEnabled(mComponentName, mUserHandle)).thenReturn(false) } mockPmHelper = mock().apply { - whenever(getAppLaunchIntent(componentName.packageName, userHandle)).thenReturn(null) + whenever(getAppLaunchIntent(mComponentName.packageName, mUserHandle)) + .thenReturn(null) } // When @@ -349,20 +371,20 @@ class WorkspaceItemProcessorTest { whenever(persons).thenReturn(EMPTY_PERSON_ARRAY) } val shortcutKey = ShortcutKey.fromIntent(intent, mockCursor.user) - keyToPinnedShortcutsMap[shortcutKey] = expectedShortcutInfo - iconRequestInfos = mutableListOf() + mKeyToPinnedShortcutsMap[shortcutKey] = expectedShortcutInfo + mIconRequestInfos = mutableListOf() // When itemProcessorUnderTest = - createWorkspaceItemProcessorUnderTest(allDeepShortcuts = allDeepShortcuts) + createWorkspaceItemProcessorUnderTest(allDeepShortcuts = mAllDeepShortcuts) itemProcessorUnderTest.processItem() // Then assertWithMessage("item restoreFlag should be set to 0") .that(mockCursor.restoreFlag) .isEqualTo(0) - assertThat(iconRequestInfos).isEmpty() - assertThat(allDeepShortcuts).containsExactly(expectedShortcutInfo) + assertThat(mIconRequestInfos).isEmpty() + assertThat(mAllDeepShortcuts).containsExactly(expectedShortcutInfo) verify(mockCursor).markRestored() verify(mockCursor).checkAndAddItem(any(), any(), anyOrNull()) } @@ -372,8 +394,8 @@ class WorkspaceItemProcessorTest { // Given mockCursor.itemType = ITEM_TYPE_DEEP_SHORTCUT - iconRequestInfos = mutableListOf() - keyToPinnedShortcutsMap = hashMapOf() + mIconRequestInfos = mutableListOf() + mKeyToPinnedShortcutsMap = hashMapOf() // When itemProcessorUnderTest = createWorkspaceItemProcessorUnderTest() @@ -383,7 +405,7 @@ class WorkspaceItemProcessorTest { assertWithMessage("item restoreFlag should be set to 0") .that(mockCursor.restoreFlag) .isEqualTo(0) - assertThat(iconRequestInfos).isEmpty() + assertThat(mIconRequestInfos).isEmpty() verify(mockCursor, times(0)).checkAndAddItem(any(), any(), anyOrNull()) verify(mockCursor) .markDeleted( @@ -408,25 +430,25 @@ class WorkspaceItemProcessorTest { whenever(disabledReason).thenReturn(0) whenever(persons).thenReturn(EMPTY_PERSON_ARRAY) } - iconRequestInfos = mutableListOf() + mIconRequestInfos = mutableListOf() // Make sure shortcuts map has expected key from expected package - intent.`package` = componentName.packageName + intent.`package` = mComponentName.packageName val shortcutKey = ShortcutKey.fromIntent(intent, mockCursor.user) - keyToPinnedShortcutsMap[shortcutKey] = expectedShortcutInfo + mKeyToPinnedShortcutsMap[shortcutKey] = expectedShortcutInfo // set intent package back to null to test scenario intent.`package` = null // When itemProcessorUnderTest = - createWorkspaceItemProcessorUnderTest(allDeepShortcuts = allDeepShortcuts) + createWorkspaceItemProcessorUnderTest(allDeepShortcuts = mAllDeepShortcuts) itemProcessorUnderTest.processItem() // Then assertWithMessage("item restoreFlag should be set to 0") .that(mockCursor.restoreFlag) .isEqualTo(0) - assertThat(iconRequestInfos).isEmpty() - assertThat(allDeepShortcuts).containsExactly(expectedShortcutInfo) + assertThat(mIconRequestInfos).isEmpty() + assertThat(mAllDeepShortcuts).containsExactly(expectedShortcutInfo) verify(mockCursor).markRestored() verify(mockCursor).checkAndAddItem(any(), any(), anyOrNull()) } @@ -478,4 +500,346 @@ class WorkspaceItemProcessorTest { assertThat(actualFolderInfo.options).isEqualTo(expectedFolderInfo.options) verify(mockCursor).checkAndAddItem(actualFolderInfo, mockBgDataModel, null) } + + @Test + fun `When valid TYPE_REAL App Widget then add item`() { + + // Given + val expectedProvider = "com.google.android.testApp/com.android.testApp.testAppProvider" + val expectedComponentName = + ComponentName.unflattenFromString(expectedProvider)!!.flattenToString() + val expectedRestoreStatus = FLAG_UI_NOT_READY + val expectedAppWidgetId = 0 + mockCursor.apply { + itemType = ITEM_TYPE_APPWIDGET + user = mUserHandle + restoreFlag = FLAG_UI_NOT_READY + container = CONTAINER_DESKTOP + whenever(isOnWorkspaceOrHotseat).thenCallRealMethod() + whenever(appWidgetProvider).thenReturn(expectedProvider) + whenever(appWidgetId).thenReturn(expectedAppWidgetId) + whenever(spanX).thenReturn(2) + whenever(spanY).thenReturn(1) + whenever(options).thenReturn(0) + whenever(appWidgetSource).thenReturn(20) + whenever(applyCommonProperties(any())).thenCallRealMethod() + whenever( + updater() + .put(Favorites.APPWIDGET_PROVIDER, expectedComponentName) + .put(Favorites.APPWIDGET_ID, expectedAppWidgetId) + .put(Favorites.RESTORED, expectedRestoreStatus) + .commit() + ) + .thenReturn(1) + } + val expectedWidgetInfo = + LauncherAppWidgetInfo().apply { + appWidgetId = expectedAppWidgetId + providerName = ComponentName.unflattenFromString(expectedProvider) + restoreStatus = expectedRestoreStatus + } + val expectedWidgetProviderInfo = + mock().apply { + provider = ComponentName.unflattenFromString(expectedProvider) + whenever(user).thenReturn(mUserHandle) + } + val inflationResult = + WidgetInflater.InflationResult( + type = WidgetInflater.TYPE_REAL, + widgetInfo = expectedWidgetProviderInfo + ) + mockWidgetInflater = + mock().apply { + whenever(inflateAppWidget(any())).thenReturn(inflationResult) + } + val packageUserKey = PackageUserKey("com.google.android.testApp", mUserHandle) + mInstallingPkgs[packageUserKey] = PackageInstaller.SessionInfo() + + // When + itemProcessorUnderTest = + createWorkspaceItemProcessorUnderTest(widgetProvidersMap = mWidgetProvidersMap) + itemProcessorUnderTest.processItem() + + // Then + val widgetInfoCaptor = ArgumentCaptor.forClass(LauncherAppWidgetInfo::class.java) + verify(mockCursor).checkAndAddItem(widgetInfoCaptor.capture(), eq(mockBgDataModel)) + val actualWidgetInfo = widgetInfoCaptor.value + with(actualWidgetInfo) { + assertThat(providerName).isEqualTo(expectedWidgetInfo.providerName) + assertThat(restoreStatus).isEqualTo(expectedWidgetInfo.restoreStatus) + assertThat(targetComponent).isEqualTo(expectedWidgetInfo.targetComponent) + assertThat(appWidgetId).isEqualTo(expectedWidgetInfo.appWidgetId) + } + val expectedComponentKey = + ComponentKey(expectedWidgetProviderInfo.provider, expectedWidgetProviderInfo.user) + assertThat(mWidgetProvidersMap[expectedComponentKey]).isEqualTo(expectedWidgetProviderInfo) + } + + @Test + fun `When valid Pending Widget then checkAndAddItem`() { + + // Given + mockCursor = + mock().apply { + itemType = ITEM_TYPE_APPWIDGET + id = 1 + user = UserHandle(1) + restoreFlag = FLAG_UI_NOT_READY + container = CONTAINER_DESKTOP + whenever(isOnWorkspaceOrHotseat).thenCallRealMethod() + whenever(appWidgetProvider) + .thenReturn("com.google.android.testApp/com.android.testApp.testAppProvider") + whenever(appWidgetId).thenReturn(0) + whenever(spanX).thenReturn(2) + whenever(spanY).thenReturn(1) + whenever(options).thenReturn(0) + whenever(appWidgetSource).thenReturn(20) + whenever(applyCommonProperties(any())).thenCallRealMethod() + } + val mockProviderInfo = + mock().apply { + provider = mock() + whenever(user).thenReturn(UserHandle(1)) + } + val inflationResult = + WidgetInflater.InflationResult( + type = WidgetInflater.TYPE_PENDING, + widgetInfo = mockProviderInfo + ) + mockWidgetInflater = + mock().apply { + whenever(inflateAppWidget(any())).thenReturn(inflationResult) + } + itemProcessorUnderTest = + createWorkspaceItemProcessorUnderTest(widgetProvidersMap = mWidgetProvidersMap) + + // When + itemProcessorUnderTest.processItem() + + // Then + verify(mockCursor).checkAndAddItem(any(), any()) + } + + @Test + fun `When Unrestored Pending App Widget then mark deleted`() { + + // Given + val expectedProvider = "com.google.android.testApp/com.android.testApp.testAppProvider" + mockCursor = + mock().apply { + itemType = ITEM_TYPE_APPWIDGET + id = 1 + user = UserHandle(1) + restoreFlag = FLAG_UI_NOT_READY + container = CONTAINER_DESKTOP + whenever(isOnWorkspaceOrHotseat).thenCallRealMethod() + whenever(appWidgetProvider).thenReturn(expectedProvider) + whenever(appWidgetId).thenReturn(0) + whenever(spanX).thenReturn(2) + whenever(spanY).thenReturn(1) + whenever(options).thenReturn(0) + whenever(appWidgetSource).thenReturn(20) + whenever(applyCommonProperties(any())).thenCallRealMethod() + } + mInstallingPkgs = hashMapOf() + val inflationResult = + WidgetInflater.InflationResult(type = WidgetInflater.TYPE_PENDING, widgetInfo = null) + mockWidgetInflater = + mock().apply { + whenever(inflateAppWidget(any())).thenReturn(inflationResult) + } + val expectedComponentName = ComponentName.unflattenFromString(expectedProvider) + + // When + itemProcessorUnderTest = + createWorkspaceItemProcessorUnderTest(widgetProvidersMap = mWidgetProvidersMap) + itemProcessorUnderTest.processItem() + + // Then + verify(mockCursor) + .markDeleted( + "processWidget: Unrestored Pending widget removed: id=1, appWidgetId=0, component=$expectedComponentName, restoreFlag:=4", + LauncherRestoreEventLogger.RestoreError.APP_NOT_INSTALLED + ) + } + + @Test + fun `When Pending App Widget has not started restore then update db and add item`() { + + val mockitoSession = + ExtendedMockito.mockitoSession() + .strictness(Strictness.LENIENT) + .mockStatic(WidgetSections::class.java) + .startMocking() + try { + // Given + val expectedProvider = "com.google.android.testApp/com.android.testApp.testAppProvider" + val expectedComponentName = + ComponentName.unflattenFromString(expectedProvider)!!.flattenToString() + val expectedRestoreStatus = FLAG_UI_NOT_READY or FLAG_RESTORE_STARTED + val expectedAppWidgetId = 0 + mockCursor.apply { + itemType = ITEM_TYPE_APPWIDGET + user = mUserHandle + restoreFlag = FLAG_UI_NOT_READY + container = CONTAINER_DESKTOP + whenever(isOnWorkspaceOrHotseat).thenCallRealMethod() + whenever(appWidgetProvider).thenReturn(expectedProvider) + whenever(appWidgetId).thenReturn(expectedAppWidgetId) + whenever(spanX).thenReturn(2) + whenever(spanY).thenReturn(1) + whenever(options).thenReturn(0) + whenever(appWidgetSource).thenReturn(20) + whenever(applyCommonProperties(any())).thenCallRealMethod() + whenever( + updater() + .put(Favorites.APPWIDGET_PROVIDER, expectedComponentName) + .put(Favorites.APPWIDGET_ID, expectedAppWidgetId) + .put(Favorites.RESTORED, expectedRestoreStatus) + .commit() + ) + .thenReturn(1) + } + val inflationResult = + WidgetInflater.InflationResult( + type = WidgetInflater.TYPE_PENDING, + widgetInfo = null + ) + mockWidgetInflater = + mock().apply { + whenever(inflateAppWidget(any())).thenReturn(inflationResult) + } + val packageUserKey = PackageUserKey("com.google.android.testApp", mUserHandle) + mInstallingPkgs[packageUserKey] = PackageInstaller.SessionInfo() + + // When + itemProcessorUnderTest = + createWorkspaceItemProcessorUnderTest(widgetProvidersMap = mWidgetProvidersMap) + itemProcessorUnderTest.processItem() + + // Then + val expectedWidgetInfo = + LauncherAppWidgetInfo().apply { + appWidgetId = expectedAppWidgetId + providerName = ComponentName.unflattenFromString(expectedProvider) + restoreStatus = expectedRestoreStatus + } + verify( + mockCursor + .updater() + .put(Favorites.APPWIDGET_PROVIDER, expectedProvider) + .put(Favorites.APPWIDGET_ID, expectedAppWidgetId) + .put(Favorites.RESTORED, expectedRestoreStatus) + ) + .commit() + val widgetInfoCaptor = ArgumentCaptor.forClass(LauncherAppWidgetInfo::class.java) + verify(mockCursor).checkAndAddItem(widgetInfoCaptor.capture(), eq(mockBgDataModel)) + val actualWidgetInfo = widgetInfoCaptor.value + with(actualWidgetInfo) { + assertThat(providerName).isEqualTo(expectedWidgetInfo.providerName) + assertThat(restoreStatus).isEqualTo(expectedWidgetInfo.restoreStatus) + assertThat(targetComponent).isEqualTo(expectedWidgetInfo.targetComponent) + assertThat(appWidgetId).isEqualTo(expectedWidgetInfo.appWidgetId) + } + } finally { + mockitoSession.finishMocking() + } + } + + @Test + @EnableFlags(FLAG_ENABLE_SUPPORT_FOR_ARCHIVING) + fun `When Archived Pending App Widget then checkAndAddItem`() { + val mockitoSession = + ExtendedMockito.mockitoSession().mockStatic(Utilities::class.java).startMocking() + try { + // Given + val expectedProvider = "com.google.android.testApp/com.android.testApp.testAppProvider" + val expectedComponentName = ComponentName.unflattenFromString(expectedProvider) + val expectedPackage = expectedComponentName!!.packageName + mockPmHelper = + mock().apply { + whenever(isAppArchived(expectedPackage)).thenReturn(true) + } + mockCursor = + mock().apply { + itemType = ITEM_TYPE_APPWIDGET + id = 1 + user = UserHandle(1) + restoreFlag = FLAG_UI_NOT_READY + container = CONTAINER_DESKTOP + whenever(isOnWorkspaceOrHotseat).thenCallRealMethod() + whenever(appWidgetProvider).thenReturn(expectedProvider) + whenever(appWidgetId).thenReturn(0) + whenever(spanX).thenReturn(2) + whenever(spanY).thenReturn(1) + whenever(options).thenReturn(0) + whenever(appWidgetSource).thenReturn(20) + whenever(applyCommonProperties(any())).thenCallRealMethod() + } + mInstallingPkgs = hashMapOf() + val inflationResult = + WidgetInflater.InflationResult( + type = WidgetInflater.TYPE_PENDING, + widgetInfo = null + ) + mockWidgetInflater = + mock().apply { + whenever(inflateAppWidget(any())).thenReturn(inflationResult) + } + itemProcessorUnderTest = + createWorkspaceItemProcessorUnderTest(widgetProvidersMap = mWidgetProvidersMap) + + // When + itemProcessorUnderTest.processItem() + + // Then + verify(mockCursor).checkAndAddItem(any(), any()) + } finally { + mockitoSession.finishMocking() + } + } + + @Test + fun `When widget inflation result is TYPE_DELETE then mark deleted`() { + // Given + val expectedProvider = "com.google.android.testApp/com.android.testApp.testAppProvider" + val expectedComponentName = ComponentName.unflattenFromString(expectedProvider) + val expectedPackage = expectedComponentName!!.packageName + mockPmHelper = + mock().apply { + whenever(isAppArchived(expectedPackage)).thenReturn(true) + } + mockCursor = + mock().apply { + itemType = ITEM_TYPE_APPWIDGET + id = 1 + user = UserHandle(1) + container = CONTAINER_DESKTOP + whenever(spanX).thenReturn(2) + whenever(spanY).thenReturn(1) + whenever(appWidgetProvider).thenReturn(expectedProvider) + whenever(isOnWorkspaceOrHotseat).thenCallRealMethod() + whenever(applyCommonProperties(any())).thenCallRealMethod() + } + mInstallingPkgs = hashMapOf() + val inflationResult = + WidgetInflater.InflationResult( + type = WidgetInflater.TYPE_DELETE, + widgetInfo = null, + reason = "test_delete_reason", + restoreErrorType = MISSING_WIDGET_PROVIDER + ) + mockWidgetInflater = + mock().apply { + whenever(inflateAppWidget(any())).thenReturn(inflationResult) + } + itemProcessorUnderTest = + createWorkspaceItemProcessorUnderTest(widgetProvidersMap = mWidgetProvidersMap) + + // When + itemProcessorUnderTest.processItem() + + // Then + verify(mockCursor).markDeleted(inflationResult.reason, inflationResult.restoreErrorType) + } } diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java index 9c289d6f8c..99e15ba8aa 100644 --- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java @@ -15,10 +15,7 @@ */ package com.android.launcher3.ui; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT; -import static android.view.Display.DEFAULT_DISPLAY; import static androidx.test.InstrumentationRegistry.getInstrumentation; @@ -29,7 +26,6 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import android.app.ActivityOptions; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -575,21 +571,6 @@ public abstract class AbstractLauncherUiTest { true /* newTask */); } - /** alternative of startAppFast where app is guaranteed to launch in fullscreen mode */ - public static void startAppFastInFullscreen(String packageName) { - ActivityOptions options = ActivityOptions.makeBasic(); - options.setLaunchWindowingMode(WINDOWING_MODE_FULLSCREEN); - options.setLaunchDisplayId(DEFAULT_DISPLAY); - options.setLaunchActivityType(ACTIVITY_TYPE_STANDARD); - - startIntent( - getInstrumentation().getContext().getPackageManager().getLaunchIntentForPackage( - packageName), - By.pkg(packageName).depth(0), - true /* newTask */, - options); - } - public static void startTestActivity(String activityName, String activityLabel) { final String packageName = getAppPackageName(); final Intent intent = getInstrumentation().getContext().getPackageManager(). @@ -625,8 +606,7 @@ public abstract class AbstractLauncherUiTest { false /* newTask */); } - private static void startIntent( - Intent intent, BySelector selector, boolean newTask, ActivityOptions options) { + private static void startIntent(Intent intent, BySelector selector, boolean newTask) { intent.addCategory(Intent.CATEGORY_LAUNCHER); if (newTask) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); @@ -634,12 +614,7 @@ public abstract class AbstractLauncherUiTest { intent.addFlags( Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT); } - - if (options != null) { - getInstrumentation().getTargetContext().startActivity(intent, options.toBundle()); - } else { - getInstrumentation().getTargetContext().startActivity(intent); - } + getInstrumentation().getTargetContext().startActivity(intent); assertTrue("App didn't start: " + selector, TestHelpers.wait(Until.hasObject(selector), DEFAULT_UI_TIMEOUT)); @@ -650,10 +625,6 @@ public abstract class AbstractLauncherUiTest { DEFAULT_ACTIVITY_TIMEOUT, launcherInstrumentation); } - private static void startIntent(Intent intent, BySelector selector, boolean newTask) { - startIntent(intent, selector, newTask, null); - } - public static ActivityInfo resolveSystemAppInfo(String category) { return getInstrumentation().getContext().getPackageManager().resolveActivity( new Intent(Intent.ACTION_MAIN).addCategory(category), diff --git a/tests/src/com/android/launcher3/ui/workspace/TaplWorkspaceTest.java b/tests/src/com/android/launcher3/ui/workspace/TaplWorkspaceTest.java index 9afde0db28..490cff20b4 100644 --- a/tests/src/com/android/launcher3/ui/workspace/TaplWorkspaceTest.java +++ b/tests/src/com/android/launcher3/ui/workspace/TaplWorkspaceTest.java @@ -29,6 +29,7 @@ import com.android.launcher3.tapl.Workspace; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.util.LauncherLayoutBuilder; import com.android.launcher3.util.TestUtil; +import com.android.launcher3.util.rule.ScreenRecordRule.ScreenRecord; import org.junit.After; import org.junit.Before; @@ -67,6 +68,7 @@ public class TaplWorkspaceTest extends AbstractLauncherUiTest { * move between workspaces. After, make sure we can launch an app from the Workspace. * @throws Exception if we can't set the defaults icons that will appear at the beginning. */ + @ScreenRecord // b/331261431 @Test public void testWorkspace() throws Exception { // Set workspace that includes the chrome Activity app icon on the hotseat.