Merge "Removes Smartspace Feedback flag." into sc-v2-dev
diff --git a/go/quickstep/res/layout/overview_actions_container.xml b/go/quickstep/res/layout/overview_actions_container.xml
index 710e2e0..196541f 100644
--- a/go/quickstep/res/layout/overview_actions_container.xml
+++ b/go/quickstep/res/layout/overview_actions_container.xml
@@ -120,16 +120,6 @@
android:layout_height="1dp"
android:layout_weight="1"
android:visibility="gone" />
-
- <Button
- android:id="@+id/action_share"
- style="@style/GoOverviewActionButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableStart="@drawable/ic_share"
- android:text="@string/action_share"
- android:theme="@style/ThemeControlHighlightWorkspaceColor"
- android:visibility="gone" />
</LinearLayout>
</com.android.quickstep.views.GoOverviewActionsView>
\ No newline at end of file
diff --git a/go/src/com/android/launcher3/model/WidgetsModel.java b/go/src/com/android/launcher3/model/WidgetsModel.java
index f8448da..1aa5d03 100644
--- a/go/src/com/android/launcher3/model/WidgetsModel.java
+++ b/go/src/com/android/launcher3/model/WidgetsModel.java
@@ -79,12 +79,13 @@
}
public WidgetItem getWidgetProviderInfoByProviderName(
- ComponentName providerName) {
+ ComponentName providerName, UserHandle user) {
return null;
}
/** Returns {@link PackageItemInfo} of a pending widget. */
- public static PackageItemInfo newPendingItemInfo(ComponentName provider) {
- return new PackageItemInfo(provider.getPackageName());
+ public static PackageItemInfo newPendingItemInfo(
+ Context context, ComponentName provider, UserHandle userHandle) {
+ return new PackageItemInfo(provider.getPackageName(), userHandle);
}
}
\ No newline at end of file
diff --git a/protos/launcher_atom.proto b/protos/launcher_atom.proto
index ca9f063..d1bf152 100644
--- a/protos/launcher_atom.proto
+++ b/protos/launcher_atom.proto
@@ -152,6 +152,8 @@
ALL_APPS_SEARCH_RESULT_NAVVYSITE = 25;
ALL_APPS_SEARCH_RESULT_TIPS = 26;
ALL_APPS_SEARCH_RESULT_PEOPLE_TILE = 27;
+ ALL_APPS_SEARCH_RESULT_LEGACY_SHORTCUT = 30;
+ ALL_APPS_SEARCH_RESULT_ASSISTANT_MEMORY = 31;
WIDGETS_BOTTOM_TRAY = 28;
WIDGETS_TRAY_PREDICTION = 29;
diff --git a/quickstep/res/layout/overview_actions_container.xml b/quickstep/res/layout/overview_actions_container.xml
index acbb5b9..dd8afc2 100644
--- a/quickstep/res/layout/overview_actions_container.xml
+++ b/quickstep/res/layout/overview_actions_container.xml
@@ -63,16 +63,6 @@
android:layout_weight="1"
android:visibility="gone" />
- <Button
- android:id="@+id/action_share"
- style="@style/OverviewActionButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableStart="@drawable/ic_share"
- android:text="@string/action_share"
- android:theme="@style/ThemeControlHighlightWorkspaceColor"
- android:visibility="gone" />
-
<Space
android:id="@+id/oav_three_button_space"
android:layout_width="0dp"
diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml
index ae44f81..3cabb82 100644
--- a/quickstep/res/values-af/strings.xml
+++ b/quickstep/res/values-af/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Deel"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skermkiekie"</string>
<string name="action_split" msgid="2098009717623550676">"Verdeel"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Probeer ander program om verdeelde skerm te gebruik"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Jou organisasie laat nie hierdie program toe nie"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Slaan navigasietutoriaal oor?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Jy kan dit later in die <xliff:g id="NAME">%1$s</xliff:g>-program kry"</string>
diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml
index 4b68da9..2f0129b 100644
--- a/quickstep/res/values-am/strings.xml
+++ b/quickstep/res/values-am/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"አጋራ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ቅጽበታዊ ገጽ እይታ"</string>
<string name="action_split" msgid="2098009717623550676">"ክፈል"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"የተከፈለ ማያን ለመጠቀም ሌላ መተግበሪያ መታ ያድርጉ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ይህ ድርጊት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"የአሰሳ አጋዥ ሥልጠናን ይዝለሉ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ይህን በኋላ በ<xliff:g id="NAME">%1$s</xliff:g> መተግበሪያው ውስጥ ማግኘት ይችላሉ"</string>
diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml
index da28f8e..afba62e 100644
--- a/quickstep/res/values-ar/strings.xml
+++ b/quickstep/res/values-ar/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"مشاركة"</string>
<string name="action_screenshot" msgid="8171125848358142917">"لقطة شاشة"</string>
<string name="action_split" msgid="2098009717623550676">"تقسيم"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"انقر على تطبيق آخر لاستخدام وضع تقسيم الشاشة."</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"لا يسمح التطبيق أو لا تسمح مؤسستك بهذا الإجراء."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"هل تريد تخطي الدليل التوجيهي؟"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"يمكنك العثور على هذا الدليل التوجيهي لاحقًا في التطبيق \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml
index b052d34..a77efa4 100644
--- a/quickstep/res/values-as/strings.xml
+++ b/quickstep/res/values-as/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"শ্বেয়াৰ কৰক"</string>
<string name="action_screenshot" msgid="8171125848358142917">"স্ক্ৰীনশ্বট"</string>
<string name="action_split" msgid="2098009717623550676">"বিভাজন কৰক"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰিবলৈ অন্য এটা এপত টিপক"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"এপ্টোৱে অথবা আপোনাৰ প্ৰতিষ্ঠানে এই কাৰ্যটোৰ অনুমতি নিদিয়ে"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"নেভিগেশ্বনৰ টিউট’ৰিয়েল এৰিব বিচাৰে নেকি?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"আপুনি এয়া পাছত <xliff:g id="NAME">%1$s</xliff:g> এপ্টোত বিচাৰিব পাৰিব"</string>
diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml
index ea78f0a..7c8f313 100644
--- a/quickstep/res/values-az/strings.xml
+++ b/quickstep/res/values-az/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Paylaşın"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skrinşot"</string>
<string name="action_split" msgid="2098009717623550676">"Ayırın"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Bölmə ekranını istifadə etmək üçün başqa tətbiqə toxunun"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Bu əməliyyata tətbiq və ya təşkilatınız tərəfindən icazə verilmir"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Naviqasiya dərsliyi ötürülsün?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Bunu sonra <xliff:g id="NAME">%1$s</xliff:g> tətbiqində tapa bilərsiniz"</string>
diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml
index 28770b3..f9c0a77 100644
--- a/quickstep/res/values-b+sr+Latn/strings.xml
+++ b/quickstep/res/values-b+sr+Latn/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Deli"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snimak ekrana"</string>
<string name="action_split" msgid="2098009717623550676">"Podeli"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Dodirnite drugu aplikaciju za podeljeni ekran"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Aplikacija ili organizacija ne dozvoljavaju ovu radnju"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Želite da preskočite vodič za kretanje?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Možete da pronađete ovo kasnije u aplikaciji <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml
index 816e568..f98ca49 100644
--- a/quickstep/res/values-be/strings.xml
+++ b/quickstep/res/values-be/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Абагуліць"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Здымак экрана"</string>
<string name="action_split" msgid="2098009717623550676">"Падзелены экран"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Для падзеленага экрана націсніце на іншую праграму"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Гэта дзеянне не дазволена праграмай ці вашай арганізацыяй"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Прапусціць дапаможнік па навігацыі?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Знайсці дапаможнік можна ў праграме \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml
index f3154d0..d3b8e55 100644
--- a/quickstep/res/values-bg/strings.xml
+++ b/quickstep/res/values-bg/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Споделяне"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Екранна снимка"</string>
<string name="action_split" msgid="2098009717623550676">"Разделяне на екрана"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Докоснете друго прил., за да ползвате разд. екран"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Това действие не е разрешено от приложението или организацията ви"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Пропускане на урока за навигиране?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Урокът е налице в приложението <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml
index 97f05c0..5a7400a 100644
--- a/quickstep/res/values-bn/strings.xml
+++ b/quickstep/res/values-bn/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"শেয়ার করুন"</string>
<string name="action_screenshot" msgid="8171125848358142917">"স্ক্রিনশট নিন"</string>
<string name="action_split" msgid="2098009717623550676">"স্প্লিট"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"স্প্লিটস্ক্রিন ব্যবহার করতে অন্য অ্যাপে ট্যাপ করুন"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"এই অ্যাপ বা আপনার প্রতিষ্ঠান এই অ্যাকশনটি পারফর্ম করার অনুমতি দেয়নি"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"নেভিগেশন টিউটোরিয়াল এড়িয়ে যেতে চান?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"আপনি <xliff:g id="NAME">%1$s</xliff:g> অ্যাপে পরে এটি খুঁজে পাবেন"</string>
diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml
index d249dc7..d9ed0b2 100644
--- a/quickstep/res/values-bs/strings.xml
+++ b/quickstep/res/values-bs/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Dijeli"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snimak ekrana"</string>
<string name="action_split" msgid="2098009717623550676">"Podijeli"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Dodirnite drugu apl. da koristite podijeljeni ekran"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Ovu radnju ne dozvoljava aplikacija ili vaša organizacija"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Preskočiti vodič za navigiranje?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"To možete pronaći kasnije u aplikaciji <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml
index 36159eb..affac8d 100644
--- a/quickstep/res/values-ca/strings.xml
+++ b/quickstep/res/values-ca/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Comparteix"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Captura de pantalla"</string>
<string name="action_split" msgid="2098009717623550676">"Divideix"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Toca una altra aplicació per dividir la pantalla"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"L\'aplicació o la teva organització no permeten aquesta acció"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Vols ometre el tutorial de navegació?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Pots trobar-lo més tard a l\'aplicació <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml
index be1800d..dbdc828 100644
--- a/quickstep/res/values-cs/strings.xml
+++ b/quickstep/res/values-cs/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Sdílet"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snímek obrazovky"</string>
<string name="action_split" msgid="2098009717623550676">"Rozdělit"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Klepnutím na jinou aplikaci rozdělíte obrazovku"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Aplikace nebo organizace zakazuje tuto akci"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Přeskočit výukový program k navigaci?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Program později najdete v aplikaci <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml
index 1487081..3f7178e 100644
--- a/quickstep/res/values-da/strings.xml
+++ b/quickstep/res/values-da/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Del"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Opdel"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tryk på en anden app for at bruge opdelt skærm"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Appen eller din organisation tillader ikke denne handling"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Vil du springe selvstudiet for navigation over?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Du kan finde dette senere i appen <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml
index 05353d9..61a2751 100644
--- a/quickstep/res/values-de/strings.xml
+++ b/quickstep/res/values-de/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Teilen"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Teilen"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Für „Bildschirm teilen“ auf weitere App tippen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Die App oder deine Organisation lässt diese Aktion nicht zu"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Navigationstutorial überspringen?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Du findest es später auch in der <xliff:g id="NAME">%1$s</xliff:g> App"</string>
diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml
index 6876877..ce6f893 100644
--- a/quickstep/res/values-el/strings.xml
+++ b/quickstep/res/values-el/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Κοινοποίηση"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Στιγμιότυπο οθόνης"</string>
<string name="action_split" msgid="2098009717623550676">"Διαχωρισμός"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Πατήστε άλλη εφαρμογή για χρήση διαχωρισμού οθόνης"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Αυτή η ενέργεια δεν επιτρέπεται από την εφαρμογή ή τον οργανισμό σας."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Παράβλεψη οδηγού πλοήγησης;"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Βρείτε τον αργότερα στην εφαρμογή <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml
index 05e2651..847e1a5 100644
--- a/quickstep/res/values-en-rAU/strings.xml
+++ b/quickstep/res/values-en-rAU/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Split"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tap another app to use split-screen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Skip navigation tutorial?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"You can find this later in the <xliff:g id="NAME">%1$s</xliff:g> app"</string>
diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml
index 05e2651..847e1a5 100644
--- a/quickstep/res/values-en-rCA/strings.xml
+++ b/quickstep/res/values-en-rCA/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Split"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tap another app to use split-screen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Skip navigation tutorial?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"You can find this later in the <xliff:g id="NAME">%1$s</xliff:g> app"</string>
diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml
index 05e2651..847e1a5 100644
--- a/quickstep/res/values-en-rGB/strings.xml
+++ b/quickstep/res/values-en-rGB/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Split"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tap another app to use split-screen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Skip navigation tutorial?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"You can find this later in the <xliff:g id="NAME">%1$s</xliff:g> app"</string>
diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml
index 05e2651..847e1a5 100644
--- a/quickstep/res/values-en-rIN/strings.xml
+++ b/quickstep/res/values-en-rIN/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Split"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tap another app to use split-screen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Skip navigation tutorial?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"You can find this later in the <xliff:g id="NAME">%1$s</xliff:g> app"</string>
diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml
index c0ce050..1f1476c 100644
--- a/quickstep/res/values-en-rXC/strings.xml
+++ b/quickstep/res/values-en-rXC/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Split"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tap another app to use splitscreen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organization"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Skip navigation tutorial?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"You can find this later in the <xliff:g id="NAME">%1$s</xliff:g> app"</string>
diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml
index a1c1406..059f7db 100644
--- a/quickstep/res/values-es-rUS/strings.xml
+++ b/quickstep/res/values-es-rUS/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Compartir"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Captura de pantalla"</string>
<string name="action_split" msgid="2098009717623550676">"Pantalla dividida"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Presiona otra app para usar la pantalla dividida"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"La app o tu organización no permiten realizar esta acción"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"¿Omitir el instructivo de navegación?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Puedes encontrarlo en la app de <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml
index 272752d..98b91b4 100644
--- a/quickstep/res/values-es/strings.xml
+++ b/quickstep/res/values-es/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Compartir"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Hacer captura"</string>
<string name="action_split" msgid="2098009717623550676">"Dividir"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Toca otra aplicación para usar la pantalla dividida"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"No puedes hacerlo porque la aplicación o tu organización no lo permiten"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"¿Saltar tutorial de navegación?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Puedes consultarlo en otro momento en la aplicación <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml
index f19f36c..7719cbd 100644
--- a/quickstep/res/values-et/strings.xml
+++ b/quickstep/res/values-et/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Jaga"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekraanipilt"</string>
<string name="action_split" msgid="2098009717623550676">"Eralda"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Jagatud kuva kasutamiseks puudutage muud rakendust"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Rakendus või teie organisatsioon on selle toimingu keelanud"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Kas jätta navigeerimise õpetused vahele?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Leiate selle hiljem rakendusest <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml
index cb48785..dbeeab6 100644
--- a/quickstep/res/values-eu/strings.xml
+++ b/quickstep/res/values-eu/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Partekatu"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Atera pantaila-argazki bat"</string>
<string name="action_split" msgid="2098009717623550676">"Zatitu"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Sakatu beste aplikazio bat pantaila zatitzeko"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Aplikazioak edo erakundeak ez du eman ekintza hori gauzatzeko baimena"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Nabigazio-tutoriala saltatu nahi duzu?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"<xliff:g id="NAME">%1$s</xliff:g> aplikazioan dago eskuragarri tutoriala"</string>
diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml
index aebaf02..5e369c7 100644
--- a/quickstep/res/values-fa/strings.xml
+++ b/quickstep/res/values-fa/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"همرسانی"</string>
<string name="action_screenshot" msgid="8171125848358142917">"نماگرفت"</string>
<string name="action_split" msgid="2098009717623550676">"دونیمه"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"برای استفاده از صفحهٔ دونیمه، روی برنامه دیگری ضربه بزنید"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"برنامه یا سازمان شما اجازه نمیدهد این کنش انجام شود."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"آموزش گامبهگام پیمایش رد شود؟"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"میتوانید آن را بعداً در برنامه <xliff:g id="NAME">%1$s</xliff:g> پیدا کنید"</string>
diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml
index fb78f54..e7d61cc 100644
--- a/quickstep/res/values-fi/strings.xml
+++ b/quickstep/res/values-fi/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Jaa"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Kuvakaappaus"</string>
<string name="action_split" msgid="2098009717623550676">"Jaa"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Avaa jaettu näyttö napauttamalla toista sovellusta"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Sovellus tai organisaatio ei salli tätä toimintoa"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Ohitetaanko navigointiohje?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Löydät tämän myöhemmin sovelluksesta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml
index 872a891..43928b9 100644
--- a/quickstep/res/values-fr-rCA/strings.xml
+++ b/quickstep/res/values-fr-rCA/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Partager"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Capture d\'écran"</string>
<string name="action_split" msgid="2098009717623550676">"Séparé"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Touchez une autre appli pour partager l\'écran"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"L\'application ou votre organisation n\'autorise pas cette action"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Ignorer le tutoriel sur la navigation?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Vous trouverez le tutoriel dans l\'application <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml
index 474e77b..092b5e8 100644
--- a/quickstep/res/values-fr/strings.xml
+++ b/quickstep/res/values-fr/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Partager"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Capture d\'écran"</string>
<string name="action_split" msgid="2098009717623550676">"Partager"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Appuyez sur autre appli pour utiliser écran partagé"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Cette action n\'est pas autorisée par l\'application ou par votre organisation"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Ignorer le tutoriel de navigation ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Vous le retrouverez dans l\'appli <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml
index bfc325e..ca88b00 100644
--- a/quickstep/res/values-gl/strings.xml
+++ b/quickstep/res/values-gl/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Compartir"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Facer captura"</string>
<string name="action_split" msgid="2098009717623550676">"Dividir"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Para usar a pantalla dividida, toca outra app"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"A aplicación ou a túa organización non permite realizar esta acción"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Queres omitir o titorial de navegación?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Podes atopar isto máis tarde na aplicación <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml
index 29a1c90..aec0960 100644
--- a/quickstep/res/values-gu/strings.xml
+++ b/quickstep/res/values-gu/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"શેર કરો"</string>
<string name="action_screenshot" msgid="8171125848358142917">"સ્ક્રીનશૉટ"</string>
<string name="action_split" msgid="2098009717623550676">"વિભાજિત કરો"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"સ્પલિટસ્ક્રીનના વપરાશ માટે, કોઈ અન્ય ઍપ પર ટૅપ કરો"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ઍપ કે તમારી સંસ્થા દ્વારા આ ક્રિયા કરવાની મંજૂરી નથી"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"નૅવિગેશન ટ્યૂટૉરિઅલ છોડી દઈએ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"તમે આને પછીથી <xliff:g id="NAME">%1$s</xliff:g> ઍપમાં જોઈ શકો છો"</string>
diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml
index b3f0145..c019908 100644
--- a/quickstep/res/values-hi/strings.xml
+++ b/quickstep/res/values-hi/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"शेयर करें"</string>
<string name="action_screenshot" msgid="8171125848358142917">"स्क्रीनशॉट लें"</string>
<string name="action_split" msgid="2098009717623550676">"स्प्लिट स्क्रीन मोड"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"स्प्लिट स्क्रीन मोड के लिए, दूसरे ऐप पर टैप करें"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ऐप्लिकेशन या आपका संगठन इस कार्रवाई की अनुमति नहीं देता"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"नेविगेशन ट्यूटोरियल छोड़ना चाहते हैं?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"आप बाद में <xliff:g id="NAME">%1$s</xliff:g> ऐप्लिकेशन पर इसे देख सकते हैं"</string>
diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml
index 8e1d273..2b3cdac 100644
--- a/quickstep/res/values-hr/strings.xml
+++ b/quickstep/res/values-hr/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Podijeli"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snimka zaslona"</string>
<string name="action_split" msgid="2098009717623550676">"Podijeli"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Dodirnite drugu aplikaciju za podijeljeni zaslon"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Aplikacija ili vaša organizacija ne dopuštaju ovu radnju"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Želite li preskočiti vodič za kretanje?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Kasnije ga možete pronaći u aplikaciji <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml
index 9bc2be9..46ac97b 100644
--- a/quickstep/res/values-hu/strings.xml
+++ b/quickstep/res/values-hu/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Megosztás"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Képernyőkép"</string>
<string name="action_split" msgid="2098009717623550676">"Felosztás"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Koppintson másik appra a képernyőmegosztáshoz"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Az alkalmazás vagy az Ön szervezete nem engedélyezi ezt a műveletet"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Kihagyja a navigáció bemutatóját?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Ezt később megtalálhatja a(z) <xliff:g id="NAME">%1$s</xliff:g> alkalmazásban"</string>
diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml
index a6524e3..682d071 100644
--- a/quickstep/res/values-hy/strings.xml
+++ b/quickstep/res/values-hy/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Կիսվել"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Սքրինշոթ անել"</string>
<string name="action_split" msgid="2098009717623550676">"Տրոհել"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Հպեք այլ հավելվածի՝ էկրանը տրոհելու համար"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Այս գործողությունն արգելված է հավելվածի կամ ձեր կազմակերպության կողմից"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Բաց թողնե՞լ նավիգացիայի ուղեցույցը"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Հետագայում սա կարող եք գտնել «<xliff:g id="NAME">%1$s</xliff:g>» հավելվածում"</string>
diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml
index a251675..4774ae4 100644
--- a/quickstep/res/values-in/strings.xml
+++ b/quickstep/res/values-in/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Bagikan"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Pisahkan"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Ketuk aplikasi lain untuk menggunakan layar terpisah"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Tindakan ini tidak diizinkan oleh aplikasi atau organisasi Anda"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Lewati tutorial navigasi?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Anda dapat menemukan tutorial ini di lain waktu di aplikasi <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml
index 2dfa174..3bfbad8 100644
--- a/quickstep/res/values-is/strings.xml
+++ b/quickstep/res/values-is/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Deila"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skjámynd"</string>
<string name="action_split" msgid="2098009717623550676">"Skipta"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Ýttu á annað forrit til að nota skjáskiptingu"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Forritið eða fyrirtækið leyfir ekki þessa aðgerð"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Sleppa flettileiðsögn?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Þú getur fundið þetta síðar í forritinu <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml
index 76b1168..0825c5f 100644
--- a/quickstep/res/values-it/strings.xml
+++ b/quickstep/res/values-it/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Condividi"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Dividi"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tocca un\'altra app per usare lo schermo diviso"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Questa azione non è consentita dall\'app o dall\'organizzazione"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Saltare il tutorial di navigazione?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Puoi trovarlo in un secondo momento nell\'app <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml
index 8ace113..18980d8 100644
--- a/quickstep/res/values-iw/strings.xml
+++ b/quickstep/res/values-iw/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"שיתוף"</string>
<string name="action_screenshot" msgid="8171125848358142917">"צילום מסך"</string>
<string name="action_split" msgid="2098009717623550676">"פיצול"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"צריך להקיש על אפליקציה אחרת כדי להשתמש במסך מפוצל"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"האפליקציה או הארגון שלך אינם מתירים את הפעולה הזאת"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"לדלג על המדריך לניווט?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ניתן למצוא את המדריך מאוחר יותר באפליקציה <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml
index 74ccb3d..ff59e2a 100644
--- a/quickstep/res/values-ja/strings.xml
+++ b/quickstep/res/values-ja/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"共有"</string>
<string name="action_screenshot" msgid="8171125848358142917">"スクリーンショット"</string>
<string name="action_split" msgid="2098009717623550676">"分割"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"分割画面を使用するには、他のアプリをタップします"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"この操作はアプリまたは組織で許可されていません"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"操作チュートリアルをスキップしますか?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"チュートリアルは後から <xliff:g id="NAME">%1$s</xliff:g> アプリで確認できます"</string>
diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml
index 17adb8a..c6f6d2d 100644
--- a/quickstep/res/values-ka/strings.xml
+++ b/quickstep/res/values-ka/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"გაზიარება"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ეკრანის ანაბეჭდი"</string>
<string name="action_split" msgid="2098009717623550676">"გაყოფა"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"შეეხეთ სხვა აპს ეკრანის გასაყოფად"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ეს მოქმედება არ არის დაშვებული აპის ან თქვენი ორგანიზაციის მიერ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"გსურთ, გამოტოვოთ ნავიგაციის სახელმძღვანელო?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ამის მოგვიანებით პოვნა <xliff:g id="NAME">%1$s</xliff:g> აპში შეგიძლიათ"</string>
diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml
index 0ec8e73..f109f2d 100644
--- a/quickstep/res/values-kk/strings.xml
+++ b/quickstep/res/values-kk/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Бөлісу"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Скриншот"</string>
<string name="action_split" msgid="2098009717623550676">"Бөлу"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Экранды бөлу режимін пайдалану үшін басқа қолданбаны түртіңіз."</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Бұл әрекетке қолданба не ұйым рұқсат етпейді."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Қимылдар оқулығын өткізіп жіберу керек пе?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Мұны кейін <xliff:g id="NAME">%1$s</xliff:g> қолданбасынан таба аласыз."</string>
diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml
index 83d0d54..2d0c621 100644
--- a/quickstep/res/values-km/strings.xml
+++ b/quickstep/res/values-km/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"ចែករំលែក"</string>
<string name="action_screenshot" msgid="8171125848358142917">"រូបថតអេក្រង់"</string>
<string name="action_split" msgid="2098009717623550676">"បំបែក"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"ចុចកម្មវិធីផ្សេងទៀត ដើម្បីប្រើមុខងារបំបែកអេក្រង់"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"សកម្មភាពនេះមិនត្រូវបានអនុញ្ញាតដោយកម្មវិធី ឬស្ថាប័នរបស់អ្នកទេ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"រំលងមេរៀនអំពីការរុករកឬ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"អ្នកអាចស្វែងរកមេរៀននេះនៅពេលក្រោយក្នុងកម្មវិធី <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml
index b72b16a..31340c8 100644
--- a/quickstep/res/values-kn/strings.xml
+++ b/quickstep/res/values-kn/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ಸ್ಕ್ರೀನ್ಶಾಟ್"</string>
<string name="action_split" msgid="2098009717623550676">"ವಿಭಜಿಸಿ"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಳಸಲು ಬೇರೊಂದು ಆ್ಯಪ್ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ಆ್ಯಪ್ ಅಥವಾ ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಕ್ರಿಯೆಯನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"ನ್ಯಾವಿಗೇಷನ್ ಟ್ಯುಟೋರಿಯಲ್ ಸ್ಕಿಪ್ ಮಾಡಿ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"<xliff:g id="NAME">%1$s</xliff:g> ಆ್ಯಪ್ನಲ್ಲಿ ಇದನ್ನು ನಂತರ ಕಾಣಬಹುದು"</string>
diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml
index 6ab1434..a4fbee8 100644
--- a/quickstep/res/values-ko/strings.xml
+++ b/quickstep/res/values-ko/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"공유"</string>
<string name="action_screenshot" msgid="8171125848358142917">"스크린샷"</string>
<string name="action_split" msgid="2098009717623550676">"분할"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"다른 앱을 탭하여 화면 분할 사용"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"이 작업은 앱 또는 조직에서 허용되지 않습니다."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"이동 방법 튜토리얼을 건너뛰시겠습니까?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"이 튜토리얼은 <xliff:g id="NAME">%1$s</xliff:g> 앱에서 다시 볼 수 있습니다"</string>
diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml
index 0ff7652..4cf8593 100644
--- a/quickstep/res/values-ky/strings.xml
+++ b/quickstep/res/values-ky/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Бөлүшүү"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Скриншот"</string>
<string name="action_split" msgid="2098009717623550676">"Бөлүү"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Экранды бөлүү үчүн башка колдонмону таптап коюңуз"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Бул аракетти аткарууга колдонмо же ишканаңыз тыюу салган"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Жаңсоолор үйрөткүчүн өткөрүп жибересизби?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Аны кийин <xliff:g id="NAME">%1$s</xliff:g> колдонмосунан табасыз"</string>
diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml
index 7a72d25..45d7c92 100644
--- a/quickstep/res/values-lo/strings.xml
+++ b/quickstep/res/values-lo/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"ແບ່ງປັນ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ຮູບໜ້າຈໍ"</string>
<string name="action_split" msgid="2098009717623550676">"ແບ່ງ"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"ແຕະແອັບອື່ນເພື່ອໃຊ້ການແຍກໜ້າຈໍ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ແອັບ ຫຼື ອົງການຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຄຳສັ່ງນີ້"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"ຂ້າມການສອນການນຳໃຊ້ການນຳທາງບໍ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ທ່ານສາມາດຊອກສ່ວນນີ້ພາຍຫຼັງໄດ້ໃນແອັບ <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml
index 08d4774..b7a4a36 100644
--- a/quickstep/res/values-lt/strings.xml
+++ b/quickstep/res/values-lt/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Bendrinti"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekrano kopija"</string>
<string name="action_split" msgid="2098009717623550676">"Išskaidymo režimas"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Pal. kitą progr., kad gal. naud. išsk. ekr. rež."</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Jūsų organizacijoje arba naudojant šią programą neleidžiama atlikti šio veiksmo"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Praleisti naršymo mokymo programą?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Tai galėsite rasti vėliau programoje „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml
index 2d06e47..1371b2a 100644
--- a/quickstep/res/values-lv/strings.xml
+++ b/quickstep/res/values-lv/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Kopīgot"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Veikt ekrānuzņēmumu"</string>
<string name="action_split" msgid="2098009717623550676">"Sadalīt"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Piesk. citai lietotnei, lai izm. ekrāna sadalīšanu"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Lietotne vai jūsu organizācija neatļauj veikt šo darbību."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Vai izlaist navigācijas mācības?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Varēsiet to vēlāk atrast lietotnē <xliff:g id="NAME">%1$s</xliff:g>."</string>
diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml
index 83ab8c0..5b2c45b 100644
--- a/quickstep/res/values-mk/strings.xml
+++ b/quickstep/res/values-mk/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Сподели"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Слика од екранот"</string>
<string name="action_split" msgid="2098009717623550676">"Раздели"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Допрете друга апликација за да користите поделен екран"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Апликацијата или вашата организација не го дозволува дејствово"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Да се прескокне упатството за навигација?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Ова може да го најдете подоцна во апликацијата <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml
index 59b4257..15040c3 100644
--- a/quickstep/res/values-ml/strings.xml
+++ b/quickstep/res/values-ml/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"പങ്കിടുക"</string>
<string name="action_screenshot" msgid="8171125848358142917">"സ്ക്രീൻഷോട്ട്"</string>
<string name="action_split" msgid="2098009717623550676">"വിഭജിക്കുക"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"സ്പ്ലിറ്റ് സ്ക്രീനിനായി മറ്റൊരു ആപ്പ് ടാപ്പുചെയ്യൂ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ഈ നടപടി എടുക്കുന്നത് ആപ്പോ നിങ്ങളുടെ സ്ഥാപനമോ അനുവദിക്കുന്നില്ല"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"നാവിഗേഷൻ ട്യൂട്ടോറിയൽ ഒഴിവാക്കണോ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"<xliff:g id="NAME">%1$s</xliff:g> ആപ്പിൽ നിങ്ങൾക്ക് ഇത് പിന്നീട് കാണാനാകും"</string>
diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml
index 163415d..7d68e88 100644
--- a/quickstep/res/values-mn/strings.xml
+++ b/quickstep/res/values-mn/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Хуваалцах"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Дэлгэцийн агшин дарах"</string>
<string name="action_split" msgid="2098009717623550676">"Хуваах"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Дэлгэц хуваахыг ашиглах бол өөр аппыг товшино уу"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Энэ үйлдлийг апп эсвэл танай байгууллага зөвшөөрдөггүй"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Навигацын практик хичээлийг алгасах уу?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Та үүнийг дараа нь <xliff:g id="NAME">%1$s</xliff:g> аппаас олох боломжтой"</string>
diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml
index 864ba8c..e1bfe39 100644
--- a/quickstep/res/values-mr/strings.xml
+++ b/quickstep/res/values-mr/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"शेअर करा"</string>
<string name="action_screenshot" msgid="8171125848358142917">"स्क्रीनशॉट"</string>
<string name="action_split" msgid="2098009717623550676">"स्प्लिट"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"स्प्लिटस्क्रीन वापरण्यासाठी दुसऱ्या ॲपवर टॅप करा"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"अॅप किंवा तुमच्या संस्थेद्वारे ही क्रिया करण्याची अनुमती नाही"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"नेव्हिगेशन ट्यूटोरियल वगळायचे आहे का?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"तुम्हाला हे नंतर <xliff:g id="NAME">%1$s</xliff:g> ॲपमध्ये मिळेल"</string>
diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml
index 010e108..616e8fb 100644
--- a/quickstep/res/values-ms/strings.xml
+++ b/quickstep/res/values-ms/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Kongsi"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Tangkapan skrin"</string>
<string name="action_split" msgid="2098009717623550676">"Pisah"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Ketik apl lain untuk menggunakan skrin pisah"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Tindakan ini tidak dibenarkan oleh apl atau organisasi anda"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Langkau tutorial navigasi?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Anda boleh mendapatkan tutorial ini kemudian dalam apl <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml
index 3b4dea7..0b0a076 100644
--- a/quickstep/res/values-my/strings.xml
+++ b/quickstep/res/values-my/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"မျှဝေရန်"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
<string name="action_split" msgid="2098009717623550676">"ခွဲထုတ်ရန်"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"မျက်နှာပြင်ခွဲ၍ပြသရန် အက်ပ်နောက်တစ်ခုကို တို့ပါ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ဤလုပ်ဆောင်ချက်ကို အက်ပ် သို့မဟုတ် သင်၏အဖွဲ့အစည်းက ခွင့်မပြုပါ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"လမ်းညွှန်ခြင်း ရှင်းလင်းပို့ချချက်ကို ကျော်မလား။"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"၎င်းကို နောက်မှ <xliff:g id="NAME">%1$s</xliff:g> အက်ပ်တွင် ရှာနိုင်သည်"</string>
diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml
index 8d2823e..fc9b7eb 100644
--- a/quickstep/res/values-nb/strings.xml
+++ b/quickstep/res/values-nb/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Del"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skjermdump"</string>
<string name="action_split" msgid="2098009717623550676">"Del opp"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Trykk på en annen app for å bruke delt skjerm"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Appen eller organisasjonen din tillater ikke denne handlingen"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Vil du hoppe over navigeringsveiledning?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Du kan finne dette i <xliff:g id="NAME">%1$s</xliff:g>-appen senere"</string>
diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml
index fcd5eca..536264d 100644
--- a/quickstep/res/values-ne/strings.xml
+++ b/quickstep/res/values-ne/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"सेयर गर्नुहोस्"</string>
<string name="action_screenshot" msgid="8171125848358142917">"स्क्रिनसट"</string>
<string name="action_split" msgid="2098009717623550676">"स्प्लिट गर्नुहोस्"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"स्प्लिटक्रिन प्रयोग गर्न अर्को एपमा ट्याप गर्नुहोस्"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"यो एप वा तपाईंको सङ्गठनले यो कारबाही गर्ने अनुमति दिँदैन"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"नेभिगेसन ट्युटोरियल स्किप गर्ने हो?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"तपाईं पछि <xliff:g id="NAME">%1$s</xliff:g> नामक एपमा गई यो ट्युटोरियल भेट्टाउन सक्नुहुन्छ"</string>
diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml
index 645d5de..c586d87 100644
--- a/quickstep/res/values-nl/strings.xml
+++ b/quickstep/res/values-nl/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Delen"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Splitsen"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tik op nog een app om je scherm te splitsen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Deze actie wordt niet toegestaan door de app of je organisatie"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Navigatietutorial overslaan?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Je vindt dit later terug in de app <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml
index 22e6c8c..5b7147e 100644
--- a/quickstep/res/values-or/strings.xml
+++ b/quickstep/res/values-or/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"ସେୟାର୍ କରନ୍ତୁ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ସ୍କ୍ରିନସଟ୍"</string>
<string name="action_split" msgid="2098009717623550676">"ସ୍ପ୍ଲିଟ୍"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"ସ୍ପ୍ଲିଟସ୍କ୍ରିନ ବ୍ୟବହାର କରିବାକୁ ଅନ୍ୟ ଏକ ଆପରେ ଟାପ କର"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ଆପ୍ କିମ୍ବା ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ଏହି କାର୍ଯ୍ୟକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"ନାଭିଗେସନ୍ ଟ୍ୟୁଟୋରିଆଲକୁ ବାଦ୍ ଦେବେ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ଆପଣ ପରେ ଏହାକୁ <xliff:g id="NAME">%1$s</xliff:g> ଆପରେ ପାଇପାରିବେ"</string>
diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml
index cf784fd..6b3ba6d 100644
--- a/quickstep/res/values-pa/strings.xml
+++ b/quickstep/res/values-pa/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"ਸਾਂਝਾ ਕਰੋ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
<string name="action_split" msgid="2098009717623550676">"ਸਪਲਿਟ"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਵਰਤਣ ਲਈ ਕਿਸੇ ਹੋਰ ਐਪ \'ਤੇ ਟੈਪ ਕਰੋ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਇਸ ਕਾਰਵਾਈ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"ਕੀ ਨੈਵੀਗੇਸ਼ਨ ਟਿਊਟੋਰੀਅਲ ਨੂੰ ਛੱਡਣਾ ਹੈ?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ਤੁਸੀਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ <xliff:g id="NAME">%1$s</xliff:g> ਐਪ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ"</string>
diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml
index 13e41c7..0a6a855 100644
--- a/quickstep/res/values-pl/strings.xml
+++ b/quickstep/res/values-pl/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Udostępnij"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Zrzut ekranu"</string>
<string name="action_split" msgid="2098009717623550676">"Podziel"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Kliknij drugą aplikację, aby podzielić ekran"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Nie możesz wykonać tego działania, bo nie zezwala na to aplikacja lub Twoja organizacja"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Pominąć samouczek nawigacji?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Znajdziesz to później w aplikacji <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml
index 3af7272..d54d8d8 100644
--- a/quickstep/res/values-pt-rPT/strings.xml
+++ b/quickstep/res/values-pt-rPT/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Partilhar"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Fazer captura de ecrã"</string>
<string name="action_split" msgid="2098009717623550676">"Dividir"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Toque noutra app para utilizar o ecrã dividido"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Esta ação não é permitida pela app ou a sua entidade."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Ignorar o tutorial de navegação?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Pode encontrar isto mais tarde na app <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml
index 8ea1ea4..623a25a 100644
--- a/quickstep/res/values-pt/strings.xml
+++ b/quickstep/res/values-pt/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Compartilhar"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Capturar tela"</string>
<string name="action_split" msgid="2098009717623550676">"Dividir"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Toque em outro app para dividir a tela"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Essa ação não é permitida pelo app ou pela organização"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Pular o tutorial de navegação?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Veja o tutorial mais tarde no app <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml
index 394d64f..ef3274e 100644
--- a/quickstep/res/values-ro/strings.xml
+++ b/quickstep/res/values-ro/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Distribuiți"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Captură de ecran"</string>
<string name="action_split" msgid="2098009717623550676">"Împărțit"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Atingeți altă aplicație pentru a folosi ecranul împărțit"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Această acțiune nu este permisă de aplicație sau de organizația dvs."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Omiteți tutorialul de navigare?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Îl puteți găsi mai târziu în aplicația <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml
index 807037f..5206908 100644
--- a/quickstep/res/values-ru/strings.xml
+++ b/quickstep/res/values-ru/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Поделиться"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Скриншот"</string>
<string name="action_split" msgid="2098009717623550676">"Разделить"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Для разделения экрана нажмите на другое приложение."</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Это действие заблокировано приложением или организацией."</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Пропустить руководство по жестам?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Его можно найти в приложении \"<xliff:g id="NAME">%1$s</xliff:g>\"."</string>
diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml
index 851cdb3..cc47134 100644
--- a/quickstep/res/values-si/strings.xml
+++ b/quickstep/res/values-si/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"බෙදා ගන්න"</string>
<string name="action_screenshot" msgid="8171125848358142917">"තිර රුව"</string>
<string name="action_split" msgid="2098009717623550676">"බෙදන්න"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"බෙදුම් තිරය භාවිත කිරීමට තවත් යෙදුමක් තට්ටු කරන්න"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"මෙම ක්රියාව යෙදුම හෝ ඔබේ සංවිධානය මගින් ඉඩ නොදේ"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"නිබන්ධනය සංචාලනය මඟ හරින්නද?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"ඔබට මෙය පසුව <xliff:g id="NAME">%1$s</xliff:g> යෙදුම තුළ සොයා ගත හැකිය"</string>
diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml
index 0f89daa..8b72c86 100644
--- a/quickstep/res/values-sk/strings.xml
+++ b/quickstep/res/values-sk/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Zdieľať"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snímka obrazovky"</string>
<string name="action_split" msgid="2098009717623550676">"Rozdeliť"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Rozdel. obrazovku spustíte klepnutím na inú aplik."</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Aplikácia alebo vaša organizácia túto akciu nepovoľuje"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Chcete preskočiť návod na navigáciu?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Tento návod nájdete v aplikácii <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml
index c2b63ed..1d42eb8 100644
--- a/quickstep/res/values-sl/strings.xml
+++ b/quickstep/res/values-sl/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Deli"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Posnetek zaslona"</string>
<string name="action_split" msgid="2098009717623550676">"Razdeli"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Za uporabo razdeljenega zaslona se dotaknite še ene aplikacije."</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Aplikacija ali vaša organizacija ne dovoljuje tega dejanja"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Želite preskočiti vadnico za krmarjenje?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"To lahko pozneje najdete v aplikaciji <xliff:g id="NAME">%1$s</xliff:g>."</string>
diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml
index 9cef63b..4d010e3 100644
--- a/quickstep/res/values-sq/strings.xml
+++ b/quickstep/res/values-sq/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Ndaj"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Pamja e ekranit"</string>
<string name="action_split" msgid="2098009717623550676">"Ndaj"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Trokit aplikacion tjetër e përdor ekranin e ndarë"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Ky veprim nuk lejohet nga aplikacioni ose organizata jote"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Të kapërcehet udhëzuesi i navigimit?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Këtë mund ta gjesh më vonë tek aplikacioni <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml
index ddd17aa..6c22e89 100644
--- a/quickstep/res/values-sr/strings.xml
+++ b/quickstep/res/values-sr/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Дели"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Снимак екрана"</string>
<string name="action_split" msgid="2098009717623550676">"Подели"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Додирните другу апликацију за подељени екран"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Апликација или организација не дозвољавају ову радњу"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Желите да прескочите водич за кретање?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Можете да пронађете ово касније у апликацији <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml
index dcd9c5c..9c32401 100644
--- a/quickstep/res/values-sv/strings.xml
+++ b/quickstep/res/values-sv/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Dela"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skärmbild"</string>
<string name="action_split" msgid="2098009717623550676">"Delat"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Tryck på en annan app för att använda delad skärm"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Appen eller organisationen tillåter inte den här åtgärden"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Vill du hoppa över självstudierna?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Du hittar det här igen i <xliff:g id="NAME">%1$s</xliff:g>-appen"</string>
diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml
index 236405e..d237fb9 100644
--- a/quickstep/res/values-sw/strings.xml
+++ b/quickstep/res/values-sw/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Shiriki"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Picha ya skrini"</string>
<string name="action_split" msgid="2098009717623550676">"Iliyogawanywa"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Gusa programu nyingine ili utumie skrini iliyogawanywa"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Kitendo hiki hakiruhusiwi na programu au shirika lako"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Ungependa kuruka mafunzo ya usogezaji?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Utapata mafunzo haya baadaye katika programu ya <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml
index 50138b3..7cbaebf 100644
--- a/quickstep/res/values-ta/strings.xml
+++ b/quickstep/res/values-ta/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"பகிர்"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ஸ்கிரீன்ஷாட்"</string>
<string name="action_split" msgid="2098009717623550676">"பிரி"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"ஸ்பிளிட் ஸ்கிரீனுக்கு மற்றொரு ஆப்ஸைத் தட்டவும்"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ஆப்ஸோ உங்கள் நிறுவனமோ இந்த செயலை அனுமதிப்பதில்லை"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"வழிகாட்டுதல் பயிற்சியைத் தவிர்க்கவா?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"<xliff:g id="NAME">%1$s</xliff:g> ஆப்ஸில் பிறகு இதைக் கண்டறியலாம்"</string>
diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml
index 2a3bb34..8a6aa1a2 100644
--- a/quickstep/res/values-te/strings.xml
+++ b/quickstep/res/values-te/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"షేర్ చేయండి"</string>
<string name="action_screenshot" msgid="8171125848358142917">"స్క్రీన్షాట్"</string>
<string name="action_split" msgid="2098009717623550676">"స్ప్లిట్ చేయండి"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"స్క్రీన్ విభజనను ఉపయోగించడానికి మరొక యాప్ నొక్కండి"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ఈ చర్యను యాప్ గానీ, మీ సంస్థ గానీ అనుమతించవు"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"నావిగేషన్ ట్యుటోరియల్ను స్కిప్ చేయాలా?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"<xliff:g id="NAME">%1$s</xliff:g> యాప్లో మీరు తర్వాత కనుగొనవచ్చు"</string>
diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml
index 92862ac..ced0396 100644
--- a/quickstep/res/values-th/strings.xml
+++ b/quickstep/res/values-th/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"แชร์"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ภาพหน้าจอ"</string>
<string name="action_split" msgid="2098009717623550676">"แยก"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"แตะที่แอปอื่นเพื่อใช้แบ่งหน้าจอ"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"แอปหรือองค์กรของคุณไม่อนุญาตการดำเนินการนี้"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"ข้ามบทแนะนำการนำทางไหม"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"คุณดูบทแนะนำนี้ได้ภายหลังในแอป \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml
index b16efdb..1af6f36 100644
--- a/quickstep/res/values-tl/strings.xml
+++ b/quickstep/res/values-tl/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Ibahagi"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
<string name="action_split" msgid="2098009717623550676">"Split"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Mag-tap ng ibang app para gamitin ang splitscreen"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Hindi pinapayagan ng app o ng iyong organisasyon ang pagkilos na ito"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Laktawan ang tutorial sa pag-navigate?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Makikita mo ito sa <xliff:g id="NAME">%1$s</xliff:g> app sa ibang pagkakataon"</string>
diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml
index 03d6ed9..581bd29 100644
--- a/quickstep/res/values-tr/strings.xml
+++ b/quickstep/res/values-tr/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Paylaş"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekran görüntüsü"</string>
<string name="action_split" msgid="2098009717623550676">"Böl"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Bölünmüş ekran için başka bir uygulamaya dokunun"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Uygulamanız veya kuruluşunuz bu işleme izin vermiyor"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Gezinme eğitimi atlansın mı?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Bunu daha sonra <xliff:g id="NAME">%1$s</xliff:g> uygulamasında bulabilirsiniz"</string>
diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml
index 39ea42d..5163a5c 100644
--- a/quickstep/res/values-uk/strings.xml
+++ b/quickstep/res/values-uk/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Поділитися"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Знімок екрана"</string>
<string name="action_split" msgid="2098009717623550676">"Розділити"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Щоб розділити екран, виберіть ще один додаток"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Ця дія заборонена додатком або адміністратором організації"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Пропустити посібник із навігації?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Ви знайдете його пізніше в додатку <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml
index 5c45999..5e210ff 100644
--- a/quickstep/res/values-ur/strings.xml
+++ b/quickstep/res/values-ur/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"اشتراک کریں"</string>
<string name="action_screenshot" msgid="8171125848358142917">"اسکرین شاٹ"</string>
<string name="action_split" msgid="2098009717623550676">"اسپلٹ"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"اسپلٹ اسکرین کا استعمال کرنے کیلئے دوسری ایپ پر تھپتھپائیں"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"ایپ یا آپ کی تنظیم کی جانب سے اس کارروائی کی اجازت نہیں ہے"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"نیویگیشن کا ٹیوٹوریل نظر انداز کریں؟"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"آپ اسے بعد میں <xliff:g id="NAME">%1$s</xliff:g> ایپ میں تلاش کر سکتے ہیں"</string>
diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml
index c9874b3..4157abd 100644
--- a/quickstep/res/values-uz/strings.xml
+++ b/quickstep/res/values-uz/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Ulashish"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skrinshot"</string>
<string name="action_split" msgid="2098009717623550676">"Ajratish"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Ekranni ikkiga ajratish uchun boshqa ilovani bosing"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Bu amal ilova yoki tashkilotingiz tomonidan taqiqlangan"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Navigatsiya darsi yopilsinmi?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Bu darslar <xliff:g id="NAME">%1$s</xliff:g> ilovasida chiqadi"</string>
diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml
index ac8014c..d370969 100644
--- a/quickstep/res/values-vi/strings.xml
+++ b/quickstep/res/values-vi/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Chia sẻ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Chụp ảnh màn hình"</string>
<string name="action_split" msgid="2098009717623550676">"Chia đôi màn hình"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Nhấn vào một ứng dụng khác để dùng màn hình chia đôi"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Ứng dụng hoặc tổ chức của bạn không cho phép thực hiện hành động này"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Bỏ qua phần hướng dẫn thao tác?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Bạn có thể tìm lại phần hướng dẫn này trong ứng dụng <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml
index 22d25d3..a376f93 100644
--- a/quickstep/res/values-zh-rCN/strings.xml
+++ b/quickstep/res/values-zh-rCN/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"分享"</string>
<string name="action_screenshot" msgid="8171125848358142917">"屏幕截图"</string>
<string name="action_split" msgid="2098009717623550676">"拆分"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"点按另一个应用即可使用分屏"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"该应用或您所在的单位不允许执行此操作"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"要跳过导航教程吗?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"您之后可以在“<xliff:g id="NAME">%1$s</xliff:g>”应用中找到此教程"</string>
diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml
index 7858af9..00d2150 100644
--- a/quickstep/res/values-zh-rHK/strings.xml
+++ b/quickstep/res/values-zh-rHK/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"分享"</string>
<string name="action_screenshot" msgid="8171125848358142917">"螢幕截圖"</string>
<string name="action_split" msgid="2098009717623550676">"分割"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"輕按其他應用程式以使用分割螢幕"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"應用程式或您的機構不允許此操作"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"要略過手勢操作教學課程嗎?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"您之後可以在「<xliff:g id="NAME">%1$s</xliff:g>」應用程式找到這些說明"</string>
diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml
index fe1b11a..1aadb29 100644
--- a/quickstep/res/values-zh-rTW/strings.xml
+++ b/quickstep/res/values-zh-rTW/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"分享"</string>
<string name="action_screenshot" msgid="8171125848358142917">"螢幕截圖"</string>
<string name="action_split" msgid="2098009717623550676">"分割"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"輕觸另一個應用程式即可使用分割畫面"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"這個應用程式或貴機構不允許執行這個動作"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"要略過手勢操作教學課程嗎?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"你之後可以在「<xliff:g id="NAME">%1$s</xliff:g>」應用程式找到這些說明"</string>
diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml
index 245b992..b377106 100644
--- a/quickstep/res/values-zu/strings.xml
+++ b/quickstep/res/values-zu/strings.xml
@@ -80,6 +80,7 @@
<string name="action_share" msgid="2648470652637092375">"Yabelana"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Isithombe-skrini"</string>
<string name="action_split" msgid="2098009717623550676">"Hlukanisa"</string>
+ <string name="toast_split_select_app" msgid="5453865907322018352">"Thepha enye i-app ukuze usebenzise isikrini sokuhlukanisa"</string>
<string name="blocked_by_policy" msgid="2071401072261365546">"Lesi senzo asivunyelwanga uhlelo lokusebenza noma inhlangano yakho"</string>
<string name="skip_tutorial_dialog_title" msgid="2725643161260038458">"Yeqa isifundo sokuzulazula?"</string>
<string name="skip_tutorial_dialog_subtitle" msgid="544063326241955662">"Lokhu ungakuthola kamuva ku-app ye-<xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
index a68322d..088009a 100644
--- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java
@@ -631,11 +631,10 @@
@Override
public void onDisplayInfoChanged(Context context, DisplayController.Info info, int flags) {
super.onDisplayInfoChanged(context, info, flags);
- // When changing screens with live tile active, finish the recents animation to close
- // overview as it should be an interim state
- if ((flags & CHANGE_ACTIVE_SCREEN) != 0 && ENABLE_QUICKSTEP_LIVE_TILE.get()) {
- RecentsView recentsView = getOverviewPanel();
- recentsView.finishRecentsAnimation(/* toRecents= */ true, null);
+ // When changing screens, force moving to rest state similar to StatefulActivity.onStop, as
+ // StatefulActivity isn't called consistently.
+ if ((flags & CHANGE_ACTIVE_SCREEN) != 0) {
+ getStateManager().moveToRestState();
}
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
index 3f621fd..4b75db4 100644
--- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
@@ -15,6 +15,7 @@
*/
package com.android.launcher3.taskbar;
+import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y_LONG_CLICK;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_BACK;
@@ -194,6 +195,14 @@
flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0 ||
(flags & FLAG_ONLY_BACK_FOR_BOUNCER_VISIBLE) != 0 ||
(flags & FLAG_KEYGUARD_OCCLUDED) != 0));
+ // Translate back button to be at end/start of other buttons for keyguard
+ int navButtonSize = mContext.getResources().getDimensionPixelSize(
+ R.dimen.taskbar_nav_buttons_size);
+ mPropertyHolders.add(new StatePropertyHolder(
+ mBackButton, flags -> (flags & FLAG_ONLY_BACK_FOR_BOUNCER_VISIBLE) != 0
+ || (flags & FLAG_KEYGUARD_VISIBLE) != 0,
+ VIEW_TRANSLATE_X, navButtonSize * (isRtl ? -2 : 2), 0));
+
// home and recents buttons
View homeButton = addButton(R.drawable.ic_sysbar_home, BUTTON_HOME, navContainer,
@@ -235,6 +244,7 @@
}
mSysuiStateFlags = systemUiStateFlags;
+ // TODO(b/202218289) we're getting IME as not visible on lockscreen from system
updateStateForFlag(FLAG_IME_VISIBLE, isImeVisible);
updateStateForFlag(FLAG_SWITCHER_SUPPORTED, isImeSwitcherShowing);
updateStateForFlag(FLAG_A11Y_VISIBLE, a11yVisible);
@@ -337,6 +347,10 @@
return buttonView;
}
+ public void onDestroy() {
+ mPropertyHolders.clear();
+ }
+
private class RotationButtonImpl implements RotationButton {
private final ImageView mButton;
diff --git a/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java b/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java
index 0224bc4..6db5839 100644
--- a/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java
@@ -15,6 +15,10 @@
*/
package com.android.launcher3.taskbar;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.annotation.Nullable;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
@@ -23,15 +27,20 @@
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat;
+import com.android.launcher3.LauncherAnimUtils;
import com.android.launcher3.R;
public class StashedHandleView extends View {
+ private static final long COLOR_CHANGE_DURATION = 120;
+
private final @ColorInt int mStashedHandleLightColor;
private final @ColorInt int mStashedHandleDarkColor;
private final Rect mSampledRegion = new Rect();
private final int[] mTmpArr = new int[2];
+ private @Nullable ObjectAnimator mColorChangeAnim;
+
public StashedHandleView(Context context) {
this(context, null);
}
@@ -54,17 +63,44 @@
R.color.taskbar_stashed_handle_dark_color);
}
- public void updateSampledRegion() {
+ /**
+ * Updates mSampledRegion to be the location of the stashedHandleBounds relative to the screen.
+ * @see #getSampledRegion()
+ */
+ public void updateSampledRegion(Rect stashedHandleBounds) {
getLocationOnScreen(mTmpArr);
- mSampledRegion.set(mTmpArr[0], mTmpArr[1], mTmpArr[0] + getWidth(),
- mTmpArr[1] + getHeight());
+ mSampledRegion.set(stashedHandleBounds);
+ mSampledRegion.offset(mTmpArr[0], mTmpArr[1]);
}
public Rect getSampledRegion() {
return mSampledRegion;
}
- public void updateHandleColor(boolean isRegionDark) {
- setBackgroundColor(isRegionDark ? mStashedHandleLightColor : mStashedHandleDarkColor);
+ /**
+ * Updates the handle color.
+ * @param isRegionDark Whether the background behind the handle is dark, and thus the handle
+ * should be light (and vice versa).
+ * @param animate Whether to animate the change, or apply it immediately.
+ */
+ public void updateHandleColor(boolean isRegionDark, boolean animate) {
+ int newColor = isRegionDark ? mStashedHandleLightColor : mStashedHandleDarkColor;
+ if (mColorChangeAnim != null) {
+ mColorChangeAnim.cancel();
+ }
+ if (animate) {
+ mColorChangeAnim = ObjectAnimator.ofArgb(this,
+ LauncherAnimUtils.VIEW_BACKGROUND_COLOR, newColor);
+ mColorChangeAnim.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mColorChangeAnim = null;
+ }
+ });
+ mColorChangeAnim.setDuration(COLOR_CHANGE_DURATION);
+ mColorChangeAnim.start();
+ } else {
+ setBackgroundColor(newColor);
+ }
}
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java b/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java
index 2858d7c..10da826 100644
--- a/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java
@@ -70,7 +70,8 @@
mPrefs = Utilities.getPrefs(mActivity);
mStashedHandleView = stashedHandleView;
mStashedHandleView.updateHandleColor(
- mPrefs.getBoolean(SHARED_PREFS_STASHED_HANDLE_REGION_DARK_KEY, false));
+ mPrefs.getBoolean(SHARED_PREFS_STASHED_HANDLE_REGION_DARK_KEY, false),
+ false /* animate */);
final Resources resources = mActivity.getResources();
mStashedHandleWidth = resources.getDimensionPixelSize(R.dimen.taskbar_stashed_handle_width);
mStashedHandleHeight = resources.getDimensionPixelSize(
@@ -79,7 +80,7 @@
new RegionSamplingHelper.SamplingCallback() {
@Override
public void onRegionDarknessChanged(boolean isRegionDark) {
- mStashedHandleView.updateHandleColor(isRegionDark);
+ mStashedHandleView.updateHandleColor(isRegionDark, true /* animate */);
mPrefs.edit().putBoolean(SHARED_PREFS_STASHED_HANDLE_REGION_DARK_KEY,
isRegionDark).apply();
}
@@ -109,6 +110,7 @@
stashedCenterY - mStashedHandleHeight / 2,
stashedCenterX + mStashedHandleWidth / 2,
stashedCenterY + mStashedHandleHeight / 2);
+ mStashedHandleView.updateSampledRegion(mStashedHandleBounds);
mStashedHandleRadius = view.getHeight() / 2f;
outline.setRoundRect(mStashedHandleBounds, mStashedHandleRadius);
}
@@ -154,7 +156,7 @@
public void onIsStashed(boolean isStashed) {
mRegionSamplingHelper.setWindowVisible(isStashed);
if (isStashed) {
- mStashedHandleView.updateSampledRegion();
+ mStashedHandleView.updateSampledRegion(mStashedHandleBounds);
mRegionSamplingHelper.start(mStashedHandleView.getSampledRegion());
} else {
mRegionSamplingHelper.stop();
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java
index 6144881..e49c6ae 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java
@@ -89,6 +89,7 @@
* Cleans up all controllers.
*/
public void onDestroy() {
+ navbarButtonsViewController.onDestroy();
uiController.onDestroy();
rotationButtonController.onDestroy();
taskbarDragLayerController.onDestroy();
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
index 2e9d8bc..9d88956 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
@@ -96,7 +96,10 @@
@Override
public void onConfigurationChanged(Configuration newConfig) {
- if ((mOldConfig.diff(newConfig) & ActivityInfo.CONFIG_ASSETS_PATHS) != 0) {
+ int configDiff = mOldConfig.diff(newConfig);
+ int configsRequiringRecreate = ActivityInfo.CONFIG_ASSETS_PATHS
+ | ActivityInfo.CONFIG_LAYOUT_DIRECTION;
+ if ((configDiff & configsRequiringRecreate) != 0) {
// Color has changed, recreate taskbar to reload background color & icons.
recreateTaskbar();
}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
index 37a1674..308bca6 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
@@ -179,7 +179,7 @@
mAllowGoingDown = i == mRecentsView.getCurrentPage()
&& SysUINavigationMode.getMode(mActivity).hasGestures
&& (!mRecentsView.showAsGrid() || mTaskBeingDragged.isFocusedTask())
- && mRecentsView.isTaskSnapped(i);
+ && mRecentsView.isTaskInExpectedScrollPosition(i);
directionsToDetectScroll = mAllowGoingDown ? DIRECTION_BOTH : upDirection;
break;
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 11b9df0..e57f46f 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -789,7 +789,7 @@
mRecentsAnimationStartCallbacks.clear();
}
- TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, false);
+ TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, false);
// Only add the callback to enable the input consumer after we actually have the controller
mStateCallback.runOnceAtState(STATE_APP_CONTROLLER_RECEIVED | STATE_GESTURE_STARTED,
@@ -806,7 +806,7 @@
mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED);
if (mRecentsAnimationTargets != null) {
- TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
+ TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true);
}
// Defer clearing the controller and the targets until after we've updated the state
@@ -955,7 +955,8 @@
} else {
mStateCallback.setState(STATE_RESUME_LAST_TASK);
}
- TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
+ TaskViewUtils.setSplitAuxiliarySurfacesShown(
+ mRecentsAnimationTargets.nonApps, true);
break;
}
ActiveGestureLog.INSTANCE.addLog("onSettledOnEndTarget " + endTarget);
@@ -1048,6 +1049,7 @@
isFling, isCancel);
// Set the state, but don't notify until the animation completes
mGestureState.setEndTarget(endTarget, false /* isAtomic */);
+ mAnimationFactory.setEndTarget(endTarget);
float endShift = endTarget.isLauncher ? 1 : 0;
final float startShift;
@@ -1465,7 +1467,9 @@
mActivity.clearRunOnceOnStartCallback();
resetLauncherListeners();
}
- if (mGestureState.getEndTarget() != null && !mGestureState.isRunningAnimationToLauncher()) {
+ if (mGestureState.isRecentsAnimationRunning() && mGestureState.getEndTarget() != null
+ && !mGestureState.getEndTarget().isLauncher) {
+ // Continued quick switch.
cancelCurrentAnimation();
} else {
mStateCallback.setStateOnUiThread(STATE_FINISH_WITH_NO_END);
@@ -1598,7 +1602,7 @@
mActivityInterface.onTransitionCancelled(wasVisible, mGestureState.getEndTarget());
if (mRecentsAnimationTargets != null) {
- TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
+ TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true);
}
// Leave the pending invisible flag, as it may be used by wallpaper open animation.
@@ -1841,7 +1845,7 @@
@Override
public void onRecentsAnimationFinished(RecentsAnimationController controller) {
if (!controller.getFinishTargetIsLauncher()) {
- TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
+ TaskViewUtils.setSplitAuxiliarySurfacesShown(mRecentsAnimationTargets.nonApps, true);
}
mRecentsAnimationController = null;
mRecentsAnimationTargets = null;
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index 9fa0f1a..ec9a325 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -77,12 +77,14 @@
public final boolean rotationSupportedByActivity;
- private final STATE_TYPE mOverviewState, mBackgroundState;
+ private final STATE_TYPE mBackgroundState;
+
+ private STATE_TYPE mTargetState;
protected BaseActivityInterface(boolean rotationSupportedByActivity,
STATE_TYPE overviewState, STATE_TYPE backgroundState) {
this.rotationSupportedByActivity = rotationSupportedByActivity;
- mOverviewState = overviewState;
+ mTargetState = overviewState;
mBackgroundState = backgroundState;
}
@@ -221,7 +223,7 @@
int taskMargin = dp.overviewTaskMarginPx;
calculateTaskSizeInternal(context, dp,
dp.overviewTaskThumbnailTopMarginPx,
- getProactiveRowAndMargin(context, dp) + getOverviewActionsHeight(context, dp),
+ getOverviewActionsHeight(context, dp),
res.getDimensionPixelSize(R.dimen.overview_minimum_next_prev_size) + taskMargin,
outRect);
}
@@ -301,8 +303,7 @@
Resources res = context.getResources();
Rect insets = dp.getInsets();
int topMargin = dp.overviewTaskThumbnailTopMarginPx;
- int bottomMargin =
- getProactiveRowAndMargin(context, dp) + getOverviewActionsHeight(context, dp);
+ int bottomMargin = getOverviewActionsHeight(context, dp);
int sideMargin = res.getDimensionPixelSize(R.dimen.overview_grid_side_margin);
outRect.set(0, 0, dp.widthPx, dp.heightPx);
@@ -345,21 +346,6 @@
outRect);
}
- private int getProactiveRowAndMargin(Context context, DeviceProfile dp) {
- Resources res = context.getResources();
- int proactiveRowAndMargin;
- if (!TaskView.SHOW_PROACTIVE_ACTIONS || dp.isVerticalBarLayout()) {
- // In Vertical Bar Layout the proactive row doesn't have its own space, it's inside
- // the actions row.
- proactiveRowAndMargin = 0;
- } else {
- proactiveRowAndMargin = res.getDimensionPixelSize(
- R.dimen.overview_proactive_row_height)
- + res.getDimensionPixelSize(R.dimen.overview_proactive_row_bottom_margin);
- }
- return proactiveRowAndMargin;
- }
-
/** Gets the space that the overview actions will take, including bottom margin. */
private int getOverviewActionsHeight(Context context, DeviceProfile dp) {
Resources res = context.getResources();
@@ -428,6 +414,9 @@
default boolean hasRecentsEverAttachedToAppWindow() {
return false;
}
+
+ /** Called when the gesture ends and we know what state it is going towards */
+ default void setEndTarget(GestureState.GestureEndTarget endTarget) { }
}
class DefaultAnimationFactory implements AnimationFactory {
@@ -465,7 +454,7 @@
// Since we are changing the start position of the UI, reapply the state, at the end
controller.setEndAction(() -> mActivity.getStateManager().goToState(
- controller.getInterpolatedProgress() > 0.5 ? mOverviewState : mBackgroundState,
+ controller.getInterpolatedProgress() > 0.5 ? mTargetState : mBackgroundState,
false));
RecentsView recentsView = mActivity.getOverviewPanel();
@@ -528,6 +517,11 @@
return mHasEverAttachedToWindow;
}
+ @Override
+ public void setEndTarget(GestureState.GestureEndTarget endTarget) {
+ mTargetState = stateFromGestureEndTarget(endTarget);
+ }
+
protected void createBackgroundToOverviewAnim(ACTIVITY_TYPE activity, PendingAnimation pa) {
// Scale down recents from being full screen to being in overview.
RecentsView recentsView = activity.getOverviewPanel();
diff --git a/quickstep/src/com/android/quickstep/GestureState.java b/quickstep/src/com/android/quickstep/GestureState.java
index e3ae361..aabba66 100644
--- a/quickstep/src/com/android/quickstep/GestureState.java
+++ b/quickstep/src/com/android/quickstep/GestureState.java
@@ -346,8 +346,8 @@
* @return whether the recents animation is started but not yet ended
*/
public boolean isRecentsAnimationRunning() {
- return mStateCallback.hasStates(STATE_RECENTS_ANIMATION_INITIALIZED) &&
- !mStateCallback.hasStates(STATE_RECENTS_ANIMATION_ENDED);
+ return mStateCallback.hasStates(STATE_RECENTS_ANIMATION_STARTED)
+ && !mStateCallback.hasStates(STATE_RECENTS_ANIMATION_ENDED);
}
@Override
diff --git a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
index cfd330d..6ccb152 100644
--- a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
+++ b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
@@ -6,7 +6,6 @@
import android.os.Bundle;
import com.android.launcher3.LauncherState;
-import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.testing.TestInformationHandler;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.touch.PagedOrientationHandler;
@@ -54,20 +53,14 @@
Bundle::putInt, PortraitStatesTouchController::getHotseatTop);
}
- case TestProtocol.REQUEST_OVERVIEW_SHARE_ENABLED: {
- response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD,
- FeatureFlags.ENABLE_OVERVIEW_SHARE.get());
- return response;
- }
-
- case TestProtocol.REQUEST_GET_FOCUSED_TASK_WIDTH_FOR_TABLET: {
+ case TestProtocol.REQUEST_GET_FOCUSED_TASK_HEIGHT_FOR_TABLET: {
if (!mDeviceProfile.isTablet) {
return null;
}
Rect focusedTaskRect = new Rect();
LauncherActivityInterface.INSTANCE.calculateTaskSize(mContext, mDeviceProfile,
focusedTaskRect);
- response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, focusedTaskRect.width());
+ response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, focusedTaskRect.height());
return response;
}
}
diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java
index fe07cbd..4b89981 100644
--- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java
+++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java
@@ -107,6 +107,13 @@
// But force-finish it anyways
finishRunningRecentsAnimation(false /* toHome */);
+ if (mCallbacks != null) {
+ // If mCallbacks still != null, that means we are getting this startRecentsAnimation()
+ // before the previous one got onRecentsAnimationStart(). In that case, cleanup the
+ // previous animation so it doesn't mess up/listen to state changes in this animation.
+ cleanUpRecentsAnimation();
+ }
+
final BaseActivityInterface activityInterface = gestureState.getActivityInterface();
mLastGestureState = gestureState;
mCallbacks = new RecentsAnimationCallbacks(SystemUiProxy.INSTANCE.get(mCtx),
diff --git a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
index 7bdc20d..c45159e 100644
--- a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
+++ b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
@@ -111,19 +111,30 @@
}
+ /**
+ * Does NOT add split options in the following scenarios:
+ * * The taskView to add split options is already showing split screen tasks
+ * * There aren't at least 2 tasks in overview to show split options for
+ * * The taskView to show split options for is the focused task AND we haven't started
+ * scrolling in overview (if we haven't scrolled, there's a split overview action so
+ * we don't need this menu option)
+ */
private static void addSplitOptions(List<SystemShortcut> outShortcuts,
BaseDraggingActivity activity, TaskView taskView, DeviceProfile deviceProfile) {
+ RecentsView recentsView = taskView.getRecentsView();
+ PagedOrientationHandler orientationHandler = recentsView.getPagedOrientationHandler();
int[] taskViewTaskIds = taskView.getTaskIds();
boolean taskViewHasMultipleTasks = taskViewTaskIds[0] != -1 &&
taskViewTaskIds[1] != -1;
- boolean notEnoughTasksToSplit = taskView.getRecentsView().getTaskViewCount() < 2;
+ boolean notEnoughTasksToSplit = recentsView.getTaskViewCount() < 2;
+ boolean isFocusedTask = deviceProfile.overviewShowAsGrid && taskView.isFocusedTask();
+ boolean isTaskInExpectedScrollPosition =
+ recentsView.isTaskInExpectedScrollPosition(recentsView.indexOfChild(taskView));
if (taskViewHasMultipleTasks || notEnoughTasksToSplit ||
- (deviceProfile.overviewShowAsGrid && taskView.isFocusedTask())) {
+ (isFocusedTask && isTaskInExpectedScrollPosition)) {
return;
}
- PagedOrientationHandler orientationHandler =
- taskView.getRecentsView().getPagedOrientationHandler();
List<SplitPositionOption> positions =
orientationHandler.getSplitPositionOptions(deviceProfile);
for (SplitPositionOption option : positions) {
@@ -331,14 +342,6 @@
mTask = task;
}
- public void onShare() {
- if (mIsAllowedByPolicy) {
- endLiveTileMode(() -> mImageApi.startShareActivity(null));
- } else {
- showBlockedByPolicyMessage();
- }
- }
-
@SuppressLint("NewApi")
public void onScreenshot() {
endLiveTileMode(() -> saveScreenshot(mTask));
@@ -355,9 +358,6 @@
* controller.
*/
public interface OverlayUICallbacks {
- /** User has indicated they want to share the current task. */
- void onShare();
-
/** User has indicated they want to screenshot the current task. */
void onScreenshot();
diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java
index 37d88ae..284bc03 100644
--- a/quickstep/src/com/android/quickstep/TaskViewUtils.java
+++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java
@@ -35,7 +35,6 @@
import static com.android.launcher3.anim.Interpolators.clampToProgress;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
import static com.android.launcher3.statehandlers.DepthController.DEPTH;
-import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
@@ -505,7 +504,7 @@
nonAppTargets, depthController, pa);
if (launcherClosing) {
// TODO(b/182592057): differentiate between "restore split" vs "launch fullscreen app"
- TaskViewUtils.setDividerBarShown(nonAppTargets, true);
+ TaskViewUtils.setSplitAuxiliarySurfacesShown(nonAppTargets, true);
}
Animator childStateAnimation = null;
@@ -560,18 +559,20 @@
anim.addListener(windowAnimEndListener);
}
- static void setDividerBarShown(RemoteAnimationTargetCompat[] nonApps, boolean shown) {
+ static void setSplitAuxiliarySurfacesShown(RemoteAnimationTargetCompat[] nonApps,
+ boolean shown) {
// TODO(b/182592057): make this part of the animations instead.
if (nonApps != null && nonApps.length > 0) {
+ SurfaceControl.Transaction t = new SurfaceControl.Transaction();
for (int i = 0; i < nonApps.length; ++i) {
final RemoteAnimationTargetCompat targ = nonApps[i];
- if (targ.windowType == TYPE_DOCK_DIVIDER) {
- SurfaceControl.Transaction t = new SurfaceControl.Transaction();
- t.setVisibility(targ.leash.getSurfaceControl(), shown);
- t.apply();
- t.close();
+ final SurfaceControl leash = targ.leash.getSurfaceControl();
+ if (targ.windowType == TYPE_DOCK_DIVIDER && leash != null) {
+ t.setVisibility(leash, shown);
}
}
+ t.apply();
+ t.close();
}
}
}
diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
index e9a695d..1dae2c8 100644
--- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
+++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
@@ -163,10 +163,8 @@
if (mSuccessCallback != null) {
mSuccessCallback.accept(true);
}
+ resetState();
}));
-
- // After successful launch, call resetState
- resetState();
}
@Override
@@ -175,9 +173,8 @@
if (mSuccessCallback != null) {
mSuccessCallback.accept(false);
}
+ resetState();
});
-
- resetState();
}
}
diff --git a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
index da3fa2a..76d3591 100644
--- a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
+++ b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
@@ -16,8 +16,6 @@
package com.android.quickstep.views;
-import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_SHARE;
-
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Rect;
@@ -111,15 +109,9 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- View share = findViewById(R.id.action_share);
- share.setOnClickListener(this);
findViewById(R.id.action_screenshot).setOnClickListener(this);
mSplitButton = findViewById(R.id.action_split);
mSplitButton.setOnClickListener(this);
- if (ENABLE_OVERVIEW_SHARE.get()) {
- share.setVisibility(VISIBLE);
- findViewById(R.id.oav_three_button_space).setVisibility(VISIBLE);
- }
}
/**
@@ -137,9 +129,7 @@
return;
}
int id = view.getId();
- if (id == R.id.action_share) {
- mCallbacks.onShare();
- } else if (id == R.id.action_screenshot) {
+ if (id == R.id.action_screenshot) {
mCallbacks.onScreenshot();
} else if (id == R.id.action_split) {
mCallbacks.onSplit();
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index e1a3895..023a926 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -409,7 +409,7 @@
private final float mFastFlingVelocity;
private final int mScrollHapticMinGapMillis;
private final RecentsModel mModel;
- private final int mGridSideMargin;
+ private final int mSplitPlaceholderSize;
private final ClearAllButton mClearAllButton;
private final Rect mClearAllButtonDeadZoneRect = new Rect();
private final Rect mTaskViewDeadZoneRect = new Rect();
@@ -660,7 +660,8 @@
mIsRtl = mOrientationHandler.getRecentsRtlSetting(getResources());
setLayoutDirection(mIsRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
- mGridSideMargin = getResources().getDimensionPixelSize(R.dimen.overview_grid_side_margin);
+ mSplitPlaceholderSize = getResources().getDimensionPixelSize(
+ R.dimen.split_placeholder_size);
mSquaredTouchSlop = squaredTouchSlop(context);
mEmptyIcon = context.getDrawable(R.drawable.ic_empty_recents);
@@ -1055,11 +1056,11 @@
}
/**
- * Returns true if the task is snapped.
+ * Returns true if the task is in expected scroll position.
*
* @param taskIndex the index of the task
*/
- public boolean isTaskSnapped(int taskIndex) {
+ public boolean isTaskInExpectedScrollPosition(int taskIndex) {
return getScrollForPage(taskIndex) == getPagedOrientationHandler().getPrimaryScroll(this);
}
@@ -1726,8 +1727,7 @@
if (showAsGrid()) {
TaskView focusedTaskView = getFocusedTaskView();
hiddenFocusedScroll = focusedTaskView == null
- || getScrollForPage(indexOfChild(focusedTaskView))
- != mOrientationHandler.getPrimaryScroll(this);
+ || !isTaskInExpectedScrollPosition(indexOfChild(focusedTaskView));
} else {
hiddenFocusedScroll = false;
}
@@ -3918,7 +3918,6 @@
/** TODO(b/181707736) More gracefully handle exiting split selection state */
private void resetFromSplitSelectionState() {
- mSplitHiddenTaskView.setTranslationY(0);
if (!showAsGrid()) {
int pageToSnapTo = mCurrentPage;
if (mSplitHiddenTaskViewIndex <= pageToSnapTo) {
@@ -3930,9 +3929,12 @@
}
onLayout(false /* changed */, getLeft(), getTop(), getRight(), getBottom());
resetTaskVisuals();
- mSplitHiddenTaskView.setVisibility(VISIBLE);
- mSplitHiddenTaskView = null;
mSplitHiddenTaskViewIndex = -1;
+ if (mSplitHiddenTaskView != null) {
+ mSplitHiddenTaskView.setTranslationY(0);
+ mSplitHiddenTaskView.setVisibility(VISIBLE);
+ mSplitHiddenTaskView = null;
+ }
if (mFirstFloatingTaskView != null) {
mActivity.getRootView().removeView(mFirstFloatingTaskView);
mFirstFloatingTaskView = null;
@@ -4236,13 +4238,19 @@
return;
}
- if (mSyncTransactionApplier != null) {
- recentsAnimationTargets.addReleaseCheck(mSyncTransactionApplier);
- }
-
RemoteTargetGluer gluer = new RemoteTargetGluer(getContext(), getSizeStrategy());
mRemoteTargetHandles = gluer.assignTargetsForSplitScreen(recentsAnimationTargets);
mSplitBoundsConfig = gluer.getStagedSplitBounds();
+ if (mSyncTransactionApplier != null) {
+ // Add release check to the targets from the RemoteTargetGluer and not the targets
+ // passed in because in the event we're in split screen, we use the passed in targets
+ // to create new RemoteAnimationTargets in assignTargetsForSplitScreen(), and the
+ // mSyncTransactionApplier doesn't get transferred over
+ runActionOnRemoteHandles(remoteTargetHandle -> remoteTargetHandle
+ .getTransformParams().getTargetSet()
+ .addReleaseCheck(mSyncTransactionApplier));
+ }
+
TaskView runningTaskView = getRunningTaskView();
if (runningTaskView instanceof GroupedTaskView) {
// We initially create a GroupedTaskView in showCurrentTask() before launcher even
@@ -4349,16 +4357,27 @@
@Override
protected int computeMinScroll() {
if (getTaskViewCount() > 0) {
+ int minScroll;
+ boolean isLandscapeGridSplit = mActivity.getDeviceProfile().isLandscape
+ && showAsGrid() && isSplitSelectionActive();
if (mIsRtl) {
// If we aren't showing the clear all button, use the rightmost task as the min
// scroll.
- return getScrollForPage(mDisallowScrollToClearAll ? indexOfChild(
+ minScroll = getScrollForPage(mDisallowScrollToClearAll ? indexOfChild(
getTaskViewAt(getTaskViewCount() - 1)) : indexOfChild(mClearAllButton));
+ if (isLandscapeGridSplit
+ && mSplitSelectStateController.getActiveSplitStagePosition()
+ == SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT) {
+ minScroll -= mSplitPlaceholderSize;
+ }
} else {
TaskView focusedTaskView = mShowAsGridLastOnLayout ? getFocusedTaskView() : null;
- return getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView)
+ minScroll = getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView)
: 0);
+ // TODO(b/200537659): Adjust according to mSplitPlaceholderSize when
+ // isLandscapeGridSplit is true.
}
+ return minScroll;
}
return super.computeMinScroll();
}
@@ -4366,16 +4385,27 @@
@Override
protected int computeMaxScroll() {
if (getTaskViewCount() > 0) {
+ int maxScroll;
+ boolean isLandscapeGridSplit = mActivity.getDeviceProfile().isLandscape
+ && showAsGrid() && isSplitSelectionActive();
if (mIsRtl) {
TaskView focusedTaskView = mShowAsGridLastOnLayout ? getFocusedTaskView() : null;
- return getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView)
+ maxScroll = getScrollForPage(focusedTaskView != null ? indexOfChild(focusedTaskView)
: 0);
+ if (isLandscapeGridSplit
+ && mSplitSelectStateController.getActiveSplitStagePosition()
+ == SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT) {
+ maxScroll += mSplitPlaceholderSize;
+ }
} else {
// If we aren't showing the clear all button, use the leftmost task as the min
// scroll.
- return getScrollForPage(mDisallowScrollToClearAll ? indexOfChild(
+ maxScroll = getScrollForPage(mDisallowScrollToClearAll ? indexOfChild(
getTaskViewAt(getTaskViewCount() - 1)) : indexOfChild(mClearAllButton));
+ // TODO(b/200537659): Adjust according to mSplitPlaceholderSize when
+ // isLandscapeGridSplit is true.
}
+ return maxScroll;
}
return super.computeMaxScroll();
}
diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java
index 6a8d66d..ea8282f 100644
--- a/quickstep/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskView.java
@@ -16,8 +16,6 @@
package com.android.quickstep.views;
-import static android.view.Gravity.BOTTOM;
-import static android.view.Gravity.CENTER_HORIZONTAL;
import static android.widget.Toast.LENGTH_SHORT;
import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU;
@@ -131,12 +129,6 @@
@IntDef({FLAG_UPDATE_ALL, FLAG_UPDATE_ICON, FLAG_UPDATE_THUMBNAIL})
public @interface TaskDataChanges {}
- /**
- * Should the layout account for space for a proactive action (or chip) to be added under
- * the task.
- */
- public static final boolean SHOW_PROACTIVE_ACTIONS = false;
-
/** The maximum amount that a task view can be scrimmed, dimmed or tinted. */
public static final float MAX_PAGE_SCRIM_ALPHA = 0.4f;
@@ -190,7 +182,6 @@
* delegated bounds only to be updated.
*/
private TransformingTouchDelegate mIconTouchDelegate;
- private TransformingTouchDelegate mChipTouchDelegate;
private static final List<Rect> SYSTEM_GESTURE_EXCLUSION_RECT =
Collections.singletonList(new Rect());
@@ -421,9 +412,7 @@
private boolean mEndQuickswitchCuj;
- private View mContextualChipWrapper;
private final float[] mIconCenterCoords = new float[2];
- private final float[] mChipCenterCoords = new float[2];
private boolean mIsClickableAsLiveTile = true;
@@ -490,14 +479,10 @@
public boolean offerTouchToChildren(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
computeAndSetIconTouchDelegate(mIconView, mIconCenterCoords, mIconTouchDelegate);
- computeAndSetChipTouchDelegate();
}
if (mIconTouchDelegate != null && mIconTouchDelegate.onTouchEvent(event)) {
return true;
}
- if (mChipTouchDelegate != null && mChipTouchDelegate.onTouchEvent(event)) {
- return true;
- }
return false;
}
@@ -514,23 +499,6 @@
(int) (tempCenterCoords[1] + iconHalfSize));
}
- private void computeAndSetChipTouchDelegate() {
- if (mContextualChipWrapper != null) {
- float chipHalfWidth = mContextualChipWrapper.getWidth() / 2f;
- float chipHalfHeight = mContextualChipWrapper.getHeight() / 2f;
- mChipCenterCoords[0] = chipHalfWidth;
- mChipCenterCoords[1] = chipHalfHeight;
- getDescendantCoordRelativeToAncestor(mContextualChipWrapper, mActivity.getDragLayer(),
- mChipCenterCoords,
- false);
- mChipTouchDelegate.setBounds(
- (int) (mChipCenterCoords[0] - chipHalfWidth),
- (int) (mChipCenterCoords[1] - chipHalfHeight),
- (int) (mChipCenterCoords[0] + chipHalfWidth),
- (int) (mChipCenterCoords[1] + chipHalfHeight));
- }
- }
-
/**
* The modalness of this view is how it should be displayed when it is shown on its own in the
* modal state of overview.
@@ -543,10 +511,6 @@
}
mModalness = modalness;
mIconView.setAlpha(comp(modalness));
- if (mContextualChipWrapper != null) {
- mContextualChipWrapper.setScaleX(comp(modalness));
- mContextualChipWrapper.setScaleY(comp(modalness));
- }
mDigitalWellBeingToast.updateBannerOffset(modalness,
mCurrentFullscreenParams.mCurrentDrawnInsets.top
+ mCurrentFullscreenParams.mCurrentDrawnInsets.bottom);
@@ -831,7 +795,8 @@
return true;
}
- if (!getRecentsView().isClearAllHidden()) {
+ if (!mActivity.getDeviceProfile().overviewShowAsGrid
+ && !getRecentsView().isClearAllHidden()) {
getRecentsView().snapToPage(getRecentsView().indexOfChild(this));
return false;
} else {
@@ -910,11 +875,6 @@
float scale = Interpolators.clampToProgress(FAST_OUT_SLOW_IN, lowerClamp, upperClamp)
.getInterpolation(progress);
mIconView.setAlpha(scale);
- if (mContextualChipWrapper != null && mContextualChipWrapper != null) {
- mContextualChipWrapper.setAlpha(scale);
- mContextualChipWrapper.setScaleX(Math.min(scale, comp(mModalness)));
- mContextualChipWrapper.setScaleY(Math.min(scale, comp(mModalness)));
- }
mDigitalWellBeingToast.updateBannerOffset(1f - scale,
mCurrentFullscreenParams.mCurrentDrawnInsets.top
+ mCurrentFullscreenParams.mCurrentDrawnInsets.bottom);
@@ -988,53 +948,10 @@
onTaskListVisibilityChanged(false);
}
- /**
- * Sets the contextual chip.
- *
- * @param view Wrapper view containing contextual chip.
- */
- public void setContextualChip(View view) {
- if (mContextualChipWrapper != null) {
- removeView(mContextualChipWrapper);
- }
- if (view != null) {
- mContextualChipWrapper = view;
- LayoutParams layoutParams = new LayoutParams(((View) getParent()).getMeasuredWidth(),
- LayoutParams.WRAP_CONTENT);
- layoutParams.gravity = BOTTOM | CENTER_HORIZONTAL;
- int expectedChipHeight = getExpectedViewHeight(view);
- float chipOffset = getResources().getDimension(R.dimen.chip_hint_vertical_offset);
- layoutParams.bottomMargin = -expectedChipHeight - (int) chipOffset;
- mContextualChipWrapper.setScaleX(0f);
- mContextualChipWrapper.setScaleY(0f);
- addView(view, getChildCount(), layoutParams);
- if (mContextualChipWrapper != null) {
- float scale = comp(mModalness);
- mContextualChipWrapper.animate().scaleX(scale).scaleY(scale).setDuration(50);
- mChipTouchDelegate = new TransformingTouchDelegate(mContextualChipWrapper);
- }
- }
- }
-
public float getTaskCornerRadius() {
return TaskCornerRadius.get(mActivity);
}
- /**
- * Clears the contextual chip from TaskView.
- *
- * @return The contextual chip wrapper view to be recycled.
- */
- public View clearContextualChip() {
- if (mContextualChipWrapper != null) {
- removeView(mContextualChipWrapper);
- }
- View oldContextualChipWrapper = mContextualChipWrapper;
- mContextualChipWrapper = null;
- mChipTouchDelegate = null;
- return oldContextualChipWrapper;
- }
-
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java
index 17a88e5..3b7370f 100644
--- a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java
+++ b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java
@@ -170,7 +170,6 @@
OverviewActions actionsView =
mLauncher.pressHome().switchToOverview().getOverviewActions();
actionsView.clickAndDismissScreenshot();
- actionsView.clickAndDismissShare();
}
private int getCurrentOverviewPage(Launcher launcher) {
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index f1b5493..07a07a7 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Laat die program toe om die instellings en kortpaaie in Tuis te verander."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> word nie toegelaat om foonoproepe te maak nie"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Kan nie legstuk laai nie"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tik om opstelling te voltooi"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Legstukinstellings"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tik om opstelling te voltooi"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Wysig naam"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Het <xliff:g id="APP_NAME">%1$s</xliff:g> gedeaktiveer"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index b682ec4..8d6206a 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"መተግብሪያው ቅንብሮችን እና አቋራጮችን በመነሻ ውስጥ እንዲቀይራቸው ያስችለዋል።"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> የስልክ ጥሪዎችን ለማድረግ አልተፈቀደለትም"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ምግብርን መጫን አልተቻለም"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ማዋቀርን ለመጨረስ መታ ያድርጉ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"የምግብር ቅንብሮች"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ማዋቀርን ለመጨረስ መታ ያድርጉ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ይህ የስርዓት መተግበሪያ ነው እና ማራገፍ አይቻልም።"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"ስም ያርትዑ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ተሰናክሏል"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index f4562cf..095c3bd 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"للسماح للتطبيق بتغيير الإعدادات والاختصارات في الشاشة الرئيسية."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> غير مسموح به لإجراء مكالمات هاتفية"</string>
<string name="gadget_error_text" msgid="740356548025791839">"يتعذّر تحميل الأداة."</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"انقر لإكمال الإعداد."</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"إعدادات الأداة"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"انقر لإكمال الإعداد."</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"هذا تطبيق نظام وتتعذر إزالته."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"تعديل الاسم"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"تم إيقاف <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 8eedf4e..95ead40 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"এপটোক গৃহ পৃষ্ঠাত ছেটিং আৰু শ্বৰ্টকাটসমূহ সলনি কৰাৰ অনুমতি দিয়ে।"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g>ক ফ\'ন কলবোৰ কৰাৰ অনুমতি দিয়া হোৱা নাই"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ৱিজেট ল’ড কৰিব নোৱাৰি"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ছেটআপ সমাপ্ত কৰিবলৈ টিপক"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ৱিজেটৰ ছেটিং"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ছেটআপ সমাপ্ত কৰিবলৈ টিপক"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"এইটো এটা ছিষ্টেম এপ আৰু ইয়াক আনইনষ্টল কৰিব নোৱৰি"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"নাম সম্পাদনা কৰক"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> অক্ষম কৰা হ’ল"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 9723da7..1240ed7 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Tətbiqə Əsas Səhifədə ayarları və qısayolları dəyişməyə icazə verir."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinə telefon zəngləri etmək üçün icazə verilmir"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Vidceti yükləmək olmur"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Ayarlamanı tamamlamaq üçün toxunun"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Vidcet ayarları"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Ayarlamanı tamamlamaq üçün toxunun"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Bu sistem tətbiqi olduğu üçün sistemdən silinə bilməz."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Adı redaktə edin"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> deaktiv edildi"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 40176f6..c8d1fd3 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Dozvoljava aplikaciji da menja podešavanja i prečice na početnom ekranu."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nema dozvolu za upućivanje telefonskih poziva"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Učitavanje vidžeta nije uspelo"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Dodirnite da biste dovršili podešavanje"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Podešavanja vidžeta"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Dodirnite da biste dovršili podešavanje"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ovo je sistemska aplikacija i ne može da se deinstalira."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Izmenite naziv"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogućena"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index b8dbc97..d5b8391 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Дазваляе праграме змяняць налады і ярлыкі на Галоўнай старонцы."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> не мае дазволу на здзяйсненне тэлефонных званкоў"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Не ўдаецца загрузіць віджэт"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Націсніце, каб завяршыць наладжванне"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Налады віджэта"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Націсніце, каб завяршыць наладжванне"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Гэта сістэмная праграма, яе нельга выдаліць."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Змяніць назву"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> адключана"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 2820eb2..5638d9c 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Разрешава на приложението да променя настройките и преките пътища в Начало."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> няма разрешение да извършва телефонни обаждания"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Приспособлението не може да се зареди"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Докоснете, за да завършите настройването"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Настройки за приспособленията"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Докоснете, за да завършите настройването"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Това е системно приложение и не може да се деинсталира."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Редактиране на името"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Деактивирахте <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 3f7abf1..d6cef8b 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"হোমে অ্যাপ্লিকেশানটিকে সেটিংস এবং শর্টকাটগুলি পরিবর্তন করতে দেয়৷"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ফোন কলগুলি করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g> এর অনুমতি নেই"</string>
<string name="gadget_error_text" msgid="740356548025791839">"উইজেট লোড করা যাচ্ছে না"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"সেটআপ সম্পূর্ণ করতে ট্যাপ করুন"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"উইজেট সেটিংস"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"সেটআপ সম্পূর্ণ করতে ট্যাপ করুন"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"এটি একটি সিস্টেম অ্যাপ্লিকেশান এবং আনইনস্টল করা যাবে না৷"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"নাম এডিট করুন"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> অক্ষম করা হয়েছে"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index db8f753..8108eff 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Dopušta aplikaciji promjenu postavki i prečica na početnom ekranu."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nema odobrenje da uspostavlja telefonske pozive"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Nije moguće učitati vidžet"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Dodirnite da završite postavljanje"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Postavke vidžeta"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Dodirnite da završite postavljanje"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ovo je sistemska aplikacija i ne može se deinstalirati."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Uređivanje naziva"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogućena"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 66934d2..422ee65 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permet que l\'aplicació canviï la configuració i les dreceres de la pantalla d\'inici."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> no té permís per fer trucades telefòniques"</string>
<string name="gadget_error_text" msgid="740356548025791839">"No es pot carregar el widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Toca per finalitzar la configuració"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Configuració del widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Toca per finalitzar la configuració"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Aquesta aplicació és una aplicació del sistema i no es pot desinstal·lar."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edita el nom"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"S\'ha desactivat <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 54bdd7a..729fc11 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Umožňuje aplikaci změnit nastavení a odkazy na ploše."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> nemá oprávnění telefonovat"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widget se nepodařilo načíst"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Klepnutím dokončíte konfiguraci"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Nastavení widgetů"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Klepnutím dokončíte konfiguraci"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Toto je systémová aplikace a nelze ji odinstalovat."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Upravit název"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> je zakázána"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index b7e1b06..3b1e872 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Tillader, at appen ændrer indstillingerne og genvejene på startskærmen."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> har ikke tilladelse til at foretage telefonopkald"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widgetten kan ikke indlæses"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tryk for at fuldføre konfigurationen"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget-indstillinger"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tryk for at fuldføre konfigurationen"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Dette er en systemapp, som ikke kan afinstalleres."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Rediger navn"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> er deaktiveret"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4a6402f..583aa50 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Ermöglicht der App, die Einstellungen und Verknüpfungen auf dem Startbildschirm zu ändern"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> darf keine Telefonanrufe tätigen."</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widget kann nicht geladen werden"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tippen, um Einrichtung abzuschließen"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget-Einstellungen"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tippen, um Einrichtung abzuschließen"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Dies ist eine Systemanwendung, die nicht deinstalliert werden kann."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Name bearbeiten"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> deaktiviert"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 1e179f8..bc0d4ec 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Επιτρέπει στην εφαρμογή την αλλαγή των ρυθμίσεων και των συντομεύσεων στην Αρχική οθόνη."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν επιτρέπεται να πραγματοποιεί τηλεφωνικές κλήσεις"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Δεν είναι δυνατή η φόρτωση του γραφικού στοιχείου"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Πατήστε για να ολοκληρώσετε τη ρύθμιση"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Ρυθμίσεις γραφικών στοιχείων"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Πατήστε για να ολοκληρώσετε τη ρύθμιση"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Αυτή είναι μια εφαρμογή συστήματος και δεν είναι δυνατή η κατάργηση της εγκατάστασής της."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Επεξεργασία ονόματος"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> είναι απενεργοποιημένη"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index bf179a5..ddfe633 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Allows the app to change the settings and shortcuts in Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not allowed to make phone calls"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Can\'t load widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tap to finish setup"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget settings"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tap to finish setup"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"This is a system app and can\'t be uninstalled."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edit Name"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Disabled <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index bf179a5..ddfe633 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Allows the app to change the settings and shortcuts in Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not allowed to make phone calls"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Can\'t load widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tap to finish setup"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget settings"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tap to finish setup"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"This is a system app and can\'t be uninstalled."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edit Name"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Disabled <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index bf179a5..ddfe633 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Allows the app to change the settings and shortcuts in Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not allowed to make phone calls"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Can\'t load widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tap to finish setup"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget settings"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tap to finish setup"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"This is a system app and can\'t be uninstalled."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edit Name"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Disabled <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index bf179a5..ddfe633 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Allows the app to change the settings and shortcuts in Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not allowed to make phone calls"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Can\'t load widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tap to finish setup"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget settings"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tap to finish setup"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"This is a system app and can\'t be uninstalled."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edit Name"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Disabled <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 3659910..242ecd2 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Allows the app to change the settings and shortcuts in Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not allowed to make phone calls"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Can\'t load widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tap to finish setup"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget settings"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tap to finish setup"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"This is a system app and can\'t be uninstalled."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edit Name"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Disabled <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 8b1bd51..624050e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permite que la aplicación cambie la configuración y los accesos directos de la pantalla principal."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> no puede realizar llamadas telefónicas"</string>
<string name="gadget_error_text" msgid="740356548025791839">"No se puede cargar el widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Presiona para finalizar la configuración"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Configuración del widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Presiona para finalizar la configuración"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Esta es una aplicación del sistema y no se puede desinstalar."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Editar nombre"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Se inhabilitó <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index af5c5e5..b73db7f 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permite que las aplicaciones cambien los ajustes y los accesos directos de la pantalla de inicio."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> no puede hacer llamadas"</string>
<string name="gadget_error_text" msgid="740356548025791839">"No se puede cargar el widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Toca para finalizar la configuración"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Ajustes de widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Toca para finalizar la configuración"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Esta aplicación es del sistema y no se puede desinstalar."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Editar nombre"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Se ha inhabilitado <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 3d5cc6b..43ace8c 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Võimaldab rakendusel muuta avaekraanil seadeid ja otseteid."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> pole lubatud helistada"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Vidinat ei saa laadida"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Puudutage seadistuse lõpuleviimiseks"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Vidina seaded"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Puudutage seadistuse lõpuleviimiseks"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"See on süsteemirakendus ja seda ei saa desinstallida."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Muuda nime"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Rakendus <xliff:g id="APP_NAME">%1$s</xliff:g> on keelatud"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index d023d79..7197498 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Hasierako pantailako ezarpenak eta lasterbideak aldatzeko baimena ematen die aplikazioei."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak ez du telefono-deiak egiteko baimenik"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Ezin da kargatu widgeta"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Konfiguratzen amaitzeko, sakatu hau"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widgetaren ezarpenak"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Sakatu konfiguratzen amaitzeko"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Sistema-aplikazioa da hau eta ezin da desinstalatu."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Editatu izena"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> desgaituta dago"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 9bded9e..98421d6 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"به برنامه اجازه میدهد تنظیمات و میانبرها را در صفحه اصلی تغییر دهد."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> مجاز نیست تماس تلفنی برقرار کند"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ابزارک را نمیتوان بار کرد"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"برای تکمیل راهاندازی ضربه بزنید"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"تنظیمات ابزارک"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"برای تکمیل راهاندازی ضربه بزنید"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"این برنامه سیستمی است و حذف نصب نمیشود."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"ویرایش نام"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> غیرفعال شد"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3c78b10..45a61bc 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Antaa sovelluksen muuttaa aloitusruudun asetuksia ja pikakuvakkeita."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei saa soittaa puheluita."</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widgetiä ei voi ladata"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Viimeistele asennus napauttamalla"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widgetin asetukset"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Viimeistele asennus napauttamalla"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Tämä on järjestelmäsovellus, eikä sitä voi poistaa."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Muokkaa nimeä"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> poistettiin käytöstä"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 65cb2b2..d8e2849 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permet à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"L\'application <xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas autorisée à faire des appels téléphoniques"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Impossible de charger le widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Touchez pour terminer la configuration"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Paramètres du widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Touchez pour terminer la configuration"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Impossible de désinstaller cette application, car il s\'agit d\'une application système."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Modifier le nom"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"L\'application <xliff:g id="APP_NAME">%1$s</xliff:g> est désactivée"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f559364..d0671da 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permettre à l\'application de modifier les paramètres et les raccourcis de l\'écran d\'accueil"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"L\'application <xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas autorisée à passer des appels téléphoniques."</string>
<string name="gadget_error_text" msgid="740356548025791839">"Impossible de charger le widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Appuyez pour terminer la configuration"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Paramètres du widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Appuyez pour terminer la configuration"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Impossible de désinstaller cette application, car il s\'agit d\'une application système."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Modifier le nom"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> est désactivé."</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index d998a61..2a42771 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permite a unha aplicación cambiar a configuración e os atallos da pantalla de inicio."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> non ten permiso para facer chamadas telefónicas"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Non se puido cargar o widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Toca para rematar a configuración"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Configuración do widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Toca para rematar a configuración"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Esta aplicación é do sistema e non se pode desinstalar."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edita o nome"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Desactivouse <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 6c31f5c..990db91 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ઍપને હોમમાં સેટિંગ અને શૉર્ટકટ બદલવાની મંજૂરી આપે છે."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ને ફોન કૉલ્સ કરવાની મંજૂરી નથી"</string>
<string name="gadget_error_text" msgid="740356548025791839">"વિજેટ લોડ કરી શકાતું નથી"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"સેટઅપ પૂર્ણ કરવા માટે ટૅપ કરો"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"વિજેટ સેટિંગ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"સેટઅપ પૂર્ણ કરવા માટે ટૅપ કરો"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"આ એક સિસ્ટમ ઍપ્લિકેશન છે અને અનઇન્સ્ટોલ કરી શકાતી નથી."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"નામમાં ફેરફાર કરો"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> અક્ષમ કરી"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 863ead0..bd2d253 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ऐप्लिकेशन को होम पेज में सेटिंग और शॉर्टकट बदलने देती है."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> को फ़ोन कॉल करने की अनुमति नहीं है"</string>
<string name="gadget_error_text" msgid="740356548025791839">"विजेट को लोड नहीं किया जा सका"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"सेट अप पूरा करने के लिए टैप करें"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"विजेट की सेटिंग"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"सेट अप पूरा करने के लिए टैप करें"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"यह एक सिस्टम ऐप्लिकेशन है और इसे अनइंस्टॉल नहीं किया जा सकता."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"नाम में बदलाव करें"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> अक्षम है"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 55381a6..f633084 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Aplikaciji omogućuje promjenu postavki i prečaca na početnom zaslonu."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nema dopuštenje za telefonske pozive"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widget se ne može učitati"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Dodirnite da biste dovršili postavljanje"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Postavke widgeta"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Dodirnite da biste dovršili postavljanje"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ovo je aplikacija sustava i ne može se ukloniti."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Uređivanje naziva"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> onemogućena"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index f5f6070..8d7410b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Lehetővé teszi az alkalmazás számára, hogy módosítsa a kezdőképernyő beállításait és parancsikonjait."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> nem kezdeményezhet telefonhívásokat"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Nem tölthető le a modul"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Koppintson a beállítás befejezéséhez"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Modulbeállítások"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Koppintson a beállítás befejezéséhez"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ez egy rendszeralkalmazás, és nem lehet eltávolítani."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Név módosítása"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> letiltva"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 58df2ca..1226fd3 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Ծրագրին թույլ է տալիս փոփոխել հիմնաէջի կարգավորումներն ու դյուրանցումները:"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածին չի թույլատրվում հեռախոսազանգեր կատարել"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Չհաջողվեց բեռնել վիջեթը"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Հպեք՝ կարգավորումն ավարտելու համար"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Վիջեթի կարգավորումներ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Հպեք՝ կարգավորումն ավարտելու համար"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Սա համակարգային ծրագիր է և չի կարող ապատեղադրվել:"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Փոխել անունը"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածն անջատված է"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index ffd29cf..d0d3f60 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Mengizinkan aplikasi mengubah setelan dan pintasan di layar Utama."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak diizinkan untuk melakukan panggilan telepon"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Tidak dapat memuat widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Ketuk untuk menyelesaikan penyiapan"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Setelan widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Ketuk untuk menyelesaikan penyiapan"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ini adalah aplikasi sistem dan tidak dapat dicopot pemasangannya."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Sunting Nama"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> dinonaktifkan"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index c12f63c..94a15a2 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Leyfir forriti að breyta stillingum og flýtileiðum heimaskjás."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> hefur ekki leyfi til að hringja símtöl"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Ekki hægt að hlaða græju"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Ýttu til að ljúka við uppsetningu"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Græjustillingar"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Ýttu til að ljúka við uppsetningu"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Þetta er kerfisforrit sem ekki er hægt að fjarlægja."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Breyta nafni"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Óvirkt <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8e861b0..46be62f 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Consente all\'app di modificare le impostazioni e le scorciatoie in Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> non è autorizzata a effettuare telefonate"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Impossibile caricare il widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tocca e completa configurazione"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Impostazioni widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tocca per completare la configurazione"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Questa è un\'app di sistema e non può essere disinstallata."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Modifica nome"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"App <xliff:g id="APP_NAME">%1$s</xliff:g> disattivata"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index a4dff1c..fbd591c 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"מאפשר לאפליקציה לשנות את ההגדרות וקיצורי הדרך בדף הבית."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> אינו רשאי להתקשר"</string>
<string name="gadget_error_text" msgid="740356548025791839">"לא ניתן לטעון את הווידג\'ט"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"צריך להקיש כדי לסיים את תהליך ההגדרה"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"הגדרות הווידג\'ט"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"צריך להקיש כדי לסיים את תהליך ההגדרה"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"זוהי אפליקציית מערכת ולא ניתן להסיר את התקנתה."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"עריכת השם"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> מושבתת"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 6912632..0100c98 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ホームの設定とショートカットの変更をアプリに許可します。"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」から電話をかけることはできません"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ウィジェットを読み込めません"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"タップして設定を完了してください"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ウィジェットの設定"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"タップして設定を完了してください"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"このシステムアプリはアンインストールできません。"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"名前の編集"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」は無効です"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 9873323..1823bc9 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"აპისთვის მთავარი ეკრანის პარამეტრებისა და მალსახმობების შეცვლის უფლების მიცემა."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ს არ აქვს სატელეფონო ზარების განხორციელების უფლება"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ვიჯეტის ჩატვირთვა ვერ ხერხდება"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"შეეხეთ დაყენების დასასრულებლად"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ვიჯეტის პარამეტრები"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"შეეხეთ დაყენების დასასრულებლად"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ეს სისტემური აპია და მისი წაშლა შეუძლებელია."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"სახელის რედაქტირება"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> გაითიშა"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index ca59c24..b899111 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Қолданбаға Негізгі экрандағы параметрлер мен төте пернелерді өзгерту мүмкіндігін береді."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> арқылы телефон қоңырауларын соғуға рұқсат етілмеген"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Виджетті жүктеу мүмкін емес."</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Реттеуді аяқтау үшін түртіңіз."</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Виджет параметрлері"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Реттеуді аяқтау үшін түртіңіз."</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Бұл жүйе қолданбасы, сондықтан оны алу мүмкін емес."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Атын өңдеу"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> өшірілді"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index b129975..abc68aa 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"អនុញ្ញាតឲ្យកម្មវិធីប្ដូរការកំណត់ និងផ្លូវកាត់ក្នុងអេក្រង់ដើម។"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> មិនត្រូវបានអនុញ្ញាតឲ្យធ្វើការហៅទូរស័ព្ទទេ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"មិនអាចផ្ទុកធាតុក្រាហ្វិកបានទេ"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ចុចដើម្បីបញ្ចប់ការរៀបចំ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ការកំណត់ធាតុក្រាហ្វិក"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ចុចដើម្បីបញ្ចប់ការរៀបចំ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"នេះជាកម្មវិធីប្រព័ន្ធ មិនអាចលុបបានទេ។"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"កែឈ្មោះ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"បានបិទដំណើរការ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 87808c5..cfe2edb 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ಮುಖಪುಟದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ಗಳು ಮತ್ತು ಶಾರ್ಟ್ಕಟ್ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು <xliff:g id="APP_NAME">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ವಿಜೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ವಿಜೆಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ಇದೊಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ ಮತ್ತು ಅಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"ಹೆಸರನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index ccf32ba..d01b6b9 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"앱이 홈에 있는 설정 및 바로가기를 변경할 수 있도록 합니다."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 전화를 걸 수 없습니다."</string>
<string name="gadget_error_text" msgid="740356548025791839">"위젯을 로드할 수 없습니다."</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"탭하여 설정을 완료하세요."</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"위젯 설정"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"탭하여 설정을 완료하세요."</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"시스템 앱은 제거할 수 없습니다."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"이름 수정"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> 사용 안함"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index ce3cc4b..ab5ca5d 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Колдонмого Үйдүн тууралоолорун жана тез чакырмаларын өзгөртүүгө уруксат берет."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> телефон чалууларды аткарууга уруксаты жок"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Виджет жүктөлбөй жатат"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Жөндөп бүтүрүү үчүн таптап коюңуз"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Виджеттин жөндөөлөрү"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Жөндөп бүтүү үчүн таптап коюңуз"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Бул системдик колдонмо жана аны чечкенге болбойт."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Аталышын түзөтүү"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> өчүрүлгөн"</string>
@@ -106,7 +107,7 @@
<string name="notification_dots_desc_off" msgid="1760796511504341095">"Өчүк"</string>
<string name="title_missing_notification_access" msgid="7503287056163941064">"Эскертмелерге уруксат берилиши керек"</string>
<string name="msg_missing_notification_access" msgid="281113995110910548">"Эскертме белгилерин көрсөтүү максатында, <xliff:g id="NAME">%1$s</xliff:g> үчүн колдонмонун билдирмелерин күйгүзүү керек"</string>
- <string name="title_change_settings" msgid="1376365968844349552">"Жөндөөлөрдү өзгөртүү"</string>
+ <string name="title_change_settings" msgid="1376365968844349552">"Параметрлерди өзгөртүү"</string>
<string name="notification_dots_service_title" msgid="4284221181793592871">"Билдирмелер белгилерин көрсөтүү"</string>
<string name="auto_add_shortcuts_label" msgid="3698776050751790653">"Колдонмонун сүрөтчөсүн Башкы экранга кошуу"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Жаңы колдонмолор үчүн"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index dd1b6d6..4616eec 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ອະນຸຍາດໃຫ້ແອັບຯດັ່ງກ່າວ ປ່ຽນການຕັ້ງຄ່າ ແລະທາງລັດໃນໜ້າຫຼັກ."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ໂທ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ບໍ່ສາມາດໂຫຼດວິດເຈັດໄດ້"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ແຕະເພື່ອຕັ້ງຄ່າໃຫ້ແລ້ວ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ການຕັ້ງຄ່າວິດເຈັດ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ແຕະເພື່ອຕັ້ງຄ່າໃຫ້ແລ້ວ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ນີ້ແມ່ນແອັບຯຂອງລະບົບ ແລະບໍ່ສາມາດຖອນການຕິດຕັ້ງອອກໄດ້."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"ແກ້ໄຂຊື່"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"ປິດການນຳໃຊ້ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index eb2e256..5813b15 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Programai leidžiama keisti pagrindinio puslapio nustatymus ir sparčiuosius klavišus."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ neleidžiama skambinti"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Nepavyko įkelti valdiklio"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Palieskite, kad užbaigtumėte sąranką"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Valdiklio nustatymai"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Palieskite, kad užbaigtumėte sąranką"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Tai sistemos programa ir jos negalima pašalinti."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Pavadinimo redagavimas"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ išjungta"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index fa2ff77..759c84e 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Ļauj lietotnei mainīt iestatījumus un saīsnes sākuma ekrānā."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g> nav atļauts veikt tālruņa zvanus."</string>
<string name="gadget_error_text" msgid="740356548025791839">"Nevar ielādēt logrīku."</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Pieskarieties, lai pabeigtu iestatīšanu."</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Logrīka iestatījumi"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Pieskarieties, lai pabeigtu iestatīšanu"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Šī ir sistēmas lietotne, un to nevar atinstalēt."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Nosaukuma rediģēšana"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> ir atspējota"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index a2cd5f7..d07469b 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Овозможува апликацијата да ги менува подесувањата и кратенките на почетната страница."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> нема дозвола за телефонски повици"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Не може да се вчита виџетот"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Допрете за да го завршите поставувањето"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Поставки за виџет"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Допрете за да го завршите поставувањето"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ова е системска апликација и не може да се деинсталира."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Изменете го името"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> е оневозможена"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 1b44018..12df7b2 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ഹോമിലെ ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും മാറ്റാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ഫോൺ കോൾ ചെയ്യാൻ <xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനെ അനുവദിച്ചിട്ടില്ല"</string>
<string name="gadget_error_text" msgid="740356548025791839">"വിജറ്റ് ലോഡ് ചെയ്യാനാകുന്നില്ല"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"സജ്ജീകരണം പൂർത്തിയാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"വിജറ്റ് ക്രമീകരണം"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"സജ്ജീകരണം പൂർത്തിയാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ഇതൊരു സിസ്റ്റം അപ്ലിക്കേഷനായതിനാൽ അൺഇൻസ്റ്റാളുചെയ്യാനാവില്ല."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"പേര് എഡിറ്റ് ചെയ്യുക"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> പ്രവർത്തനരഹിതമാക്കി"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 7cc92e5..8f4a12d 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Апп нь Нүүрэндэх товчлол болон тохиргоог өөрчилж чадна."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> утасны дуудлага хийх боломжгүй"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Жижиг хэрэгслийг ачаалах боломжгүй"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Тохируулгыг дуусгахын тулд товшино уу"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Виджетийн тохиргоо"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Тохируулгыг дуусгахын тулд товшино уу"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Энэ апп нь системийн апп ба устгах боломжгүй."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Нэр засах"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г идэвхгүй болгосон"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 813317e..5b88da9 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"मुख्यपृष्ठातील सेटिंग्ज आणि शॉर्टकट बदलण्यास अॅप ला अनुमती देते."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ला फोन कॉल करण्याची अनुमती नाही"</string>
<string name="gadget_error_text" msgid="740356548025791839">"विजेट लोड करू शकत नाही"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"सेटअप पूर्ण करण्यासाठी टॅप करा"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"विजेटची सेटिंग्ज"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"सेटअप पूर्ण करण्यासाठी टॅप करा"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"हा सिस्टम अॅप आहे आणि अनइंस्टॉल केला जाऊ शकत नाही."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"नाव संपादित करा"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> अक्षम केला आहे"</string>
@@ -112,7 +113,7 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"नवीन अॅप्ससाठी"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"अज्ञात"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"काढा"</string>
- <string name="abandoned_search" msgid="891119232568284442">"Search"</string>
+ <string name="abandoned_search" msgid="891119232568284442">"शोधा"</string>
<string name="abandoned_promises_title" msgid="7096178467971716750">"हा अॅप इंस्टॉल केलेला नाही"</string>
<string name="abandoned_promise_explanation" msgid="3990027586878167529">"या चिन्हासाठी अॅप इंस्टॉल केलेला नाही. तुम्ही ते काढू शकता किंवा अॅपचा शोध घेऊ शकता आणि त्यास व्यक्तिचलितपणे इंस्टॉल करू शकता."</string>
<string name="app_installing_title" msgid="5864044122733792085">"<xliff:g id="NAME">%1$s</xliff:g> इंस्टॉल करत आहे, <xliff:g id="PROGRESS">%2$s</xliff:g> पूर्ण झाले"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index b07a2d2..be6dbff 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Membenarkan apl menukar tetapan dan pintasan di Laman Utama."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak dibenarkan membuat panggilan telefon"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Tidak dapat memuatkan widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Ketik untuk menyelesaikan persediaan"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Tetapan widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Ketik untuk menyelesaikan persediaan"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ini ialah apl sistem dan tidak boleh dinyahpasang."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edit Nama"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> dilumpuhkan"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 6f9e601..17fc96f 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ပင်မမျက်နှာစာတွင် ရှိသော အပြင်အဆင် နှင့် အတိုကောက်မှတ်သားမှုများ ကို အပ်ပလီကေးရှင်းအား ပြောင်းခွင့်ပြုခြင်း"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g>သည် ဖုန်းခေါ်ဆိုခွင့် မရှိပါ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ဝိဂျက်ကို ဖွင့်၍မရပါ"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"စနစ်ထည့်သွင်းခြင်း အပြီးသတ်ရန် တို့ပါ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ဝိဂျက်ဆက်တင်များ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"စနစ်ထည့်သွင်းခြင်း အပြီးသတ်ရန် တို့ပါ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ဤအပ်ပလီကေးရှင်းမှာ စစ်စတန်ပိုင်းဆိုင်ရာ အပ်ပလီကေးရှင်းဖြစ်ပါသည်။ ထုတ်ပစ်၍ မရပါ"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"အမည်ကို တည်းဖြတ်ပါ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ပိတ်ထားသည်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 2ef174a..e95dc8b 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Lar appen endre innstillingene og snarveiene på startsiden."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> har ikke tillatelse til å ringe"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Kan ikke laste inn modulen"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Trykk for å fullføre konfigureringen"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Modulinnstillinger"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Trykk for å fullføre konfigureringen"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Dette er en systemapp som ikke kan avinstalleres."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Rediger navn"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Slo av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 242d5a1..3c33bf1 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"गृहमा एउटा एपलाई सेटिङ र सर्टकट बदल्न अनुमति दिनुहोस्।"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले फोन कलहरू गर्न अनुमति छैन"</string>
<string name="gadget_error_text" msgid="740356548025791839">"विजेट लोड गर्न सकिएन"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"सेटअप गर्ने प्रक्रिया पूरा गर्न ट्याप गर्नुहोस्"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"विजेटका सेटिङ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"सेटअप पूरा गर्न ट्याप गर्नुहोस्"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"यो प्रणाली एप हो र यसलाई स्थापना रद्द गर्न सकिँदैन।"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"नाम सम्पादन गर्नुहोस्"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"असक्षम पारिएको <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 05e99f0..480cefb 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"De app toestaan de instellingen en snelkoppelingen op de homepage te wijzigen."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> mag niet bellen"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Kan widget niet laden"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tik om het instellen af te ronden"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widgetinstellingen"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tik om instellen af te ronden"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Dit is een systeemapp die niet kan worden verwijderd."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Naam bewerken"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> staat uit"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 9450bb6..8ec6a80 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ହୋମରେ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍ ପରିବର୍ତ୍ତନ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ଫୋନ୍ କଲ୍ କରିବାକୁ <xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ୱିଜେଟ୍ ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ସେଟ୍ ଅପ୍ ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ୱିଜେଟ ସେଟିଂସ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ସେଟଅପ ସମ୍ପୂର୍ଣ୍ଣ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ଏହା ଏକ ସିଷ୍ଟମ୍ ଆପ୍ ଅଟେ ଏବଂ ଏହା ଅନଇନଷ୍ଟଲ୍ କରାଯାଇ ପାରିବ ନାହିଁ।"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"ନାମ ସମ୍ପାଦନ କରନ୍ତୁ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଅକ୍ଷମ କରାଗଲା"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index adbf62e..b6acb97 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ਐਪ ਨੂੰ ਹੋਮ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸ਼ਾਰਟਕੱਟ ਬਦਲਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਫ਼ੋਨ ਕਾਲਾਂ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ਵਿਜੇਟ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"ਸੈੱਟਅੱਪ ਪੂਰਾ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ਵਿਜੇਟ ਸੈਟਿੰਗਾਂ"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"ਸੈੱਟਅੱਪ ਪੂਰਾ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ਇਹ ਇੱਕ ਸਿਸਟਮ ਐਪ ਹੈ ਅਤੇ ਇਸਨੂੰ ਅਣਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"ਨਾਮ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 5de798a..dcb809d 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Umożliwia aplikacji zmianę ustawień i skrótów na ekranie głównym."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nie może wykonywać połączeń telefonicznych"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Nie udało się załadować widżetu"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Kliknij, aby dokończyć konfigurację"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Ustawienia widżetu"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Kliknij, aby dokończyć konfigurację"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"To aplikacja systemowa i nie można jej odinstalować."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edytuj nazwę"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest wyłączona"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 5388c66..ad5a376 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permite à app alterar as definições e os atalhos no Ecrã Principal."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"O <xliff:g id="APP_NAME">%1$s</xliff:g> não tem autorização para efetuar chamadas telefónicas"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Não é possível carregar o widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Toque para concluir a configuração"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Definições de widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Toque para concluir a configuração"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"É uma app de sistema e não pode ser desinstalada."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Edite o nome"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> desativado"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 9fc4030..6cfd099 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permite que o app altere as configurações e os atalhos na tela inicial."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> não tem permissão para fazer chamadas"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Não é possível carregar o widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Toque para concluir a configuração"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Configurações de widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Toque para concluir a configuração"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Este é um app do sistema e não pode ser desinstalado."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Editar nome"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> desativado"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index c025180..e7542d4 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Permite aplicației să modifice setările și comenzile rapide din ecranul de pornire."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu are permisiunea de a apela"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widgetul nu poate fi încărcat"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Atingeți pentru a finaliza configurarea"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Setări pentru widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Atingeți pentru a finaliza configurarea"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Aceasta este o aplicație de sistem și nu poate fi dezinstalată."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Modificați numele"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"S-a dezactivat <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index e81e002..78925b0 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Приложение сможет изменять настройки и ярлыки на главном экране."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> не может делать телефонные звонки"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Не удается загрузить виджет."</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Нажмите, чтобы завершить настройку."</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Настройки виджета"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Нажмите, чтобы завершить настройку."</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Это системное приложение, его нельзя удалить."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Измените название"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> отключено"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index fe18229..689f1cd 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"මුල් පිටුවේ සැකසීම් සහ කෙටිමං ඉවත් කිරීමට යෙදුමට අවසර දෙයි."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> හට දුරකථන ඇමතුම් සිදු කිරීමට ඉඩ නොදේ"</string>
<string name="gadget_error_text" msgid="740356548025791839">"විජට් පූරණය කළ නොහැකිය"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"පිහිටුවීම අවසන් කිරීමට තට්ටු කරන්න"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"විජට් සැකසීම්"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"පිහිටුවීම අවසන් කිරීමට තට්ටු කරන්න"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"මෙය පද්ධති යෙදුමක් වන අතර අස්ථාපනය කළ නොහැක."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"නම සංස්කරණය කරන්න"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> අබල කෙරිණි"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index e744409..57c01d2 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Povoľuje aplikácii zmeniť nastavenia a odkazy na ploche."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> nemá povolenie uskutočňovať telefonické hovory"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Miniaplikáciu sa nepodarilo načítať"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Nastavenie dokončíte klepnutím"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Nastavenia miniaplikácie"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Nastavenie dokončíte klepnutím"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Toto je systémová aplikácia a nedá sa odinštalovať."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Úprava názvu"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> je deaktivovaná"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index a1b2084..29e8a02 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Aplikaciji dovoli spreminjanje nastavitev in bližnjic na začetnem zaslonu."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> ni dovoljeno opravljanje klicev"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Pripomočka ni mogoče naložiti."</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Dotaknite se, da dokončate postopek nastavitve."</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Nastavitve pripomočka"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Dotaknite se, da dokončate postopek nastavitve."</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"To je sistemska aplikacija in je ni mogoče odstraniti."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Urejanje imena"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogočena"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index f3e08a6..04ec414 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Lejon aplikacionin të ndryshojë cilësimet dhe shkurtoret në ekranin bazë."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk lejohet të kryejë telefonata"</string>
<string name="gadget_error_text" msgid="740356548025791839">"S\'mund të ngarkohet miniaplikacioni"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Trokit për të përfunduar konfigurimin"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Cilësimet e miniaplikacionit"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Trokit për të përfunduar konfigurimin"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ky është aplikacion sistemi dhe nuk mund të çinstalohet."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Redakto emrin"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> u çaktivizua"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index f6aea02..b3ebf4b 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Дозвољава апликацији да мења подешавања и пречице на почетном екрану."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> нема дозволу за упућивање телефонских позива"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Учитавање виџета није успело"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Додирните да бисте довршили подешавање"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Подешавања виџета"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Додирните да бисте довршили подешавање"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Ово је системска апликација и не може да се деинсталира."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Измените назив"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је онемогућена"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 4407e69..feae09b 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Tillåter att appen ändrar inställningar och genvägar på startsidan."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> har inte behörighet att ringa samtal"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Det gick inte att läsa in widgeten"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Tryck för att slutföra konfigureringen"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widgetinställningar"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Tryck för att slutföra konfigureringen"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Det här är en systemapp som inte kan avinstalleras."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Redigera namn"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> har inaktiverats"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 6830c18..ca35210 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Huruhusu programu kubadilisha mipangilio na njia za mkato katika skrini ya Mwanzo."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> hairuhusiwi kupiga simu"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Imeshindwa kupakia wijeti"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Gusa ili umalize kuweka mipangilio"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Mipangilio ya wijeti"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Gusa ili umalize kuweka mipangilio"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Hii ni programu ya mfumo na haiwezi kuondolewa."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Badilisha Jina"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> imezimwa"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 082df81..a9832eb 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"முகப்பில் உள்ள அமைப்பு மற்றும் குறுக்குவழிகளை மாற்ற ஆப்ஸை அனுமதிக்கிறது."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ஃபோன் அழைப்புகள் செய்ய, <xliff:g id="APP_NAME">%1$s</xliff:g> அனுமதிக்கப்படவில்லை"</string>
<string name="gadget_error_text" msgid="740356548025791839">"விட்ஜெட்டை ஏற்ற முடியவில்லை"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"அமைவை நிறைவுசெய்யத் தட்டவும்"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"விட்ஜெட் அமைப்புகள்"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"அமைவை நிறைவுசெய்யத் தட்டவும்"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"இது அமைப்பு ஆப்ஸ் என்பதால் நிறுவல் நீக்கம் செய்ய முடியாது."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"பெயரைத் திருத்துதல்"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> முடக்கப்பட்டது"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 956bc8e..7430d63 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"హోమ్లో సెట్టింగ్లు మరియు షార్ట్కట్లను మార్చడానికి యాప్ను అనుమతిస్తుంది."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"ఫోన్ కాల్స్ను చేసేందుకు <xliff:g id="APP_NAME">%1$s</xliff:g>కి అనుమతి లేదు"</string>
<string name="gadget_error_text" msgid="740356548025791839">"విడ్జెట్ను లోడ్ చేయడం సాధ్యం కాలేదు"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"సెటప్ను పూర్తి చేయడానికి ట్యాప్ చేయండి"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"విడ్జెట్ సెట్టింగ్లు"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"సెటప్ను ముగించడానికి ట్యాప్ చేయండి"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"ఇది సిస్టమ్ యాప్ మరియు దీన్ని అన్ఇన్స్టాల్ చేయడం సాధ్యపడదు."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"పేరును ఎడిట్ చేయండి"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> నిలిపివేయబడింది"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 4e01b26..4216be5 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"อนุญาตให้แอปเปลี่ยนการตั้งค่าและทางลัดในหน้าแรก"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ไม่ได้รับอนุญาตให้โทรออก"</string>
<string name="gadget_error_text" msgid="740356548025791839">"โหลดวิดเจ็ตไม่ได้"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"แตะเพื่อสิ้นสุดการตั้งค่า"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"การตั้งค่าวิดเจ็ต"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"แตะเพื่อสิ้นสุดการตั้งค่า"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"นี่เป็นแอประบบและไม่สามารถถอนการติดตั้งได้"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"แก้ไขชื่อ"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"ปิดใช้ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 140b0e9..42b31e0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Pinapayagan ang app na baguhin ang mga setting at shortcut sa Home."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Hindi pinahihintulutang tumawag ang <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Hindi ma-load ang widget"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"I-tap para tapusin ang pag-set up"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Mga setting ng widget"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"I-tap para tapusin ang pag-set up"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Isa itong app ng system at hindi maaaring i-uninstall."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"I-edit ang Pangalan"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Naka-disable ang <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 5109a83..e12941f 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Uygulamaya, Ana ekrandaki ayarları ve kısayolları değiştirme izni verir."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasının telefon etmesine izin verilmiyor"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Widget yüklenemiyor"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Kurulumu tamamlamak için dokunun"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Widget ayarları"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Kurulumu tamamlamak için dokunun"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Bu bir sistem uygulamasıdır ve yüklemesi kaldırılamaz."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Adı Düzenle"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> devre dışı"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 71083f7..2a7dce6 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Дозволяє програмі змінювати налаштування та ярлики на головному екрані."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> не має дозволу телефонувати"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Не вдається завантажити віджет"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Торкніться, щоб завершити налаштування"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Налаштування віджета"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Торкніться, щоб завершити налаштування"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Це системна програма, її неможливо видалити."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Редагувати назву"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> вимкнено"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 75304fd..f536e12 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"ایپ کو ہوم میں ترتیبات اور شارٹ کٹس کو تبدیل کرنے کی اجازت دیتا ہے۔"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو فون کالیں کرنے کی اجازت نہیں ہے"</string>
<string name="gadget_error_text" msgid="740356548025791839">"ویجیٹ لوڈ نہیں کیا جا سکتا"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"سیٹ اپ مکمل کرنے کے لیے تھپتھپائیں"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"ویجیٹ کی ترتیبات"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"سیٹ اپ مکمل کرنے کیلئے تھپتھپائیں"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"یہ ایک سسٹم ایپ ہے اور اسے اَن انسٹال نہیں کیا جا سکتا ہے۔"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"نام میں ترمیم کریں"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> غیر فعال ہے"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 023a6ea..cc99b84 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Ilovaga \"Uy\" ekranidagi yorliqlar va sozlamalrni o‘zgartirish uchun ruxsat beradi."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga qo‘ng‘iroqlarni amalga oshirishga ruxsat berilmagan"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Vidjet yuklanmadi"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Sozlashni yakunlash uchun bosing"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Vidjet sozlamalari"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Sozlashni yakunlash uchun bosing"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Bu tizim ilovasi, shuning uchun o‘chirib bo‘lmaydi."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Nomini tahrirlash"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi o‘chirib qo‘yildi"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 28f0a30..31a35eb 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Cho phép ứng dụng thay đổi cài đặt và lối tắt trên Màn hình chính."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> không được phép thực hiện cuộc gọi điện thoại"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Không thể tải tiện ích"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Nhấn để hoàn tất quá trình thiết lập"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Cài đặt tiện ích"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Nhấn để hoàn tất thiết lập"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Đây là ứng dụng hệ thống và không thể gỡ cài đặt."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Chỉnh sửa tên"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Đã vô hiệu hóa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 68611a7..086a603 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"允许应用更改主屏幕中的设置和快捷方式。"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"不允许使用“<xliff:g id="APP_NAME">%1$s</xliff:g>”拨打电话"</string>
<string name="gadget_error_text" msgid="740356548025791839">"无法加载微件"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"点按即可完成设置"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"微件设置"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"点按即可完成设置"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"这是系统应用,无法卸载。"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"修改名称"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"已停用<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 51b5282..858ca0e 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"允許應用程式更改主畫面中的設定和捷徑。"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"不允許 <xliff:g id="APP_NAME">%1$s</xliff:g> 撥打電話"</string>
<string name="gadget_error_text" msgid="740356548025791839">"無法載入小工具"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"輕按即可完成設定"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"小工具設定"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"輕按即可完成設定"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"這是系統應用程式,無法將其解除安裝。"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"編輯名稱"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已停用"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 1ebfa95..a48d594 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"允許應用程式變更主畫面中的設定和捷徑。"</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> 無法撥打電話"</string>
<string name="gadget_error_text" msgid="740356548025791839">"無法載入小工具"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"輕觸即可完成設定"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"小工具設定"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"輕觸即可完成設定"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"這是系統應用程式,不可解除安裝。"</string>
<string name="folder_hint_text" msgid="5174843001373488816">"編輯名稱"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"已停用 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 2454c52..f236ec8 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -80,7 +80,8 @@
<string name="permdesc_write_settings" msgid="5440712911516509985">"Ivumela uhlelo lokusebenza ukuthi lushintshe izilungiselelo nezinqamuleli Ekhaya."</string>
<string name="msg_no_phone_permission" msgid="9208659281529857371">"<xliff:g id="APP_NAME">%1$s</xliff:g> ayivunyelwe ukwenza amakholi wefoni"</string>
<string name="gadget_error_text" msgid="740356548025791839">"Ayikwazi ukulayisha iwijethi"</string>
- <string name="gadget_setup_text" msgid="1745356155479272374">"Thepha ukuze uqede ukusetha"</string>
+ <string name="gadget_setup_text" msgid="8348374825537681407">"Amasethingi ewijethi"</string>
+ <string name="gadget_complete_setup_text" msgid="309040266978007925">"Thepha ukuze uqede ukusetha"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"Lolu uhlelo lokusebenza lwesistimu futhi alikwazi ukukhishwa."</string>
<string name="folder_hint_text" msgid="5174843001373488816">"Hlela igama"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Kukhutshaziwe <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 9c20e1f..319c87d 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -177,7 +177,7 @@
<attr name="minWidthDps" format="float" />
<attr name="minHeightDps" format="float" />
- <!-- These min cell values are only used if GridDisplayOption#isScalable is true-->
+ <!-- These min cell values are only used if GridDisplayOption#isScalable is true -->
<attr name="minCellHeightDps" format="float" />
<attr name="minCellWidthDps" format="float" />
<!-- twoPanelPortraitMinCellWidthDps defaults to minCellHeightDps, if not specified -->
@@ -191,7 +191,32 @@
if not specified -->
<attr name="twoPanelLandscapeMinCellWidthDps" format="float" />
- <attr name="borderSpacingDps" format="float" />
+ <!-- These border spaces are only used if GridDisplayOption#isScalable is true -->
+ <!-- space to be used horizontally and vertically -->
+ <attr name="borderSpaceDps" format="float" />
+ <!-- space to the right of the cell, defaults to borderSpaceDps if not specified -->
+ <attr name="borderSpaceHorizontalDps" format="float" />
+ <!-- space below the cell, defaults to borderSpaceDps if not specified -->
+ <attr name="borderSpaceVerticalDps" format="float" />
+ <!-- space to be used horizontally and vertically in two panels,
+ defaults to borderSpaceDps if not specified -->
+ <attr name="twoPanelPortraitBorderSpaceDps" format="float" />
+ <!-- space to the right of the cell in two panels, defaults to
+ twoPanelPortraitBorderSpaceDps if not specified -->
+ <attr name="twoPanelPortraitBorderSpaceHorizontalDps" format="float" />
+ <!-- space below the cell in two panels, defaults to twoPanelPortraitBorderSpaceDps
+ if not specified -->
+ <attr name="twoPanelPortraitBorderSpaceVerticalDps" format="float" />
+ <!-- space to be used horizontally and vertically in two panels,
+ defaults to borderSpaceDps if not specified -->
+ <attr name="twoPanelLandscapeBorderSpaceDps" format="float" />
+ <!-- space to the right of the cell in two panels, defaults to
+ twoPanelLandscapeBorderSpaceDps if not specified -->
+ <attr name="twoPanelLandscapeBorderSpaceHorizontalDps" format="float" />
+ <!-- space below the cell in two panels, defaults to twoPanelLandscapeBorderSpaceDps
+ if not specified -->
+ <attr name="twoPanelLandscapeBorderSpaceVerticalDps" format="float" />
+
<attr name="allAppsCellSpacingDps" format="float" />
@@ -223,6 +248,12 @@
<!-- allAppsIconTextSize defaults to iconTextSize, if not specified -->
<attr name="allAppsIconTextSize" format="float" />
+ <!-- Margin on left and right of the workspace when GridDisplayOption#isScalable is true -->
+ <attr name="horizontalMargin" format="float"/>
+ <!-- twoPanelLandscapeHorizontalMargin defaults to horizontalMargin if not specified -->
+ <attr name="twoPanelLandscapeHorizontalMargin" format="float"/>
+ <!-- twoPanelPortraitHorizontalMargin defaults to horizontalMargin if not specified -->
+ <attr name="twoPanelPortraitHorizontalMargin" format="float"/>
</declare-styleable>
<declare-styleable name="CellLayout">
@@ -260,4 +291,18 @@
<declare-styleable name="WidgetsListRowHeader">
<attr name="appIconSize" format="dimension" />
</declare-styleable>
+
+ <declare-styleable name="WidgetSections">
+ <!-- Component name of an app widget provider. -->
+ <attr name="provider" format="string" />
+ <!-- If true, keep the app widget under its app listing in addition to the widget category
+ in the widget picker. Defaults to false if not specified. -->
+ <attr name="alsoKeepInApp" format="boolean" />
+ <!-- The category of an app widget provider. Defaults to -1 if not specified. -->
+ <attr name="category" format="integer" />
+ <!-- The title name of a widget category. -->
+ <attr name="sectionTitle" format="reference" />
+ <!-- The icon drawable of a widget category. -->
+ <attr name="sectionDrawable" format="reference" />
+ </declare-styleable>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 1cf49fc..b1294b4 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -29,9 +29,6 @@
<dimen name="dynamic_grid_cell_layout_padding">5.5dp</dimen>
<dimen name="dynamic_grid_cell_padding_x">8dp</dimen>
- <dimen name="two_panels_home_side_padding_landscape">36dp</dimen>
- <dimen name="two_panels_home_side_padding_portrait">9dp</dimen>
-
<!-- Hotseat -->
<dimen name="dynamic_grid_hotseat_top_padding">8dp</dimen>
<dimen name="dynamic_grid_hotseat_bottom_padding">2dp</dimen>
@@ -41,7 +38,6 @@
<dimen name="dynamic_grid_hotseat_side_padding">0dp</dimen>
<!-- Scalable Grid -->
- <dimen name="scalable_grid_left_right_margin">22dp</dimen>
<dimen name="scalable_grid_qsb_bottom_margin">42dp</dimen>
<!-- Workspace page indicator -->
diff --git a/res/xml/widget_sections.xml b/res/xml/widget_sections.xml
new file mode 100644
index 0000000..d755de6
--- /dev/null
+++ b/res/xml/widget_sections.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 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.
+-->
+
+<widget-sections xmlns:launcher="http://schemas.android.com/apk/res-auto">
+ <section
+ launcher:category="0"
+ launcher:sectionDrawable="@drawable/ic_conversations_widget_category"
+ launcher:sectionTitle="@string/widget_category_conversations">
+ <widget launcher:provider="com.android.systemui/.people.widget.PeopleSpaceWidgetProvider" />
+ </section>
+</widget-sections>
\ No newline at end of file
diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java
index fef3f8f..ebfd281 100644
--- a/src/com/android/launcher3/AppWidgetResizeFrame.java
+++ b/src/com/android/launcher3/AppWidgetResizeFrame.java
@@ -422,8 +422,8 @@
*/
private void resizeWidgetIfNeeded(boolean onDismiss) {
DeviceProfile dp = mLauncher.getDeviceProfile();
- float xThreshold = mCellLayout.getCellWidth() + dp.cellLayoutBorderSpacingPx;
- float yThreshold = mCellLayout.getCellHeight() + dp.cellLayoutBorderSpacingPx;
+ float xThreshold = mCellLayout.getCellWidth() + dp.cellLayoutBorderSpacePx.x;
+ float yThreshold = mCellLayout.getCellHeight() + dp.cellLayoutBorderSpacePx.y;
int hSpanInc = getSpanIncrement((mDeltaX + mDeltaXAddOn) / xThreshold - mRunningHInc);
int vSpanInc = getSpanIncrement((mDeltaY + mDeltaYAddOn) / yThreshold - mRunningVInc);
@@ -508,8 +508,8 @@
private void onTouchUp() {
DeviceProfile dp = mLauncher.getDeviceProfile();
- int xThreshold = mCellLayout.getCellWidth() + dp.cellLayoutBorderSpacingPx;
- int yThreshold = mCellLayout.getCellHeight() + dp.cellLayoutBorderSpacingPx;
+ int xThreshold = mCellLayout.getCellWidth() + dp.cellLayoutBorderSpacePx.x;
+ int yThreshold = mCellLayout.getCellHeight() + dp.cellLayoutBorderSpacePx.y;
mDeltaXAddOn = mRunningHInc * xThreshold;
mDeltaYAddOn = mRunningVInc * yThreshold;
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index f6c58c4..9da2b79 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -66,6 +66,7 @@
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.views.ActivityContext;
+import com.android.launcher3.views.BubbleTextHolder;
import com.android.launcher3.views.IconLabelDotView;
import java.text.NumberFormat;
@@ -297,7 +298,7 @@
@UiThread
public void applyFromWorkspaceItem(WorkspaceItemInfo info, boolean promiseStateChanged) {
applyIconAndLabel(info);
- setTag(info);
+ setItemInfo(info);
applyLoadingState(promiseStateChanged);
applyDotState(info, false /* animate */);
setDownloadStateContentDescription(info, info.getProgressLevel());
@@ -308,7 +309,8 @@
applyIconAndLabel(info);
// We don't need to check the info since it's not a WorkspaceItemInfo
- super.setTag(info);
+ setItemInfo(info);
+
// Verify high res immediately
verifyHighRes();
@@ -327,7 +329,7 @@
public void applyFromItemInfoWithIcon(ItemInfoWithIcon info) {
applyIconAndLabel(info);
// We don't need to check the info since it's not a WorkspaceItemInfo
- super.setTag(info);
+ setItemInfo(info);
// Verify high res immediately
verifyHighRes();
@@ -335,13 +337,11 @@
setDownloadStateContentDescription(info, info.getProgressLevel());
}
- /**
- * Apply label and tag using a {@link SearchActionItemInfo}
- */
- @UiThread
- public void applyFromSearchActionItemInfo(SearchActionItemInfo searchActionItemInfo) {
- applyIconAndLabel(searchActionItemInfo);
- setTag(searchActionItemInfo);
+ private void setItemInfo(ItemInfo itemInfo) {
+ setTag(itemInfo);
+ if (getParent() instanceof BubbleTextHolder) {
+ ((BubbleTextHolder) getParent()).onItemInfoChanged(itemInfo);
+ }
}
@UiThread
@@ -799,7 +799,7 @@
} else if (info instanceof PackageItemInfo) {
applyFromItemInfoWithIcon((PackageItemInfo) info);
} else if (info instanceof SearchActionItemInfo) {
- applyFromSearchActionItemInfo((SearchActionItemInfo) info);
+ applyFromItemInfoWithIcon((SearchActionItemInfo) info);
}
mDisableRelayout = false;
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index 28e3b9d..02eb1de 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -91,7 +91,7 @@
private int mFixedCellWidth;
private int mFixedCellHeight;
@ViewDebug.ExportedProperty(category = "launcher")
- private final int mBorderSpacing;
+ private final Point mBorderSpace;
@ViewDebug.ExportedProperty(category = "launcher")
private int mCountX;
@@ -236,9 +236,9 @@
mActivity = ActivityContext.lookupContext(context);
DeviceProfile deviceProfile = mActivity.getDeviceProfile();
- mBorderSpacing = mContainerType == FOLDER
- ? deviceProfile.folderCellLayoutBorderSpacingPx
- : deviceProfile.cellLayoutBorderSpacingPx;
+ mBorderSpace = mContainerType == FOLDER
+ ? new Point(deviceProfile.folderCellLayoutBorderSpacePx)
+ : new Point(deviceProfile.cellLayoutBorderSpacePx);
mCellWidth = mCellHeight = -1;
mFixedCellWidth = mFixedCellHeight = -1;
@@ -308,7 +308,7 @@
mShortcutsAndWidgets = new ShortcutAndWidgetContainer(context, mContainerType);
mShortcutsAndWidgets.setCellDimensions(mCellWidth, mCellHeight, mCountX, mCountY,
- mBorderSpacing);
+ mBorderSpace);
addView(mShortcutsAndWidgets);
}
@@ -368,7 +368,7 @@
mFixedCellWidth = mCellWidth = width;
mFixedCellHeight = mCellHeight = height;
mShortcutsAndWidgets.setCellDimensions(mCellWidth, mCellHeight, mCountX, mCountY,
- mBorderSpacing);
+ mBorderSpace);
}
public void setGridSize(int x, int y) {
@@ -378,7 +378,7 @@
mTmpOccupied = new GridOccupancy(mCountX, mCountY);
mTempRectStack.clear();
mShortcutsAndWidgets.setCellDimensions(mCellWidth, mCellHeight, mCountX, mCountY,
- mBorderSpacing);
+ mBorderSpace);
requestLayout();
}
@@ -541,9 +541,9 @@
if (mVisualizeCells) {
for (int i = 0; i < mCountX; i++) {
for (int j = 0; j < mCountY; j++) {
- int transX = i * mCellWidth + (i * mBorderSpacing) + getPaddingLeft()
+ int transX = i * mCellWidth + (i * mBorderSpace.x) + getPaddingLeft()
+ paddingX;
- int transY = j * mCellHeight + (j * mBorderSpacing) + getPaddingTop()
+ int transY = j * mCellHeight + (j * mBorderSpace.y) + getPaddingTop()
+ paddingY;
mVisualizeGridRect.offsetTo(transX, transY);
@@ -567,12 +567,12 @@
// TODO b/194414754 clean this up, reconcile with cellToRect
mVisualizeGridRect.set(paddingX, paddingY,
- mCellWidth * spanX + mBorderSpacing * (spanX - 1) - paddingX,
- mCellHeight * spanY + mBorderSpacing * (spanY - 1) - paddingY);
+ mCellWidth * spanX + mBorderSpace.x * (spanX - 1) - paddingX,
+ mCellHeight * spanY + mBorderSpace.y * (spanY - 1) - paddingY);
- int transX = x * mCellWidth + (x * mBorderSpacing)
+ int transX = x * mCellWidth + (x * mBorderSpace.x)
+ getPaddingLeft() + paddingX;
- int transY = y * mCellHeight + (y * mBorderSpacing)
+ int transY = y * mCellHeight + (y * mBorderSpace.y)
+ getPaddingTop() + paddingY;
mVisualizeGridRect.offsetTo(transX, transY);
@@ -858,15 +858,15 @@
int childHeightSize = heightSize - (getPaddingTop() + getPaddingBottom());
if (mFixedCellWidth < 0 || mFixedCellHeight < 0) {
- int cw = DeviceProfile.calculateCellWidth(childWidthSize, mBorderSpacing,
+ int cw = DeviceProfile.calculateCellWidth(childWidthSize, mBorderSpace.x,
mCountX);
- int ch = DeviceProfile.calculateCellHeight(childHeightSize, mBorderSpacing,
+ int ch = DeviceProfile.calculateCellHeight(childHeightSize, mBorderSpace.y,
mCountY);
if (cw != mCellWidth || ch != mCellHeight) {
mCellWidth = cw;
mCellHeight = ch;
mShortcutsAndWidgets.setCellDimensions(mCellWidth, mCellHeight, mCountX, mCountY,
- mBorderSpacing);
+ mBorderSpace);
}
}
@@ -920,7 +920,7 @@
*/
public int getUnusedHorizontalSpace() {
return getMeasuredWidth() - getPaddingLeft() - getPaddingRight() - (mCountX * mCellWidth)
- - ((mCountX - 1) * mBorderSpacing);
+ - ((mCountX - 1) * mBorderSpace.x);
}
@Override
@@ -2592,11 +2592,11 @@
+ (int) Math.ceil(getUnusedHorizontalSpace() / 2f);
final int vStartPadding = getPaddingTop();
- int x = hStartPadding + (cellX * mBorderSpacing) + (cellX * cellWidth);
- int y = vStartPadding + (cellY * mBorderSpacing) + (cellY * cellHeight);
+ int x = hStartPadding + (cellX * mBorderSpace.x) + (cellX * cellWidth);
+ int y = vStartPadding + (cellY * mBorderSpace.y) + (cellY * cellHeight);
- int width = cellHSpan * cellWidth + ((cellHSpan - 1) * mBorderSpacing);
- int height = cellVSpan * cellHeight + ((cellVSpan - 1) * mBorderSpacing);
+ int width = cellHSpan * cellWidth + ((cellHSpan - 1) * mBorderSpace.x);
+ int height = cellVSpan * cellHeight + ((cellVSpan - 1) * mBorderSpace.y);
resultRect.set(x, y, x + width, y + height);
}
@@ -2615,12 +2615,12 @@
public int getDesiredWidth() {
return getPaddingLeft() + getPaddingRight() + (mCountX * mCellWidth)
- + ((mCountX - 1) * mBorderSpacing);
+ + ((mCountX - 1) * mBorderSpace.x);
}
public int getDesiredHeight() {
return getPaddingTop() + getPaddingBottom() + (mCountY * mCellHeight)
- + ((mCountY - 1) * mBorderSpacing);
+ + ((mCountY - 1) * mBorderSpace.y);
}
public boolean isOccupied(int x, int y) {
@@ -2736,20 +2736,20 @@
}
public void setup(int cellWidth, int cellHeight, boolean invertHorizontally, int colCount,
- int rowCount, int borderSpacing, @Nullable Rect inset) {
+ int rowCount, Point borderSpace, @Nullable Rect inset) {
setup(cellWidth, cellHeight, invertHorizontally, colCount, rowCount, 1.0f, 1.0f,
- borderSpacing, inset);
+ borderSpace, inset);
}
/**
- * Use this method, as opposed to {@link #setup(int, int, boolean, int, int, int, Rect)},
+ * Use this method, as opposed to {@link #setup(int, int, boolean, int, int, Point, Rect)},
* if the view needs to be scaled.
*
* ie. In multi-window mode, we setup widgets so that they are measured and laid out
* using their full/invariant device profile sizes.
*/
public void setup(int cellWidth, int cellHeight, boolean invertHorizontally, int colCount,
- int rowCount, float cellScaleX, float cellScaleY, int borderSpacing,
+ int rowCount, float cellScaleX, float cellScaleY, Point borderSpace,
@Nullable Rect inset) {
if (isLockedToGrid) {
final int myCellHSpan = cellHSpan;
@@ -2761,16 +2761,16 @@
myCellX = colCount - myCellX - cellHSpan;
}
- int hBorderSpacing = (myCellHSpan - 1) * borderSpacing;
- int vBorderSpacing = (myCellVSpan - 1) * borderSpacing;
+ int hBorderSpacing = (myCellHSpan - 1) * borderSpace.x;
+ int vBorderSpacing = (myCellVSpan - 1) * borderSpace.y;
float myCellWidth = ((myCellHSpan * cellWidth) + hBorderSpacing) / cellScaleX;
float myCellHeight = ((myCellVSpan * cellHeight) + vBorderSpacing) / cellScaleY;
width = Math.round(myCellWidth) - leftMargin - rightMargin;
height = Math.round(myCellHeight) - topMargin - bottomMargin;
- x = leftMargin + (myCellX * cellWidth) + (myCellX * borderSpacing);
- y = topMargin + (myCellY * cellHeight) + (myCellY * borderSpacing);
+ x = leftMargin + (myCellX * cellWidth) + (myCellX * borderSpace.x);
+ y = topMargin + (myCellY * cellHeight) + (myCellY * borderSpace.y);
if (inset != null) {
x -= inset.left;
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 5bd3e14..4e06ff9 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -97,10 +97,10 @@
private static final int PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER = 4;
// Workspace
- public final int desiredWorkspaceLeftRightOriginalPx;
- public int desiredWorkspaceLeftRightMarginPx;
- public final int cellLayoutBorderSpacingOriginalPx;
- public int cellLayoutBorderSpacingPx;
+ public final int desiredWorkspaceHorizontalMarginOriginalPx;
+ public int desiredWorkspaceHorizontalMarginPx;
+ public Point cellLayoutBorderSpaceOriginalPx;
+ public Point cellLayoutBorderSpacePx;
public final int cellLayoutPaddingLeftRightPx;
public final int cellLayoutBottomPaddingPx;
public final int edgeMarginPx;
@@ -137,7 +137,8 @@
public int folderIconOffsetYPx;
// Folder content
- public int folderCellLayoutBorderSpacingPx;
+ public Point folderCellLayoutBorderSpacePx;
+ public int folderCellLayoutBorderSpaceOriginalPx;
public int folderContentPaddingLeftRight;
public int folderContentPaddingTop;
@@ -270,11 +271,8 @@
edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin);
- desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : isScalableGrid
- ? res.getDimensionPixelSize(R.dimen.scalable_grid_left_right_margin)
- : res.getDimensionPixelSize(R.dimen.dynamic_grid_left_right_margin);
- desiredWorkspaceLeftRightOriginalPx = desiredWorkspaceLeftRightMarginPx;
-
+ desiredWorkspaceHorizontalMarginPx = getHorizontalMarginPx(inv, res);
+ desiredWorkspaceHorizontalMarginOriginalPx = desiredWorkspaceHorizontalMarginPx;
allAppsOpenVerticalTranslate = res.getDimensionPixelSize(
R.dimen.all_apps_open_vertical_translate);
@@ -284,10 +282,12 @@
res.getDimensionPixelSize(R.dimen.folder_content_padding_left_right);
folderContentPaddingTop = res.getDimensionPixelSize(R.dimen.folder_content_padding_top);
- setCellLayoutBorderSpacing(pxFromDp(inv.borderSpacing, mMetrics, 1f));
+ cellLayoutBorderSpacePx = getCellLayoutBorderSpace(inv);
allAppsCellSpacingPx = pxFromDp(inv.allAppsCellSpacing, mMetrics, 1f);
- cellLayoutBorderSpacingOriginalPx = cellLayoutBorderSpacingPx;
- folderCellLayoutBorderSpacingPx = cellLayoutBorderSpacingPx;
+ cellLayoutBorderSpaceOriginalPx = new Point(cellLayoutBorderSpacePx);
+ folderCellLayoutBorderSpaceOriginalPx = pxFromDp(inv.folderBorderSpace, mMetrics, 1f);
+ folderCellLayoutBorderSpacePx = new Point(folderCellLayoutBorderSpaceOriginalPx,
+ folderCellLayoutBorderSpaceOriginalPx);
int cellLayoutPaddingLeftRightMultiplier = !isVerticalBarLayout() && isTablet
? PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER : 1;
@@ -296,10 +296,7 @@
: res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_layout_padding);
if (isTwoPanels) {
- cellLayoutPaddingLeftRightPx = res.getDimensionPixelSize(
- isLandscape
- ? R.dimen.two_panels_home_side_padding_landscape
- : R.dimen.two_panels_home_side_padding_portrait);
+ cellLayoutPaddingLeftRightPx = 0;
cellLayoutBottomPaddingPx = 0;
} else if (isLandscape) {
cellLayoutPaddingLeftRightPx = 0;
@@ -449,6 +446,29 @@
new DotRenderer(allAppsIconSizePx, dotPath, DEFAULT_DOT_SIZE);
}
+ private int getHorizontalMarginPx(InvariantDeviceProfile idp, Resources res) {
+ if (isVerticalBarLayout()) {
+ return 0;
+ }
+
+ int horizontalMarginPx;
+
+ if (isScalableGrid) {
+ if (isTwoPanels) {
+ if (isLandscape) {
+ horizontalMarginPx = pxFromDp(idp.twoPanelLandscapeHorizontalMargin, mMetrics);
+ } else {
+ horizontalMarginPx = pxFromDp(idp.twoPanelPortraitHorizontalMargin, mMetrics);
+ }
+ } else {
+ horizontalMarginPx = pxFromDp(idp.horizontalMargin, mMetrics);
+ }
+ } else {
+ horizontalMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_left_right_margin);
+ }
+ return horizontalMarginPx;
+ }
+
private void updateHotseatIconSize(int hotseatIconSizePx) {
// Ensure there is enough space for folder icons, which have a slightly larger radius.
hotseatCellHeightPx = (int) Math.ceil(hotseatIconSizePx * ICON_OVERLAP_FACTOR);
@@ -462,8 +482,33 @@
}
}
- private void setCellLayoutBorderSpacing(int borderSpacing) {
- cellLayoutBorderSpacingPx = isScalableGrid ? borderSpacing : 0;
+ private Point getCellLayoutBorderSpace(InvariantDeviceProfile idp) {
+ if (!isScalableGrid) {
+ return new Point(0, 0);
+ }
+
+ int horizontalSpacePx;
+ int verticalSpacePx;
+
+ if (isTwoPanels) {
+ if (isLandscape) {
+ horizontalSpacePx = pxFromDp(idp.twoPanelLandscapeBorderSpace.x, mMetrics);
+ verticalSpacePx = pxFromDp(idp.twoPanelLandscapeBorderSpace.y, mMetrics);
+ } else {
+ horizontalSpacePx = pxFromDp(idp.twoPanelPortraitBorderSpace.x, mMetrics);
+ verticalSpacePx = pxFromDp(idp.twoPanelPortraitBorderSpace.y, mMetrics);
+ }
+ } else {
+ horizontalSpacePx = pxFromDp(idp.borderSpace.x, mMetrics);
+ verticalSpacePx = pxFromDp(idp.borderSpace.y, mMetrics);
+ }
+
+ return new Point(horizontalSpacePx, verticalSpacePx);
+ }
+
+ private Point getCellLayoutBorderSpaceScaled(InvariantDeviceProfile idp, float scale) {
+ Point original = getCellLayoutBorderSpace(idp);
+ return new Point((int) (original.x * scale), (int) (original.y * scale));
}
public Info getDisplayInfo() {
@@ -480,10 +525,10 @@
// Check all sides to ensure that the widget won't overlap into another cell, or into
// status bar.
return workspaceTopPadding > widgetPadding.top
- && cellLayoutBorderSpacingPx > widgetPadding.left
- && cellLayoutBorderSpacingPx > widgetPadding.top
- && cellLayoutBorderSpacingPx > widgetPadding.right
- && cellLayoutBorderSpacingPx > widgetPadding.bottom;
+ && cellLayoutBorderSpacePx.x > widgetPadding.left
+ && cellLayoutBorderSpacePx.y > widgetPadding.top
+ && cellLayoutBorderSpacePx.x > widgetPadding.right
+ && cellLayoutBorderSpacePx.y > widgetPadding.bottom;
}
public Builder toBuilder(Context context) {
@@ -557,7 +602,7 @@
allAppsLeftRightPadding = Math.max(1, (availableWidthPx - usedWidth) / 2);
} else {
allAppsLeftRightPadding =
- desiredWorkspaceLeftRightMarginPx + cellLayoutPaddingLeftRightPx;
+ desiredWorkspaceHorizontalMarginPx + cellLayoutPaddingLeftRightPx;
}
}
@@ -583,8 +628,8 @@
// devices.
int numColumns = isTwoPanels ? inv.numColumns * 2 : inv.numColumns;
float usedWidth = (cellWidthPx * numColumns)
- + (cellLayoutBorderSpacingPx * (numColumns - 1))
- + (desiredWorkspaceLeftRightMarginPx * 2);
+ + (cellLayoutBorderSpacePx.x * (numColumns - 1))
+ + (desiredWorkspaceHorizontalMarginPx * 2);
// We do not subtract padding here, as we also scale the workspace padding if needed.
scaleX = availableWidthPx / usedWidth;
shouldScale = true;
@@ -601,7 +646,7 @@
}
private int getCellLayoutHeight() {
- return (cellHeightPx * inv.numRows) + (cellLayoutBorderSpacingPx * (inv.numRows - 1));
+ return (cellHeightPx * inv.numRows) + (cellLayoutBorderSpacePx.y * (inv.numRows - 1));
}
/**
@@ -641,7 +686,7 @@
iconTextSizePx = (int) (pxFromSp(invIconTextSizeSp, mMetrics) * iconScale);
iconDrawablePaddingPx = (int) (iconDrawablePaddingOriginalPx * iconScale);
- setCellLayoutBorderSpacing((int) (cellLayoutBorderSpacingOriginalPx * scale));
+ cellLayoutBorderSpacePx = getCellLayoutBorderSpaceScaled(inv, scale);
if (isScalableGrid) {
PointF minCellHeightAndWidth = getMinCellHeightAndWidth();
@@ -650,7 +695,8 @@
int cellContentHeight = iconSizePx + iconDrawablePaddingPx
+ Utilities.calculateTextHeight(iconTextSizePx);
cellYPaddingPx = Math.max(0, cellHeightPx - cellContentHeight) / 2;
- desiredWorkspaceLeftRightMarginPx = (int) (desiredWorkspaceLeftRightOriginalPx * scale);
+ desiredWorkspaceHorizontalMarginPx =
+ (int) (desiredWorkspaceHorizontalMarginOriginalPx * scale);
} else {
cellWidthPx = iconSizePx + iconDrawablePaddingPx;
cellHeightPx = (int) Math.ceil(iconSizePx * ICON_OVERLAP_FACTOR)
@@ -739,14 +785,14 @@
// Check if the icons fit within the available height.
float contentUsedHeight = folderCellHeightPx * inv.numFolderRows
- + ((inv.numFolderRows - 1) * folderCellLayoutBorderSpacingPx);
+ + ((inv.numFolderRows - 1) * folderCellLayoutBorderSpacePx.y);
int contentMaxHeight = availableHeightPx - totalWorkspacePadding.y - folderBottomPanelSize
- folderMargin - folderContentPaddingTop;
float scaleY = contentMaxHeight / contentUsedHeight;
// Check if the icons fit within the available width.
float contentUsedWidth = folderCellWidthPx * inv.numFolderColumns
- + ((inv.numFolderColumns - 1) * folderCellLayoutBorderSpacingPx);
+ + ((inv.numFolderColumns - 1) * folderCellLayoutBorderSpacePx.x);
int contentMaxWidth = availableWidthPx - totalWorkspacePadding.x - folderMargin
- folderContentPaddingLeftRight * 2;
float scaleX = contentMaxWidth / contentUsedWidth;
@@ -772,10 +818,10 @@
folderCellWidthPx = (int) Math.max(minWidth, cellWidthPx * scale);
folderCellHeightPx = (int) Math.max(minHeight, cellHeightPx * scale);
- int borderSpacing = (int) (cellLayoutBorderSpacingOriginalPx * scale);
- folderCellLayoutBorderSpacingPx = borderSpacing;
- folderContentPaddingLeftRight = borderSpacing;
- folderContentPaddingTop = borderSpacing;
+ int scaledSpace = (int) (folderCellLayoutBorderSpaceOriginalPx * scale);
+ folderCellLayoutBorderSpacePx = new Point(scaledSpace, scaledSpace);
+ folderContentPaddingLeftRight = scaledSpace;
+ folderContentPaddingTop = scaledSpace;
} else {
int cellPaddingX = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_x_padding)
* scale);
@@ -817,10 +863,12 @@
Point padding = getTotalWorkspacePadding();
int numColumns = isTwoPanels ? inv.numColumns * 2 : inv.numColumns;
- int screenWidthPx = availableWidthPx - padding.x - 2 * cellLayoutPaddingLeftRightPx;
- result.x = calculateCellWidth(screenWidthPx, cellLayoutBorderSpacingPx, numColumns);
+ int cellLayoutTotalPadding =
+ isTwoPanels ? 4 * cellLayoutPaddingLeftRightPx : 2 * cellLayoutPaddingLeftRightPx;
+ int screenWidthPx = availableWidthPx - padding.x - cellLayoutTotalPadding;
+ result.x = calculateCellWidth(screenWidthPx, cellLayoutBorderSpacePx.x, numColumns);
result.y = calculateCellHeight(availableHeightPx - padding.y
- - cellLayoutBottomPaddingPx, cellLayoutBorderSpacingPx, inv.numRows);
+ - cellLayoutBottomPaddingPx, cellLayoutBorderSpacePx.y, inv.numRows);
return result;
}
@@ -847,33 +895,15 @@
padding.right = hotseatBarSizePx;
}
} else {
+ // Pad the bottom of the workspace with search/hotseat bar sizes
int hotseatTop = hotseatBarSizePx;
int paddingBottom = hotseatTop + workspacePageIndicatorHeight
+ workspaceBottomPadding - mWorkspacePageIndicatorOverlapWorkspace;
- if (isTablet) {
- // Pad the left and right of the workspace to ensure consistent spacing
- // between all icons
- // The amount of screen space available for left/right padding.
- int availablePaddingX = Math.max(0, widthPx - ((inv.numColumns * cellWidthPx) +
- ((inv.numColumns - 1) * cellWidthPx)));
- availablePaddingX = (int) Math.min(availablePaddingX,
- widthPx * MAX_HORIZONTAL_PADDING_PERCENT);
- int hotseatVerticalPadding = hotseatBarTopPaddingPx + hotseatBarBottomPaddingPx;
- int availablePaddingY = Math.max(0, heightPx - edgeMarginPx - paddingBottom
- - (2 * inv.numRows * cellHeightPx) - hotseatVerticalPadding);
- padding.set(availablePaddingX / 2, edgeMarginPx + availablePaddingY / 2,
- availablePaddingX / 2, paddingBottom + availablePaddingY / 2);
- if (isTwoPanels) {
- padding.set(0, padding.top, 0, padding.bottom);
- }
- } else {
- // Pad the top and bottom of the workspace with search/hotseat bar sizes
- padding.set(desiredWorkspaceLeftRightMarginPx,
- workspaceTopPadding + (isScalableGrid ? 0 : edgeMarginPx),
- desiredWorkspaceLeftRightMarginPx,
- paddingBottom);
- }
+ padding.set(desiredWorkspaceHorizontalMarginPx,
+ (isScalableGrid ? workspaceTopPadding : edgeMarginPx),
+ desiredWorkspaceHorizontalMarginPx,
+ paddingBottom);
}
}
@@ -1095,13 +1125,20 @@
writer.println(prefix + pxToDpStr("folderChildTextSizePx", folderChildTextSizePx));
writer.println(prefix + pxToDpStr("folderChildDrawablePaddingPx",
folderChildDrawablePaddingPx));
- writer.println(prefix + pxToDpStr("folderCellLayoutBorderSpacingPx",
- folderCellLayoutBorderSpacingPx));
+ writer.println(prefix + pxToDpStr("folderCellLayoutBorderSpaceOriginalPx",
+ folderCellLayoutBorderSpaceOriginalPx));
+ writer.println(prefix + pxToDpStr("folderCellLayoutBorderSpacePx Horizontal",
+ folderCellLayoutBorderSpacePx.x));
+ writer.println(prefix + pxToDpStr("folderCellLayoutBorderSpacePx Vertical",
+ folderCellLayoutBorderSpacePx.y));
- writer.println(prefix + pxToDpStr("cellLayoutBorderSpacingPx",
- cellLayoutBorderSpacingPx));
- writer.println(prefix + pxToDpStr("desiredWorkspaceLeftRightMarginPx",
- desiredWorkspaceLeftRightMarginPx));
+ writer.println(prefix + pxToDpStr("cellLayoutBorderSpacePx Horizontal",
+ cellLayoutBorderSpacePx.x));
+ writer.println(prefix + pxToDpStr("cellLayoutBorderSpacePx Vertical",
+ cellLayoutBorderSpacePx.y));
+
+ writer.println(prefix + pxToDpStr("desiredWorkspaceHorizontalMarginPx",
+ desiredWorkspaceHorizontalMarginPx));
writer.println(prefix + pxToDpStr("allAppsIconSizePx", allAppsIconSizePx));
writer.println(prefix + pxToDpStr("allAppsIconTextSizePx", allAppsIconTextSizePx));
@@ -1132,6 +1169,7 @@
writer.println(prefix + pxToDpStr("iconScale", iconScale));
writer.println(prefix + pxToDpStr("cellScaleToFit ", cellScaleToFit));
writer.println(prefix + pxToDpStr("extraSpace", extraSpace));
+ writer.println(prefix + pxToDpStr("unscaled extraSpace", extraSpace / iconScale));
if (inv.devicePaddings != null) {
int unscaledExtraSpace = (int) (extraSpace / iconScale);
diff --git a/src/com/android/launcher3/ExtendedEditText.java b/src/com/android/launcher3/ExtendedEditText.java
index 92432a8..3b5b454 100644
--- a/src/com/android/launcher3/ExtendedEditText.java
+++ b/src/com/android/launcher3/ExtendedEditText.java
@@ -22,7 +22,6 @@
import android.util.AttributeSet;
import android.view.DragEvent;
import android.view.KeyEvent;
-import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
@@ -137,12 +136,5 @@
if (!TextUtils.isEmpty(getText())) {
setText("");
}
- if (isFocused()) {
- View nextFocus = focusSearch(View.FOCUS_DOWN);
- if (nextFocus != null) {
- nextFocus.requestFocus();
- }
- }
- hideKeyboard();
}
}
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index 8631040..cfc14b6 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -31,6 +31,7 @@
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.Point;
+import android.graphics.PointF;
import android.graphics.Rect;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -117,7 +118,15 @@
public float twoPanelPortraitMinCellWidthDps;
public float twoPanelLandscapeMinCellHeightDps;
public float twoPanelLandscapeMinCellWidthDps;
- public float borderSpacing;
+
+ public PointF borderSpace;
+ public PointF twoPanelPortraitBorderSpace;
+ public PointF twoPanelLandscapeBorderSpace;
+ public float folderBorderSpace;
+
+ public float horizontalMargin;
+ public float twoPanelLandscapeHorizontalMargin;
+ public float twoPanelPortraitHorizontalMargin;
private SparseArray<TypedValue> mExtraAttrs;
@@ -214,15 +223,15 @@
.add(myDisplayOption);
result.iconSizes[DisplayOption.INDEX_DEFAULT] =
defaultDisplayOption.iconSizes[DisplayOption.INDEX_DEFAULT];
- for (int i = 1; i < DisplayOption.COUNT_TOTAL; i++) {
+ for (int i = 1; i < DisplayOption.COUNT_SIZES; i++) {
result.iconSizes[i] = Math.min(
defaultDisplayOption.iconSizes[i], myDisplayOption.iconSizes[i]);
}
result.minCellHeight = defaultDisplayOption.minCellHeight;
result.minCellWidth = defaultDisplayOption.minCellWidth;
- result.borderSpacing = defaultDisplayOption.borderSpacing;
- result.allAppsCellSpacing = defaultDisplayOption.allAppsCellSpacing;
+ result.borderSpaces[DisplayOption.INDEX_ALL_APPS] =
+ defaultDisplayOption.borderSpaces[DisplayOption.INDEX_ALL_APPS];
initGrid(context, myInfo, result, false);
}
@@ -286,8 +295,18 @@
twoPanelPortraitMinCellWidthDps = displayOption.twoPanelPortraitMinCellWidthDps;
twoPanelLandscapeMinCellHeightDps = displayOption.twoPanelLandscapeMinCellHeightDps;
twoPanelLandscapeMinCellWidthDps = displayOption.twoPanelLandscapeMinCellWidthDps;
- borderSpacing = displayOption.borderSpacing;
- allAppsCellSpacing = displayOption.allAppsCellSpacing;
+
+ borderSpace = displayOption.borderSpaces[DisplayOption.INDEX_DEFAULT];
+ twoPanelPortraitBorderSpace =
+ displayOption.borderSpaces[DisplayOption.INDEX_TWO_PANEL_PORTRAIT];
+ twoPanelLandscapeBorderSpace =
+ displayOption.borderSpaces[DisplayOption.INDEX_TWO_PANEL_LANDSCAPE];
+ allAppsCellSpacing = displayOption.borderSpaces[DisplayOption.INDEX_ALL_APPS].x;
+ folderBorderSpace = displayOption.folderBorderSpace;
+
+ horizontalMargin = displayOption.horizontalMargin;
+ twoPanelLandscapeHorizontalMargin = displayOption.twoPanelLandscapeHorizontalMargin;
+ twoPanelPortraitHorizontalMargin = displayOption.twoPanelPortraitHorizontalMargin;
numShownHotseatIcons = closestProfile.numHotseatIcons;
numDatabaseHotseatIcons = isSplitDisplay
@@ -549,7 +568,7 @@
// predefined size to avoid cache invalidation
out.iconSizes[DisplayOption.INDEX_DEFAULT] =
closestPoint.iconSizes[DisplayOption.INDEX_DEFAULT];
- for (int i = DisplayOption.INDEX_DEFAULT + 1; i < DisplayOption.COUNT_TOTAL; i++) {
+ for (int i = DisplayOption.INDEX_DEFAULT + 1; i < DisplayOption.COUNT_SIZES; i++) {
out.iconSizes[i] = Math.min(out.iconSizes[i],
out.iconSizes[DisplayOption.INDEX_DEFAULT]);
}
@@ -705,13 +724,12 @@
@VisibleForTesting
static final class DisplayOption {
+ static final int COUNT_SIZES = 5;
static final int INDEX_DEFAULT = 0;
static final int INDEX_LANDSCAPE = 1;
- static final int INDEX_ALL_APPS = 2;
- static final int INDEX_TWO_PANEL_PORTRAIT = 3;
- static final int INDEX_TWO_PANEL_LANDSCAPE = 4;
-
- static final int COUNT_TOTAL = 5;
+ static final int INDEX_TWO_PANEL_PORTRAIT = 2;
+ static final int INDEX_TWO_PANEL_LANDSCAPE = 3;
+ static final int INDEX_ALL_APPS = 4;
public final GridOption grid;
@@ -725,11 +743,16 @@
private float twoPanelPortraitMinCellWidthDps;
private float twoPanelLandscapeMinCellHeightDps;
private float twoPanelLandscapeMinCellWidthDps;
- private float allAppsCellSpacing;
- private float borderSpacing;
- private final float[] iconSizes = new float[COUNT_TOTAL];
- private final float[] textSizes = new float[COUNT_TOTAL];
+ private float folderBorderSpace;
+ private final PointF[] borderSpaces = new PointF[COUNT_SIZES];
+
+ private float horizontalMargin;
+ private float twoPanelLandscapeHorizontalMargin;
+ private float twoPanelPortraitHorizontalMargin;
+
+ private final float[] iconSizes = new float[COUNT_SIZES];
+ private final float[] textSizes = new float[COUNT_SIZES];
DisplayOption(GridOption grid, Context context, AttributeSet attrs, int defaultFlagValue) {
this.grid = grid;
@@ -756,9 +779,40 @@
twoPanelLandscapeMinCellWidthDps = a.getFloat(
R.styleable.ProfileDisplayOption_twoPanelLandscapeMinCellWidthDps,
twoPanelPortraitMinCellWidthDps);
- borderSpacing = a.getFloat(R.styleable.ProfileDisplayOption_borderSpacingDps, 0);
- allAppsCellSpacing = a.getFloat(R.styleable.ProfileDisplayOption_allAppsCellSpacingDps,
- borderSpacing);
+
+ float borderSpace = a.getFloat(R.styleable.ProfileDisplayOption_borderSpaceDps, 0);
+ float twoPanelPortraitBorderSpaceDps = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelPortraitBorderSpaceDps, borderSpace);
+ float twoPanelLandscapeBorderSpaceDps = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelLandscapeBorderSpaceDps, borderSpace);
+ float x;
+ float y;
+
+ x = a.getFloat(R.styleable.ProfileDisplayOption_borderSpaceHorizontalDps, borderSpace);
+ y = a.getFloat(R.styleable.ProfileDisplayOption_borderSpaceVerticalDps, borderSpace);
+ borderSpaces[INDEX_DEFAULT] = new PointF(x, y);
+ borderSpaces[INDEX_LANDSCAPE] = new PointF(x, y);
+
+ x = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelPortraitBorderSpaceHorizontalDps,
+ twoPanelPortraitBorderSpaceDps);
+ y = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelPortraitBorderSpaceVerticalDps,
+ twoPanelPortraitBorderSpaceDps);
+ borderSpaces[INDEX_TWO_PANEL_PORTRAIT] = new PointF(x, y);
+
+ x = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelLandscapeBorderSpaceHorizontalDps,
+ twoPanelLandscapeBorderSpaceDps);
+ y = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelLandscapeBorderSpaceVerticalDps,
+ twoPanelLandscapeBorderSpaceDps);
+ borderSpaces[INDEX_TWO_PANEL_LANDSCAPE] = new PointF(x, y);
+
+ x = y = a.getFloat(R.styleable.ProfileDisplayOption_allAppsCellSpacingDps,
+ borderSpace);
+ borderSpaces[INDEX_ALL_APPS] = new PointF(x, y);
+ folderBorderSpace = borderSpace;
iconSizes[INDEX_DEFAULT] =
a.getFloat(R.styleable.ProfileDisplayOption_iconImageSize, 0);
@@ -790,6 +844,14 @@
a.getFloat(R.styleable.ProfileDisplayOption_twoPanelLandscapeIconTextSize,
textSizes[INDEX_LANDSCAPE]);
+ horizontalMargin = a.getFloat(R.styleable.ProfileDisplayOption_horizontalMargin, 0);
+ twoPanelLandscapeHorizontalMargin = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelLandscapeHorizontalMargin,
+ horizontalMargin);
+ twoPanelPortraitHorizontalMargin = a.getFloat(
+ R.styleable.ProfileDisplayOption_twoPanelPortraitHorizontalMargin,
+ horizontalMargin);
+
a.recycle();
}
@@ -804,13 +866,19 @@
canBeDefault = false;
minCellHeight = 0;
minCellWidth = 0;
- borderSpacing = 0;
+ for (int i = 0; i < COUNT_SIZES; i++) {
+ iconSizes[i] = 0;
+ textSizes[i] = 0;
+ borderSpaces[i] = new PointF();
+ }
}
private DisplayOption multiply(float w) {
- for (int i = 0; i < COUNT_TOTAL; i++) {
+ for (int i = 0; i < COUNT_SIZES; i++) {
iconSizes[i] *= w;
textSizes[i] *= w;
+ borderSpaces[i].x *= w;
+ borderSpaces[i].y *= w;
}
minCellHeight *= w;
minCellWidth *= w;
@@ -818,15 +886,21 @@
twoPanelPortraitMinCellWidthDps *= w;
twoPanelLandscapeMinCellHeightDps *= w;
twoPanelLandscapeMinCellWidthDps *= w;
- borderSpacing *= w;
- allAppsCellSpacing *= w;
+
+ folderBorderSpace *= w;
+
+ horizontalMargin *= w;
+ twoPanelLandscapeHorizontalMargin *= w;
+ twoPanelPortraitHorizontalMargin *= w;
return this;
}
private DisplayOption add(DisplayOption p) {
- for (int i = 0; i < COUNT_TOTAL; i++) {
+ for (int i = 0; i < COUNT_SIZES; i++) {
iconSizes[i] += p.iconSizes[i];
textSizes[i] += p.textSizes[i];
+ borderSpaces[i].x += p.borderSpaces[i].x;
+ borderSpaces[i].y += p.borderSpaces[i].y;
}
minCellHeight += p.minCellHeight;
minCellWidth += p.minCellWidth;
@@ -834,8 +908,12 @@
twoPanelPortraitMinCellWidthDps += p.twoPanelPortraitMinCellWidthDps;
twoPanelLandscapeMinCellHeightDps += p.twoPanelLandscapeMinCellHeightDps;
twoPanelLandscapeMinCellWidthDps += p.twoPanelLandscapeMinCellWidthDps;
- borderSpacing += p.borderSpacing;
- allAppsCellSpacing += p.allAppsCellSpacing;
+
+ folderBorderSpace += p.folderBorderSpace;
+
+ horizontalMargin += p.horizontalMargin;
+ twoPanelLandscapeHorizontalMargin += p.twoPanelLandscapeHorizontalMargin;
+ twoPanelPortraitHorizontalMargin += p.twoPanelPortraitHorizontalMargin;
return this;
}
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 0340694..f429d76 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2132,6 +2132,10 @@
IntSet result = new IntSet();
if (visibleIds.isEmpty()) {
+ if (TestProtocol.sDebugTracing) {
+ Log.d(TestProtocol.NULL_INT_SET, "getPagesToBindSynchronously (1): "
+ + result);
+ }
return result;
}
for (int id : orderedScreenIds.toArray()) {
@@ -2152,6 +2156,10 @@
// pages being hidden in single panel.
result.add(pairId);
}
+ if (TestProtocol.sDebugTracing) {
+ Log.d(TestProtocol.NULL_INT_SET, "getPagesToBindSynchronously (2): "
+ + result);
+ }
return result;
}
@@ -2297,7 +2305,7 @@
final boolean focusFirstItemForAccessibility) {
// Get the list of added items and intersect them with the set of items here
final Collection<Animator> bounceAnims = new ArrayList<>();
- final boolean animateIcons = forceAnimateIcons && canRunNewAppsAnimation();
+ boolean canAnimatePageChange = canAnimatePageChange();
Workspace workspace = mWorkspace;
int newItemsScreenId = -1;
int end = items.size();
@@ -2358,7 +2366,7 @@
}
}
workspace.addInScreenFromBind(view, item);
- if (animateIcons) {
+ if (forceAnimateIcons) {
// Animate all the applications up now
view.setAlpha(0f);
view.setScaleX(0f);
@@ -2374,7 +2382,7 @@
View viewToFocus = newView;
// Animate to the correct pager
- if (animateIcons && newItemsScreenId > -1) {
+ if (forceAnimateIcons && newItemsScreenId > -1) {
AnimatorSet anim = new AnimatorSet();
anim.playTogether(bounceAnims);
if (focusFirstItemForAccessibility && viewToFocus != null) {
@@ -2390,7 +2398,7 @@
final int newScreenIndex = mWorkspace.getPageIndexForScreenId(newItemsScreenId);
final Runnable startBounceAnimRunnable = anim::start;
- if (newItemsScreenId != currentScreenId) {
+ if (canAnimatePageChange && newItemsScreenId != currentScreenId) {
// We post the animation slightly delayed to prevent slowdowns
// when we are loading right after we return to launcher.
mWorkspace.postDelayed(new Runnable() {
@@ -2671,7 +2679,7 @@
TraceHelper.INSTANCE.endSection(traceToken);
}
- private boolean canRunNewAppsAnimation() {
+ private boolean canAnimatePageChange() {
if (mDragController.isDragging()) {
return false;
} else {
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 03e4ee7..048aaaa 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -95,6 +95,12 @@
public static final int ITEM_TYPE_DEEP_SHORTCUT = 6;
/**
+ * The favroite is a search action
+ */
+ public static final int ITEM_TYPE_SEARCH_ACTION = 7;
+
+
+ /**
* Type of the item is recents task.
* TODO(hyunyoungs): move constants not related to Favorites DB to a better location.
*/
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index d534c5d..523ac72 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -638,7 +638,10 @@
}
private int getPageWidthSize(int widthSize) {
- return (widthSize - mInsets.left - mInsets.right) / getPanelCount();
+ // It's necessary to add the padding back because it is remove when measuring children,
+ // like when MeasureSpec.getSize in CellLayout.
+ return (widthSize - mInsets.left - mInsets.right - getPaddingLeft() - getPaddingRight())
+ / getPanelCount() + getPaddingLeft() + getPaddingRight();
}
@Override
diff --git a/src/com/android/launcher3/ShortcutAndWidgetContainer.java b/src/com/android/launcher3/ShortcutAndWidgetContainer.java
index bebbf4f..fec1d68 100644
--- a/src/com/android/launcher3/ShortcutAndWidgetContainer.java
+++ b/src/com/android/launcher3/ShortcutAndWidgetContainer.java
@@ -23,6 +23,7 @@
import android.app.WallpaperManager;
import android.content.Context;
+import android.graphics.Point;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
@@ -48,7 +49,7 @@
private int mCellWidth;
private int mCellHeight;
- private int mBorderSpacing;
+ private Point mBorderSpace;
private int mCountX;
private int mCountY;
@@ -64,12 +65,12 @@
}
public void setCellDimensions(int cellWidth, int cellHeight, int countX, int countY,
- int borderSpacing) {
+ Point borderSpace) {
mCellWidth = cellWidth;
mCellHeight = cellHeight;
mCountX = countX;
mCountY = countY;
- mBorderSpacing = borderSpacing;
+ mBorderSpace = borderSpace;
}
public View getChildAt(int cellX, int cellY) {
@@ -108,10 +109,10 @@
DeviceProfile profile = mActivity.getDeviceProfile();
((NavigableAppWidgetHostView) child).getWidgetInset(profile, mTempRect);
lp.setup(mCellWidth, mCellHeight, invertLayoutHorizontally(), mCountX, mCountY,
- profile.appWidgetScale.x, profile.appWidgetScale.y, mBorderSpacing, mTempRect);
+ profile.appWidgetScale.x, profile.appWidgetScale.y, mBorderSpace, mTempRect);
} else {
lp.setup(mCellWidth, mCellHeight, invertLayoutHorizontally(), mCountX, mCountY,
- mBorderSpacing, null);
+ mBorderSpace, null);
}
}
@@ -132,10 +133,10 @@
if (child instanceof NavigableAppWidgetHostView) {
((NavigableAppWidgetHostView) child).getWidgetInset(dp, mTempRect);
lp.setup(mCellWidth, mCellHeight, invertLayoutHorizontally(), mCountX, mCountY,
- dp.appWidgetScale.x, dp.appWidgetScale.y, mBorderSpacing, mTempRect);
+ dp.appWidgetScale.x, dp.appWidgetScale.y, mBorderSpace, mTempRect);
} else {
lp.setup(mCellWidth, mCellHeight, invertLayoutHorizontally(), mCountX, mCountY,
- mBorderSpacing, null);
+ mBorderSpace, null);
// Center the icon/folder
int cHeight = getCellContentHeight();
int cellPaddingY = dp.isScalableGrid && mContainerType == WORKSPACE
@@ -143,8 +144,9 @@
: (int) Math.max(0, ((lp.height - cHeight) / 2f));
// No need to add padding when cell layout border spacing is present.
- boolean noPaddingX = (dp.cellLayoutBorderSpacingPx > 0 && mContainerType == WORKSPACE)
- || (dp.folderCellLayoutBorderSpacingPx > 0 && mContainerType == FOLDER);
+ boolean noPaddingX =
+ (dp.cellLayoutBorderSpacePx.x > 0 && mContainerType == WORKSPACE)
+ || (dp.folderCellLayoutBorderSpacePx.x > 0 && mContainerType == FOLDER);
int cellPaddingX = noPaddingX
? 0
: mContainerType == WORKSPACE
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index c5e9dd2..8e76d82 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -91,6 +91,7 @@
import com.android.launcher3.model.data.FolderInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
+import com.android.launcher3.model.data.SearchActionItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.pageindicators.WorkspacePageIndicator;
import com.android.launcher3.popup.PopupContainerWithArrow;
@@ -342,16 +343,15 @@
for (int i = 0; i < numberOfScreens; i++) {
int paddingLeft = paddingLeftRight;
int paddingRight = paddingLeftRight;
+ // Add missing cellLayout border in-between panels.
if (panelCount > 1) {
if (i % panelCount == leftPanelModulus) {
- paddingLeft = paddingLeftRight;
- paddingRight = grid.cellLayoutBorderSpacingPx / 2;
+ paddingRight += grid.cellLayoutBorderSpacePx.x / 2;
} else if (i % panelCount == rightPanelModulus) { // right side panel
- paddingLeft = grid.cellLayoutBorderSpacingPx / 2;
- paddingRight = paddingLeftRight;
+ paddingLeft += grid.cellLayoutBorderSpacePx.x / 2;
} else { // middle panel
- paddingLeft = grid.cellLayoutBorderSpacingPx / 2;
- paddingRight = grid.cellLayoutBorderSpacingPx / 2;
+ paddingLeft += grid.cellLayoutBorderSpacePx.x / 2;
+ paddingRight += grid.cellLayoutBorderSpacePx.x / 2;
}
}
// SparseArrayMap doesn't keep the order
@@ -2736,11 +2736,17 @@
case ITEM_TYPE_APPLICATION:
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT:
+ case LauncherSettings.Favorites.ITEM_TYPE_SEARCH_ACTION:
if (info instanceof AppInfo) {
// Came from all apps -- make a copy
info = ((AppInfo) info).makeWorkspaceItem();
d.dragInfo = info;
}
+ if (info instanceof SearchActionItemInfo) {
+ info = ((SearchActionItemInfo) info).createWorkspaceItem(
+ mLauncher.getModel());
+ d.dragInfo = info;
+ }
view = mLauncher.createShortcut(cellLayout, (WorkspaceItemInfo) info);
break;
case LauncherSettings.Favorites.ITEM_TYPE_FOLDER:
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index bddbbd0..bccd9b4 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -21,6 +21,7 @@
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_VERTICAL_SWIPE_BEGIN;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_VERTICAL_SWIPE_END;
+import static com.android.launcher3.util.LogConfig.SEARCH_LOGGING;
import static com.android.launcher3.util.UiThreadHelper.hideKeyboardAsync;
import android.content.Context;
@@ -40,6 +41,7 @@
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.views.ActivityContext;
@@ -54,6 +56,7 @@
public class AllAppsRecyclerView extends BaseRecyclerView {
private static final String TAG = "AllAppsContainerView";
private static final boolean DEBUG = false;
+ private static final boolean DEBUG_LATENCY = Utilities.isPropertyEnabled(SEARCH_LOGGING);
private AlphabeticalAppsList mApps;
private final int mNumAppsPerRow;
@@ -133,6 +136,10 @@
if (DEBUG) {
Log.d(TAG, "onDraw at = " + System.currentTimeMillis());
}
+ if (DEBUG_LATENCY) {
+ Log.d(SEARCH_LOGGING,
+ "-- Recycle view onDraw, time stamp = " + System.currentTimeMillis());
+ }
super.onDraw(c);
}
diff --git a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
index 2491217..4c5a9e6 100644
--- a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
+++ b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
@@ -105,8 +105,8 @@
int rowWidth = myRequestedWidth - mAppsView.getActiveRecyclerView().getPaddingLeft()
- mAppsView.getActiveRecyclerView().getPaddingRight();
- int cellWidth = DeviceProfile.calculateCellWidth(rowWidth, dp.cellLayoutBorderSpacingPx,
- dp.numShownHotseatIcons);
+ int cellWidth = DeviceProfile.calculateCellWidth(rowWidth,
+ dp.cellLayoutBorderSpacePx.x, dp.numShownHotseatIcons);
int iconVisibleSize = Math.round(ICON_VISIBLE_AREA_FACTOR * dp.iconSizePx);
int iconPadding = cellWidth - iconVisibleSize;
diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java
index 5f1d549..a8878df 100644
--- a/src/com/android/launcher3/config/FeatureFlags.java
+++ b/src/com/android/launcher3/config/FeatureFlags.java
@@ -94,11 +94,6 @@
"ENABLE_QUICKSTEP_WIDGET_APP_START", true,
"Enable Quickstep animation when launching activities from an app widget");
- // Keep as DeviceFlag to allow remote disable in emergency.
- public static final BooleanFlag ENABLE_SUGGESTED_ACTIONS_OVERVIEW = new DeviceFlag(
- "ENABLE_SUGGESTED_ACTIONS_OVERVIEW", false, "Show chip hints on the overview screen");
-
-
public static final BooleanFlag ENABLE_DEVICE_SEARCH = new DeviceFlag(
"ENABLE_DEVICE_SEARCH", true, "Allows on device search in all apps");
@@ -152,6 +147,11 @@
false,
"Enable loading workspace icons in bulk.");
+ public static final BooleanFlag ENABLE_BULK_ALL_APPS_ICON_LOADING = getDebugFlag(
+ "ENABLE_BULK_ALL_APPS_ICON_LOADING",
+ false,
+ "Enable loading all apps icons in bulk.");
+
// Keep as DeviceFlag for remote disable in emergency.
public static final BooleanFlag ENABLE_OVERVIEW_SELECTIONS = new DeviceFlag(
"ENABLE_OVERVIEW_SELECTIONS", true, "Show Select Mode button in Overview Actions");
@@ -159,9 +159,6 @@
public static final BooleanFlag ENABLE_WIDGETS_PICKER_AIAI_SEARCH = new DeviceFlag(
"ENABLE_WIDGETS_PICKER_AIAI_SEARCH", false, "Enable AiAi search in the widgets picker");
- public static final BooleanFlag ENABLE_OVERVIEW_SHARE = getDebugFlag(
- "ENABLE_OVERVIEW_SHARE", false, "Show Share button in Overview Actions");
-
public static final BooleanFlag ENABLE_OVERVIEW_SHARING_TO_PEOPLE = getDebugFlag(
"ENABLE_OVERVIEW_SHARING_TO_PEOPLE", true,
"Show indicators for content on Overview to share with top people. ");
diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java
index cb3884d..399d142 100644
--- a/src/com/android/launcher3/folder/FolderAnimationManager.java
+++ b/src/com/android/launcher3/folder/FolderAnimationManager.java
@@ -239,9 +239,9 @@
mFolder, startRect, endRect, finalRadius, !mIsOpening));
// Create reveal animator for the folder content (capture the top 4 icons 2x2)
- int width = mDeviceProfile.folderCellLayoutBorderSpacingPx
+ int width = mDeviceProfile.folderCellLayoutBorderSpacePx.x
+ mDeviceProfile.folderCellWidthPx * 2;
- int height = mDeviceProfile.folderCellLayoutBorderSpacingPx
+ int height = mDeviceProfile.folderCellLayoutBorderSpacePx.y
+ mDeviceProfile.folderCellHeightPx * 2;
int page = mIsOpening ? mContent.getCurrentPage() : mContent.getDestinationPage();
int left = mContent.getPaddingLeft() + page * lp.width;
diff --git a/src/com/android/launcher3/folder/FolderNameEditText.java b/src/com/android/launcher3/folder/FolderNameEditText.java
index 6038a05..7c657f0 100644
--- a/src/com/android/launcher3/folder/FolderNameEditText.java
+++ b/src/com/android/launcher3/folder/FolderNameEditText.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.View;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
@@ -117,4 +118,16 @@
return super.setComposingText(cs, newCursorPos);
}
}
+
+ @Override
+ public void reset() {
+ super.reset();
+ if (isFocused()) {
+ View nextFocus = focusSearch(View.FOCUS_DOWN);
+ if (nextFocus != null) {
+ nextFocus.requestFocus();
+ }
+ }
+ hideKeyboard();
+ }
}
diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
index b4907e8..73e18f4 100644
--- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
+++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
@@ -230,16 +230,20 @@
CellLayout firstScreen = mRootView.findViewById(R.id.workspace);
firstScreen.setPadding(mDp.workspacePadding.left + mDp.cellLayoutPaddingLeftRightPx,
mDp.workspacePadding.top,
- mDp.workspacePadding.right + mDp.cellLayoutBorderSpacingPx / 2,
- mDp.workspacePadding.bottom);
+ (mDp.isTwoPanels ? mDp.cellLayoutBorderSpacePx.x / 2
+ : mDp.workspacePadding.right) + mDp.cellLayoutPaddingLeftRightPx,
+ mDp.workspacePadding.bottom
+ );
mWorkspaceScreens.put(FIRST_SCREEN_ID, firstScreen);
if (mDp.isTwoPanels) {
CellLayout rightPanel = mRootView.findViewById(R.id.workspace_right);
- rightPanel.setPadding(mDp.workspacePadding.left + mDp.cellLayoutBorderSpacingPx / 2,
+ rightPanel.setPadding(
+ mDp.cellLayoutBorderSpacePx.x / 2 + mDp.cellLayoutPaddingLeftRightPx,
mDp.workspacePadding.top,
mDp.workspacePadding.right + mDp.cellLayoutPaddingLeftRightPx,
- mDp.workspacePadding.bottom);
+ mDp.workspacePadding.bottom
+ );
mWorkspaceScreens.put(Workspace.SECOND_SCREEN_ID, rightPanel);
}
@@ -349,7 +353,7 @@
private void inflateAndAddWidgets(LauncherAppWidgetInfo info, WidgetsModel widgetsModel) {
WidgetItem widgetItem = widgetsModel.getWidgetProviderInfoByProviderName(
- info.providerName);
+ info.providerName, info.user);
if (widgetItem == null) {
return;
}
diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java
index 60d6e83..936eeb9 100644
--- a/src/com/android/launcher3/icons/IconCache.java
+++ b/src/com/android/launcher3/icons/IconCache.java
@@ -18,6 +18,7 @@
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
+import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
import static java.util.stream.Collectors.groupingBy;
@@ -46,7 +47,6 @@
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherFiles;
-import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic;
@@ -63,6 +63,8 @@
import com.android.launcher3.util.InstantAppResolver;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
+import com.android.launcher3.widget.WidgetSections;
+import com.android.launcher3.widget.WidgetSections.WidgetSection;
import java.util.Collections;
import java.util.List;
@@ -275,7 +277,8 @@
getTitleAndIcon(appInfo, false);
return appInfo.bitmap;
} else {
- PackageItemInfo pkgInfo = new PackageItemInfo(shortcutInfo.getPackage());
+ PackageItemInfo pkgInfo = new PackageItemInfo(shortcutInfo.getPackage(),
+ shortcutInfo.getUserHandle());
getTitleAndIconForApp(pkgInfo, false);
return pkgInfo.bitmap;
}
@@ -409,8 +412,10 @@
CacheEntry entry = getEntryForPackageLocked(
infoInOut.packageName, infoInOut.user, useLowResIcon);
applyCacheEntry(entry, infoInOut);
- if (infoInOut.category == PackageItemInfo.CONVERSATIONS) {
- infoInOut.title = mContext.getString(R.string.widget_category_conversations);
+ if (infoInOut.widgetCategory != NO_CATEGORY) {
+ WidgetSection widgetSection = WidgetSections.getWidgetSections(mContext)
+ .get(infoInOut.widgetCategory);
+ infoInOut.title = mContext.getString(widgetSection.mSectionTitle);
infoInOut.contentDescription = mPackageManager.getUserBadgedLabel(
infoInOut.title, infoInOut.user);
}
diff --git a/src/com/android/launcher3/model/AllAppsList.java b/src/com/android/launcher3/model/AllAppsList.java
index 92b5885..dbed9a9 100644
--- a/src/com/android/launcher3/model/AllAppsList.java
+++ b/src/com/android/launcher3/model/AllAppsList.java
@@ -130,30 +130,54 @@
* If the app is already in the list, doesn't add it.
*/
public void add(AppInfo info, LauncherActivityInfo activityInfo) {
+ add(info, activityInfo, true);
+ }
+
+ public void add(AppInfo info, LauncherActivityInfo activityInfo, boolean loadIcon) {
if (!mAppFilter.shouldShowApp(info.componentName)) {
return;
}
if (findAppInfo(info.componentName, info.user) != null) {
return;
}
- mIconCache.getTitleAndIcon(info, activityInfo, false /* useLowResIcon */);
- info.sectionName = mIndex.computeSectionName(info.title);
+ if (loadIcon) {
+ mIconCache.getTitleAndIcon(info, activityInfo, false /* useLowResIcon */);
+ info.sectionName = mIndex.computeSectionName(info.title);
+ }
data.add(info);
mDataChanged = true;
}
- public void addPromiseApp(Context context, PackageInstallInfo installInfo) {
- // only if not yet installed
- if (!new PackageManagerHelper(context)
- .isAppInstalled(installInfo.packageName, installInfo.user)) {
- AppInfo info = new AppInfo(installInfo);
- mIconCache.getTitleAndIcon(info, info.usingLowResIcon());
- info.sectionName = mIndex.computeSectionName(info.title);
+ @Nullable
+ public AppInfo addPromiseApp(Context context, PackageInstallInfo installInfo) {
+ return addPromiseApp(context, installInfo, true);
+ }
- data.add(info);
- mDataChanged = true;
+ @Nullable
+ public AppInfo addPromiseApp(
+ Context context, PackageInstallInfo installInfo, boolean loadIcon) {
+ // only if not yet installed
+ if (new PackageManagerHelper(context)
+ .isAppInstalled(installInfo.packageName, installInfo.user)) {
+ return null;
}
+ AppInfo promiseAppInfo = new AppInfo(installInfo);
+
+ if (loadIcon) {
+ mIconCache.getTitleAndIcon(promiseAppInfo, promiseAppInfo.usingLowResIcon());
+ promiseAppInfo.sectionName = mIndex.computeSectionName(promiseAppInfo.title);
+ }
+
+ data.add(promiseAppInfo);
+ mDataChanged = true;
+
+ return promiseAppInfo;
+ }
+
+ public void updateSectionName(AppInfo appInfo) {
+ appInfo.sectionName = mIndex.computeSectionName(appInfo.title);
+
}
/** Updates the given PackageInstallInfo's associated AppInfo's installation info. */
diff --git a/src/com/android/launcher3/model/BaseLoaderResults.java b/src/com/android/launcher3/model/BaseLoaderResults.java
index 0e132c2..3cae1e1 100644
--- a/src/com/android/launcher3/model/BaseLoaderResults.java
+++ b/src/com/android/launcher3/model/BaseLoaderResults.java
@@ -32,6 +32,7 @@
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
+import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.LooperExecutor;
@@ -173,8 +174,18 @@
ArrayList<LauncherAppWidgetInfo> currentAppWidgets = new ArrayList<>();
ArrayList<LauncherAppWidgetInfo> otherAppWidgets = new ArrayList<>();
+ if (TestProtocol.sDebugTracing) {
+ Log.d(TestProtocol.NULL_INT_SET, "bind (1) currentScreenIds: "
+ + currentScreenIds
+ + ", mCallBacks: "
+ + mCallbacks.getClass().getName());
+ }
filterCurrentWorkspaceItems(currentScreenIds, mWorkspaceItems, currentWorkspaceItems,
otherWorkspaceItems);
+ if (TestProtocol.sDebugTracing) {
+ Log.d(TestProtocol.NULL_INT_SET, "bind (2) currentScreenIds: "
+ + currentScreenIds);
+ }
filterCurrentWorkspaceItems(currentScreenIds, mAppWidgets, currentAppWidgets,
otherAppWidgets);
final InvariantDeviceProfile idp = mApp.getInvariantDeviceProfile();
diff --git a/src/com/android/launcher3/model/DeviceGridState.java b/src/com/android/launcher3/model/DeviceGridState.java
index 992a3f2..0fc4c2d 100644
--- a/src/com/android/launcher3/model/DeviceGridState.java
+++ b/src/com/android/launcher3/model/DeviceGridState.java
@@ -24,7 +24,6 @@
import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
-import android.util.Log;
import androidx.annotation.IntDef;
@@ -135,17 +134,8 @@
public boolean isCompatible(DeviceGridState other) {
if (this == other) return true;
if (other == null) return false;
- boolean isCompatible = mNumHotseat == other.mNumHotseat
+ return mNumHotseat == other.mNumHotseat
&& deviceTypeCompatible(mDeviceType, other.mDeviceType)
&& Objects.equals(mGridSizeString, other.mGridSizeString);
- // TODO(b/198965093): Temporary fix for multi-display devices, ignore hotseat size changes
- // and type compatibility.
- if ((mDeviceType == TYPE_MULTI_DISPLAY || other.mDeviceType == TYPE_MULTI_DISPLAY)
- && !isCompatible && Objects.equals(mGridSizeString, other.mGridSizeString)) {
- Log.d("b/198965093", "Hotseat and deice type compatibility ignored: " + this
- + ", other: " + other);
- isCompatible = true;
- }
- return isCompatible;
}
}
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index 1249606..a4f6f7a 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -584,6 +584,7 @@
&& pmHelper.isAppSuspended(targetPkg, c.user)) {
disabledState |= FLAG_DISABLED_SUSPENDED;
}
+ info.options = c.getInt(optionsIndex);
// App shortcuts that used to be automatically added to Launcher
// didn't always have the correct intent flags set, so do that
@@ -804,8 +805,9 @@
if (appWidgetInfo.restoreStatus !=
LauncherAppWidgetInfo.RESTORE_COMPLETED) {
appWidgetInfo.pendingItemInfo = WidgetsModel.newPendingItemInfo(
- appWidgetInfo.providerName);
- appWidgetInfo.pendingItemInfo.user = appWidgetInfo.user;
+ mApp.getContext(),
+ appWidgetInfo.providerName,
+ appWidgetInfo.user);
mIconCache.getTitleAndIconForApp(
appWidgetInfo.pendingItemInfo, false);
}
@@ -936,6 +938,8 @@
List<LauncherActivityInfo> allActivityList = new ArrayList<>();
// Clear the list of apps
mBgAllAppsList.clear();
+
+ List<IconRequestInfo<AppInfo>> iconRequestInfos = new ArrayList<>();
for (UserHandle user : profiles) {
// Query for the set of apps
final List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(null, user);
@@ -948,18 +952,43 @@
// Create the ApplicationInfos
for (int i = 0; i < apps.size(); i++) {
LauncherActivityInfo app = apps.get(i);
- // This builds the icon bitmaps.
- mBgAllAppsList.add(new AppInfo(app, user, quietMode), app);
+ AppInfo appInfo = new AppInfo(app, user, quietMode);
+
+ iconRequestInfos.add(new IconRequestInfo<>(
+ appInfo, app, /* useLowResIcon= */ false));
+ mBgAllAppsList.add(
+ appInfo, app, !FeatureFlags.ENABLE_BULK_ALL_APPS_ICON_LOADING.get());
}
allActivityList.addAll(apps);
}
+
if (FeatureFlags.PROMISE_APPS_IN_ALL_APPS.get()) {
// get all active sessions and add them to the all apps list
for (PackageInstaller.SessionInfo info :
mSessionHelper.getAllVerifiedSessions()) {
- mBgAllAppsList.addPromiseApp(mApp.getContext(),
- PackageInstallInfo.fromInstallingState(info));
+ AppInfo promiseAppInfo = mBgAllAppsList.addPromiseApp(
+ mApp.getContext(),
+ PackageInstallInfo.fromInstallingState(info),
+ !FeatureFlags.ENABLE_BULK_ALL_APPS_ICON_LOADING.get());
+
+ if (promiseAppInfo != null) {
+ iconRequestInfos.add(new IconRequestInfo<>(
+ promiseAppInfo,
+ /* launcherActivityInfo= */ null,
+ promiseAppInfo.usingLowResIcon()));
+ }
+ }
+ }
+
+ if (FeatureFlags.ENABLE_BULK_ALL_APPS_ICON_LOADING.get()) {
+ Trace.beginSection("LoadAllAppsIconsInBulk");
+ try {
+ mIconCache.getTitlesAndIconsInBulk(iconRequestInfos);
+ iconRequestInfos.forEach(iconRequestInfo ->
+ mBgAllAppsList.updateSectionName(iconRequestInfo.itemInfo));
+ } finally {
+ Trace.endSection();
}
}
@@ -1022,7 +1051,10 @@
deviceProfile.getCellSize(cellSize);
FileLog.d(TAG, "DeviceProfile available width: " + deviceProfile.availableWidthPx
+ ", available height: " + deviceProfile.availableHeightPx
- + ", cellLayoutBorderSpacingPx: " + deviceProfile.cellLayoutBorderSpacingPx
+ + ", cellLayoutBorderSpacePx Horizontal: "
+ + deviceProfile.cellLayoutBorderSpacePx.x
+ + ", cellLayoutBorderSpacePx Vertical: "
+ + deviceProfile.cellLayoutBorderSpacePx.y
+ ", cellSize: " + cellSize);
}
diff --git a/src/com/android/launcher3/model/ModelUtils.java b/src/com/android/launcher3/model/ModelUtils.java
index 58aa9e5..ef5eef1 100644
--- a/src/com/android/launcher3/model/ModelUtils.java
+++ b/src/com/android/launcher3/model/ModelUtils.java
@@ -31,6 +31,7 @@
import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
+import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
@@ -66,6 +67,10 @@
(lhs, rhs) -> Integer.compare(lhs.container, rhs.container));
for (T info : allWorkspaceItems) {
if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+ if (TestProtocol.sDebugTracing) {
+ Log.d(TestProtocol.NULL_INT_SET, "filterCurrentWorkspaceItems: "
+ + currentScreenIds);
+ }
if (currentScreenIds.contains(info.screenId)) {
currentScreenItems.add(info);
itemsOnScreen.add(info.id);
diff --git a/src/com/android/launcher3/model/data/IconRequestInfo.java b/src/com/android/launcher3/model/data/IconRequestInfo.java
index 2f566f6..5dc6a3b 100644
--- a/src/com/android/launcher3/model/data/IconRequestInfo.java
+++ b/src/com/android/launcher3/model/data/IconRequestInfo.java
@@ -50,6 +50,19 @@
public IconRequestInfo(
@NonNull T itemInfo,
@Nullable LauncherActivityInfo launcherActivityInfo,
+ boolean useLowResIcon) {
+ this(
+ itemInfo,
+ launcherActivityInfo,
+ /* packageName= */ null,
+ /* resourceName= */ null,
+ /* iconBlob= */ null,
+ useLowResIcon);
+ }
+
+ public IconRequestInfo(
+ @NonNull T itemInfo,
+ @Nullable LauncherActivityInfo launcherActivityInfo,
@Nullable String packageName,
@Nullable String resourceName,
@Nullable byte[] iconBlob,
diff --git a/src/com/android/launcher3/model/data/ItemInfo.java b/src/com/android/launcher3/model/data/ItemInfo.java
index 4fdc412..97398de 100644
--- a/src/com/android/launcher3/model/data/ItemInfo.java
+++ b/src/com/android/launcher3/model/data/ItemInfo.java
@@ -164,6 +164,7 @@
public void copyFrom(ItemInfo info) {
id = info.id;
+ title = info.title;
cellX = info.cellX;
cellY = info.cellY;
spanX = info.spanX;
diff --git a/src/com/android/launcher3/model/data/PackageItemInfo.java b/src/com/android/launcher3/model/data/PackageItemInfo.java
index a81fe6a..0055763 100644
--- a/src/com/android/launcher3/model/data/PackageItemInfo.java
+++ b/src/com/android/launcher3/model/data/PackageItemInfo.java
@@ -16,47 +16,41 @@
package com.android.launcher3.model.data;
-import androidx.annotation.IntDef;
+import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
+
+import android.os.UserHandle;
import com.android.launcher3.LauncherSettings;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
/**
* Represents a {@link Package} in the widget tray section.
*/
public class PackageItemInfo extends ItemInfoWithIcon {
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({NO_CATEGORY, CONVERSATIONS})
- public @interface Category{}
- /** The package is not categorized in the widget tray. */
- public static final int NO_CATEGORY = 0;
- /** The package is categorized to conversations widget in the widget tray. */
- public static final int CONVERSATIONS = 1;
-
/**
* Package name of the {@link PackageItemInfo}.
*/
public final String packageName;
/** Represents a widget category shown in the widget tray section. */
- @Category public final int category;
+ public final int widgetCategory;
- public PackageItemInfo(String packageName) {
- this(packageName, NO_CATEGORY);
+ public PackageItemInfo(String packageName, UserHandle user) {
+ this(packageName, NO_CATEGORY, user);
}
- public PackageItemInfo(String packageName, @Category int category) {
+ public PackageItemInfo(String packageName, int widgetCategory, UserHandle user) {
this.packageName = packageName;
- this.category = category;
+ this.widgetCategory = widgetCategory;
+ this.user = user;
this.itemType = LauncherSettings.Favorites.ITEM_TYPE_NON_ACTIONABLE;
}
public PackageItemInfo(PackageItemInfo copy) {
this.packageName = copy.packageName;
- this.category = copy.category;
+ this.widgetCategory = copy.widgetCategory;
+ this.user = copy.user;
this.itemType = LauncherSettings.Favorites.ITEM_TYPE_NON_ACTIONABLE;
}
@@ -75,11 +69,13 @@
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PackageItemInfo that = (PackageItemInfo) o;
- return Objects.equals(packageName, that.packageName);
+ return Objects.equals(packageName, that.packageName)
+ && Objects.equals(user, that.user)
+ && widgetCategory == that.widgetCategory;
}
@Override
public int hashCode() {
- return Objects.hash(packageName, user);
+ return Objects.hash(packageName, user, widgetCategory);
}
}
diff --git a/src/com/android/launcher3/model/data/SearchActionItemInfo.java b/src/com/android/launcher3/model/data/SearchActionItemInfo.java
index b3057d5..293c095 100644
--- a/src/com/android/launcher3/model/data/SearchActionItemInfo.java
+++ b/src/com/android/launcher3/model/data/SearchActionItemInfo.java
@@ -25,8 +25,15 @@
import androidx.annotation.Nullable;
+import com.android.launcher3.LauncherAppState;
+import com.android.launcher3.LauncherModel;
+import com.android.launcher3.LauncherSettings;
+import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.logger.LauncherAtom.ItemInfo;
import com.android.launcher3.logger.LauncherAtom.SearchActionItem;
+import com.android.launcher3.model.AllAppsList;
+import com.android.launcher3.model.BaseModelUpdateTask;
+import com.android.launcher3.model.BgDataModel;
/**
* Represents a SearchAction with in launcher
@@ -38,13 +45,14 @@
public static final int FLAG_BADGE_WITH_PACKAGE = 1 << 3;
public static final int FLAG_PRIMARY_ICON_FROM_TITLE = 1 << 4;
public static final int FLAG_BADGE_WITH_COMPONENT_NAME = 1 << 5;
+ public static final int FLAG_ALLOW_PINNING = 1 << 6;
- private final String mFallbackPackageName;
+ private String mFallbackPackageName;
private int mFlags = 0;
- private final Icon mIcon;
+ private Icon mIcon;
// If true title does not contain any personal info and eligible for logging.
- private final boolean mIsPersonalTitle;
+ private boolean mIsPersonalTitle;
private Intent mIntent;
private PendingIntent mPendingIntent;
@@ -52,6 +60,7 @@
public SearchActionItemInfo(Icon icon, String packageName, UserHandle user,
CharSequence title, boolean isPersonalTitle) {
mIsPersonalTitle = isPersonalTitle;
+ this.itemType = LauncherSettings.Favorites.ITEM_TYPE_SEARCH_ACTION;
this.user = user == null ? Process.myUserHandle() : user;
this.title = title;
this.container = EXTENDED_CONTAINERS;
@@ -59,14 +68,18 @@
mIcon = icon;
}
- public SearchActionItemInfo(SearchActionItemInfo info) {
+ private SearchActionItemInfo(SearchActionItemInfo info) {
super(info);
- mIcon = info.mIcon;
- mFallbackPackageName = info.mFallbackPackageName;
- mFlags = info.mFlags;
- title = info.title;
- this.container = EXTENDED_CONTAINERS;
- this.mIsPersonalTitle = info.mIsPersonalTitle;
+ }
+
+ @Override
+ public void copyFrom(com.android.launcher3.model.data.ItemInfo info) {
+ super.copyFrom(info);
+ SearchActionItemInfo itemInfo = (SearchActionItemInfo) info;
+ this.mFallbackPackageName = itemInfo.mFallbackPackageName;
+ this.mIcon = itemInfo.mIcon;
+ this.mFlags = itemInfo.mFlags;
+ this.mIsPersonalTitle = itemInfo.mIsPersonalTitle;
}
/**
@@ -77,7 +90,7 @@
}
public void setFlags(int flags) {
- mFlags |= flags ;
+ mFlags |= flags;
}
@Override
@@ -134,4 +147,50 @@
.setContainerInfo(getContainerInfo())
.build();
}
+
+ /**
+ * Returns true if result supports drag/drop to home screen
+ */
+ public boolean supportsPinning() {
+ return hasFlags(FLAG_ALLOW_PINNING) && getIntentPackageName() != null;
+ }
+
+ /**
+ * Creates a {@link WorkspaceItemInfo} coorsponding to search action to be stored in launcher db
+ */
+ public WorkspaceItemInfo createWorkspaceItem(LauncherModel model) {
+ WorkspaceItemInfo info = new WorkspaceItemInfo();
+ info.title = title;
+ info.bitmap = bitmap;
+ info.intent = mIntent;
+
+ if (hasFlags(FLAG_SHOULD_START_FOR_RESULT)) {
+ info.options |= WorkspaceItemInfo.FLAG_START_FOR_RESULT;
+ }
+
+ model.enqueueModelUpdateTask(new BaseModelUpdateTask() {
+ @Override
+ public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) {
+
+ model.updateAndBindWorkspaceItem(() -> {
+ PackageItemInfo pkgInfo = new PackageItemInfo(getIntentPackageName(), user);
+ app.getIconCache().getTitleAndIconForApp(pkgInfo, false);
+ try (LauncherIcons li = LauncherIcons.obtain(app.getContext())) {
+ info.bitmap = li.badgeBitmap(info.bitmap.icon, pkgInfo.bitmap);
+ }
+ return info;
+ });
+ }
+ });
+ return info;
+ }
+
+ @Nullable
+ private String getIntentPackageName() {
+ if (mIntent != null) {
+ if (mIntent.getPackage() != null) return mIntent.getPackage();
+ return mFallbackPackageName;
+ }
+ return null;
+ }
}
diff --git a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
index a395709..a195979 100644
--- a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
+++ b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
@@ -68,6 +68,11 @@
public static final int FLAG_SUPPORTS_WEB_UI = 1 << 3;
/**
+ *
+ */
+ public static final int FLAG_START_FOR_RESULT = 1 << 4;
+
+ /**
* The intent used to start the application.
*/
public Intent intent;
@@ -92,6 +97,8 @@
*/
@NonNull private String[] personKeys = Utilities.EMPTY_STRING_ARRAY;
+ public int options;
+
public WorkspaceItemInfo() {
itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
@@ -127,6 +134,7 @@
super.onAddToDatabase(writer);
writer.put(Favorites.TITLE, title)
.put(Favorites.INTENT, getIntent())
+ .put(Favorites.OPTIONS, options)
.put(Favorites.RESTORED, status);
if (!usingLowResIcon()) {
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index 65dd8ea..d6e927b 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -46,7 +46,6 @@
import com.android.launcher3.DropTarget;
import com.android.launcher3.DropTarget.DragObject;
import com.android.launcher3.Launcher;
-import com.android.launcher3.LauncherState;
import com.android.launcher3.R;
import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
import com.android.launcher3.accessibility.ShortcutMenuAccessibilityDelegate;
@@ -64,7 +63,6 @@
import com.android.launcher3.popup.PopupDataProvider.PopupDataChangeListener;
import com.android.launcher3.shortcuts.DeepShortcutView;
import com.android.launcher3.shortcuts.ShortcutDragPreviewProvider;
-import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.touch.ItemLongClickListener;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.ShortcutUtil;
@@ -83,7 +81,7 @@
*
* @param <T> The activity on with the popup shows
*/
-public class PopupContainerWithArrow<T extends StatefulActivity<LauncherState>>
+public class PopupContainerWithArrow<T extends BaseDraggingActivity>
extends ArrowPopup<T> implements DragSource, DragController.DragListener {
private final List<DeepShortcutView> mShortcuts = new ArrayList<>();
diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java b/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java
index f78f6dd..1820933 100644
--- a/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java
+++ b/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java
@@ -112,7 +112,7 @@
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child == mAppsView) {
- int padding = 2 * (grid.desiredWorkspaceLeftRightMarginPx
+ int padding = 2 * (grid.desiredWorkspaceHorizontalMarginPx
+ grid.cellLayoutPaddingLeftRightPx);
int maxWidth = grid.allAppsCellWidthPx * grid.numShownAllAppsColumns + padding;
diff --git a/src/com/android/launcher3/testing/TestProtocol.java b/src/com/android/launcher3/testing/TestProtocol.java
index 304e76a..f67bac6 100644
--- a/src/com/android/launcher3/testing/TestProtocol.java
+++ b/src/com/android/launcher3/testing/TestProtocol.java
@@ -102,8 +102,8 @@
public static final String REQUEST_GET_ACTIVITIES_CREATED_COUNT =
"get-activities-created-count";
public static final String REQUEST_GET_ACTIVITIES = "get-activities";
- public static final String REQUEST_GET_FOCUSED_TASK_WIDTH_FOR_TABLET =
- "get-focused-task-width-for-tablet";
+ public static final String REQUEST_GET_FOCUSED_TASK_HEIGHT_FOR_TABLET =
+ "get-focused-task-height-for-tablet";
public static Long sForcePauseTimeout;
public static final String REQUEST_SET_FORCE_PAUSE_TIMEOUT = "set-force-pause-timeout";
@@ -112,7 +112,6 @@
public static final String REQUEST_ENABLE_DEBUG_TRACING = "enable-debug-tracing";
public static final String REQUEST_DISABLE_DEBUG_TRACING = "disable-debug-tracing";
- public static final String REQUEST_OVERVIEW_SHARE_ENABLED = "overview-share-enabled";
public static boolean sDisableSensorRotation;
public static final String REQUEST_MOCK_SENSOR_ROTATION = "mock-sensor-rotation";
@@ -121,4 +120,5 @@
public static final String WORK_PROFILE_REMOVED = "b/159671700";
public static final String TASK_VIEW_ID_CRASH = "b/195430732";
public static final String NO_DROP_TARGET = "b/195031154";
+ public static final String NULL_INT_SET = "b/200572078";
}
diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java
index b53f96e..5e907a4 100644
--- a/src/com/android/launcher3/touch/ItemClickHandler.java
+++ b/src/com/android/launcher3/touch/ItemClickHandler.java
@@ -46,6 +46,8 @@
import com.android.launcher3.Utilities;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
+import com.android.launcher3.logging.InstanceId;
+import com.android.launcher3.logging.InstanceIdSequence;
import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.FolderInfo;
@@ -314,6 +316,12 @@
intent = new Intent(intent);
intent.setPackage(null);
}
+ if ((si.options & WorkspaceItemInfo.FLAG_START_FOR_RESULT) != 0) {
+ launcher.startActivityForResult(item.getIntent(), 0);
+ InstanceId instanceId = new InstanceIdSequence().newInstanceId();
+ launcher.logAppLaunch(launcher.getStatsLogManager(), item, instanceId);
+ return;
+ }
}
if (v != null && launcher.supportsAdaptiveIconAnimation(v)) {
// Preload the icon to reduce latency b/w swapping the floating view with the original.
diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java
index d05ba3d..931ecb8 100644
--- a/src/com/android/launcher3/util/DisplayController.java
+++ b/src/com/android/launcher3/util/DisplayController.java
@@ -257,6 +257,14 @@
}
if (!newInfo.supportedBounds.equals(oldInfo.supportedBounds)) {
change |= CHANGE_SUPPORTED_BOUNDS;
+
+ PortraitSize realSize = new PortraitSize(newInfo.currentSize.x, newInfo.currentSize.y);
+ PortraitSize expectedSize = oldInfo.mInternalDisplays.get(
+ ApiWrapper.getUniqueId(display));
+ if (!realSize.equals(expectedSize) && display.getState() == Display.STATE_OFF) {
+ Log.e("b/198965093", "Display size changed while display is off, ignoring change");
+ return;
+ }
}
if (change != 0) {
diff --git a/src/com/android/launcher3/util/LogConfig.java b/src/com/android/launcher3/util/LogConfig.java
index 528a6e9..6bc26e7 100644
--- a/src/com/android/launcher3/util/LogConfig.java
+++ b/src/com/android/launcher3/util/LogConfig.java
@@ -35,4 +35,9 @@
* When turned on, we enable doodle related logging.
*/
public static final String DOODLE_LOGGING = "DoodleLogging";
+
+ /**
+ * When turned on, we enable suggest related logging.
+ */
+ public static final String SEARCH_LOGGING = "SearchLogging";
}
diff --git a/src/com/android/launcher3/util/PackageUserKey.java b/src/com/android/launcher3/util/PackageUserKey.java
index 3a3b5a2..92d9737 100644
--- a/src/com/android/launcher3/util/PackageUserKey.java
+++ b/src/com/android/launcher3/util/PackageUserKey.java
@@ -1,19 +1,24 @@
package com.android.launcher3.util;
+import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
+
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
+import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.model.data.ItemInfo;
+import com.android.launcher3.model.data.PackageItemInfo;
-import java.util.Arrays;
+import java.util.Objects;
-/** Creates a hash key based on package name and user. */
+/** Creates a hash key based on package name, widget category, and user. */
public class PackageUserKey {
public String mPackageName;
+ public int mWidgetCategory;
public UserHandle mUser;
private int mHashCode;
@@ -27,14 +32,31 @@
return new PackageUserKey(notification.getPackageName(), notification.getUser());
}
+ /** Creates a {@link PackageUserKey} from {@link PackageItemInfo}. */
+ public static PackageUserKey fromPackageItemInfo(PackageItemInfo info) {
+ if (TextUtils.isEmpty(info.packageName) && info.widgetCategory != NO_CATEGORY) {
+ return new PackageUserKey(info.widgetCategory, info.user);
+ }
+ return new PackageUserKey(info.packageName, info.user);
+ }
+
public PackageUserKey(String packageName, UserHandle user) {
update(packageName, user);
}
+ public PackageUserKey(int widgetCategory, UserHandle user) {
+ update(/* packageName= */ "", widgetCategory, user);
+ }
+
public void update(String packageName, UserHandle user) {
+ update(packageName, NO_CATEGORY, user);
+ }
+
+ private void update(String packageName, int widgetCategory, UserHandle user) {
mPackageName = packageName;
+ mWidgetCategory = widgetCategory;
mUser = user;
- mHashCode = Arrays.hashCode(new Object[] {packageName, user});
+ mHashCode = Objects.hash(packageName, widgetCategory, user);
}
/**
@@ -59,12 +81,14 @@
public boolean equals(Object obj) {
if (!(obj instanceof PackageUserKey)) return false;
PackageUserKey otherKey = (PackageUserKey) obj;
- return mPackageName.equals(otherKey.mPackageName) && mUser.equals(otherKey.mUser);
+ return Objects.equals(mPackageName, otherKey.mPackageName)
+ && mWidgetCategory == otherKey.mWidgetCategory
+ && Objects.equals(mUser, otherKey.mUser);
}
@NonNull
@Override
public String toString() {
- return mPackageName + "#" + mUser;
+ return mPackageName + "#" + mUser + ",category=" + mWidgetCategory;
}
}
diff --git a/src/com/android/launcher3/views/BubbleTextHolder.java b/src/com/android/launcher3/views/BubbleTextHolder.java
index 47d3563..78aac06 100644
--- a/src/com/android/launcher3/views/BubbleTextHolder.java
+++ b/src/com/android/launcher3/views/BubbleTextHolder.java
@@ -16,10 +16,19 @@
package com.android.launcher3.views;
import com.android.launcher3.BubbleTextView;
+import com.android.launcher3.model.data.ItemInfo;
/**
* Views that contain {@link BubbleTextView} should implement this interface.
*/
public interface BubbleTextHolder {
BubbleTextView getBubbleText();
+
+ /**
+ * Called when new {@link ItemInfo} is set to {@link BubbleTextView}
+ *
+ * @param itemInfo the new itemInfo
+ */
+ default void onItemInfoChanged(ItemInfo itemInfo) {
+ }
}
diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java
index d77d99d..bba1016 100644
--- a/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java
+++ b/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfo.java
@@ -121,29 +121,29 @@
localPadding.set(widgetPadding);
}
minSpanX = Math.max(minSpanX,
- getSpanX(localPadding, minResizeWidth, dp.cellLayoutBorderSpacingPx,
+ getSpanX(localPadding, minResizeWidth, dp.cellLayoutBorderSpacePx.x,
cellSize.x));
minSpanY = Math.max(minSpanY,
- getSpanY(localPadding, minResizeHeight, dp.cellLayoutBorderSpacingPx,
+ getSpanY(localPadding, minResizeHeight, dp.cellLayoutBorderSpacePx.y,
cellSize.y));
if (ATLEAST_S) {
if (maxResizeWidth > 0) {
- maxSpanX = Math.min(maxSpanX,
- getSpanX(localPadding, maxResizeWidth, dp.cellLayoutBorderSpacingPx,
- cellSize.x));
+ maxSpanX = Math.min(maxSpanX, getSpanX(localPadding, maxResizeWidth,
+ dp.cellLayoutBorderSpacePx.x, cellSize.x));
}
if (maxResizeHeight > 0) {
- maxSpanY = Math.min(maxSpanY,
- getSpanY(localPadding, maxResizeHeight, dp.cellLayoutBorderSpacingPx,
- cellSize.y));
+ maxSpanY = Math.min(maxSpanY, getSpanY(localPadding, maxResizeHeight,
+ dp.cellLayoutBorderSpacePx.y, cellSize.y));
}
}
spanX = Math.max(spanX,
- getSpanX(localPadding, minWidth, dp.cellLayoutBorderSpacingPx, cellSize.x));
+ getSpanX(localPadding, minWidth, dp.cellLayoutBorderSpacePx.x,
+ cellSize.x));
spanY = Math.max(spanY,
- getSpanY(localPadding, minHeight, dp.cellLayoutBorderSpacingPx, cellSize.y));
+ getSpanY(localPadding, minHeight, dp.cellLayoutBorderSpacePx.y,
+ cellSize.y));
}
if (ATLEAST_S) {
diff --git a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
index b6bb6aa..553ba13 100644
--- a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
@@ -17,7 +17,7 @@
package com.android.launcher3.widget;
import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon;
-import static com.android.launcher3.model.data.PackageItemInfo.CONVERSATIONS;
+import static com.android.launcher3.widget.WidgetSections.getWidgetSections;
import android.content.Context;
import android.graphics.Canvas;
@@ -89,8 +89,8 @@
setOnClickListener(ItemClickHandler.INSTANCE);
if (info.pendingItemInfo == null) {
- info.pendingItemInfo = new PackageItemInfo(info.providerName.getPackageName());
- info.pendingItemInfo.user = info.user;
+ info.pendingItemInfo = new PackageItemInfo(info.providerName.getPackageName(),
+ info.user);
cache.updateIconInBackground(this, info.pendingItemInfo);
} else {
reapplyItemInfo(info.pendingItemInfo);
@@ -338,10 +338,11 @@
*/
@Nullable
private Drawable getWidgetCategoryIcon() {
- switch (mInfo.pendingItemInfo.category) {
- case CONVERSATIONS:
- return getContext().getDrawable(R.drawable.ic_conversations_widget_category);
+ if (mInfo.pendingItemInfo.widgetCategory == WidgetSections.NO_CATEGORY) {
+ return null;
}
- return null;
+ Context context = getContext();
+ return context.getDrawable(getWidgetSections(context).get(
+ mInfo.pendingItemInfo.widgetCategory).mSectionDrawable);
}
}
diff --git a/src/com/android/launcher3/widget/WidgetSections.java b/src/com/android/launcher3/widget/WidgetSections.java
new file mode 100644
index 0000000..c45b095
--- /dev/null
+++ b/src/com/android/launcher3/widget/WidgetSections.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.launcher3.widget;
+
+import static android.content.res.Resources.ID_NULL;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.ArrayMap;
+import android.util.AttributeSet;
+import android.util.SparseArray;
+import android.util.Xml;
+
+import androidx.annotation.DrawableRes;
+import androidx.annotation.StringRes;
+
+import com.android.launcher3.R;
+import com.android.launcher3.util.IntSet;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.Map;
+
+/** A helper class to parse widget sections (categories) resource overlay. */
+public final class WidgetSections {
+ /** The package is not categorized in the widget tray. */
+ public static final int NO_CATEGORY = -1;
+
+ private static final String TAG_SECTION_NAME = "section";
+ private static final String TAG_WIDGET_NAME = "widget";
+
+ private static SparseArray<WidgetSection> sWidgetSections;
+ private static Map<ComponentName, IntSet> sWidgetsToCategories;
+
+ /** Returns a list of widget sections that are shown in the widget picker. */
+ public static synchronized SparseArray<WidgetSection> getWidgetSections(Context context) {
+ if (sWidgetSections != null) {
+ return sWidgetSections;
+ }
+ parseWidgetSectionsXml(context);
+ return sWidgetSections;
+ }
+
+ /** Returns a map which maps app widget providers to app widget categories. */
+ public static synchronized Map<ComponentName, IntSet> getWidgetsToCategory(
+ Context context) {
+ if (sWidgetsToCategories != null) {
+ return sWidgetsToCategories;
+ }
+ parseWidgetSectionsXml(context);
+ return sWidgetsToCategories;
+ }
+
+ private static synchronized void parseWidgetSectionsXml(Context context) {
+ SparseArray<WidgetSection> widgetSections = new SparseArray();
+ Map<ComponentName, IntSet> widgetsToCategories = new ArrayMap<>();
+ try (XmlResourceParser parser = context.getResources().getXml(R.xml.widget_sections)) {
+ final int depth = parser.getDepth();
+ int type;
+ while (((type = parser.next()) != XmlPullParser.END_TAG
+ || parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
+ if ((type == XmlPullParser.START_TAG)
+ && TAG_SECTION_NAME.equals(parser.getName())) {
+ AttributeSet sectionAttributes = Xml.asAttributeSet(parser);
+ WidgetSection section = new WidgetSection(context, sectionAttributes);
+ final int sectionDepth = parser.getDepth();
+ while (((type = parser.next()) != XmlPullParser.END_TAG
+ || parser.getDepth() > sectionDepth)
+ && type != XmlPullParser.END_DOCUMENT) {
+ if ((type == XmlPullParser.START_TAG)
+ && TAG_WIDGET_NAME.equals(parser.getName())) {
+ TypedArray a = context.obtainStyledAttributes(
+ Xml.asAttributeSet(parser), R.styleable.WidgetSections);
+ ComponentName provider = ComponentName.unflattenFromString(
+ a.getString(R.styleable.WidgetSections_provider));
+ boolean alsoKeepInApp = a.getBoolean(
+ R.styleable.WidgetSections_alsoKeepInApp,
+ /* defValue= */ false);
+ final IntSet categories;
+ if (widgetsToCategories.containsKey(provider)) {
+ categories = widgetsToCategories.get(provider);
+ } else {
+ categories = new IntSet();
+ widgetsToCategories.put(provider, categories);
+ }
+ if (alsoKeepInApp) {
+ categories.add(NO_CATEGORY);
+ }
+ categories.add(section.mCategory);
+ }
+ }
+ widgetSections.put(section.mCategory, section);
+ }
+ }
+ sWidgetSections = widgetSections;
+ sWidgetsToCategories = widgetsToCategories;
+ } catch (IOException | XmlPullParserException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** A data class which contains a widget section's information. */
+ public static final class WidgetSection {
+ public final int mCategory;
+ @StringRes
+ public final int mSectionTitle;
+ @DrawableRes
+ public final int mSectionDrawable;
+
+ public WidgetSection(Context context, AttributeSet attrs) {
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.WidgetSections);
+ mCategory = a.getInt(R.styleable.WidgetSections_category, NO_CATEGORY);
+ mSectionTitle = a.getResourceId(R.styleable.WidgetSections_sectionTitle, ID_NULL);
+ mSectionDrawable = a.getResourceId(R.styleable.WidgetSections_sectionDrawable, ID_NULL);
+ }
+ }
+}
diff --git a/src/com/android/launcher3/widget/model/WidgetListSpaceEntry.java b/src/com/android/launcher3/widget/model/WidgetListSpaceEntry.java
index e62425f..7f24905 100644
--- a/src/com/android/launcher3/widget/model/WidgetListSpaceEntry.java
+++ b/src/com/android/launcher3/widget/model/WidgetListSpaceEntry.java
@@ -16,6 +16,8 @@
package com.android.launcher3.widget.model;
+import android.os.Process;
+
import com.android.launcher3.model.data.PackageItemInfo;
import java.util.Collections;
@@ -26,7 +28,9 @@
public class WidgetListSpaceEntry extends WidgetsListBaseEntry {
public WidgetListSpaceEntry() {
- super(new PackageItemInfo(""), "", Collections.EMPTY_LIST);
+ super(new PackageItemInfo(/* packageName= */ "", Process.myUserHandle()),
+ /* titleSectionName= */ "",
+ Collections.EMPTY_LIST);
mPkgItem.title = "";
}
diff --git a/src/com/android/launcher3/widget/picker/OnHeaderClickListener.java b/src/com/android/launcher3/widget/picker/OnHeaderClickListener.java
index 7372751..35f11bd 100644
--- a/src/com/android/launcher3/widget/picker/OnHeaderClickListener.java
+++ b/src/com/android/launcher3/widget/picker/OnHeaderClickListener.java
@@ -24,5 +24,5 @@
/**
* Calls when a header is clicked to show / hide widgets for a package.
*/
- void onHeaderClicked(boolean showWidgets, PackageUserKey packageUserKey);
+ void onHeaderClicked(boolean showWidgets, PackageUserKey key);
}
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java
index d52134c..0e5a7d7 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java
@@ -98,7 +98,7 @@
private Predicate<WidgetsListBaseEntry> mHeaderAndSelectedContentFilter = entry ->
entry instanceof WidgetsListHeaderEntry
|| entry instanceof WidgetsListSearchHeaderEntry
- || new PackageUserKey(entry.mPkgItem.packageName, entry.mPkgItem.user)
+ || PackageUserKey.fromPackageItemInfo(entry.mPkgItem)
.equals(mWidgetsContentVisiblePackageUserKey);
@Nullable private Predicate<WidgetsListBaseEntry> mFilter = null;
@Nullable private RecyclerView mRecyclerView;
@@ -252,10 +252,11 @@
return entry instanceof WidgetsListBaseEntry.Header && matchesKey(entry, key);
}
- private static boolean matchesKey(
- @NonNull WidgetsListBaseEntry entry, @Nullable PackageUserKey key) {
+ private static boolean matchesKey(@NonNull WidgetsListBaseEntry entry,
+ @Nullable PackageUserKey key) {
if (key == null) return false;
return entry.mPkgItem.packageName.equals(key.mPackageName)
+ && entry.mPkgItem.widgetCategory == key.mWidgetCategory
&& entry.mPkgItem.user.equals(key.mUser);
}
@@ -434,11 +435,10 @@
.filter(entry -> entry instanceof WidgetsListHeaderEntry)
.map(entry -> entry.mPkgItem)
.collect(Collectors.toMap(
- entry -> new PackageUserKey(entry.packageName, entry.user),
+ entry -> PackageUserKey.fromPackageItemInfo(entry),
entry -> entry));
for (WidgetsListBaseEntry visibleEntry: mVisibleEntries) {
- PackageUserKey key = new PackageUserKey(visibleEntry.mPkgItem.packageName,
- visibleEntry.mPkgItem.user);
+ PackageUserKey key = PackageUserKey.fromPackageItemInfo(visibleEntry.mPkgItem);
PackageItemInfo packageItemInfo = packagesInfo.get(key);
if (packageItemInfo != null
&& !visibleEntry.mPkgItem.title.equals(packageItemInfo.title)) {
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
index ebd2d10..932e06d 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
@@ -15,6 +15,8 @@
*/
package com.android.launcher3.widget.picker;
+import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
+
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -41,6 +43,8 @@
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.util.PluralMessageFormat;
import com.android.launcher3.views.ActivityContext;
+import com.android.launcher3.widget.WidgetSections;
+import com.android.launcher3.widget.WidgetSections.WidgetSection;
import com.android.launcher3.widget.model.WidgetsListHeaderEntry;
import com.android.launcher3.widget.model.WidgetsListSearchHeaderEntry;
@@ -173,12 +177,12 @@
private void setIcon(PackageItemInfo info) {
Drawable icon;
- switch (info.category) {
- case PackageItemInfo.CONVERSATIONS:
- icon = getContext().getDrawable(R.drawable.ic_conversations_widget_category);
- break;
- default:
- icon = info.newIcon(getContext());
+ if (info.widgetCategory == NO_CATEGORY) {
+ icon = info.newIcon(getContext());
+ } else {
+ WidgetSection widgetSection = WidgetSections.getWidgetSections(getContext())
+ .get(info.widgetCategory);
+ icon = getContext().getDrawable(widgetSection.mSectionDrawable);
}
applyDrawables(icon);
mIconDrawable = icon;
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
index fadb637..c6a7285 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
@@ -62,9 +62,7 @@
(position & POSITION_LAST) != 0,
/* isExpanded= */ data.isWidgetListShown()));
widgetsListHeader.setOnExpandChangeListener(isExpanded ->
- mOnHeaderClickListener.onHeaderClicked(
- isExpanded,
- new PackageUserKey(data.mPkgItem.packageName, data.mPkgItem.user)
- ));
+ mOnHeaderClickListener.onHeaderClicked(isExpanded,
+ PackageUserKey.fromPackageItemInfo(data.mPkgItem)));
}
}
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
index bff43c1..2b27fc2 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
@@ -64,6 +64,6 @@
/* isExpanded= */ data.isWidgetListShown()));
widgetsListHeader.setOnExpandChangeListener(isExpanded ->
mOnHeaderClickListener.onHeaderClicked(isExpanded,
- new PackageUserKey(data.mPkgItem.packageName, data.mPkgItem.user)));
+ PackageUserKey.fromPackageItemInfo(data.mPkgItem)));
}
}
diff --git a/src/com/android/launcher3/widget/util/WidgetSizes.java b/src/com/android/launcher3/widget/util/WidgetSizes.java
index b211f4c..fb2d63b 100644
--- a/src/com/android/launcher3/widget/util/WidgetSizes.java
+++ b/src/com/android/launcher3/widget/util/WidgetSizes.java
@@ -114,8 +114,8 @@
private static Size getWidgetSizePx(DeviceProfile profile, int spanX, int spanY,
@Nullable Point recycledCellSize) {
- final int hBorderSpacing = (spanX - 1) * profile.cellLayoutBorderSpacingPx;
- final int vBorderSpacing = (spanY - 1) * profile.cellLayoutBorderSpacingPx;
+ final int hBorderSpacing = (spanX - 1) * profile.cellLayoutBorderSpacePx.x;
+ final int vBorderSpacing = (spanY - 1) * profile.cellLayoutBorderSpacePx.y;
if (recycledCellSize == null) {
recycledCellSize = new Point();
}
diff --git a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java
index 12e9e1e..702f343 100644
--- a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java
+++ b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java
@@ -4,7 +4,10 @@
import static android.appwidget.AppWidgetProviderInfo.WIDGET_FEATURE_HIDE_FROM_PICKER;
import static com.android.launcher3.pm.ShortcutConfigActivityInfo.queryList;
+import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
import android.appwidget.AppWidgetProviderInfo;
@@ -13,6 +16,7 @@
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.util.Log;
+import android.util.Pair;
import androidx.annotation.Nullable;
import androidx.collection.ArrayMap;
@@ -27,10 +31,12 @@
import com.android.launcher3.icons.IconCache;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.pm.ShortcutConfigActivityInfo;
+import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
import com.android.launcher3.widget.WidgetManagerHelper;
+import com.android.launcher3.widget.WidgetSections;
import com.android.launcher3.widget.model.WidgetsListBaseEntry;
import com.android.launcher3.widget.model.WidgetsListContentEntry;
import com.android.launcher3.widget.model.WidgetsListHeaderEntry;
@@ -40,12 +46,12 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.Predicate;
-import java.util.stream.Collectors;
/**
* Widgets data model that is used by the adapters of the widget views and controllers.
@@ -61,9 +67,6 @@
private static final String TAG = "WidgetsModel";
private static final boolean DEBUG = false;
- private static final ComponentName CONVERSATION_WIDGET = ComponentName.createRelative(
- "com.android.systemui", ".people.widget.PeopleSpaceWidgetProvider");
-
/* Map of widgets and shortcuts that are tracked per package. */
private final Map<PackageItemInfo, List<WidgetItem>> mWidgetsList = new HashMap<>();
@@ -168,16 +171,15 @@
mWidgetsList.clear();
} else {
// Otherwise, only clear the widgets and shortcuts for the changed package.
- mWidgetsList.remove(
- packageItemInfoCache.getOrCreate(new WidgetPackageOrCategoryKey(packageUser)));
+ mWidgetsList.remove(packageItemInfoCache.getOrCreate(packageUser));
}
// add and update.
mWidgetsList.putAll(rawWidgetsShortcuts.stream()
.filter(new WidgetValidityCheck(app))
- .collect(Collectors.groupingBy(item ->
- packageItemInfoCache.getOrCreate(getWidgetPackageOrCategoryKey(item))
- )));
+ .flatMap(widgetItem -> getPackageUserKeys(app.getContext(), widgetItem).stream()
+ .map(key -> new Pair<>(packageItemInfoCache.getOrCreate(key), widgetItem)))
+ .collect(groupingBy(pair -> pair.first, mapping(pair -> pair.second, toList()))));
// Update each package entry
IconCache iconCache = app.getIconCache();
@@ -209,9 +211,9 @@
}
public WidgetItem getWidgetProviderInfoByProviderName(
- ComponentName providerName) {
+ ComponentName providerName, UserHandle user) {
List<WidgetItem> widgetsList = mWidgetsList.get(
- new PackageItemInfo(providerName.getPackageName()));
+ new PackageItemInfo(providerName.getPackageName(), user));
if (widgetsList == null) {
return null;
}
@@ -225,18 +227,40 @@
}
/** Returns {@link PackageItemInfo} of a pending widget. */
- public static PackageItemInfo newPendingItemInfo(ComponentName provider) {
- if (CONVERSATION_WIDGET.equals(provider)) {
- return new PackageItemInfo(provider.getPackageName(), PackageItemInfo.CONVERSATIONS);
+ public static PackageItemInfo newPendingItemInfo(Context context, ComponentName provider,
+ UserHandle user) {
+ Map<ComponentName, IntSet> widgetsToCategories =
+ WidgetSections.getWidgetsToCategory(context);
+ if (widgetsToCategories.containsKey(provider)) {
+ Iterator<Integer> categoriesIterator = widgetsToCategories.get(provider).iterator();
+ int firstCategory = NO_CATEGORY;
+ while (categoriesIterator.hasNext() && firstCategory == NO_CATEGORY) {
+ firstCategory = categoriesIterator.next();
+ }
+ return new PackageItemInfo(provider.getPackageName(), firstCategory, user);
}
- return new PackageItemInfo(provider.getPackageName());
+ return new PackageItemInfo(provider.getPackageName(), user);
}
- private WidgetPackageOrCategoryKey getWidgetPackageOrCategoryKey(WidgetItem item) {
- if (CONVERSATION_WIDGET.equals(item.componentName)) {
- return new WidgetPackageOrCategoryKey(PackageItemInfo.CONVERSATIONS, item.user);
+ private List<PackageUserKey> getPackageUserKeys(Context context, WidgetItem item) {
+ Map<ComponentName, IntSet> widgetsToCategories =
+ WidgetSections.getWidgetsToCategory(context);
+ IntSet categories = widgetsToCategories.get(item.componentName);
+ if (categories == null || categories.isEmpty()) {
+ return Arrays.asList(
+ new PackageUserKey(item.componentName.getPackageName(), item.user));
}
- return new WidgetPackageOrCategoryKey(item.componentName.getPackageName(), item.user);
+ List<PackageUserKey> packageUserKeys = new ArrayList<>();
+ categories.forEach(category -> {
+ if (category == NO_CATEGORY) {
+ packageUserKeys.add(
+ new PackageUserKey(item.componentName.getPackageName(),
+ item.user));
+ } else {
+ packageUserKeys.add(new PackageUserKey(category, item.user));
+ }
+ });
+ return packageUserKeys;
}
private static class WidgetValidityCheck implements Predicate<WidgetItem> {
@@ -279,53 +303,13 @@
}
}
- /** A hash key for grouping widgets by package name or category. */
- private static class WidgetPackageOrCategoryKey {
- /**
- * The package name of the widget provider.
- *
- * <p>This shouldn't be empty if {@link #mCategory} has a value,
- * {@link PackageItemInfo#NO_CATEGORY}.
- */
- public final String mPackage;
- /** A widget category. */
- @PackageItemInfo.Category public final int mCategory;
- public final UserHandle mUser;
- private final int mHashCode;
-
- WidgetPackageOrCategoryKey(PackageUserKey key) {
- this(key.mPackageName, key.mUser);
- }
-
- WidgetPackageOrCategoryKey(String packageName, UserHandle user) {
- this(packageName, PackageItemInfo.NO_CATEGORY, user);
- }
-
- WidgetPackageOrCategoryKey(@PackageItemInfo.Category int category, UserHandle user) {
- this("", category, user);
- }
-
- private WidgetPackageOrCategoryKey(String packageName,
- @PackageItemInfo.Category int category, UserHandle user) {
- mPackage = packageName;
- mCategory = category;
- mUser = user;
- mHashCode = Arrays.hashCode(new Object[]{mPackage, mCategory, mUser});
- }
-
- @Override
- public int hashCode() {
- return mHashCode;
- }
- }
-
private static final class PackageItemInfoCache {
- private final Map<WidgetPackageOrCategoryKey, PackageItemInfo> mMap = new ArrayMap<>();
+ private final Map<PackageUserKey, PackageItemInfo> mMap = new ArrayMap<>();
- PackageItemInfo getOrCreate(WidgetPackageOrCategoryKey key) {
+ PackageItemInfo getOrCreate(PackageUserKey key) {
PackageItemInfo pInfo = mMap.get(key);
if (pInfo == null) {
- pInfo = new PackageItemInfo(key.mPackage, key.mCategory);
+ pInfo = new PackageItemInfo(key.mPackageName, key.mWidgetCategory, key.mUser);
pInfo.user = key.mUser;
mMap.put(key, pInfo);
}
diff --git a/tests/src/com/android/launcher3/util/PackageUserKeyTest.java b/tests/src/com/android/launcher3/util/PackageUserKeyTest.java
new file mode 100644
index 0000000..99490eb
--- /dev/null
+++ b/tests/src/com/android/launcher3/util/PackageUserKeyTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.launcher3.util;
+
+import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.UserHandle;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.launcher3.model.data.PackageItemInfo;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public final class PackageUserKeyTest {
+ @Rule
+ public ExpectedException exception = ExpectedException.none();
+
+ private static final String TEST_PACKAGE = "com.android.test.package";
+ private static final int CONVERSATIONS = 0;
+ private static final int WEATHER = 1;
+
+ @Test
+ public void fromPackageItemInfo_shouldCreateExpectedObject() {
+ PackageUserKey packageUserKey = PackageUserKey.fromPackageItemInfo(
+ new PackageItemInfo(TEST_PACKAGE, UserHandle.CURRENT));
+
+ assertThat(packageUserKey.mPackageName).isEqualTo(TEST_PACKAGE);
+ assertThat(packageUserKey.mWidgetCategory).isEqualTo(NO_CATEGORY);
+ assertThat(packageUserKey.mUser).isEqualTo(UserHandle.CURRENT);
+ }
+
+ @Test
+ public void constructor_packageNameAndUserHandle_shouldCreateExpectedObject() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+
+ assertThat(packageUserKey.mPackageName).isEqualTo(TEST_PACKAGE);
+ assertThat(packageUserKey.mWidgetCategory).isEqualTo(NO_CATEGORY);
+ assertThat(packageUserKey.mUser).isEqualTo(UserHandle.CURRENT);
+ }
+
+ @Test
+ public void constructor_widgetCategoryAndUserHandle_shouldCreateExpectedObject() {
+ PackageUserKey packageUserKey = new PackageUserKey(CONVERSATIONS, UserHandle.CURRENT);
+
+ assertThat(packageUserKey.mPackageName).isEqualTo("");
+ assertThat(packageUserKey.mWidgetCategory).isEqualTo(CONVERSATIONS);
+ assertThat(packageUserKey.mUser).isEqualTo(UserHandle.CURRENT);
+ }
+
+ @Test
+ public void equals_sameObject_shouldReturnTrue() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = packageUserKey;
+
+ assertThat(packageUserKey).isEqualTo(otherPackageUserKey);
+ }
+
+ @Test
+ public void equals_differentObjectSameContent_shouldReturnTrue() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+
+ assertThat(packageUserKey).isEqualTo(otherPackageUserKey);
+ }
+
+ @Test
+ public void equals_compareAgainstNull_shouldReturnFalse() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+
+ assertThat(packageUserKey).isNotEqualTo(null);
+ }
+
+ @Test
+ public void equals_differentPackage_shouldReturnFalse() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE + "1",
+ UserHandle.CURRENT);
+
+ assertThat(packageUserKey).isNotEqualTo(otherPackageUserKey);
+ }
+
+
+ @Test
+ public void equals_differentCategory_shouldReturnFalse() {
+ PackageUserKey packageUserKey = new PackageUserKey(WEATHER, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = new PackageUserKey(CONVERSATIONS, UserHandle.CURRENT);
+
+ assertThat(packageUserKey).isNotEqualTo(otherPackageUserKey);
+ }
+
+ @Test
+ public void equals_differentUser_shouldReturnFalse() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(1));
+ PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(2));
+
+ assertThat(packageUserKey).isNotEqualTo(otherPackageUserKey);
+ }
+
+ @Test
+ public void hashCode_sameObject_shouldBeTheSame() {
+ PackageUserKey packageUserKey = new PackageUserKey(WEATHER, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = packageUserKey;
+
+ assertThat(packageUserKey.hashCode()).isEqualTo(otherPackageUserKey.hashCode());
+ }
+
+ @Test
+ public void hashCode_differentObjectSameContent_shouldBeTheSame() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+
+ assertThat(packageUserKey.hashCode()).isEqualTo(otherPackageUserKey.hashCode());
+ }
+
+ @Test
+ public void hashCode_differentPackage_shouldBeDifferent() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE + "1",
+ UserHandle.CURRENT);
+
+ assertThat(packageUserKey.hashCode()).isNotEqualTo(otherPackageUserKey.hashCode());
+ }
+
+
+ @Test
+ public void hashCode_differentCategory_shouldBeDifferent() {
+ PackageUserKey packageUserKey = new PackageUserKey(WEATHER, UserHandle.CURRENT);
+ PackageUserKey otherPackageUserKey = new PackageUserKey(CONVERSATIONS, UserHandle.CURRENT);
+
+ assertThat(packageUserKey.hashCode()).isNotEqualTo(otherPackageUserKey.hashCode());
+ }
+
+ @Test
+ public void hashCode_differentUser_shouldBeDifferent() {
+ PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(1));
+ PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(2));
+
+ assertThat(packageUserKey.hashCode()).isNotEqualTo(otherPackageUserKey.hashCode());
+ }
+}
diff --git a/tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java b/tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java
index 24ae583..b534a41 100644
--- a/tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java
+++ b/tests/src/com/android/launcher3/widget/LauncherAppWidgetProviderInfoTest.java
@@ -46,6 +46,7 @@
@RunWith(AndroidJUnit4.class)
public final class LauncherAppWidgetProviderInfoTest {
+ private static final int SPACE_SIZE = 10;
private static final int CELL_SIZE = 50;
private static final int NUM_OF_COLS = 4;
private static final int NUM_OF_ROWS = 5;
@@ -159,7 +160,7 @@
AppWidgetHostView.getDefaultPaddingForWidget(mContext, null, padding);
int maxPadding = Math.max(Math.max(padding.left, padding.right),
Math.max(padding.top, padding.bottom));
- dp.cellLayoutBorderSpacingPx = maxPadding + 1;
+ dp.cellLayoutBorderSpacePx.x = dp.cellLayoutBorderSpacePx.y = maxPadding + 1;
Mockito.when(dp.shouldInsetWidgets()).thenReturn(true);
LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo();
@@ -182,7 +183,7 @@
AppWidgetHostView.getDefaultPaddingForWidget(mContext, null, padding);
int maxPadding = Math.max(Math.max(padding.left, padding.right),
Math.max(padding.top, padding.bottom));
- dp.cellLayoutBorderSpacingPx = maxPadding - 1;
+ dp.cellLayoutBorderSpacePx.x = dp.cellLayoutBorderSpacePx.y = maxPadding - 1;
Mockito.when(dp.shouldInsetWidgets()).thenReturn(false);
LauncherAppWidgetProviderInfo info = new LauncherAppWidgetProviderInfo();
info.minWidth = CELL_SIZE * 3;
@@ -262,6 +263,7 @@
return null;
}).when(profile).getCellSize(any(Point.class));
Mockito.when(profile.getCellSize()).thenReturn(new Point(CELL_SIZE, CELL_SIZE));
+ profile.cellLayoutBorderSpacePx = new Point(SPACE_SIZE, SPACE_SIZE);
Mockito.when(profile.shouldInsetWidgets()).thenReturn(true);
InvariantDeviceProfile idp = new InvariantDeviceProfile();
diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsDiffReporterTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsDiffReporterTest.java
index 6232938..b480a4c 100644
--- a/tests/src/com/android/launcher3/widget/picker/WidgetsDiffReporterTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/WidgetsDiffReporterTest.java
@@ -288,9 +288,8 @@
private PackageItemInfo createPackageItemInfo(String packageName, String appName,
UserHandle userHandle) {
- PackageItemInfo pInfo = new PackageItemInfo(packageName);
+ PackageItemInfo pInfo = new PackageItemInfo(packageName, userHandle);
pInfo.title = appName;
- pInfo.user = userHandle;
pInfo.bitmap = BitmapInfo.of(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8), 0);
return pInfo;
}
diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java
index 44d6964..4e0bdda 100644
--- a/tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java
@@ -215,14 +215,23 @@
@Test
public void setWidgetsOnSearch_expandedApp_shouldResetExpandedApp() {
// GIVEN a list of widgets entries:
- // [com.google.test0, com.google.test0 content,
- // com.google.test1, com.google.test1 content,
- // com.google.test2, com.google.test2 content]
- // The visible widgets entries: [com.google.test0, com.google.test1, com.google.test2].
- ArrayList<WidgetsListBaseEntry> allEntries = generateSampleMap(2);
+ // [Empty item
+ // com.google.test0,
+ // com.google.test0 content,
+ // com.google.test1,
+ // com.google.test1 content,
+ // com.google.test2,
+ // com.google.test2 content]
+ // The visible widgets entries:
+ // [Empty item,
+ // com.google.test0,
+ // com.google.test1,
+ // com.google.test2].
+ ArrayList<WidgetsListBaseEntry> allEntries = generateSampleMap(3);
mAdapter.setWidgetsOnSearch(allEntries);
// GIVEN com.google.test.1 header is expanded. The visible entries list becomes:
- // [com.google.test0, com.google.test1, com.google.test1 content, com.google.test2]
+ // [Empty item, com.google.test0, com.google.test1, com.google.test1 content,
+ // com.google.test2]
mAdapter.onHeaderClicked(/* showWidgets= */ true,
new PackageUserKey(TEST_PACKAGE_PLACEHOLDER + 1, mUserHandle));
Mockito.reset(mListener);
@@ -231,7 +240,7 @@
mAdapter.setWidgetsOnSearch(allEntries);
// THEN expanded app is reset and the visible entries list becomes:
- // [com.google.test0, com.google.test1, com.google.test2]
+ // [Empty item, com.google.test0, com.google.test1, com.google.test2]
verify(mListener).onItemRangeChanged(eq(2), eq(1), isNull());
verify(mListener).onItemRangeRemoved(/* positionStart= */ 3, /* itemCount= */ 1);
}
@@ -257,9 +266,8 @@
List<WidgetItem> widgetItems = generateWidgetItems(packageName, /* numOfWidgets= */ 1);
- PackageItemInfo pInfo = new PackageItemInfo(packageName);
+ PackageItemInfo pInfo = new PackageItemInfo(packageName, widgetItems.get(0).user);
pInfo.title = pInfo.packageName;
- pInfo.user = widgetItems.get(0).user;
pInfo.bitmap = BitmapInfo.of(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8), 0);
result.add(new WidgetsListHeaderEntry(pInfo, /* titleSectionName= */ "", widgetItems));
diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java
index 969c12a..211318c 100644
--- a/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java
@@ -30,6 +30,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.graphics.Bitmap;
+import android.os.UserHandle;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.TextView;
@@ -124,12 +125,12 @@
widgetsListHeader.callOnClick();
verify(mOnHeaderClickListener).onHeaderClicked(eq(true),
- eq(new PackageUserKey(entry.mPkgItem.packageName, entry.mPkgItem.user)));
+ eq(PackageUserKey.fromPackageItemInfo(entry.mPkgItem)));
}
private WidgetsListHeaderEntry generateSampleAppHeader(String appName, String packageName,
int numOfWidgets) {
- PackageItemInfo appInfo = new PackageItemInfo(packageName);
+ PackageItemInfo appInfo = new PackageItemInfo(packageName, UserHandle.CURRENT);
appInfo.title = appName;
appInfo.bitmap = BitmapInfo.of(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8), 0);
diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java
index 453f4fb..66c2f36 100644
--- a/tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java
@@ -30,6 +30,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.graphics.Bitmap;
+import android.os.UserHandle;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.TextView;
@@ -124,12 +125,12 @@
widgetsListHeader.callOnClick();
verify(mOnHeaderClickListener).onHeaderClicked(eq(true),
- eq(new PackageUserKey(entry.mPkgItem.packageName, entry.mPkgItem.user)));
+ eq(PackageUserKey.fromPackageItemInfo(entry.mPkgItem)));
}
private WidgetsListSearchHeaderEntry generateSampleSearchHeader(String appName,
String packageName, int numOfWidgets) {
- PackageItemInfo appInfo = new PackageItemInfo(packageName);
+ PackageItemInfo appInfo = new PackageItemInfo(packageName, UserHandle.CURRENT);
appInfo.title = appName;
appInfo.bitmap = BitmapInfo.of(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8), 0);
diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java
index 5816b77..7ec4d20 100644
--- a/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java
@@ -28,6 +28,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.graphics.Bitmap;
+import android.os.UserHandle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -125,7 +126,7 @@
private WidgetsListContentEntry generateSampleAppWithWidgets(String appName, String packageName,
int numOfWidgets) {
- PackageItemInfo appInfo = new PackageItemInfo(packageName);
+ PackageItemInfo appInfo = new PackageItemInfo(packageName, UserHandle.CURRENT);
appInfo.title = appName;
appInfo.bitmap = BitmapInfo.of(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8), 0);
diff --git a/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java b/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java
index 4b61b2c..d8f1f14 100644
--- a/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java
@@ -26,6 +26,7 @@
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
+import android.os.UserHandle;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -53,8 +54,10 @@
public final class WidgetsListContentEntryTest {
private static final String PACKAGE_NAME = "com.android.test";
private static final String PACKAGE_NAME_2 = "com.android.test2";
- private final PackageItemInfo mPackageItemInfo1 = new PackageItemInfo(PACKAGE_NAME);
- private final PackageItemInfo mPackageItemInfo2 = new PackageItemInfo(PACKAGE_NAME_2);
+ private final PackageItemInfo mPackageItemInfo1 = new PackageItemInfo(PACKAGE_NAME,
+ UserHandle.CURRENT);
+ private final PackageItemInfo mPackageItemInfo2 = new PackageItemInfo(PACKAGE_NAME_2,
+ UserHandle.CURRENT);
private final ComponentName mWidget1 = ComponentName.createRelative(PACKAGE_NAME, ".mWidget1");
private final ComponentName mWidget2 = ComponentName.createRelative(PACKAGE_NAME, ".mWidget2");
private final ComponentName mWidget3 = ComponentName.createRelative(PACKAGE_NAME, ".mWidget3");
diff --git a/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java b/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java
index c862d6b..d812ab0 100644
--- a/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java
+++ b/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java
@@ -189,9 +189,8 @@
private PackageItemInfo createPackageItemInfo(String packageName, String appName,
UserHandle userHandle) {
- PackageItemInfo pInfo = new PackageItemInfo(packageName);
+ PackageItemInfo pInfo = new PackageItemInfo(packageName, userHandle);
pInfo.title = appName;
- pInfo.user = userHandle;
pInfo.bitmap = BitmapInfo.of(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8), 0);
return pInfo;
}
diff --git a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
index 7137c00..20366aa 100644
--- a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
+++ b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
@@ -138,6 +138,10 @@
}
}
+ int getTaskCount() {
+ return getTasks().size();
+ }
+
/**
* Returns whether Overview has tasks.
*/
@@ -169,7 +173,7 @@
}
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
"want to assert overview actions view visibility")) {
- if (mLauncher.isTablet() && !isOverviewSnappedToFocusedTask()) {
+ if (mLauncher.isTablet() && !isOverviewSnappedToFocusedTaskForTablet()) {
mLauncher.waitUntilLauncherObjectGone("action_buttons");
} else {
mLauncher.waitForLauncherObject("action_buttons");
@@ -178,14 +182,10 @@
}
/**
- * Returns if focused task is currently snapped task in overview.
+ * Returns if focused task is currently snapped task in tablet grid overview.
*/
- private boolean isOverviewSnappedToFocusedTask() {
- if (!mLauncher.isTablet()) {
- // Focused task only exists in tablet's grid-overview
- return false;
- }
- UiObject2 focusedTask = getFocusedTask();
+ private boolean isOverviewSnappedToFocusedTaskForTablet() {
+ UiObject2 focusedTask = getFocusedTaskForTablet();
if (focusedTask == null) {
return false;
}
@@ -197,14 +197,14 @@
/**
* Returns Overview focused task if it exists.
*/
- private UiObject2 getFocusedTask() {
+ UiObject2 getFocusedTaskForTablet() {
final List<UiObject2> taskViews = getTasks();
if (taskViews.size() == 0) {
return null;
}
- int focusedTaskWidth = mLauncher.getFocusedTaskWidth();
+ int focusedTaskHeight = mLauncher.getFocusedTaskHeightForTablet();
for (UiObject2 task : taskViews) {
- if (task.getVisibleBounds().width() == focusedTaskWidth) {
+ if (task.getVisibleBounds().height() == focusedTaskHeight) {
return task;
}
}
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 3e73c12..55fb2c1 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -321,8 +321,8 @@
.getBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
- int getFocusedTaskWidth() {
- return getTestInfo(TestProtocol.REQUEST_GET_FOCUSED_TASK_WIDTH_FOR_TABLET).getInt(
+ int getFocusedTaskHeightForTablet() {
+ return getTestInfo(TestProtocol.REQUEST_GET_FOCUSED_TASK_HEIGHT_FOR_TABLET).getInt(
TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
@@ -1464,11 +1464,6 @@
getTestInfo(TestProtocol.REQUEST_ENABLE_DEBUG_TRACING);
}
- boolean overviewShareEnabled() {
- return getTestInfo(TestProtocol.REQUEST_OVERVIEW_SHARE_ENABLED).getBoolean(
- TestProtocol.TEST_INFO_RESPONSE_FIELD);
- }
-
private void disableSensorRotation() {
getTestInfo(TestProtocol.REQUEST_MOCK_SENSOR_ROTATION);
}
diff --git a/tests/tapl/com/android/launcher3/tapl/OverviewActions.java b/tests/tapl/com/android/launcher3/tapl/OverviewActions.java
index aa4cc4c..c8c06e4 100644
--- a/tests/tapl/com/android/launcher3/tapl/OverviewActions.java
+++ b/tests/tapl/com/android/launcher3/tapl/OverviewActions.java
@@ -66,35 +66,6 @@
}
/**
- * Click share button, then drags sharesheet down to remove it.
- *
- * Share is currently hidden behind flag, test is kept in case share becomes a default feature.
- * If share is completely removed then remove this test as well.
- */
- @NonNull
- public Overview clickAndDismissShare() {
- if (mLauncher.overviewShareEnabled()) {
- try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
- LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
- "want to click share button and dismiss sharesheet")) {
- UiObject2 share = mLauncher.waitForObjectInContainer(mOverviewActions,
- "action_share");
- mLauncher.clickLauncherObject(share);
- try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
- "clicked share button")) {
- mLauncher.waitForAndroidObject("contentPanel");
- mLauncher.getDevice().pressBack();
- try (LauncherInstrumentation.Closable c2 = mLauncher.addContextLayer(
- "dismissed sharesheet")) {
- return new Overview(mLauncher);
- }
- }
- }
- }
- return new Overview(mLauncher);
- }
-
- /**
* Click select button
*
* @return The select mode buttons that are now shown instead of action buttons.
diff --git a/tests/tapl/com/android/launcher3/tapl/OverviewTask.java b/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
index 71c0abb..9419839 100644
--- a/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
+++ b/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
@@ -47,29 +47,53 @@
mOverview.verifyActiveContainer();
}
+ private int getVisibleHeight() {
+ return mTask.getVisibleBounds().height();
+ }
+
/**
- * Swipes the task up.
+ * Dismisses the task by swiping up.
*/
public void dismiss() {
try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
- "want to dismiss a task")) {
+ "want to dismiss an overview task")) {
verifyActiveContainer();
- // Dismiss the task via flinging it up.
- final Rect taskBounds = mLauncher.getVisibleBounds(mTask);
- final int centerX = taskBounds.centerX();
- final int centerY = taskBounds.centerY();
- mLauncher.executeAndWaitForLauncherEvent(
- () -> mLauncher.linearGesture(centerX, centerY, centerX, 0, 10, false,
- LauncherInstrumentation.GestureScope.INSIDE),
- event -> TestProtocol.DISMISS_ANIMATION_ENDS_MESSAGE.equals(
- event.getClassName()),
- () -> "Didn't receive a dismiss animation ends message: " + centerX + ", "
- + centerY,
- "swiping to dismiss");
+ int taskCountBeforeDismiss = mOverview.getTaskCount();
+ mLauncher.assertNotEquals("Unable to find a task", 0, taskCountBeforeDismiss);
+ if (taskCountBeforeDismiss == 1) {
+ dismissBySwipingUp();
+ return;
+ }
+
+ boolean taskWasFocused = mLauncher.isTablet() && getVisibleHeight() == mLauncher
+ .getFocusedTaskHeightForTablet();
+
+ dismissBySwipingUp();
+
+ try (LauncherInstrumentation.Closable c2 = mLauncher.addContextLayer("dismissed")) {
+ if (taskWasFocused) {
+ mLauncher.assertNotNull("No task became focused",
+ mOverview.getFocusedTaskForTablet());
+ }
+ }
}
}
+ private void dismissBySwipingUp() {
+ verifyActiveContainer();
+ // Dismiss the task via flinging it up.
+ final Rect taskBounds = mLauncher.getVisibleBounds(mTask);
+ final int centerX = taskBounds.centerX();
+ final int centerY = taskBounds.centerY();
+ mLauncher.executeAndWaitForLauncherEvent(
+ () -> mLauncher.linearGesture(centerX, centerY, centerX, 0, 10, false,
+ LauncherInstrumentation.GestureScope.INSIDE),
+ event -> TestProtocol.DISMISS_ANIMATION_ENDS_MESSAGE.equals(event.getClassName()),
+ () -> "Didn't receive a dismiss animation ends message: " + centerX + ", "
+ + centerY, "swiping to dismiss");
+ }
+
/**
* Clicks at the task.
*/