From 612230dbd31d430fb975ccf7be3e566aac355f9b Mon Sep 17 00:00:00 2001 From: Thales Lima Date: Thu, 31 Mar 2022 18:04:37 +0100 Subject: [PATCH 1/8] Make hotseat RTL aware Fix: 217567306 Test: manual, turning on "Force RTL" Change-Id: I1369cfc6e9afd328a1a6945469064d4cd54f31ea --- src/com/android/launcher3/DeviceProfile.java | 29 +++++++++++--------- src/com/android/launcher3/Hotseat.java | 3 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 500244cdda..5685d3beb3 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -1013,29 +1013,32 @@ public class DeviceProfile { mInsets.right + hotseatBarSidePaddingStartPx, paddingBottom); } } else if (isTaskbarPresent) { + boolean isRtl = Utilities.isRtl(context.getResources()); int hotseatHeight = workspacePadding.bottom; int taskbarOffset = getTaskbarOffsetY(); - int additionalLeftSpace = 0; - - // Center the QSB with hotseat and push icons to the right - if (isQsbInline) { - additionalLeftSpace = qsbWidth + hotseatBorderSpace; - } + // Push icons to the side + int additionalQsbSpace = isQsbInline ? qsbWidth + hotseatBorderSpace : 0; + // Center the QSB vertically with hotseat int hotseatTopPadding = hotseatHeight - taskbarOffset - hotseatCellHeightPx; int endOffset = ApiWrapper.getHotseatEndOffset(context); int requiredWidth = iconSizePx * numShownHotseatIcons + hotseatBorderSpace * (numShownHotseatIcons - 1) - + additionalLeftSpace; + + additionalQsbSpace; - int hotseatSize = Math.min(requiredWidth, availableWidthPx - endOffset); - int sideSpacing = (availableWidthPx - hotseatSize) / 2; - mHotseatPadding.set(sideSpacing + additionalLeftSpace, hotseatTopPadding, sideSpacing, - taskbarOffset); + int hotseatWidth = Math.min(requiredWidth, availableWidthPx - endOffset); + int sideSpacing = (availableWidthPx - hotseatWidth) / 2; + mHotseatPadding.set(sideSpacing, hotseatTopPadding, sideSpacing, taskbarOffset); + + if (isRtl) { + mHotseatPadding.right += additionalQsbSpace; + } else { + mHotseatPadding.left += additionalQsbSpace; + } if (endOffset > sideSpacing) { - int diff = Utilities.isRtl(context.getResources()) + int diff = isRtl ? sideSpacing - endOffset : endOffset - sideSpacing; mHotseatPadding.left -= diff; @@ -1085,7 +1088,7 @@ public class DeviceProfile { */ public int getTaskbarOffsetY() { if (isQsbInline) { - return getQsbOffsetY() + (Math.abs(hotseatQsbHeight - iconSizePx) / 2); + return getQsbOffsetY() - (Math.abs(hotseatQsbHeight - hotseatCellHeightPx) / 2); } else { return (getQsbOffsetY() - taskbarSize) / 2; } diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 9c749aa790..66a4da8ce2 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -195,7 +195,8 @@ public class Hotseat extends CellLayout implements Insettable { int left; if (mActivity.getDeviceProfile().isQsbInline) { int qsbSpace = mActivity.getDeviceProfile().hotseatBorderSpace; - left = l + getPaddingLeft() - qsbWidth - qsbSpace; + left = Utilities.isRtl(getResources()) ? r - getPaddingRight() + qsbSpace + : l + getPaddingLeft() - qsbWidth - qsbSpace; } else { left = (r - l - qsbWidth) / 2; } From 7bb79ae8e2d520c4767d26b1ee0f868744f730ed Mon Sep 17 00:00:00 2001 From: Thales Lima Date: Mon, 4 Apr 2022 14:20:00 +0100 Subject: [PATCH 2/8] Tune menu size Fix: 223351193 Bug: 214586519 Test: check sizes with HSV and Window Change-Id: I2fa8d03eb80e952ebc238e6f4db5563f774128cd --- quickstep/res/values/dimens.xml | 2 +- res/values/dimens.xml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 2b71768b83..3f08cf3c3a 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -26,7 +26,7 @@ 22dp 4dp 2dp - 234dp + 216dp 8dp 48dp 16dp diff --git a/res/values/dimens.xml b/res/values/dimens.xml index e5e2217e26..52ff3f00f3 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -291,15 +291,15 @@ 26dp 2dp - + 52dp - 24dp + 20dp 16dp 56dp 48dp - - 12dp + + 14dp 8dp @@ -377,7 +377,7 @@ 72dp 16dp 44dp - 200dp + 216dp From fefafe5aa9980069b38c549051b3da7ab64194d7 Mon Sep 17 00:00:00 2001 From: Shikha Malhotra Date: Thu, 14 Apr 2022 15:35:33 +0000 Subject: [PATCH 3/8] Putting back generics for Workspace This got over-written in merging files Bug: b/218186705 Test: Manually tested Launcher3 works. Change-Id: I55287e110d067a338204924337091ead044b34ec --- .../launcher3/accessibility/LauncherAccessibilityDelegate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index 462daf5f70..12eb837a26 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -313,7 +313,7 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate workspace = mContext.getWorkspace(); IntArray workspaceScreens = workspace.getScreenOrder(); int screenId; From da78e7047e660221dd0c825d75a176a454c8cc26 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 17 Apr 2022 08:56:19 +0000 Subject: [PATCH 4/8] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I9ff5d01375187fe18ba873d32b73590a73844f50 --- res/values-af/strings.xml | 8 ++++++++ res/values-am/strings.xml | 8 ++++++++ res/values-ar/strings.xml | 8 ++++++++ res/values-as/strings.xml | 8 ++++++++ res/values-az/strings.xml | 8 ++++++++ res/values-b+sr+Latn/strings.xml | 8 ++++++++ res/values-be/strings.xml | 8 ++++++++ res/values-bg/strings.xml | 8 ++++++++ res/values-bn/strings.xml | 8 ++++++++ res/values-bs/strings.xml | 8 ++++++++ res/values-ca/strings.xml | 8 ++++++++ res/values-cs/strings.xml | 8 ++++++++ res/values-da/strings.xml | 8 ++++++++ res/values-de/strings.xml | 8 ++++++++ res/values-el/strings.xml | 8 ++++++++ res/values-en-rAU/strings.xml | 8 ++++++++ res/values-en-rCA/strings.xml | 8 ++++++++ res/values-en-rGB/strings.xml | 8 ++++++++ res/values-en-rIN/strings.xml | 8 ++++++++ res/values-en-rXC/strings.xml | 8 ++++++++ res/values-es-rUS/strings.xml | 8 ++++++++ res/values-es/strings.xml | 8 ++++++++ res/values-et/strings.xml | 8 ++++++++ res/values-eu/strings.xml | 8 ++++++++ res/values-fa/strings.xml | 8 ++++++++ res/values-fi/strings.xml | 8 ++++++++ res/values-fr-rCA/strings.xml | 8 ++++++++ res/values-fr/strings.xml | 8 ++++++++ res/values-gl/strings.xml | 8 ++++++++ res/values-gu/strings.xml | 8 ++++++++ res/values-hi/strings.xml | 8 ++++++++ res/values-hr/strings.xml | 8 ++++++++ res/values-hu/strings.xml | 8 ++++++++ res/values-hy/strings.xml | 8 ++++++++ res/values-in/strings.xml | 8 ++++++++ res/values-is/strings.xml | 8 ++++++++ res/values-it/strings.xml | 8 ++++++++ res/values-iw/strings.xml | 8 ++++++++ res/values-ja/strings.xml | 8 ++++++++ res/values-ka/strings.xml | 8 ++++++++ res/values-kk/strings.xml | 10 +++++++++- res/values-km/strings.xml | 8 ++++++++ res/values-kn/strings.xml | 10 +++++++++- res/values-ko/strings.xml | 8 ++++++++ res/values-ky/strings.xml | 8 ++++++++ res/values-lo/strings.xml | 8 ++++++++ res/values-lt/strings.xml | 8 ++++++++ res/values-lv/strings.xml | 8 ++++++++ res/values-mk/strings.xml | 8 ++++++++ res/values-ml/strings.xml | 8 ++++++++ res/values-mn/strings.xml | 8 ++++++++ res/values-mr/strings.xml | 10 +++++++++- res/values-ms/strings.xml | 8 ++++++++ res/values-my/strings.xml | 8 ++++++++ res/values-nb/strings.xml | 8 ++++++++ res/values-ne/strings.xml | 8 ++++++++ res/values-nl/strings.xml | 8 ++++++++ res/values-or/strings.xml | 8 ++++++++ res/values-pa/strings.xml | 8 ++++++++ res/values-pl/strings.xml | 8 ++++++++ res/values-pt-rPT/strings.xml | 8 ++++++++ res/values-pt/strings.xml | 8 ++++++++ res/values-ro/strings.xml | 8 ++++++++ res/values-ru/strings.xml | 8 ++++++++ res/values-si/strings.xml | 8 ++++++++ res/values-sk/strings.xml | 8 ++++++++ res/values-sl/strings.xml | 8 ++++++++ res/values-sq/strings.xml | 8 ++++++++ res/values-sr/strings.xml | 8 ++++++++ res/values-sv/strings.xml | 8 ++++++++ res/values-sw/strings.xml | 10 +++++++++- res/values-ta/strings.xml | 8 ++++++++ res/values-te/strings.xml | 8 ++++++++ res/values-th/strings.xml | 8 ++++++++ res/values-tl/strings.xml | 8 ++++++++ res/values-tr/strings.xml | 8 ++++++++ res/values-uk/strings.xml | 8 ++++++++ res/values-ur/strings.xml | 8 ++++++++ res/values-uz/strings.xml | 8 ++++++++ res/values-vi/strings.xml | 8 ++++++++ res/values-zh-rCN/strings.xml | 8 ++++++++ res/values-zh-rHK/strings.xml | 8 ++++++++ res/values-zh-rTW/strings.xml | 8 ++++++++ res/values-zu/strings.xml | 8 ++++++++ 84 files changed, 676 insertions(+), 4 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 4c63af23ee..471bcc5453 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -124,6 +124,14 @@ "%1$s installeer tans; %2$s voltooi" "%1$s laai tans af, %2$s voltooid" "%1$s wag tans om te installeer" + + + + + + + + "Legstukkelys" "Legstukkelys is toegemaak" "Voeg by tuisskerm" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index e59ad1bfb2..73bbdd1715 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -124,6 +124,14 @@ "%1$s በመጫን ላይ፣ %2$s ተጠናቅቋል" "%1$s በመውረድ ላይ፣ %2$s ተጠናቋል" "%1$s ለመጫን በመጠበቅ ላይ" + + + + + + + + "የመግብሮች ዝርዝር" "የመግብሮች ዝርዝር ተዘግቷል" "ወደ መነሻ ማያ ገጽ አክል" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 681fa2f84e..ae190c5db9 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -124,6 +124,14 @@ "جارٍ تثبيت %1$s، مستوى التقدم: %2$s" "جارٍ تنزيل %1$s، اكتمل %2$s" "%1$s في انتظار التثبيت" + + + + + + + + "قائمة الأدوات" "تم إغلاق قائمة الأدوات." "إضافة تطبيق للشاشة الرئيسية" diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 4c21093e22..cb1581fda2 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -124,6 +124,14 @@ "%1$s ইনষ্টল কৰি থকা হৈছে, %2$s সম্পূৰ্ণ হৈছে" "%1$s ডাউনল’ড কৰি থকা হৈছে, %2$s সম্পূৰ্ণ হ’ল" "%1$s ইনষ্টল হোৱালৈ অপেক্ষা কৰি থকা হৈছে" + + + + + + + + "ৱিজেটৰ তালিকা" "ৱিজেটৰ তালিকা বন্ধ কৰা হ’ল" "গৃহ স্ক্ৰীনত যোগ কৰক" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index ec644a1b18..aa19e28d65 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -124,6 +124,14 @@ "%1$s quraşdırır, %2$s tamamlanıb" "%1$s endirilir, %2$s tamamlandı" "%1$s yüklənmək üçün gözləyir" + + + + + + + + "Vidcet siyahısı" "Vidcet siyahısı bağlandı" "Əsas ekrana əlavə edin" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 38c266773d..49b34dd8f7 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -124,6 +124,14 @@ "%1$s se instalira, %2$s gotovo" "%1$s se preuzima, završeno je %2$s" "%1$s čeka na instaliranje" + + + + + + + + "Lista vidžeta" "Lista vidžeta je zatvorena" "Dodajte na početni ekran" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index cc0c40d6bf..43e5e90c64 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -124,6 +124,14 @@ "Усталёўваецца праграма \"%1$s\", завершана %2$s" "Ідзе спампоўка %1$s, %2$s завершана" "%1$s чакае ўсталёўкі" + + + + + + + + "Спіс віджэтаў" "Спіс віджэтаў закрыты" "Дадаць на галоўны экран" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 5601c266ff..9c657086bb 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -124,6 +124,14 @@ "%1$s се инсталира, %2$s завършено" "%1$s се изтегля. Завършено: %2$s" "%1$s изчаква инсталиране" + + + + + + + + "Списък с приспособления" "Списъкът с приспособления е затворен" "Добавяне към началния екран" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 8b4cd721d1..38be6e2dcd 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -124,6 +124,14 @@ "%1$s ইনস্টল করা হচ্ছে, %2$s সম্পূর্ণ হয়েছে" "%1$s ডাউনলোড হচ্ছে %2$s সম্পন্ন হয়েছে" "%1$s ইনস্টলের অপেক্ষায় রয়েছে" + + + + + + + + "উইজেটের তালিকা" "উইজেটের তালিকা বন্ধ করা হয়েছে" "হোম স্ক্রিনে যোগ করুন" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index cf3163b827..fbf9fce9c9 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -124,6 +124,14 @@ "Instaliranje aplikacije %1$s, završeno je %2$s" "%1$s se preuzima, završeno %2$s" "%1$s čeka da se instalira" + + + + + + + + "Spisak vidžeta" "Spisak vidžeta je zatvoren" "Dodavanje na početni ekran" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 1f3315a6e1..9eba6b8d32 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -124,6 +124,14 @@ "S\'està instal·lant %1$s; s\'ha completat un %2$s" "S\'està baixant %1$s, %2$s completat" "S\'està esperant per instal·lar %1$s" + + + + + + + + "Llista de widgets" "S\'ha tancat la llista de widgets" "Afegeix a la pantalla d\'inici" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 225d7ee55d..82031a69b5 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -124,6 +124,14 @@ "Instalace aplikace %1$s, dokončeno %2$s" "Stahování aplikace %1$s (dokončeno %2$s)" "Instalace aplikace %1$s čeká na zahájení" + + + + + + + + "Seznam widgetů" "Seznam widgetů zavřen" "Přidat na plochu" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 094d84e8c6..284f2d9168 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -124,6 +124,14 @@ "%1$s installeres. %2$s fuldført" "%1$s downloades. %2$s er gennemført" "%1$s venter på at installere" + + + + + + + + "Liste med widgets" "Listen med widgets blev lukket" "Føj til startskærm" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 4b92155b32..0dc06cd2bf 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -124,6 +124,14 @@ "%1$s wird installiert, %2$s abgeschlossen" "%1$s wird heruntergeladen, %2$s abgeschlossen" "Warten auf Installation von %1$s" + + + + + + + + "Widgetliste" "Widgetliste geschlossen" "Zum Startbildschirm hinzufügen" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 667d5112b3..2b6784815f 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -124,6 +124,14 @@ "Έχει ολοκληρωθεί το %2$s της εγκατάστασης της εφαρμογής %1$s" "Λήψη %1$s, ολοκληρώθηκε %2$s" "%1$s σε αναμονή για εγκατάσταση" + + + + + + + + "Λίστα γραφικών στοιχείων" "Η λίστα γραφικών στοιχείων έκλεισε" "Προσθήκη στην αρχική οθόνη" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 455aea6680..4853509b44 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -124,6 +124,14 @@ "%1$s installing, %2$s complete" "%1$s downloading, %2$s complete" "%1$s waiting to install" + + + + + + + + "Widgets list" "Widgets list closed" "Add to home screen" diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index 455aea6680..4853509b44 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -124,6 +124,14 @@ "%1$s installing, %2$s complete" "%1$s downloading, %2$s complete" "%1$s waiting to install" + + + + + + + + "Widgets list" "Widgets list closed" "Add to home screen" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 455aea6680..4853509b44 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -124,6 +124,14 @@ "%1$s installing, %2$s complete" "%1$s downloading, %2$s complete" "%1$s waiting to install" + + + + + + + + "Widgets list" "Widgets list closed" "Add to home screen" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 455aea6680..4853509b44 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -124,6 +124,14 @@ "%1$s installing, %2$s complete" "%1$s downloading, %2$s complete" "%1$s waiting to install" + + + + + + + + "Widgets list" "Widgets list closed" "Add to home screen" diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index 4a4dc49c76..e5eeb3b1df 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -124,6 +124,14 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ installing, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ complete‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ downloading, ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ complete‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ waiting to install‎‏‎‎‏‎" + + + + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎Widgets list‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎Widgets list closed‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎Add to home screen‎‏‎‎‏‎" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index fad669065a..b67397b769 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -124,6 +124,14 @@ "Se está instalando %1$s; %2$s completado" "Se completó el %2$s de la descarga de %1$s" "Instalación de %1$s en espera" + + + + + + + + "Lista de widgets" "Se cerró la lista de widgets" "Agregar a pantalla principal" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index ef7271e51a..8572b6716e 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -124,6 +124,14 @@ "Instalando %1$s, %2$s completado" "Descargando %1$s (%2$s completado)" "Esperando para instalar %1$s" + + + + + + + + "Lista de widgets" "Lista de widgets cerrada" "Añadir a pantalla de inicio" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 8f6a8d5acf..ee31cefe27 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -124,6 +124,14 @@ "Üksust %1$s installitakse, %2$s on valmis" "Rakenduse %1$s allalaadimine, %2$s on valmis" "%1$s on installimise ootel" + + + + + + + + "Vidinate loend" "Vidinate loend on suletud" "Lisa avakuvale" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 995f8dd6a2..2798733b58 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -124,6 +124,14 @@ "%1$s instalatzen, %2$s osatuta" "%1$s deskargatzen, %2$s osatuta" "%1$s instalatzeko zain" + + + + + + + + "Widget-zerrenda" "Itxi da widget-zerrenda" "Gehitu hasierako pantailan" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index ee9751833e..a56981667a 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -124,6 +124,14 @@ "%1$s درحال نصب است، %2$s تکمیل شده است" "درحال بارگیری %1$s، %2$s کامل شد" "%1$s درانتظار نصب" + + + + + + + + "فهرست ابزارک‌ها" "فهرست ابزارک‌ها بسته شد" "افزودن به صفحه اصلی" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 21006e611d..707dc9a15d 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -124,6 +124,14 @@ "%1$s asennetaan, %2$s valmis" "%1$s latautuu, valmiina %2$s" "%1$s odottaa asennusta" + + + + + + + + "Widget-luettelo" "Widget-luettelo suljettu" "Lisää aloitusnäytölle" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 0c023a3f8d..ff7faad812 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -124,6 +124,14 @@ "Installation de l\'application %1$s en cours, %2$s terminée" "Téléchargement de %1$s : %2$s" "%1$s en attente d\'installation" + + + + + + + + "Liste des widgets" "Liste des widgets fermée" "Ajouter à l\'écran d\'accueil" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 5199c89782..ce4add74cd 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -124,6 +124,14 @@ "Installation de %1$s… (%2$s terminés)" "%1$s en cours de téléchargement, %2$s effectué(s)" "%1$s en attente d\'installation" + + + + + + + + "Liste des widgets" "La liste des widgets est fermée" "Ajouter à l\'écran d\'accueil" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index eee0032423..6e42995c79 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -124,6 +124,14 @@ "Instalando %1$s, %2$s completado" "Descargando %1$s (%2$s completado)" "Esperando para instalar %1$s" + + + + + + + + "Lista de widgets" "Pechouse a lista de widgets" "Engadir á pantalla de inicio" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 39f61ba217..fabe73c868 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -124,6 +124,14 @@ "%1$s ઇન્સ્ટૉલ કરી રહ્યાં છીએ, %2$s પૂર્ણ થયું" "%1$s ડાઉનલોડ કરી રહ્યાં છે, %2$s પૂર્ણ" "%1$s, ઇન્સ્ટૉલ થવાની રાહ જોઈ રહ્યું છે" + + + + + + + + "વિજેટની સૂચિ" "વિજેટની સૂચિ બંધ કરવામાં આવી છે" "હોમ સ્ક્રીનમાં ઉમેરો" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 6125205f47..bdb16cc1d5 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -124,6 +124,14 @@ "%1$s इंस्टॉल किया जा रहा है, %2$s पूरा हो गया" "%1$s डाउनलोड हो रहा है, %2$s पूरी हुई" "%1$s के इंस्टॉल होने की प्रतीक्षा की जा रही है" + + + + + + + + "विजेट की सूची" "विजेट की सूची बंद हो गई है" "होम स्क्रीन पर जोड़ें" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index f12af718a3..cc7f067397 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -124,6 +124,14 @@ "Instaliranje aplikacije %1$s, %2$s dovršeno" "Preuzimanje aplikacije %1$s, dovršeno %2$s" "Čekanje na instaliranje aplikacije %1$s" + + + + + + + + "Popis widgeta" "Popis widgeta zatvoren" "Dodajte na početni zaslon" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index d48792abcc..9cd705cfc2 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -124,6 +124,14 @@ "Folyamatban van a(z) %1$s telepítése, %2$s kész" "A(z) %1$s letöltése, %2$s kész" "A(z) %1$s telepítésre vár" + + + + + + + + "Widgetlista" "Widgetlista bezárva" "Hozzáadás a kezdőképernyőhöz" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 1c90768f0d..e8124a6da2 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -124,6 +124,14 @@ "%1$s հավելվածը տեղադրվում է, կատարված է %2$s-ը" "%1$s–ի ներբեռնում (%2$s)" "%1$s-ի տեղադրման սպասում" + + + + + + + + "Վիջեթների ցանկ" "Վիջեթների ցանկը փակվեց" "Ավելացնել հիմնական էկրանին" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index ee64f2c4c9..07ebae9e59 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -124,6 +124,14 @@ "%1$s sedang diinstal, %2$s selesai" "%1$s sedang didownload, %2$s selesai" "%1$s menunggu dipasang" + + + + + + + + "Daftar widget" "Daftar widget ditutup" "Tambahkan ke layar utama" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 7f7b560074..3645bb9028 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -124,6 +124,14 @@ "Setur upp %1$s, %2$s lokið" "%1$s í niðurhali, %2$s lokið" "%1$s bíður uppsetningar" + + + + + + + + "Græjulisti" "Græjulista lokað" "Bæta á heimaskjá" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 55bc9acd67..c56ce0b89f 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -124,6 +124,14 @@ "Installazione di %1$s, completamento: %2$s" "Download di %1$s in corso, %2$s completato" "%1$s in attesa di installazione" + + + + + + + + "Elenco di widget" "Elenco di widget chiuso" "Aggiungi alla schermata Home" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index e374ced35e..9f216968cc 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -124,6 +124,14 @@ "%1$s בתהליך התקנה, %2$s הושלמו" "הורדת %1$s מתבצעת, %2$s הושלמו" "מחכה להתקנה של %1$s" + + + + + + + + "רשימת ווידג\'טים" "רשימת הווידג\'טים נסגרה" "הוספה למסך הבית" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 83c7f39fc9..9ac4b94abf 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -124,6 +124,14 @@ "%1$s をインストールしています: %2$s 完了" "%1$sをダウンロード中、%2$s完了" "%1$sのインストール待ち" + + + + + + + + "ウィジェット リスト" "ウィジェット リストを閉じました" "ホーム画面に追加" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 9208448cce..6f66155405 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -124,6 +124,14 @@ "ინსტალირდება %1$s, %2$s დასრულებულია" "მიმდინარეობს %1$s-ის ჩამოტვირთვა, %2$s დასრულდა" "%1$s ელოდება ინსტალაციას" + + + + + + + + "ვიჯეტების სია" "ვიჯეტების სია დაიხურა" "მთავარ ეკრანზე დამატება" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 1383216045..8b738e4117 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -51,7 +51,7 @@ "Жеке виджеттер" "Жұмыс виджеттері" "Әңгімелер" - "Саусақпен түртсеңіз болғаны – пайдалы ақпарат көз алдыңызда" + "Саусақпен түртсеңіз болғаны – пайдалы ақпарат көз алдыңызда" "Қолданбаларды ашпай-ақ ақпарат алу үшін негізгі экранға тиісті виджеттерді қосыңыз." "Виджет параметрлерін өзгерту үшін түртіңіз." "Түсінікті" @@ -124,6 +124,14 @@ "%1$s орнатылуда, %2$s аяқталды" "%1$s жүктелуде, %2$s аяқталды" "%1$s орнату күтілуде" + + + + + + + + "Виджеттер тізімі" "Видджеттер тізімі жабылды" "Негізгі экранға қосу" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 2404995e01..b0a3234d23 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -124,6 +124,14 @@ "កំពុង​ដំឡើង %1$s, បាន​បញ្ចប់ %2$s" "កំពុងដោនឡូត %1$s បានបញ្ចប់ %2$s" "%1$s កំពុងរង់ចាំការដំឡើង" + + + + + + + + "បញ្ជីធាតុ​ក្រាហ្វិក" "បាន​បិទ​បញ្ជីធាតុ​ក្រាហ្វិក" "បញ្ចូល​ទៅក្នុង​អេក្រង់​ដើម" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 1087e8ae1c..7d9f8d9f99 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -50,7 +50,7 @@ "ಯಾವುದೇ ವಿಜೆಟ್‌ಗಳು ಅಥವಾ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ" "ವೈಯಕ್ತಿಕ" "ಕೆಲಸ" - "ಸಂವಾದಗಳು" + "ಸಂಭಾಷಣೆಗಳು" "ನಿಮ್ಮ ಬೆರಳ ತುದಿಯಲ್ಲಿ ಉಪಯುಕ್ತ ಮಾಹಿತಿ" "ಆ್ಯಪ್‌ಗಳನ್ನು ತೆರೆಯದೆಯೇ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲು, ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ನೀವು ವಿಜೆಟ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದು" "ವಿಜೆಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ" @@ -124,6 +124,14 @@ "%1$s ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತಿದೆ, %2$s ಪೂರ್ಣಗೊಂಡಿದೆ" "%1$s ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ, %2$s ಪೂರ್ಣಗೊಂಡಿದೆ" "%1$s ಸ್ಥಾಪಿಸಲು ಕಾಯಲಾಗುತ್ತಿದೆ" + + + + + + + + "ವಿಜೆಟ್ ಪಟ್ಟಿ" "ವಿಜೆಟ್ ಪಟ್ಟಿಯನ್ನು ಮುಚ್ಚಲಾಗಿದೆ" "ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ಗೆ ಸೇರಿಸಿ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 65a58f4bd0..22a9b3c049 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -124,6 +124,14 @@ "%1$s 설치 중, %2$s 완료" "%1$s 다운로드 중, %2$s 완료" "%1$s 설치 대기 중" + + + + + + + + "위젯 목록" "위젯 목록 닫힘" "홈 화면에 추가" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 0286ec3198..c235b3dfab 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -124,6 +124,14 @@ "%1$s орнотулууда, %2$s аткарылды" "%1$s жүктөлүп алынууда, %2$s аяктады" "%1$s орнотулушу күтүлүүдө" + + + + + + + + "Виджеттердин тизмеси" "Виджеттердин тизмеси жабык" "Башкы экранга кошуу" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 1245f5c3c1..66ff43d6b4 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -124,6 +124,14 @@ "ກຳລັງຕິດຕັ້ງ %1$s, %2$s ສຳເລັດແລ້ວ" "%1$s ກຳ​ລັງ​ດາວ​ໂຫຼດ, %2$s ສຳ​ເລັດ" "%1$s ກຳ​ລັງ​ລໍ​ຖ້າ​ຕິດ​ຕັ້ງ" + + + + + + + + "ລາຍຊື່ວິດເຈັດ" "ປິດລາຍຊື່ວິດເຈັດແລ້ວ" "ເພີ່ມໃສ່ໂຮມສະກຣີນ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 4e46c7ba25..66933ac9bd 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -124,6 +124,14 @@ "Įdiegiama: „%1$s“; baigta: %2$s" "Atsisiunčiama programa „%1$s“, %2$s baigta" "Laukiama, kol bus įdiegta programa „%1$s“" + + + + + + + + "Valdiklių sąrašas" "Valdiklių sąrašas uždarytas" "Pridėti prie pagrind. ekrano" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 0675912b83..3eed085b68 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -124,6 +124,14 @@ "Notiek lietotnes “%1$s” instalēšana. Norise: %2$s." "Lietotnes %1$s lejupielāde (%2$s pabeigti)" "Notiek %1$s instalēšana" + + + + + + + + "Logrīku saraksts" "Logrīku saraksts aizvērts" "Pievienot sākuma ekrānam" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 72a46423a2..a45391f542 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -124,6 +124,14 @@ "%1$s се инсталира, %2$s завршено" "Се презема %1$s, %2$s завршено" "%1$s чека да се инсталира" + + + + + + + + "Список со виџети" "Списокот со виџети е затворен" "Додај на почетниот екран" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 0c6f24b0ee..5a1ee031ea 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -124,6 +124,14 @@ "%1$s ഇൻസ്‌റ്റാൾ ചെയ്യുന്നു, %2$s പൂർത്തിയായി" "%1$s ഡൗൺലോഡ് ചെയ്യുന്നു, %2$s പൂർത്തിയായി" "ഇൻസ്റ്റാൾ ചെയ്യാൻ %1$s കാക്കുന്നു" + + + + + + + + "വിജറ്റുകളുടെ ലിസ്‌റ്റ്" "വിജറ്റുകളുടെ ലിസ്‌റ്റ് അവസാനിപ്പിച്ചു" "ഹോം സ്‌ക്രീനിലേക്ക് ചേർക്കുക" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 303e3cc21f..b222ba982a 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -124,6 +124,14 @@ "%1$s-г суулгаж байна. %2$s дууссан" "%1$s-г татаж байна, %2$s татсан" "%1$s нь суулгахыг хүлээж байна" + + + + + + + + "Жижиг хэрэгслийн жагсаалт" "Жижиг хэрэгслийн жагсаалтыг хаасан" "Үндсэн нүүрэнд нэмэх" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 4498fecfed..0f0307470a 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -124,6 +124,14 @@ "%1$s इंस्टॉल करत आहे, %2$s पूर्ण झाले" "%1$s डाउनलोड होत आहे , %2$s पूर्ण झाले" "%1$s इंस्टॉल करण्याची प्रतिक्षा करत आहे" + + + + + + + + "विजेट सूची" "विजेट सूची बंद केली" "होम स्क्रीनवर जोडा" @@ -156,7 +164,7 @@ "वैयक्तिक" "कार्य" "कार्य प्रोफाइल" - "कामाशी संबंधित ॲप्स ही बॅज केलेली असून तुमच्या IT ॲडमिनला दृश्यमान आहेत" + "कामाशी संबंधित ॲप्स ही बॅज केलेली असून तुमच्या आयटी ॲडमिनला दृश्यमान आहेत" "समजले" "कार्य ॲप्स थांबवली आहेत" "तुमची कार्य ॲप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अ‍ॅक्सेस करू शकत नाहीत" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 3c75a6611c..f24038c101 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -124,6 +124,14 @@ "%1$s dipasang, %2$s selesai" "%1$s memuat turun, %2$s selesai" "%1$s menunggu untuk dipasang" + + + + + + + + "Senarai widget" "Senarai widget ditutup" "Tambahkan pada skrin utama" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 48edebc5a8..c53b912f23 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -124,6 +124,14 @@ "%1$s ကို ထည့်သွင်းနေသည်၊ %2$s ပြီးပါပြီ" "%1$s ဒေါင်းလုဒ်လုပ်နေသည်၊ %2$s ပြီးပါပြီ" "%1$s ကိုထည့်သွင်းရန်စောင့်နေသည်" + + + + + + + + "ဝိဂျက်စာရင်း" "ဝိဂျက်စာရင်းကို ပိတ်ထားသည်" "ပင်မစာမျက်နှာတွင် ထည့်ရန်" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index ad6a3cc323..8ce6c7341a 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -124,6 +124,14 @@ "%1$s installerer, %2$s er fullført" "Laster ned %1$s, %2$s er fullført" "Venter på å installere %1$s" + + + + + + + + "Modulliste" "Modullisten er lukket" "Legg til på startskjermen" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 05a284f21f..1e212beda5 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -124,6 +124,14 @@ "%1$s इन्स्टल गरिँदै छ, %2$s पूरा भयो" "%1$s डाउनलोड गर्दै, %2$s सम्पन्‍न" "%1$s स्थापना गर्न प्रतीक्षा गर्दै" + + + + + + + + "विजेटहरूको सूची" "विजेटहरूको सूची बन्द गरियो" "होम स्क्रिनमा राख्नुहोस्" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index baf40ae8e7..d534bc44d0 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -124,6 +124,14 @@ "%1$s installeren, %2$s voltooid" "%1$s wordt gedownload, %2$s voltooid" "%1$s wacht op installatie" + + + + + + + + "Lijst met widgets" "Lijst met widgets gesloten" "Toevoegen aan startscherm" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 6a6b76b5d3..2bfb8a1cda 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -124,6 +124,14 @@ "%1$s ଇନଷ୍ଟଲ୍ କରାଯାଉଛି, %2$s ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି" "%1$s ଡାଉନଲୋଡ୍‌ ହେଉଛି, %2$s ସମ୍ପୂର୍ଣ୍ଣ" "%1$s ଇନଷ୍ଟଲ୍‌ ହେବାକୁ ଅପେକ୍ଷା କରିଛି" + + + + + + + + "ୱିଜେଟ୍ ତାଲିକା" "ୱିଜେଟ୍ ତାଲିକା ବନ୍ଦ ହୋଇଛି" "ମୂଳସ୍କ୍ରିନରେ ଯୋଗ କରନ୍ତୁ" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 797b71f9b1..222247b9d5 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -124,6 +124,14 @@ "%1$s ਨੂੰ ਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ, %2$s ਪੂਰਾ ਹੋਇਆ" "%1$s ਡਾਉਨਲੋਡ ਹੋਰ ਰਿਹਾ ਹੈ, %2$s ਸੰਪੂਰਣ" "%1$s ਸਥਾਪਤ ਕਰਨ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" + + + + + + + + "ਵਿਜੇਟਾਂ ਦੀ ਸੂਚੀ" "ਵਿਜੇਟਾਂ ਦੀ ਸੂਚੀ ਬੰਦ ਕੀਤੀ ਗਈ" "ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰੋ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 1f226b3d98..a7c1c18c6b 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -124,6 +124,14 @@ "Instaluję aplikację %1$s, postęp: %2$s" "Pobieranie elementu %1$s, ukończono: %2$s" "%1$s oczekuje na instalację" + + + + + + + + "Lista widgetów" "Lista widgetów zamknięta" "Dodaj do ekranu głównego" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index ddc103162f..6cb77d7e52 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -124,6 +124,14 @@ "A instalar %1$s, %2$s concluído" "A transferir o %1$s, %2$s concluído" "A aguardar a instalação do %1$s" + + + + + + + + "Lista de widgets" "Lista de widgets fechada." "Adicionar ao ecrã principal" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index a008761e3f..40edba2e95 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -124,6 +124,14 @@ "Instalando %1$s. %2$s concluído" "Fazendo download de %1$s, %2$s concluído" "Aguardando instalação de %1$s" + + + + + + + + "Lista de widgets" "Lista de widgets fechada" "Adicionar à tela inicial" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index e2c9a62b5d..85703ddbca 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -124,6 +124,14 @@ "%1$s se instalează, %2$s finalizat" "%1$s se descarcă (finalizat %2$s)" "%1$s așteaptă instalarea" + + + + + + + + "Listă de widgeturi" "Lista de widgeturi este închisă" "Adăugați pe ecranul de pornire" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 373e8ede02..90add409da 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -124,6 +124,14 @@ "Установка приложения \"%1$s\" (выполнено %2$s)" "Скачивается \"%1$s\" (%2$s)" "Ожидание установки \"%1$s\"" + + + + + + + + "Список виджетов" "Список виджетов закрыт" "Добавить на главный экран" diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index 868451d01b..61b91c6f58 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -124,6 +124,14 @@ "%1$s ස්ථාපනය කරමින්, %2$s සම්පූර්ණයි" "%1$s බාගත කරමින්, %2$s සම්පූර්ණයි" "%1$s ස්ථාපනය කිරීමට බලා සිටිමින්" + + + + + + + + "විජට් ලැයිස්තුව" "විජට් ලැයිස්තුව වසා ඇත" "මුල් තිරය වෙත එක් කරන්න" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 7ae936cc52..f85c1f5f03 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -124,6 +124,14 @@ "Inštaluje sa %1$s. Dokončené: %2$s." "Sťahuje sa aplikácia %1$s. Stiahnuté: %2$s" "Aplikácia %1$s čaká na inštaláciu" + + + + + + + + "Zoznam miniaplikácií" "Zoznam miniaplikácií je zavretý" "Pridať na plochu" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index cb59a99c7d..f374fca2af 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -124,6 +124,14 @@ "%1$s se namešča, dokončano: %2$s" "Prenašanje aplikacije %1$s; preneseno %2$s" "Aplikacija %1$s čaka na namestitev" + + + + + + + + "Seznam pripomočkov" "Seznam pripomočkov se je zaprl" "Dodajanje na začetni zaslon" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index d385ade3bd..31af388de5 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -124,6 +124,14 @@ "%1$s po instalohet, %2$s i përfunduar" "%1$s po shkarkohet, %2$s të përfunduara" "%1$s po pret të instalohet" + + + + + + + + "Lista e miniaplikacioneve" "Lista e miniaplikacioneve u mbyll" "Shto në ekranin bazë" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 0c14b56070..5553e8c97a 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -124,6 +124,14 @@ "%1$s се инсталира, %2$s готово" "%1$s се преузима, завршено је %2$s" "%1$s чека на инсталирање" + + + + + + + + "Листа виџета" "Листа виџета је затворена" "Додајте на почетни екран" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 4448c30797..a8c4d1b2c4 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -124,6 +124,14 @@ "%1$s installeras. %2$s har slutförts" "%1$s laddas ned, %2$s klart" "%1$s väntar på installation" + + + + + + + + "Widgetlista" "Widgetslistan har stängts" "Lägg till på startskärmen" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index b81fbeb462..1a7f2a47d9 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -102,7 +102,7 @@ "Folda: %1$s, vipengee %2$d" "Folda: %1$s, vipengee %2$d au zaidi" "Mandhari" - "Mandhari na muundo" + "Mandhari na mtindo" "Mipangilio ya mwanzo" "Imezimwa na msimamizi wako" "Ruhusu kipengele cha kuzungusha skrini ya kwanza" @@ -124,6 +124,14 @@ "Inasakinisha %1$s, imekamilika %2$s" "%1$s inapakuliwa, %2$s imekamilika" "%1$s inasubiri kusakinisha" + + + + + + + + "Orodha ya wijeti" "Orodha ya wijeti imefungwa" "Weka kwenye skrini ya kwanza" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 9c012f561c..b9c7cb50aa 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -124,6 +124,14 @@ "%1$s நிறுவப்படுகிறது, %2$s முடிந்தது" "%1$sஐப் பதிவிறக்குகிறது, %2$s முடிந்தது" "%1$sஐ நிறுவுவதற்காகக் காத்திருக்கிறது" + + + + + + + + "விட்ஜெட்கள் பட்டியல்" "விட்ஜெட்கள் பட்டியல் மூடப்பட்டது" "முகப்புத் திரையில் சேர்" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 4856915a68..0976af7266 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -124,6 +124,14 @@ "%1$s‌ను ఇన్‌స్టాల్ చేయడం, %2$s పూర్తయింది" "%1$s డౌన్‌లోడ్ అవుతోంది, %2$s పూర్తయింది" "%1$s ఇన్‌స్టాల్ కావడానికి వేచి ఉంది" + + + + + + + + "విడ్జెట్‌ల లిస్ట్‌" "విడ్జెట్‌ల లిస్ట్‌ మూసివేయబడింది" "మొదటి స్క్రీన్‌కు జోడించండి" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 2d2c0b26c5..6423bb4356 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -124,6 +124,14 @@ "กำลังติดตั้ง %1$s เสร็จแล้ว %2$s" "กำลังดาวน์โหลด %1$s เสร็จแล้ว %2$s" "%1$s กำลังรอติดตั้ง" + + + + + + + + "รายการวิดเจ็ต" "ปิดรายการวิดเจ็ตแล้ว" "เพิ่มลงในหน้าจอหลัก" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index c87c37a295..a73710243e 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -124,6 +124,14 @@ "Ini-install ang %1$s, %2$s kumpleto" "Dina-download na ang %1$s, tapos na ang %2$s" "Hinihintay nang mag-install ang %1$s" + + + + + + + + "Listahan ng mga widget" "Nakasara ang listahan ng mga widget" "Idagdag sa home screen" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 97d02d0283..b74e52bbf9 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -124,6 +124,14 @@ "%1$s yükleniyor, %2$s tamamlandı" "%1$s indiriliyor, %2$s tamamlandı" "%1$s uygulaması yüklenmek için bekliyor" + + + + + + + + "Widget listesi" "Widget listesi kapalı" "Ana ekrana ekle" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index e6f66828b1..619b993f80 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -124,6 +124,14 @@ "%1$s встановлюється, виконано %2$s" "%1$s завантажується, %2$s" "%1$s очікує на завантаження" + + + + + + + + "Список віджетів" "Список віджектів закрито" "Додати на головний екран" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 32a41087af..3fdad53c6f 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -124,6 +124,14 @@ "%1$s انسٹال کی جا رہی ہے، %2$s مکمل ہو گئی" "%1$s ڈاؤن لوڈ ہو رہا ہے، %2$s مکمل ہو گیا" "%1$s انسٹال ہونے کا انتظار کر رہی ہے" + + + + + + + + "ویجیٹس کی فہرست" "ویجیٹس کی فہرست بند کر دی گئی" "ہوم اسکرین میں شامل کریں" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 96e2189b0c..58f1f4edd6 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -124,6 +124,14 @@ "%1$s oʻrnatlmoqda, %2$s yakunlandi" "%1$s yuklab olinmoqda, %2$s bajarildi" "%1$s ilovasi o‘rnatilishi kutilmoqda" + + + + + + + + "Vidjetlar ro‘yxati" "Vidjetlar ro‘yxati yopildi" "Bosh ekranga chiqarish" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index b15515f98d..6a9a9b3f2c 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -124,6 +124,14 @@ "Đang cài đặt %1$s, hoàn tất %2$s" "Đang tải xuống %1$s, %2$s hoàn tất" "Đang chờ cài đặt %1$s" + + + + + + + + "Danh sách tiện ích" "Đã đóng danh sách tiện ích" "Thêm vào màn hình chính" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 775c4952c0..ea7d37e605 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -124,6 +124,14 @@ "正在安装%1$s,已完成 %2$s" "正在下载%1$s,已完成 %2$s" "%1$s正在等待安装" + + + + + + + + "微件列表" "微件列表已关闭" "添加到主屏幕" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index e0724de9fa..4e2c060e4d 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -124,6 +124,14 @@ "正在安裝「%1$s」(已完成 %2$s)" "正在下載 %1$s,已完成 %2$s" "正在等待安裝 %1$s" + + + + + + + + "小工具清單" "已經關閉嘅小工具清單" "加去主畫面" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index a2914d61d3..8394459be2 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -124,6 +124,14 @@ "正在安裝「%1$s」(已完成 %2$s)" "正在下載「%1$s」,已完成 %2$s" "正在等待安裝「%1$s」" + + + + + + + + "小工具清單" "已關閉小工具清單" "新增至主畫面" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 79b9acd24a..dc378f704b 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -124,6 +124,14 @@ "I-%1$s iyafakwa, seyiqede %2$s" "I-%1$s iyalandwa, %2$s kuqediwe" "%1$s ilinde ukufakwa" + + + + + + + + "Uhlu lwamawijethi" "Uhlu lwamawijethi luvaliwe" "Faka kusikrini sasekhaya" From 7ee087f53f4fc9cea34f546ac580284e25fbfaa9 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 18 Apr 2022 17:13:46 +0000 Subject: [PATCH 5/8] Revert "Revert "Removing AM.getTasks call on UI thread during touch down"" This reverts commit f9042d32aedf9dd214d00a5633e844e9d011cd4a. Reason for revert: build breakage fixed Change-Id: I5dac8826e1dc6064e7961ebbf3bc249b5fb307c7 --- .../NavBarToHomeTouchController.java | 5 +- .../android/quickstep/AbsSwipeUpHandler.java | 29 +- .../quickstep/FallbackSwipeHandler.java | 25 +- .../com/android/quickstep/GestureState.java | 30 +-- .../RecentsAnimationDeviceState.java | 39 +-- .../android/quickstep/RemoteTargetGluer.java | 12 +- .../quickstep/SwipeUpAnimationLogic.java | 4 +- .../quickstep/TaskAnimationManager.java | 6 +- .../com/android/quickstep/TopTaskTracker.java | 248 ++++++++++++++++++ .../quickstep/TouchInteractionService.java | 39 +-- .../fallback/FallbackRecentsView.java | 42 ++- .../quickstep/interaction/AllSetActivity.java | 4 +- .../interaction/GestureSandboxActivity.java | 41 ++- .../quickstep/util/AssistantUtilities.java | 46 ---- .../util/LauncherSplitScreenListener.java | 119 --------- .../android/quickstep/views/RecentsView.java | 50 ++-- 16 files changed, 401 insertions(+), 338 deletions(-) create mode 100644 quickstep/src/com/android/quickstep/TopTaskTracker.java delete mode 100644 quickstep/src/com/android/quickstep/util/AssistantUtilities.java delete mode 100644 quickstep/src/com/android/quickstep/util/LauncherSplitScreenListener.java diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index 4d3b05721c..7bfb76a978 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -48,8 +48,8 @@ import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.touch.SingleAxisSwipeDetector; import com.android.launcher3.util.TouchController; import com.android.quickstep.TaskUtils; +import com.android.quickstep.TopTaskTracker; import com.android.quickstep.util.AnimatorControllerWithResistance; -import com.android.quickstep.util.AssistantUtilities; import com.android.quickstep.util.OverviewToHomeAnim; import com.android.quickstep.views.RecentsView; @@ -112,7 +112,8 @@ public class NavBarToHomeTouchController implements TouchController, return true; } if (FeatureFlags.ASSISTANT_GIVES_LAUNCHER_FOCUS.get() - && AssistantUtilities.isExcludedAssistantRunning()) { + && TopTaskTracker.INSTANCE.get(mLauncher).getCachedTopTask(false) + .isExcludedAssistant()) { return true; } return false; diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 6e804021f1..2ae0646ed0 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -102,7 +102,6 @@ import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.InputConsumerProxy; import com.android.quickstep.util.InputProxyHandlerFactory; -import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.MotionPauseDetector; import com.android.quickstep.util.ProtoTracer; import com.android.quickstep.util.RecentsOrientedState; @@ -114,6 +113,7 @@ import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.VibratorWrapper; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; +import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; @@ -564,24 +564,12 @@ public abstract class AbsSwipeUpHandler, } protected void notifyGestureAnimationStartToRecents() { - ActivityManager.RunningTaskInfo[] runningTasks; + Task[] runningTasks; if (mIsSwipeForStagedSplit) { - int[] splitTaskIds = - LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds(); - runningTasks = new ActivityManager.RunningTaskInfo[splitTaskIds.length]; - for (int i = 0; i < splitTaskIds.length; i++) { - int taskId = splitTaskIds[i]; - // Order matters here, we want first indexed RunningTaskInfo to be leftTop task - for (ActivityManager.RunningTaskInfo rti : mGestureState.getRunningTasks()) { - if (taskId == rti.taskId) { - runningTasks[i] = rti; - break; - } - - } - } + int[] splitTaskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds(); + runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(splitTaskIds); } else { - runningTasks = new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()}; + runningTasks = mGestureState.getRunningTask().getPlaceholderTasks(); } mRecentsView.onGestureAnimationStart(runningTasks, mDeviceState.getRotationTouchHelper()); } @@ -801,7 +789,7 @@ public abstract class AbsSwipeUpHandler, RecentsAnimationTargets targets) { super.onRecentsAnimationStart(controller, targets); ActiveGestureLog.INSTANCE.addLog("startRecentsAnimationCallback", targets.apps.length); - mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(targets); + mRemoteTargetHandles = mTargetGluer.assignTargetsForSplitScreen(mContext, targets); mRecentsAnimationController = controller; mRecentsAnimationTargets = targets; @@ -1380,7 +1368,7 @@ public abstract class AbsSwipeUpHandler, private SwipePipToHomeAnimator createWindowAnimationToPip(HomeAnimationFactory homeAnimFactory, RemoteAnimationTargetCompat runningTaskTarget, float startProgress) { // Directly animate the app to PiP (picture-in-picture) mode - final ActivityManager.RunningTaskInfo taskInfo = mGestureState.getRunningTask(); + final ActivityManager.RunningTaskInfo taskInfo = runningTaskTarget.taskInfo; final RecentsOrientedState orientationState = mRemoteTargetHandles[0].getTaskViewSimulator() .getOrientationState(); final int windowRotation = calculateWindowRotation(runningTaskTarget, orientationState); @@ -1782,8 +1770,7 @@ public abstract class AbsSwipeUpHandler, new PictureInPictureSurfaceTransaction.Builder() .setAlpha(0f) .build(); - int[] taskIds = - LauncherSplitScreenListener.INSTANCE.getNoCreate().getRunningSplitTaskIds(); + int[] taskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds(); for (int taskId : taskIds) { mRecentsAnimationController.setFinishTaskTransaction(taskId, tx, null /* overlay */); diff --git a/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java b/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java index 9828467c79..ee5bb44040 100644 --- a/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java @@ -30,7 +30,7 @@ import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACT import android.animation.ObjectAnimator; import android.annotation.TargetApi; -import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityOptions; import android.content.ActivityNotFoundException; import android.content.Context; @@ -69,7 +69,6 @@ import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; import com.android.systemui.shared.recents.model.Task.TaskKey; -import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams; @@ -109,7 +108,7 @@ public class FallbackSwipeHandler extends super(context, deviceState, taskAnimationManager, gestureState, touchTimeMs, continuingLastGesture, inputConsumer); - mRunningOverHome = ActivityManagerWrapper.isHomeTask(mGestureState.getRunningTask()); + mRunningOverHome = mGestureState.getRunningTask().isHomeTask(); if (mRunningOverHome) { runActionOnRemoteHandles(remoteTargetHandle -> remoteTargetHandle.getTransformParams().setHomeBuilderProxy( @@ -150,16 +149,17 @@ public class FallbackSwipeHandler extends return new FallbackPipToHomeAnimationFactory(); } mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration); - startHomeIntent(mActiveAnimationFactory); + startHomeIntent(mActiveAnimationFactory, runningTaskTarget); return mActiveAnimationFactory; } private void startHomeIntent( - @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory) { + @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory, + @Nullable RemoteAnimationTargetCompat runningTaskTarget) { ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0); Intent intent = new Intent(mGestureState.getHomeIntent()); - if (gestureContractAnimationFactory != null) { - gestureContractAnimationFactory.addGestureContract(intent); + if (gestureContractAnimationFactory != null && runningTaskTarget != null) { + gestureContractAnimationFactory.addGestureContract(intent, runningTaskTarget.taskInfo); } try { mContext.startActivity(intent, options.toBundle()); @@ -187,7 +187,8 @@ public class FallbackSwipeHandler extends // the PiP task appearing. recentsCallback = () -> { callback.run(); - startHomeIntent(null /* gestureContractAnimationFactory */); + startHomeIntent( + null /* gestureContractAnimationFactory */, null /* runningTaskTarget */); }; } else { recentsCallback = callback; @@ -212,7 +213,7 @@ public class FallbackSwipeHandler extends if (mRunningOverHome) { if (DisplayController.getNavigationMode(mContext).hasGestures) { mRecentsView.onGestureAnimationStartOnHome( - new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()}, + mGestureState.getRunningTask().getPlaceholderTasks(), mDeviceState.getRotationTouchHelper()); } } else { @@ -396,12 +397,12 @@ public class FallbackSwipeHandler extends } } - private void addGestureContract(Intent intent) { - if (mRunningOverHome || mGestureState.getRunningTask() == null) { + private void addGestureContract(Intent intent, RunningTaskInfo runningTaskInfo) { + if (mRunningOverHome || runningTaskInfo == null) { return; } - TaskKey key = new TaskKey(mGestureState.getRunningTask()); + TaskKey key = new TaskKey(runningTaskInfo); if (key.getComponent() != null) { if (sMessageReceiver == null) { sMessageReceiver = new StaticMessageReceiver(); diff --git a/quickstep/src/com/android/quickstep/GestureState.java b/quickstep/src/com/android/quickstep/GestureState.java index ed0623da24..3b52e9178e 100644 --- a/quickstep/src/com/android/quickstep/GestureState.java +++ b/quickstep/src/com/android/quickstep/GestureState.java @@ -22,7 +22,6 @@ import static com.android.quickstep.MultiStateCallback.DEBUG_STATES; import android.annotation.Nullable; import android.annotation.TargetApi; -import android.app.ActivityManager; import android.content.Intent; import android.os.Build; @@ -30,6 +29,7 @@ import com.android.launcher3.statemanager.BaseState; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.tracing.GestureStateProto; import com.android.launcher3.tracing.SwipeHandlerProto; +import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.util.ActiveGestureLog; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; @@ -135,8 +135,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL private final MultiStateCallback mStateCallback; private final int mGestureId; - private ActivityManager.RunningTaskInfo mRunningTask; - private ActivityManager.RunningTaskInfo[] mRunningTasks; + private CachedTaskInfo mRunningTask; private GestureEndTarget mEndTarget; private RemoteAnimationTargetCompat mLastAppearedTaskTarget; private Set mPreviouslyAppearedTaskIds = new HashSet<>(); @@ -232,41 +231,24 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL /** * @return the running task for this gesture. */ - public ActivityManager.RunningTaskInfo getRunningTask() { + public CachedTaskInfo getRunningTask() { return mRunningTask; } - /** - * This will array will contain the task returned by {@link #getRunningTask()} - * @return the running tasks for this gesture. - */ - public ActivityManager.RunningTaskInfo[] getRunningTasks() { - return mRunningTasks; - } - /** * @return the running task id for this gesture. */ public int getRunningTaskId() { - return mRunningTask != null ? mRunningTask.taskId : -1; + return mRunningTask != null ? mRunningTask.getTaskId() : -1; } /** * Updates the running task for the gesture to be the given {@param runningTask}. */ - public void updateRunningTask(ActivityManager.RunningTaskInfo runningTask) { + public void updateRunningTask(CachedTaskInfo runningTask) { mRunningTask = runningTask; } - /** - * TODO(b/210903248) refactor to consolidate w/ method above - * Updates the running task for the gesture to be the given {@param runningTask}. - */ - public void updateRunningTasks(ActivityManager.RunningTaskInfo[] runningTasks) { - mRunningTasks = runningTasks; - updateRunningTask(runningTasks[0]); - } - /** * Updates the last task that appeared during this gesture. */ @@ -339,7 +321,7 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL * user controlled gesture. */ public void setHandlingAtomicEvent(boolean handlingAtomicEvent) { - mHandlingAtomicEvent = true; + mHandlingAtomicEvent = handlingAtomicEvent; } /** diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java index 7ad60bb0bc..920ed71b80 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java @@ -45,14 +45,11 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_Q import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; -import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.res.Resources; import android.graphics.Region; import android.inputmethodservice.InputMethodService; import android.net.Uri; @@ -61,18 +58,17 @@ import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserManager; import android.provider.Settings; -import android.text.TextUtils; import android.view.MotionEvent; import androidx.annotation.BinderThread; -import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.DisplayController.DisplayInfoChangeListener; import com.android.launcher3.util.DisplayController.Info; import com.android.launcher3.util.DisplayController.NavigationMode; import com.android.launcher3.util.SettingsCache; +import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.util.NavBarPosition; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; @@ -83,7 +79,6 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.List; /** * Manages the state of the system during a swipe up gesture. @@ -97,7 +92,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { private final int mDisplayId; private final RotationTouchHelper mRotationTouchHelper; private final TaskStackChangeListener mPipListener; - private final List mGestureBlockedActivities; // Cache for better performance since it doesn't change at runtime. private final boolean mCanImeRenderGesturalNavButtons = InputMethodService.canImeRenderGesturalNavButtons(); @@ -129,6 +123,7 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { } }; + private int mGestureBlockingTaskId = -1; private Region mExclusionRegion; private SystemGestureExclusionListenerCompat mExclusionListener; @@ -178,22 +173,6 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { onDisplayInfoChanged(context, mDisplayController.getInfo(), CHANGE_ALL); runOnDestroy(() -> mDisplayController.removeChangeListener(this)); - // Add any blocked activities - String[] blockingActivities; - try { - blockingActivities = - context.getResources().getStringArray(R.array.gesture_blocking_activities); - } catch (Resources.NotFoundException e) { - blockingActivities = new String[0]; - } - mGestureBlockedActivities = new ArrayList<>(blockingActivities.length); - for (String blockingActivity : blockingActivities) { - if (!TextUtils.isEmpty(blockingActivity)) { - mGestureBlockedActivities.add( - ComponentName.unflattenFromString(blockingActivity)); - } - } - SettingsCache settingsCache = SettingsCache.INSTANCE.get(mContext); if (mIsOneHandedModeSupported) { Uri oneHandedUri = Settings.Secure.getUriFor(ONE_HANDED_ENABLED); @@ -367,11 +346,17 @@ public class RecentsAnimationDeviceState implements DisplayInfoChangeListener { } /** - * @return whether the given running task info matches the gesture-blocked activity. + * Sets the task id where gestures should be blocked */ - public boolean isGestureBlockedActivity(ActivityManager.RunningTaskInfo runningTaskInfo) { - return runningTaskInfo != null - && mGestureBlockedActivities.contains(runningTaskInfo.topActivity); + public void setGestureBlockingTaskId(int taskId) { + mGestureBlockingTaskId = taskId; + } + + /** + * @return whether the given running task info matches the gesture-blocked task. + */ + public boolean isGestureBlockedTask(CachedTaskInfo taskInfo) { + return taskInfo != null && taskInfo.getTaskId() == mGestureBlockingTaskId; } /** diff --git a/quickstep/src/com/android/quickstep/RemoteTargetGluer.java b/quickstep/src/com/android/quickstep/RemoteTargetGluer.java index afb4d4dfe4..c3ea25683d 100644 --- a/quickstep/src/com/android/quickstep/RemoteTargetGluer.java +++ b/quickstep/src/com/android/quickstep/RemoteTargetGluer.java @@ -22,7 +22,6 @@ import androidx.annotation.Nullable; import com.android.launcher3.util.SplitConfigurationOptions.StagedSplitBounds; import com.android.quickstep.util.AnimatorControllerWithResistance; -import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.TransformParams; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; @@ -50,8 +49,7 @@ public class RemoteTargetGluer { * running tasks */ public RemoteTargetGluer(Context context, BaseActivityInterface sizingStrategy) { - int[] splitIds = LauncherSplitScreenListener.INSTANCE.getNoCreate() - .getRunningSplitTaskIds(); + int[] splitIds = TopTaskTracker.INSTANCE.get(context).getRunningSplitTaskIds(); mRemoteTargetHandles = createHandles(context, sizingStrategy, splitIds.length == 2 ? 2 : 1); } @@ -73,7 +71,7 @@ public class RemoteTargetGluer { * Length of targets.apps should match that of {@link #mRemoteTargetHandles}. * * If split screen may be active when this is called, you might want to use - * {@link #assignTargetsForSplitScreen(RemoteAnimationTargets)} + * {@link #assignTargetsForSplitScreen(Context, RemoteAnimationTargets)} */ public RemoteTargetHandle[] assignTargets(RemoteAnimationTargets targets) { for (int i = 0; i < mRemoteTargetHandles.length; i++) { @@ -90,9 +88,9 @@ public class RemoteTargetGluer { * apps in targets.apps to that of the _active_ split screened tasks. * See {@link #assignTargetsForSplitScreen(RemoteAnimationTargets, int[])} */ - public RemoteTargetHandle[] assignTargetsForSplitScreen(RemoteAnimationTargets targets) { - int[] splitIds = LauncherSplitScreenListener.INSTANCE.getNoCreate() - .getRunningSplitTaskIds(); + public RemoteTargetHandle[] assignTargetsForSplitScreen( + Context context, RemoteAnimationTargets targets) { + int[] splitIds = TopTaskTracker.INSTANCE.get(context).getRunningSplitTaskIds(); return assignTargetsForSplitScreen(targets, splitIds); } diff --git a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java index 8862073725..088e1cfc00 100644 --- a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java +++ b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java @@ -37,7 +37,6 @@ import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle; import com.android.quickstep.util.AnimatorControllerWithResistance; -import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.TransformParams; @@ -82,8 +81,7 @@ public abstract class SwipeUpAnimationLogic implements mGestureState = gestureState; mIsSwipeForStagedSplit = ENABLE_SPLIT_SELECT.get() && - LauncherSplitScreenListener.INSTANCE.getNoCreate() - .getRunningSplitTaskIds().length > 1; + TopTaskTracker.INSTANCE.get(context).getRunningSplitTaskIds().length > 1; mTargetGluer = new RemoteTargetGluer(mContext, mGestureState.getActivityInterface()); mRemoteTargetHandles = mTargetGluer.getRemoteTargetHandles(); diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java index 4bb2400df1..b8334a9ae8 100644 --- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java +++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java @@ -35,6 +35,7 @@ import androidx.annotation.UiThread; import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; +import com.android.quickstep.TopTaskTracker.CachedTaskInfo; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.ActivityManagerWrapper; @@ -234,9 +235,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn // Allowing to pause Home if Home is top activity and Recents is not Home. So when user // start home when recents animation is playing, the home activity can be resumed again // to let the transition controller collect Home activity. - ActivityManager.RunningTaskInfo rti = gestureState.getRunningTask(); - boolean homeIsOnTop = rti != null && rti.topActivity != null - && rti.topActivity.equals(gestureState.getHomeIntent().getComponent()); + CachedTaskInfo cti = gestureState.getRunningTask(); + boolean homeIsOnTop = cti != null && cti.isHomeTask(); if (!homeIsOnTop) { options.setTransientLaunch(); } diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java new file mode 100644 index 0000000000..80bc329620 --- /dev/null +++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.quickstep; + +import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; +import static android.content.Intent.ACTION_CHOOSER; +import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; + +import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT; +import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_ASSISTANT; + +import android.app.ActivityManager.RunningTaskInfo; +import android.content.Context; + +import androidx.annotation.UiThread; + +import com.android.launcher3.util.MainThreadInitializedObject; +import com.android.launcher3.util.SplitConfigurationOptions; +import com.android.launcher3.util.SplitConfigurationOptions.StagePosition; +import com.android.launcher3.util.SplitConfigurationOptions.StageType; +import com.android.launcher3.util.SplitConfigurationOptions.StagedSplitTaskPosition; +import com.android.launcher3.util.TraceHelper; +import com.android.systemui.shared.recents.model.Task; +import com.android.systemui.shared.recents.model.Task.TaskKey; +import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; +import com.android.systemui.shared.system.TaskStackChangeListeners; +import com.android.wm.shell.splitscreen.ISplitScreenListener; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +/** + * This class tracked the top-most task and some 'approximate' task history to allow faster + * system state estimation during touch interaction + */ +public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskStackChangeListener { + + public static MainThreadInitializedObject INSTANCE = + new MainThreadInitializedObject<>(TopTaskTracker::new); + + private static final int HISTORY_SIZE = 5; + + // Ordered list with first item being the most recent task. + private final LinkedList mOrderedTaskList = new LinkedList<>(); + + private final StagedSplitTaskPosition mMainStagePosition = new StagedSplitTaskPosition(); + private final StagedSplitTaskPosition mSideStagePosition = new StagedSplitTaskPosition(); + + private TopTaskTracker(Context context) { + mMainStagePosition.stageType = SplitConfigurationOptions.STAGE_TYPE_MAIN; + mSideStagePosition.stageType = SplitConfigurationOptions.STAGE_TYPE_SIDE; + + TaskStackChangeListeners.getInstance().registerTaskStackListener(this); + SystemUiProxy.INSTANCE.get(context).registerSplitScreenListener(this); + } + + @Override + public void onTaskRemoved(int taskId) { + mOrderedTaskList.removeIf(rto -> rto.taskId == taskId); + } + + @Override + public void onTaskMovedToFront(RunningTaskInfo taskInfo) { + mOrderedTaskList.removeIf(rto -> rto.taskId == taskInfo.taskId); + mOrderedTaskList.addFirst(taskInfo); + if (mOrderedTaskList.size() >= HISTORY_SIZE) { + // If we grow in size, remove the last taskInfo which is not part of the split task. + Iterator itr = mOrderedTaskList.descendingIterator(); + while (itr.hasNext()) { + RunningTaskInfo info = itr.next(); + if (info.taskId != taskInfo.taskId + && info.taskId != mMainStagePosition.taskId + && info.taskId != mSideStagePosition.taskId) { + itr.remove(); + return; + } + } + } + } + + @Override + public void onStagePositionChanged(@StageType int stage, @StagePosition int position) { + if (stage == SplitConfigurationOptions.STAGE_TYPE_MAIN) { + mMainStagePosition.stagePosition = position; + } else { + mSideStagePosition.stagePosition = position; + } + } + + @Override + public void onTaskStageChanged(int taskId, @StageType int stage, boolean visible) { + // If task is not visible but we are tracking it, stop tracking it + if (!visible) { + if (mMainStagePosition.taskId == taskId) { + resetTaskId(mMainStagePosition); + } else if (mSideStagePosition.taskId == taskId) { + resetTaskId(mSideStagePosition); + } // else it's an un-tracked child + return; + } + + // If stage has moved to undefined, stop tracking the task + if (stage == SplitConfigurationOptions.STAGE_TYPE_UNDEFINED) { + resetTaskId(taskId == mMainStagePosition.taskId + ? mMainStagePosition : mSideStagePosition); + return; + } + + if (stage == SplitConfigurationOptions.STAGE_TYPE_MAIN) { + mMainStagePosition.taskId = taskId; + } else { + mSideStagePosition.taskId = taskId; + } + } + + private void resetTaskId(StagedSplitTaskPosition taskPosition) { + taskPosition.taskId = -1; + } + + /** + * @return index 0 will be task in left/top position, index 1 in right/bottom position. + * Will return empty array if device is not in staged split + */ + public int[] getRunningSplitTaskIds() { + if (mMainStagePosition.taskId == -1 || mSideStagePosition.taskId == -1) { + return new int[]{}; + } + int[] out = new int[2]; + if (mMainStagePosition.stagePosition == STAGE_POSITION_TOP_OR_LEFT) { + out[0] = mMainStagePosition.taskId; + out[1] = mSideStagePosition.taskId; + } else { + out[1] = mMainStagePosition.taskId; + out[0] = mSideStagePosition.taskId; + } + return out; + } + + + /** + * Returns the CachedTaskInfo for the top most task + */ + @UiThread + public CachedTaskInfo getCachedTopTask(boolean filterOnlyVisibleRecents) { + if (filterOnlyVisibleRecents) { + // Since we only know about the top most task, any filtering may not be applied on the + // cache. The second to top task may change while the top task is still the same. + RunningTaskInfo[] tasks = TraceHelper.allowIpcs("getCachedTopTask.true", () -> + ActivityManagerWrapper.getInstance().getRunningTasks(true)); + return new CachedTaskInfo(Arrays.asList(tasks)); + } + + if (mOrderedTaskList.isEmpty()) { + RunningTaskInfo[] tasks = TraceHelper.allowIpcs("getCachedTopTask.false", () -> + ActivityManagerWrapper.getInstance().getRunningTasks( + false /* filterOnlyVisibleRecents */)); + Collections.addAll(mOrderedTaskList, tasks); + } + return new CachedTaskInfo(new ArrayList<>(mOrderedTaskList)); + } + + /** + * Class to provide information about a task which can be safely cached and do not change + * during the lifecycle of the task. + */ + public static class CachedTaskInfo { + + private final RunningTaskInfo mTopTask; + private final List mAllCachedTasks; + + CachedTaskInfo(List allCachedTasks) { + mAllCachedTasks = allCachedTasks; + mTopTask = allCachedTasks.get(0); + } + + public int getTaskId() { + return mTopTask.taskId; + } + + /** + * Returns true if the root of the task chooser activity + */ + public boolean isRootChooseActivity() { + return ACTION_CHOOSER.equals(mTopTask.baseIntent.getAction()); + } + + /** + * Returns true if the given task holds an Assistant activity that is excluded from recents + */ + public boolean isExcludedAssistant() { + return mTopTask.configuration.windowConfiguration + .getActivityType() == ACTIVITY_TYPE_ASSISTANT + && (mTopTask.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0; + } + + /** + * Returns true if this represents the HOME task + */ + public boolean isHomeTask() { + return mTopTask.configuration.windowConfiguration + .getActivityType() == ACTIVITY_TYPE_HOME; + } + + /** + * Returns {@link Task} array which can be used as a placeholder until the true object + * is loaded by the model + */ + public Task[] getPlaceholderTasks() { + return new Task[] {Task.from(new TaskKey(mTopTask), mTopTask, false)}; + } + + /** + * Returns {@link Task} array corresponding to the provided task ids which can be used as a + * placeholder until the true object is loaded by the model + */ + public Task[] getPlaceholderTasks(int[] taskIds) { + Task[] result = new Task[taskIds.length]; + for (int i = 0; i < taskIds.length; i++) { + final int index = i; + int taskId = taskIds[i]; + mAllCachedTasks.forEach(rti -> { + if (rti.taskId == taskId) { + result[index] = Task.from(new TaskKey(rti), rti, false); + } + }); + } + return result; + } + } +} diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 320682521c..0078d55398 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -15,7 +15,6 @@ */ package com.android.quickstep; -import static android.content.Intent.ACTION_CHOOSER; import static android.view.MotionEvent.ACTION_CANCEL; import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_UP; @@ -41,7 +40,6 @@ import android.annotation.TargetApi; import android.app.PendingIntent; import android.app.RemoteAction; import android.app.Service; -import android.content.ComponentName; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -95,8 +93,6 @@ import com.android.quickstep.inputconsumers.ScreenPinnedInputConsumer; import com.android.quickstep.inputconsumers.SysUiOverlayInputConsumer; import com.android.quickstep.inputconsumers.TaskbarStashInputConsumer; import com.android.quickstep.util.ActiveGestureLog; -import com.android.quickstep.util.AssistantUtilities; -import com.android.quickstep.util.LauncherSplitScreenListener; import com.android.quickstep.util.ProtoTracer; import com.android.quickstep.util.ProxyScreenStatusProvider; import com.android.quickstep.util.SplitScreenBounds; @@ -314,6 +310,13 @@ public class TouchInteractionService extends Service public void setSwipeUpProxy(Function proxy) { mSwipeUpProxyProvider = proxy != null ? proxy : (i -> null); } + + /** + * Sets the task id where gestures should be blocked + */ + public void setGestureBlockedTaskId(int taskId) { + mDeviceState.setGestureBlockingTaskId(taskId); + } } private static boolean sConnected = false; @@ -369,7 +372,6 @@ public class TouchInteractionService extends Service mDeviceState.addNavigationModeChangedCallback(this::onNavigationModeChanged); ProtoTracer.INSTANCE.get(this).add(this); - LauncherSplitScreenListener.INSTANCE.get(this).init(); sConnected = true; } @@ -419,6 +421,9 @@ public class TouchInteractionService extends Service onSystemUiFlagsChanged(mDeviceState.getSystemUiStateFlags()); onAssistantVisibilityChanged(); + // Initialize the task tracker + TopTaskTracker.INSTANCE.get(this); + // Temporarily disable model preload // new ModelPreload().start(this); mBackGestureNotificationCounter = Math.max(0, Utilities.getDevicePrefs(this) @@ -531,7 +536,6 @@ public class TouchInteractionService extends Service getSystemService(AccessibilityManager.class) .unregisterSystemAction(SYSTEM_ACTION_ID_ALL_APPS); - LauncherSplitScreenListener.INSTANCE.get(this).destroy(); mTaskbarManager.destroy(); sConnected = false; super.onDestroy(); @@ -633,7 +637,7 @@ public class TouchInteractionService extends Service private InputConsumer tryCreateAssistantInputConsumer(InputConsumer base, GestureState gestureState, MotionEvent motionEvent) { - return mDeviceState.isGestureBlockedActivity(gestureState.getRunningTask()) + return mDeviceState.isGestureBlockedTask(gestureState.getRunningTask()) ? base : new AssistantInputConsumer(this, gestureState, base, mInputMonitorCompat, mDeviceState, motionEvent); @@ -648,8 +652,8 @@ public class TouchInteractionService extends Service gestureState.updatePreviouslyAppearedTaskIds( previousGestureState.getPreviouslyAppearedTaskIds()); } else { - gestureState.updateRunningTasks(TraceHelper.allowIpcs("getRunningTask.0", - () -> mAM.getRunningTasks(false /* filterOnlyVisibleRecents */))); + gestureState.updateRunningTask( + TopTaskTracker.INSTANCE.get(this).getCachedTopTask(false)); } return gestureState; } @@ -743,17 +747,14 @@ public class TouchInteractionService extends Service // Use overview input consumer for sharesheets on top of home. boolean forceOverviewInputConsumer = gestureState.getActivityInterface().isStarted() && gestureState.getRunningTask() != null - && ACTION_CHOOSER.equals(gestureState.getRunningTask().baseIntent.getAction()); - if (AssistantUtilities.isExcludedAssistant(gestureState.getRunningTask())) { + && gestureState.getRunningTask().isRootChooseActivity(); + if (gestureState.getRunningTask() != null + && gestureState.getRunningTask().isExcludedAssistant()) { // In the case where we are in the excluded assistant state, ignore it and treat the // running activity as the task behind the assistant - gestureState.updateRunningTask(TraceHelper.allowIpcs("getRunningTask.assistant", - () -> mAM.getRunningTask(true /* filterOnlyVisibleRecents */))); - ComponentName homeComponent = mOverviewComponentObserver.getHomeIntent().getComponent(); - ComponentName runningComponent = - gestureState.getRunningTask().baseIntent.getComponent(); - forceOverviewInputConsumer = - runningComponent != null && runningComponent.equals(homeComponent); + gestureState.updateRunningTask(TopTaskTracker.INSTANCE.get(this) + .getCachedTopTask(true /* filterOnlyVisibleRecents */)); + forceOverviewInputConsumer = gestureState.getRunningTask().isHomeTask(); } if (ENABLE_QUICKSTEP_LIVE_TILE.get() @@ -770,7 +771,7 @@ public class TouchInteractionService extends Service || forceOverviewInputConsumer) { return createOverviewInputConsumer( previousGestureState, gestureState, event, forceOverviewInputConsumer); - } else if (mDeviceState.isGestureBlockedActivity(gestureState.getRunningTask())) { + } else if (mDeviceState.isGestureBlockedTask(gestureState.getRunningTask())) { return getDefaultInputConsumer(); } else { return createOtherActivityInputConsumer(gestureState, event); diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java index 48af802ff8..c9ee2db1f1 100644 --- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java +++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java @@ -24,7 +24,6 @@ import static com.android.quickstep.fallback.RecentsState.OVERVIEW_SPLIT_SELECT; import android.animation.AnimatorSet; import android.annotation.TargetApi; -import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; import android.os.Build; import android.util.AttributeSet; @@ -50,7 +49,6 @@ import com.android.quickstep.views.OverviewActionsView; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.Task; -import com.android.systemui.shared.recents.model.Task.TaskKey; import java.util.ArrayList; @@ -58,7 +56,7 @@ import java.util.ArrayList; public class FallbackRecentsView extends RecentsView implements StateListener { - private RunningTaskInfo mHomeTaskInfo; + private Task mHomeTask; public FallbackRecentsView(Context context, AttributeSet attrs) { this(context, attrs, 0); @@ -87,12 +85,12 @@ public class FallbackRecentsView extends RecentsView 1) { + protected boolean shouldAddStubTaskView(Task[] runningTasks) { + if (runningTasks.length > 1) { // can't be in split screen w/ home task - return super.shouldAddStubTaskView(runningTaskInfos); + return super.shouldAddStubTaskView(runningTasks); } - RunningTaskInfo runningTaskInfo = runningTaskInfos[0]; - if (mHomeTaskInfo != null && runningTaskInfo != null && - mHomeTaskInfo.taskId == runningTaskInfo.taskId + Task runningTask = runningTasks[0]; + if (mHomeTask != null && runningTask != null + && mHomeTask.key.id == runningTask.key.id && getTaskViewCount() == 0 && mLoadPlanEverApplied) { // Do not add a stub task if we are running over home with empty recents, so that we // show the empty recents message instead of showing a stub task and later removing it. // Ignore empty task signal if applyLoadPlan has never run. return false; } - return super.shouldAddStubTaskView(runningTaskInfos); + return super.shouldAddStubTaskView(runningTasks); } @Override @@ -169,7 +167,7 @@ public class FallbackRecentsView extends RecentsView newList = new ArrayList<>(taskGroups.size() + 1); newList.addAll(taskGroups); - newList.add(new GroupTask( - Task.from(new TaskKey(mHomeTaskInfo), mHomeTaskInfo, false), - null, null)); + newList.add(new GroupTask(mHomeTask, null, null)); taskGroups = newList; } } @@ -193,7 +189,7 @@ public class FallbackRecentsView extends RecentsView