Merge "Add debug message to indicate why shortcut has been deleted. b/62088762" into ub-launcher3-dorval-polish
diff --git a/Android.mk b/Android.mk
index 6cb40c5..c8a53d2 100644
--- a/Android.mk
+++ b/Android.mk
@@ -26,7 +26,8 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-v4 \
android-support-v7-recyclerview \
- android-support-v7-palette
+ android-support-v7-palette \
+ android-support-dynamic-animation
LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index 3a60a98..dd14466 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -85,6 +85,11 @@
android:process=":wallpaper_chooser">
</service>
+ <service
+ android:name="com.android.launcher3.compat.WallpaperManagerCompatVL$ColorExtractionService"
+ android:exported="false"
+ android:process=":wallpaper_chooser" />
+
<service android:name="com.android.launcher3.notification.NotificationListener"
android:enabled="@bool/notification_badging_enabled"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
diff --git a/proguard.flags b/proguard.flags
index 2ad9cac..51abcca 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -98,3 +98,7 @@
-keep interface com.android.launcher3.userevent.nano.LauncherLogProto.** {
*;
}
+
+-keep interface com.android.launcher3.model.nano.LauncherDumpProto.** {
+ *;
+}
diff --git a/protos/launcher_log.proto b/protos/launcher_log.proto
index 909a429..93e09ae 100644
--- a/protos/launcher_log.proto
+++ b/protos/launcher_log.proto
@@ -156,4 +156,5 @@
optional int64 elapsed_session_millis = 6;
optional bool is_in_multi_window_mode = 7;
+ optional bool is_in_landscape_mode = 8;
}
diff --git a/res/drawable-v24/ic_info_shadow.xml b/res/drawable-v24/ic_info_shadow.xml
index 9bd7e16..1fe2c46 100644
--- a/res/drawable-v24/ic_info_shadow.xml
+++ b/res/drawable-v24/ic_info_shadow.xml
@@ -15,4 +15,5 @@
-->
<com.android.launcher3.graphics.ShadowDrawable
xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_info_no_shadow" />
+ android:src="@drawable/ic_info_no_shadow"
+ android:elevation="@dimen/drop_target_shadow_elevation" />
diff --git a/res/drawable-v24/ic_remove_shadow.xml b/res/drawable-v24/ic_remove_shadow.xml
index 16a630e..48abc10 100644
--- a/res/drawable-v24/ic_remove_shadow.xml
+++ b/res/drawable-v24/ic_remove_shadow.xml
@@ -15,4 +15,5 @@
-->
<com.android.launcher3.graphics.ShadowDrawable
xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_remove_no_shadow" />
+ android:src="@drawable/ic_remove_no_shadow"
+ android:elevation="@dimen/drop_target_shadow_elevation" />
diff --git a/res/drawable-v24/ic_uninstall_shadow.xml b/res/drawable-v24/ic_uninstall_shadow.xml
index 2532157..b441b0e 100644
--- a/res/drawable-v24/ic_uninstall_shadow.xml
+++ b/res/drawable-v24/ic_uninstall_shadow.xml
@@ -15,4 +15,5 @@
-->
<com.android.launcher3.graphics.ShadowDrawable
xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_uninstall_no_shadow" />
+ android:src="@drawable/ic_uninstall_no_shadow"
+ android:elevation="@dimen/drop_target_shadow_elevation" />
diff --git a/res/drawable/ic_widget.xml b/res/drawable/ic_widget.xml
index 6c1469d..3e7bd7b 100644
--- a/res/drawable/ic_widget.xml
+++ b/res/drawable/ic_widget.xml
@@ -19,6 +19,6 @@
android:viewportWidth="48.0"
android:viewportHeight="48.0">
<path
- android:fillColor="?android:attr/textColorPrimary"
+ android:fillColor="#FFFFFFFF"
android:pathData="M26 26v16h16V26H26zM6 42h16V26H6v16zM6 6v16h16V6H6zm27.31-2.63L22 14.69 33.31 26l11.31-11.31L33.31 3.37z"/>
</vector>
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index 565728c..1e82f22 100644
--- a/res/layout-land/launcher.xml
+++ b/res/layout-land/launcher.xml
@@ -32,8 +32,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <include layout="@layout/gradient_scrim" />
-
<!-- The workspace contains 5 screens of cells -->
<!-- DO NOT CHANGE THE ID -->
<com.android.launcher3.Workspace
@@ -44,6 +42,8 @@
android:layout_gravity="center"
launcher:pageIndicator="@id/page_indicator" />
+ <include layout="@layout/gradient_scrim" />
+
<!-- DO NOT CHANGE THE ID -->
<include layout="@layout/hotseat"
android:id="@+id/hotseat"
diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml
index eccb824..c15e53d 100644
--- a/res/layout-port/launcher.xml
+++ b/res/layout-port/launcher.xml
@@ -33,8 +33,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <include layout="@layout/gradient_scrim" />
-
<!-- The workspace contains 5 screens of cells -->
<!-- DO NOT CHANGE THE ID -->
<com.android.launcher3.Workspace
@@ -46,6 +44,8 @@
launcher:pageIndicator="@+id/page_indicator">
</com.android.launcher3.Workspace>
+ <include layout="@layout/gradient_scrim" />
+
<!-- DO NOT CHANGE THE ID -->
<include layout="@layout/hotseat"
android:id="@+id/hotseat"
diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml
index 7fad517..c516c46 100644
--- a/res/layout-sw720dp/launcher.xml
+++ b/res/layout-sw720dp/launcher.xml
@@ -32,8 +32,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- <include layout="@layout/gradient_scrim" />
-
<!-- The workspace contains 5 screens of cells -->
<!-- DO NOT CHANGE THE ID -->
<com.android.launcher3.Workspace
@@ -45,6 +43,8 @@
launcher:pageIndicator="@id/page_indicator">
</com.android.launcher3.Workspace>
+ <include layout="@layout/gradient_scrim" />
+
<!-- DO NOT CHANGE THE ID -->
<include layout="@layout/hotseat"
android:id="@+id/hotseat"
diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml
index f3539dc..09b9655 100644
--- a/res/layout/all_apps.xml
+++ b/res/layout/all_apps.xml
@@ -51,6 +51,7 @@
android:layout_height="match_parent"
android:layout_gravity="center_horizontal|top"
android:clipToPadding="false"
+ android:overScrollMode="never"
android:descendantFocusability="afterDescendants"
android:focusable="true"
android:paddingStart="@dimen/container_fastscroll_thumb_max_width"
diff --git a/res/layout/all_apps_discovery_item.xml b/res/layout/all_apps_discovery_item.xml
index 1a7eaa7..fb1755c 100644
--- a/res/layout/all_apps_discovery_item.xml
+++ b/res/layout/all_apps_discovery_item.xml
@@ -25,7 +25,9 @@
android:layout_width="56dp"
android:layout_height="56dp"
android:padding="8dp"
- android:scaleType="fitCenter"/>
+ android:scaleType="fitCenter"
+ android:focusable="false"
+ android:importantForAccessibility="no"/>
<LinearLayout
android:layout_width="match_parent"
@@ -51,11 +53,12 @@
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:textSize="14sp"
- android:layout_gravity="center_vertical"/>
+ android:layout_gravity="center_vertical"
+ android:includeFontPadding="false"/>
<com.android.launcher3.discovery.RatingView
android:id="@+id/rating_view"
- android:layout_width="80dp"
+ android:layout_width="70dp"
android:layout_height="16dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
diff --git a/res/layout/all_apps_discovery_loading_divider.xml b/res/layout/all_apps_discovery_loading_divider.xml
index c7b5ad2..1ad5521 100644
--- a/res/layout/all_apps_discovery_loading_divider.xml
+++ b/res/layout/all_apps_discovery_loading_divider.xml
@@ -15,7 +15,7 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="20dp"
+ android:layout_height="6dp"
android:paddingLeft="@dimen/container_fastscroll_thumb_max_width"
android:paddingRight="@dimen/container_fastscroll_thumb_max_width">
@@ -34,7 +34,7 @@
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@drawable/all_apps_divider"
- android:layout_gravity="center"
+ android:layout_gravity="bottom"
android:visibility="invisible"/>
</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/gradient_scrim.xml b/res/layout/gradient_scrim.xml
index 02c39eb..c40c5fc 100644
--- a/res/layout/gradient_scrim.xml
+++ b/res/layout/gradient_scrim.xml
@@ -15,7 +15,7 @@
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
- <com.android.launcher3.graphics.RadialGradientView
+ <com.android.launcher3.graphics.GradientView
android:id="@+id/gradient_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
diff --git a/res/layout/system_shortcut.xml b/res/layout/system_shortcut.xml
index 0952703..6f702f6 100644
--- a/res/layout/system_shortcut.xml
+++ b/res/layout/system_shortcut.xml
@@ -33,7 +33,8 @@
android:textColor="?android:attr/textColorPrimary"
android:fontFamily="sans-serif"
launcher:iconDisplay="shortcut_popup"
- launcher:layoutHorizontal="true" />
+ launcher:layoutHorizontal="true"
+ android:focusable="false" />
<View
android:id="@+id/icon"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index cfc2787..fda7db1 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Vouer: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Legstukke"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Muurpapiere"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Instellings"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home-instellings"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Gedeaktiveer deur jou administrateur"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Oorsig"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Laat toe dat tuisskerm gedraai word"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Wanneer foon gedraai word"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Huidige vertooninstelling laat nie rotasie toe nie"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikoon-kentekentoekenning"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Aan vir alle programme"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Af vir alle programme"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Voeg ikoon by tuisskerm"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Vir nuwe programme"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Gebruik stelselverstek"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Legstukgrootte is verander na breedte <xliff:g id="NUMBER_0">%1$s</xliff:g> hoogte <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Kortpaaie"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> kortpaaie vir <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> kortpaaie en <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> kennisgewings vir <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Maak toe"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Kennisgewing is toegemaak"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 3ae9666..ba39963 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"አቃፊ፦ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ፍርግሞች"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"የግድግዳ ወረቀቶች"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ቅንብሮች"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"የመነሻ ቅንብሮች"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"በእርስዎ አስተዳዳሪ የተሰናከለ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"አጠቃላይ ዕይታ"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"የመነሻ ማያ ገጽ ማሽከርከርን ይፍቀዱ"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ስልኩ ሲዞር"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"የአሁኑ የማሳያ ቅንብር ማሽከርከርን አይፈቅድም"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"የአዶ ባጅ"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"ለሁሉም መተግበሪያዎች በርቷል"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"ለሁሉም መተግበሪያዎች ጠፍጧል"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"አዶ ወደ የመነሻ ማያ ገጽ አክል"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ለአዲስ መተግበሪያዎች"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"የሥርዓቱን ነባሪ ተጠቀም"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"የመግብር መጠን ወደ ስፋት <xliff:g id="NUMBER_0">%1$s</xliff:g> ቁመት <xliff:g id="NUMBER_1">%2$s</xliff:g> ተለውጧል"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"አቋራጮች"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> የ<xliff:g id="APP_NAME">%2$s</xliff:g> አቋራጮች"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> አቋራጮች እና <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ማሳወቂያዎች ለ<xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"አሰናብት"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"ማሳወቂያ ተሰናብቷል"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 9c2167a..2852376 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"المجلد: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"الأدوات"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"الخلفيات"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"الإعدادات"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"إعدادات الصفحة الرئيسية"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"عطَّل المشرف هذه الميزة"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"نظرة عامة"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"السماح بتدوير الشاشة الرئيسية"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"عند تدوير الهاتف"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"لا يسمح إعداد العرض الحالي بالتدوير"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"وضع شارات على رموز التطبيقات"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"تشغيل لجميع التطبيقات"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"إيقاف لجميع التطبيقات"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"إضافة رمز إلى الشاشة الرئيسية"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"للتطبيقات الجديدة"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"استخدام الإعداد الافتراضي للنظام"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"تم تغيير حجم الأداة إلى العرض <xliff:g id="NUMBER_0">%1$s</xliff:g> والارتفاع <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"الاختصارات"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> اختصار لتطبيق <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"هناك <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> اختصار و<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> إشعار عن <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"تجاهل"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"تم تجاهل الإشعار"</string>
</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 5cbe408..6b99788 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Qovluq: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Vidcet"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Divar kağızları"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Ayarlar"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home ayarları"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Admininiz tərəfindən deaktiv edilib"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"İcmal"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Əsas ekranın firlanmağına icazə verin"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefon çevrilən zaman"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Cari Ekran ayarı fırlatmağa icazə vermir"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"İkona nişanı"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Bütün tətbiqlər üçün aktivdir"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Bütün tətbiqlər üçün deaktivdir"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Əsas ekrana ikona əlavə edin"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Yeni tətbiqlər üçün"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Sistem defoltu istifadə edin"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Vidcetin eni <xliff:g id="NUMBER_0">%1$s</xliff:g> hündürlüyü <xliff:g id="NUMBER_1">%2$s</xliff:g> kimi ölçüləndirildi"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Qısa yollar"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> üçün <xliff:g id="APP_NAME">%2$s</xliff:g> qısa yolu"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> üçün <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> qısayol və <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> bildiriş"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Rədd edin"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Bildiriş rədd edildi"</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 1a9ad2a..d96bd62 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Direktorijum: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Vidžeti"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Pozadine"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Podešavanja"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Podešavanja početnog ekrana"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administrator je onemogućio"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Pregled"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Dozvoli rotaciju početnog ekrana"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kada se telefon rotira"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Aktuelno podešavanje prikaza ne dozvoljava rotaciju"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Dodavanje znački na ikone"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Uključeno za sve aplikacije"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Isključeno za sve aplikacije"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Dodaj ikonu na početni ekran"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Za nove aplikacije"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Koristi podrazumevano sistemsko podešavanje"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Veličina vidžeta je promenjena na širinu <xliff:g id="NUMBER_0">%1$s</xliff:g> i visinu <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Prečice"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> prečice(a) za <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Prečice (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) i obaveštenja (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) za <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Odbaci"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Obaveštenje je odbačeno"</string>
</resources>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index b820f59..8ee1663 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Папка: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Віджэты"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Шпалеры"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Налады"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Налады галоўнага экрана"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Адключаная адміністратарам"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Агляд"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Дазволіць паварот галоўнага экрана"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Пры павароце тэлефона"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Бягучая налада дысплэя не прадугледжвае паварот"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Паметкі на значку"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Уключана для ўсіх праграм"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Адключана для ўсіх праграм"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Дадаць значок на Галоўны экран"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Для новых праграм"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Выкарыстоўваць стандартныя формы"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Памеры віджэта зменены на: шырыня <xliff:g id="NUMBER_0">%1$s</xliff:g>, вышыня <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Ярлыкі"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Ярлыкі (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) для <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Ярлыкі (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) і апавяшчэнні (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) для <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Адхіліць"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Апавяшчэнне адхілена"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 8dc1e10..61de76f 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Папка: „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Приспособления"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Тапети"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Настройки"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Настройки за Google Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Деактивирано от администратора ви"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Общ преглед"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Разрешаване на завъртането на началния екран"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"При завъртане на телефона"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Текущата настройка на екрана не разрешава завъртане"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Означаване със значка на иконите"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Включено за всички приложения"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Изключено за всички приложения"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Добавяне на икона към началния екран"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"За нови приложения"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Използване на стандартната системна настройка"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Приспособлението е преоразмерено към ширина <xliff:g id="NUMBER_0">%1$s</xliff:g> и височина <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Преки пътища"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> преки пътища за <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> преки пътища и <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> известия за <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Отхвърляне"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Известието е отхвърлено"</string>
</resources>
diff --git a/res/values-bn-rBD/config.xml b/res/values-bn-rBD/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-bn-rBD/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 065019a..d7bd83b 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ফোল্ডার: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"উইজেটগুলি"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"ওয়ালপেপারগুলি"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"সেটিংস"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"হোম এর সেটিংস"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"আপনার প্রশাসক দ্বারা অক্ষম করা হয়েছে"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"এক নজরে"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"হোমস্ক্রীন ঘোরানোর অনুমতি দিন"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"যখন ফোনটি ঘোরানো হয়"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"বর্তমান প্রদর্শনের সেটিংস ঘোরানোর মঞ্জুরি দেয় না"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"আইকনে ব্যাজ দেওয়া"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"সমস্ত অ্যাপের জন্য চালু আছে"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"সমস্ত অ্যাপের জন্য বন্ধ আছে"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"হোম স্ক্রিনে আইকন যোগ করুন"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"নতুন অ্যাপ্লিকেশানগুলির জন্যে"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"আইকনের আকৃতি পরিবর্তন করুন"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"পরিবর্তন করবেন না"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"সিস্টেমের ডিফল্ট মান ব্যবহার করুন"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"আইকনের আকৃতি পরিবর্তন করা হচ্ছে"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"অজানা"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"সরান"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"উইজেটের আকার প্রস্থ <xliff:g id="NUMBER_0">%1$s</xliff:g> উচ্চতা <xliff:g id="NUMBER_1">%2$s</xliff:g> তে পরিবর্তন করা হয়েছে"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"শর্টকাট"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> এর <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>টি শর্টকার্ট"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> এর জন্য <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>টি শর্টকাট এবং <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>টি বিজ্ঞপ্তি"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"খারিজ করুন"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"বিজ্ঞপ্তি খারিজ করা হয়েছে"</string>
</resources>
diff --git a/res/values-bn/config.xml b/res/values-bn/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-bn/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index 63aaaba..c148413 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -57,30 +57,40 @@
<string name="gadget_error_text" msgid="6081085226050792095">"Problem pri učitavanju dodatka"</string>
<string name="gadget_setup_text" msgid="8274003207686040488">"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="6617836969016293992">"Neimenovana fascikla"</string>
+ <string name="folder_hint_text" msgid="6617836969016293992">"Neimenovani folder"</string>
<string name="disabled_app_label" msgid="6673129024321402780">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogućena"</string>
<string name="default_scroll_format" msgid="7475544710230993317">"Strana %1$d od %2$d"</string>
<string name="workspace_scroll_format" msgid="8458889198184077399">"Početni ekran %1$d od %2$d"</string>
<string name="workspace_new_page" msgid="257366611030256142">"Nova stranica početnog ekrana"</string>
- <string name="folder_opened" msgid="94695026776264709">"Fascikla je otvorena, (š) <xliff:g id="WIDTH">%1$d</xliff:g> (v) <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
+ <string name="folder_opened" msgid="94695026776264709">"Folder je otvoren, (š) <xliff:g id="WIDTH">%1$d</xliff:g> (v) <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
<string name="folder_tap_to_close" msgid="4625795376335528256">"Dodirnite da zatvorite folder"</string>
<string name="folder_tap_to_rename" msgid="4017685068016979677">"Dodirnite da sačuvate promjenu imena"</string>
- <string name="folder_closed" msgid="4100806530910930934">"Fascikla je zatvorena"</string>
- <string name="folder_renamed" msgid="1794088362165669656">"Ime fascikle je promijenjeno u <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="folder_name_format" msgid="6629239338071103179">"Fascikla: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="folder_closed" msgid="4100806530910930934">"Folder je zatvoren"</string>
+ <string name="folder_renamed" msgid="1794088362165669656">"Ime foldera je promijenjeno u <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Dodaci"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Pozadinske slike"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Postavke"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Postavke za Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Onemogućio vaš administrator"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Pregled"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Dozvoli rotiranje početnog ekrana"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kada se telefon zarotira"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Trenutne postavke ekrana ne dozvoljavaju rotiranje"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Označavanje ikona"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Uključeno za sve aplikacije"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Isključeno za sve aplikacije"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Dodajte ikonu na početni ekran"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Za nove aplikacije"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Koristite sistemski zadano"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Veličina vidžeta je promijenjena na širinu <xliff:g id="NUMBER_0">%1$s</xliff:g> visinu <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Prečice"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> prečica za aplikaciju <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Za aplikaciju <xliff:g id="APP_NAME">%3$s</xliff:g> broj prečica je <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>, a broj obavještenja je <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Odbaci"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Obavještenje je odbačeno"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index bfbd31e..245c760 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Carpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fons de pantalla"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Configuració"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Configuració de la pantalla d\'inici"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Desactivada per l\'administrador"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Visió general"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permet la rotació de la pantalla d\'inici"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"En girar el telèfon"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"La configuració actual de la pantalla no permet la rotació"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Icones encerclades"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activades per a totes les aplicacions"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desactivades per a totes les aplicacions"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Afegeix la icona a la pantalla d\'inici"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Per a les aplicacions noves"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Utilitza l\'opció predeterminada del sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"S\'ha canviat la mida del widget a l\'amplada <xliff:g id="NUMBER_0">%1$s</xliff:g> i l\'alçada <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Dreceres"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> dreceres per a l\'aplicació <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> dreceres i <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificacions per a <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignora"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"S\'ha ignorat la notificació"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 7c61023..556294b 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Složka: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgety"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Tapety"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Nastavení"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Nastavení plochy"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Zakázáno administrátorem"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Přehled"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Povolit otáčení plochy"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Při otočení telefonu"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Aktuální nastavení displeje neumožňuje otáčení"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Odznaky na ikonách"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Zapnuto pro všechny aplikace"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Vypnuto pro všechny aplikace"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Přidat ikonu na plochu"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Pro nové aplikace"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Použít výchozí nastavení systému"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Velikost widgetu upravena: šířka <xliff:g id="NUMBER_0">%1$s</xliff:g>, výška <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Zkratky"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Počet zkratek pro aplikaci <xliff:g id="APP_NAME">%2$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Zkratky (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) a oznámení (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) aplikace <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Zavřít"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Oznámení bylo zavřeno"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 65e5134..f811f11 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mappe: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Baggrunde"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Indstillinger"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Indstillinger for startskærmen"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Deaktiveret af din administrator"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Oversigt"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Tillad rotation af startskærmen"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Når telefonen roteres"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Den aktuelle indstilling for visning tillader ikke rotation"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonbadges"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Slået til for alle apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Slået fra for alle apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Føj ikon til startskærmen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"For nye apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Brug systemstandarden"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Størrelsen for widgetten er ændret til bredde <xliff:g id="NUMBER_0">%1$s</xliff:g> og højde <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Genveje"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> genveje til <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> genveje og <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> underretninger for <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Afvis"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Underretningen blev afvist"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 59ce70c..f25b46f 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Ordner: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Hintergründe"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Einstellungen"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Einstellungen für den Startbildschirm"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Von deinem Administrator deaktiviert"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Übersicht"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Drehung des Startbildschirms zulassen"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Bei Drehung des Smartphones"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Die aktuelle \"Display\"-Einstellung verhindert eine Drehung der Anzeige"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Logosymbole"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Für alle Apps aktiviert"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Für alle Apps deaktiviert"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Symbol zu Startbildschirm hinzufügen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Für neue Apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Systemstandardeinstellung verwenden"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Größe des Widgets zu Breite <xliff:g id="NUMBER_0">%1$s</xliff:g> und Höhe <xliff:g id="NUMBER_1">%2$s</xliff:g> geändert"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Verknüpfungen"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> Verknüpfungen für <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> Verknüpfungen und <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> Benachrichtigungen für <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Schließen"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Benachrichtigung geschlossen"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index d8da34b..a148c51 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Φάκελος: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Γραφικά στοιχεία"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Ταπετσαρίες"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Ρυθμίσεις"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Ρυθμίσεις Αρχικής σελίδας"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Απενεργοποιήθηκε από τον διαχειριστή σας"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Επισκόπηση"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Να επιτρέπεται η περιστροφή της αρχικής οθόνης"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Όταν το τηλέφωνο περιστρέφεται"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Η τρέχουσα ρύθμιση οθόνης δεν επιτρέπει την περιστροφή"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Σήματα εικονιδίων"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Ενεργοποιημένα για όλες τις εφαρμογές"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Απενεργοποιημένα για όλες τις εφαρμογές"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Προσθήκη εικονιδίου στην Αρχική οθόνη"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Για νέες εφαρμογές"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Χρήση προεπιλογής συστήματος"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Έγινε προσαρμογή του μεγέθους του γραφικού στοιχείου σε <xliff:g id="NUMBER_0">%1$s</xliff:g> πλάτος και <xliff:g id="NUMBER_1">%2$s</xliff:g> ύψος"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Συντομεύσεις"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> συντομεύσεις για <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> συντομεύσεις και <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ειδοποιήσεις για την εφαρμογή <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Παράβλεψη"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Η ειδοποίηση παραβλέφθηκε"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index ecfb0f5..504bd81 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Wallpapers"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Settings"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home settings"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disabled by your admin"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Overview"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Homescreen rotation"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"When phone is rotated"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Current display setting doesn\'t permit rotation"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Icon badging"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"On for all apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Off for all apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Add icon to Home screen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"For new apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Use system default"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget re-sized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Short cuts"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shortcuts for <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shortcuts and <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifications for <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notification dismissed"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index ecfb0f5..504bd81 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Wallpapers"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Settings"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home settings"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disabled by your admin"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Overview"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Homescreen rotation"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"When phone is rotated"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Current display setting doesn\'t permit rotation"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Icon badging"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"On for all apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Off for all apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Add icon to Home screen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"For new apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Use system default"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget re-sized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Short cuts"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shortcuts for <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shortcuts and <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifications for <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notification dismissed"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index ecfb0f5..504bd81 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Wallpapers"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Settings"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home settings"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disabled by your admin"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Overview"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Allow Homescreen rotation"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"When phone is rotated"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Current display setting doesn\'t permit rotation"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Icon badging"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"On for all apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Off for all apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Add icon to Home screen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"For new apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Use system default"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget re-sized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Short cuts"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shortcuts for <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shortcuts and <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifications for <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notification dismissed"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 4a57396..4999275 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Carpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fondos de pantalla"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Configuración"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Configuración de Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"El administrador inhabilitó esta función"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Recientes"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir la rotación de la pantalla principal"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Al girar el teléfono"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"La configuración actual no permite la rotación de la pantalla"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Insignias de íconos"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activada para todas las apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desactivada para todas las apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Agregar ícono a la pantalla principal"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para nuevas apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Usar el sistema predeterminado"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Se cambió la dimensión del widget a <xliff:g id="NUMBER_0">%1$s</xliff:g> de ancho y <xliff:g id="NUMBER_1">%2$s</xliff:g> de alto."</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Accesos directos"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> accesos directos para <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> accesos directos y <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificaciones de <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Descartar"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Se descartó la notificación"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3db1aa8..5e4f161 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Carpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fondos de pantalla"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Ajustes"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Ajustes de Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Inhabilitada por el administrador"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Visión general"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir rotación de la pantalla de inicio"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Al girar el teléfono"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"La configuración de pantalla actual no permite girar la pantalla"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Insignias de los iconos"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activadas para todas las aplicaciones"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desactivadas para todas las aplicaciones"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Añadir icono a la pantalla de inicio"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para nuevas aplicaciones"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Usar opción predeterminada del sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Se ha modificado el tamaño del widget a <xliff:g id="NUMBER_0">%1$s</xliff:g> de ancho y <xliff:g id="NUMBER_1">%2$s</xliff:g> de alto"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Accesos directos"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> accesos directos de <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> accesos directos y <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificaciones de <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorar"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notificación ignorada"</string>
</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 91a7333..51a3f7a 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Kaust: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Vidinad"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Taustapildid"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Seaded"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Avalehe seaded"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Keelas administraator"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Ülevaade"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Luba avaekraani pööramine"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kui telefoni pööratakse"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Praegune kuvaseade ei luba pööramist"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikoonimärgi lisamine"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Sisse lülitatud kõigi rakenduste jaoks"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Välja lülitatud kõigi rakenduste jaoks"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Lisa ikoon avaekraanile"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Uute rakenduste puhul"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Kasuta süsteemi vaikeseadet"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Vidina suurust muudeti. Laius: <xliff:g id="NUMBER_0">%1$s</xliff:g>. Kõrgus: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Otseteed"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> otseteed rakenduse <xliff:g id="APP_NAME">%2$s</xliff:g> jaoks"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> otseteed ja <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> märguannet rakendusele <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Loobu"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Märguandest loobuti"</string>
</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 1a4d809..063ce2b 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Karpeta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgetak"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Horma-paperak"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Ezarpenak"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Hasierako pantailaren ezarpenak"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administratzaileak desgaitu du"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Ikuspegi orokorra"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Baimendu hasierako pantaila biratzea"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefonoa biratzen denean"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Uneko pantaila-ezarpenak ez du onartzen ikuspegia biratzea"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonoen bereizgarriak"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Aktibatuta aplikazio guztietan"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desaktibatuta aplikazio guztietan"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Gehitu ikonoa hasierako pantailan"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Aplikazio berrietan"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Erabili sistemaren balio lehenetsiak"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Aldatu da widgetaren tamaina. Zabalera: <xliff:g id="NUMBER_0">%1$s</xliff:g>. Altuera: <xliff:g id="NUMBER_1">%2$s</xliff:g>."</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Lasterbideak"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> aplikazioaren <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> lasterbide"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> aplikazioaren <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> lasterbide eta <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> jakinarazpen"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Baztertu"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Baztertu egin da jakinarazpena"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 3a9a85a..f3b3a84 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"پوشه: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ابزارکها"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"کاغذدیواریها"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"تنظیمات"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"تنظیمات صفحه اصلی"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"توسط سرپرست سیستم غیرفعال شده است"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"نمای کلی"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"امکان دادن به چرخش صفحه اصلی"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"وقتی تلفن چرخانده میشود"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"تنظیم نمایشگر کنونی اجازه چرخش نمیدهد"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"برچسبگذاری نماد"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"برای همه برنامهها روشن است"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"برای همه برنامهها خاموش است"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"افزودن نماد به صفحه اصلی"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"برای برنامههای جدید"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"استفاده از پیشفرض سیستم"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"اندازه ابزارک به عرض <xliff:g id="NUMBER_0">%1$s</xliff:g> ارتفاع <xliff:g id="NUMBER_1">%2$s</xliff:g> تغییر کرد"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"میانبرها"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> میانبر برای <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> میانبر و <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> اعلان برای <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"رد کردن"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"اعلان رد شد"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6e4bc93..49d44f8 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Kansio: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgetit"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Taustakuvat"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Asetukset"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Kotiasetukset"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Järjestelmänvalvoja on poistanut toiminnon käytöstä."</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Yleiskatsaus"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Salli aloitusnäytön kiertäminen"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kun puhelinta kierretään"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Nykyiset näyttöasetukset eivät salli näytön kiertämistä."</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Kuvakemerkit"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Käytössä kaikissa sovelluksissa"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Pois käytöstä kaikissa sovelluksissa"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Lisää kuvake aloitusruutuun"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Uusille sovelluksille"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Käytä järjestelmän oletusarvoa"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widgetin kokoa muutettiin. Sen leveys on nyt <xliff:g id="NUMBER_0">%1$s</xliff:g> ja korkeus <xliff:g id="NUMBER_1">%2$s</xliff:g>."</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Pikakuvakkeet"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Sovelluksella <xliff:g id="APP_NAME">%2$s</xliff:g> on <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> pikakuvaketta."</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> pikakuvaketta ja <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ilmoitusta"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Hylkää"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Ilmoitus hylätty"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index a9f2947..0169e5d 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Dossier : <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fonds d\'écran"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Paramètres"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Paramètres d\'accueil"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Cette fonction est désactivée par votre administrateur"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Présentation"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Autoriser la rotation de l\'écran d\'accueil"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Lorsque vous faites pivoter le téléphone"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Le mode d\'affichage actuel ne permet pas le pivotement"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Insignes d\'icône"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activé pour toutes les applications"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Désactivé pour toutes les applications"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Ajouter l\'icône à l\'écran d\'accueil"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Pour les nouvelles applications"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Utiliser les valeurs système par défaut"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Le widget a été redimensionné (largeur : <xliff:g id="NUMBER_0">%1$s</xliff:g>, hauteur : <xliff:g id="NUMBER_1">%2$s</xliff:g>)"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Raccourcis"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> raccourcis pour <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> raccourcis et <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifications pour <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorer"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notification ignorée"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 2d7a38c..944a6cb 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Dossier \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fonds d\'écran"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Paramètres"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Paramètres du domicile"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Désactivé par votre administrateur"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Vue d\'ensemble"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Autoriser la rotation de l\'écran d\'accueil"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Lorsque vous faites pivoter le téléphone"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Le paramètre d\'affichage actuel n\'autorise pas la rotation."</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Identification des icônes"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activée pour toutes les applications"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Désactivée pour toutes les applications"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Ajouter l\'icône à l\'écran d\'accueil"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Pour les nouvelles applications"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Utiliser la valeur système par défaut"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Le widget a bien été redimensionné (largeur : <xliff:g id="NUMBER_0">%1$s</xliff:g>, hauteur : <xliff:g id="NUMBER_1">%2$s</xliff:g>)."</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Raccourcis"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> raccourcis pour <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> raccourcis et <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifications pour <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorer"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notification ignorée"</string>
</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index e8213b5..fb4489c 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Cartafol: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fondos de pantalla"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Configuración"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Configuración de inicio"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Función desactivada polo administrador"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Visión xeral"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir xirar a pantalla de inicio"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Ao xirar o teléfono"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"A configuración de visualización actual non permite xirar a pantalla"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Insignias de iconas"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activado para todas as aplicacións"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desactivado para todas as aplicacións"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Engadir icona á pantalla de inicio"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para novas aplicacións"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Usar valores predeterminados do sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Cambiouse o tamaño do widget polo ancho <xliff:g id="NUMBER_0">%1$s</xliff:g> e a altura <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Atallos"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> atallos para <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> atallos e <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificacións para a aplicación <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorar"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Ignorouse a notificación"</string>
</resources>
diff --git a/res/values-gu-rIN/config.xml b/res/values-gu-rIN/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-gu-rIN/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index aa4992d..9a316b2 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ફોલ્ડર: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"વિજેટ્સ"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"વૉલપેપર્સ"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"સેટિંગ્સ"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"હોમ સેટિંગ્સ"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરેલ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"વિહંગાવલોકન"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"હોમ સ્ક્રીનને ફેરવવાની મંજૂરી આપો"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"જ્યારે ફોન ફેરવવામાં આવે ત્યારે"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"વર્તમાન પ્રદર્શન સેટિંગ ફેરવવાની પરવાનગી આપતી નથી"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"આઇકનને બૅજ કરવું"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"બધી ઍપ્લિકેશનો માટે ચાલુ છે"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"બધી ઍપ્લિકેશનો માટે બંધ છે"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"હોમ સ્ક્રીન પર આઇકન ઉમેરો"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"નવી ઍપ્લિકેશનો માટે"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"આઇકનનો આકાર બદલો"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"બદલશો નહીં"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"સિસ્ટમ ડિફૉલ્ટનો ઉપયોગ કરો"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"આઇકનના આકારમાં કરેલ ફેરફારો લાગુ કરી રહ્યા છીએ"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"અજાણ્યો"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"દૂર કરો"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"વિજેટનો આકાર બદલીને <xliff:g id="NUMBER_0">%1$s</xliff:g> પહોળાઈ <xliff:g id="NUMBER_1">%2$s</xliff:g> ઊંચાઈ કર્યો"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"શૉર્ટકટ્સ"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> માટે <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> શૉર્ટકટ"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> માટે <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> શૉર્ટકટ અને <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> સૂચનાઓ"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"છોડી દો"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"સૂચના છોડી દીધી"</string>
</resources>
diff --git a/res/values-gu/config.xml b/res/values-gu/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-gu/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index ba03a92..db4a52e 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"फ़ोल्डर: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"शॉर्टकट"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"वॉलपेपर"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"सेटिंग"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"होम सेटिंग"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"आपके व्यवस्थापक द्वारा अक्षम"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"अवलोकन"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"होमस्क्रीन घुमाने की अनुमति दें"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"फ़ोन घुुमाए जाने पर"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"वर्तमान प्रदर्शन सेटिंग घुमाने की अनुमति नहीं देती"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"आइकन बैजिंग"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"सभी ऐप्लिकेशन के लिए चालू है"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"सभी ऐप्लिकेशन के लिए बंद है"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"होम स्क्रीन में आइकन जोड़ें"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"नए ऐप्लिकेशन के लिए"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"सिस्टम डिफ़ॉल्ट का उपयोग करें"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"विजेट का आकार बदलकर उसकी चौड़ाई <xliff:g id="NUMBER_0">%1$s</xliff:g> और ऊंचाई <xliff:g id="NUMBER_1">%2$s</xliff:g> कर दी गई"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"शॉर्टकट"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> के लिए <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> शॉर्टकट"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> के लिए <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> शॉर्टकट और <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> नोटिफ़िकेशन हैं"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"खारिज करें"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"नोटिफ़िकेशन को खारिज किया गया"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b6448f1..322fb3f 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mapa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgeti"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Pozadine"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Postavke"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Postavke Homea"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Onemogućio administrator"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Pregled"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Dopusti zakretanje početnog zaslona"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kada se telefon zakrene"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Trenutačna postavka zaslona ne dopušta zakretanje"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Dodavanje oznake na ikonu"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Uključeno za sve aplikacije"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Isključeno za sve aplikacije"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Dodaj ikonu na početni zaslon"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Za nove aplikacije"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Upotrijebi zadane postavke sustava"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Širina widgeta promijenjena je na <xliff:g id="NUMBER_0">%1$s</xliff:g>, a visina na <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Prečaci"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Prečaca za aplikaciju <xliff:g id="APP_NAME">%2$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Za aplikaciju <xliff:g id="APP_NAME">%3$s</xliff:g> ima prečaca (ukupno <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) i obavijesti (ukupno <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>)"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Odbaci"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Obavijest je odbačena"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 45a5054..938ed30 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mappa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Modulok"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Háttérképek"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Beállítások"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"A Home beállításai"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"A rendszergazda letiltotta"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Áttekintés"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"A kezdőképernyő elforgatásának engedélyezése"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"A telefon elforgatásakor"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"A jelenlegi kijelzőbeállítások nem teszik lehetővé az elforgatást"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonjelvények"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Bekapcsolva az összes alkalmazásnál"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Kikapcsolva az összes alkalmazásnál"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Ikon hozzáadása a kezdőképernyőhöz"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Új alkalmazásoknál"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Alapértelmezett érték használata"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Modul átméretezve <xliff:g id="NUMBER_0">%1$s</xliff:g> szélességre és <xliff:g id="NUMBER_1">%2$s</xliff:g> magasságra"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Gyorsparancsok"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> gyorsparancs a(z) <xliff:g id="APP_NAME">%2$s</xliff:g> számára"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> parancsikon és <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> értesítés a következő alkalmazásnál: <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Elvetés"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Értesítés elvetve"</string>
</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 7c39a3f..b00ed68 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Պանակ՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Վիջեթներ"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Պաստառներ"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Կարգավորումներ"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Գլխավոր էջի կարգավորումներ"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Անջատվել է ձեր ադմինիստրատորի կողմից"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Համատեսք"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Թույլ տալ հիմնական էկրանի պտտումը"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Հեռախոսը պտտելու դեպքում"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Ցուցադրման ընթացիկ կարգավորումներն արգելում են պտտումը"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Պատկերակի նշանակ"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Միացված է բոլոր հավելվածների համար"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Անջատված է բոլոր հավելվածների համար"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Ավելացնել պատկերակը Հիմնական էկրանին"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Նոր հավելվածների համար"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Օգտագործել համակարգի կանխադրված կարգավորումը"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Վիջեթի լայնությունը փոխվել է <xliff:g id="NUMBER_0">%1$s</xliff:g>-ի, իսկ բարձրությունը՝ <xliff:g id="NUMBER_1">%2$s</xliff:g>-ի"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Դյուրանցումներ"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> դյուրանցումներ <xliff:g id="APP_NAME">%2$s</xliff:g> հավելվածի համար"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> դյուրացում և <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ծանուցում <xliff:g id="APP_NAME">%3$s</xliff:g>-ի համար"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Անտեսել"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Ծանուցումը մերժված է"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4d26ab3..0c80fb7 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -45,7 +45,7 @@
<string name="all_apps_button_label" msgid="8130441508702294465">"Daftar aplikasi"</string>
<string name="all_apps_home_button_label" msgid="252062713717058851">"Layar Utama"</string>
<string name="remove_drop_target_label" msgid="7812859488053230776">"Hapus"</string>
- <string name="uninstall_drop_target_label" msgid="4722034217958379417">"Copot pemasangan"</string>
+ <string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstal"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info aplikasi"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"memasang pintasan"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Mengizinkan aplikasi menambahkan pintasan tanpa campur tangan pengguna."</string>
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widget"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Wallpaper"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Setelan"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Setelan layar Utama"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Dinonaktifkan oleh admin"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Ringkasan"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Izinkan layar Utama diputar"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Saat ponsel diputar"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Setelan Tampilan Saat Ini tidak memungkinkan putaran"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Badge ikon"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Aktif untuk semua aplikasi"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Nonaktif untuk semua aplikasi"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Tambahkan ikon ke layar Utama"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Untuk aplikasi baru"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Gunakan default sistem"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget diubah ukurannya menjadi lebar <xliff:g id="NUMBER_0">%1$s</xliff:g> tinggi <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Pintasan"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> pintasan untuk <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> pintasan dan <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifikasi untuk <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Tutup"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notifikasi ditutup"</string>
</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 3694a10..7025065 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mappa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Græjur"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Veggfóður"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Stillingar"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Heimastillingar"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Gert óvirkt af kerfisstjóra"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Yfirlit"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Leyfa snúning fyrir heimaskjá"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Þegar símanum er snúið"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Núverandi skjástilling leyfir ekki snúning"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Merking á skjöldum"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Virkt fyrir öll forrit"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Slökkt fyrir öll forrit"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Bæta tákni á heimaskjáinn"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Fyrir ný forrit"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Nota sjálfgildi kerfis"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Stærð græju breytt í <xliff:g id="NUMBER_0">%1$s</xliff:g> á breidd og <xliff:g id="NUMBER_1">%2$s</xliff:g> á hæð"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Flýtileiðir"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> flýtileiðir fyrir <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> flýtileiðir og <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> tilkynningar fyrir <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Hunsa"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Tilkynningu lokað"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 1208874..d0749cd 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Cartella: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widget"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Sfondi"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Impostazioni"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Impostazioni Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Disattivata dall\'amministratore"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Panoramica"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Consenti rotazione della schermata Home"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Con il telefono ruotato"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"L\'impostazione corrente del display non consente la rotazione"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Badge per le icone"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Impostazione attiva per tutte le app"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Impostazione non attiva per tutte le app"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Aggiungi icone alla schermata Home"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Per le nuove app"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Usa impostazione predefinita di sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget ridimensionato a larghezza <xliff:g id="NUMBER_0">%1$s</xliff:g>, altezza <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Scorciatoie"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> scorciatoie per <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> scorciatoie e <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notifiche relative a <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignora"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notifica ignorata"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 858abfd..b472fab 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"תיקיה: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"רכיבי ווידג\'ט"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"טפטים"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"הגדרות"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"הגדרות דף הבית"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"הושבת על ידי מנהל המערכת שלך"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"סקירה"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"אפשרות סיבוב של מסך דף הבית"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"כאשר הטלפון מסובב"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"הגדרת התצוגה הנוכחית אינה מאפשרת סיבוב"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"הצגת תגים על גבי סמלים"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"מופעלת לכל האפליקציות"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"כבויה לכל האפליקציות"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"הוספת סמל במסך דף הבית"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"לאפליקציות חדשות"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"השתמש בברירת המחדל של המערכת"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"גודל הווידג\'ט שונה - רוחב <xliff:g id="NUMBER_0">%1$s</xliff:g> גובה <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"קיצורי דרך"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> קיצורי דרך עבור <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> קיצורי דרך ו-<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> הודעות של <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"סגור"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"ההודעה נסגרה"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 846b884..4a58056 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"フォルダ: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ウィジェット"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"壁紙"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"設定"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ホームの設定"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"管理者により無効にされています"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"概要"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ホーム画面の回転を許可"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"スマートフォンが回転したとき"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"現在の [ディスプレイ] 設定では回転を使用できません"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"アイコンバッジ"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"すべてのアプリで ON"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"すべてのアプリで OFF"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ホーム画面にアイコンを追加"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"新しいアプリをダウンロードしたときに"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"システムのデフォルトを使用"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"ウィジェットのサイズを幅<xliff:g id="NUMBER_0">%1$s</xliff:g>、高さ<xliff:g id="NUMBER_1">%2$s</xliff:g>に変更しました"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ショートカット"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g>用の <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 件のショートカット"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 件のショートカットと <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> 件の通知"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"表示しない"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"通知を非表示にしました"</string>
</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 1979449..0bade8e 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"საქაღალდე: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ვიჯეტები"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"ფონები"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"პარამეტრები"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"მთავარი გვერდის პარამეტრები"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"გათიშულია თქვენი ადმინისტრატორის მიერ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"მიმოხილვა"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"მთავარი ეკრანის შეტრიალების დაშვება"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ტელეფონის შეტრიალებისას"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"ბრუნვა დაუშვებელია ჩვენების მიმდინარე პარამეტრებით"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ხატულას ბეჯები"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"ჩართულია ყველა აპისთვის"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"გამორთულია ყველა აპისთვის"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ხატულას მთავარ ეკრანზე დამატება"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ახალი აპებისთვის"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"ნაგულისხმევი სისტემური პარამეტრების გამოყენება"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"ვიჯეტის ზომები შეიცვალა: სიგანე <xliff:g id="NUMBER_0">%1$s</xliff:g> სიმაღლე <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"მალსახმობები"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g>-ს აქვს <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> მალსახმობი"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g>-ის <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> მალსახმობი და <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> შეტყობინება"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"დახურვა"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"შეტყობინება დაიხურა"</string>
</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 5df503a..9b2dab3 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Қалта: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Виджеттер"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Тұсқағаздар"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Параметрлер"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Негізгі экран параметрлері"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Әкімші өшірді"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Шолу"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Негізгі экранның бұрылуына рұқсат ету"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Телефон бұрылғанда"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Экранның ағымдағы параметрі айналуға рұқсат бермейді"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Белгілеу"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Барлық қолданбалар үшін қосулы"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Барлық қолданбалар үшін өшірулі"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Негізгі экранға белгіше енгізу"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Жаңа қолданбаларға арналған"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Жүйенің әдепкі параметрін пайдалану"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Виджет өлшемінің ені <xliff:g id="NUMBER_0">%1$s</xliff:g>, биіктігі <xliff:g id="NUMBER_1">%2$s</xliff:g> болып өзгертілді"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Таңбашалар"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> қолданбасына арналған <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> таңбаша"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> қолданбасының <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> таңбашасы мен <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> хабарландыруы"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Бас тарту"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Хабарландырудан бас тартылды"</string>
</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index a64b604..59c13cc 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ថត៖ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ធាតុក្រាហ្វិក"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"ផ្ទាំងរូបភាព"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ការកំណត់"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ការកំណត់ទំព័រដើម"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"បានបិទដំណើរការដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"សង្ខេប"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"អនុញ្ញាតការបងិ្វលអេក្រង់ដើម"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"នៅពេលដែលបង្វិលទូរស័ព្ទរបស់អ្នក"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"ការកំណត់អេក្រង់បច្ចុប្បន្នមិនអនុញ្ញាតការបង្វិលទេ"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ការដាក់ស្លាកសញ្ញារូបតំណាង"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"បើកសម្រាប់កម្មវិធីទាំងអស់"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"បិទសម្រាប់កម្មវិធីទាំងអស់"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"បញ្ចូលរូបតំណាងទៅអេក្រង់ដើម"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"សម្រាប់កម្មវិធីថ្មី"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"ប្រើលំនាំដើមរបស់ប្រព័ន្ធ"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"ធាតុក្រាហ្វិកដែលបានប្តូរទំហំទៅទទឹងប្រវែង <xliff:g id="NUMBER_0">%1$s</xliff:g> កម្ពស់ប្រវែង <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ផ្លូវកាត់"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ផ្លូវកាត់សម្រាប់ <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"ផ្លូវកាត់ចំនួន <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> និងការជូនដំណឹងចំនួន <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> សម្រាប់ <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"បដិសេធ"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"បានបដិសេធការជូនដំណឹង"</string>
</resources>
diff --git a/res/values-kn-rIN/config.xml b/res/values-kn-rIN/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-kn-rIN/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index b22af0d..1cda087 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ಫೋಲ್ಡರ್: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ವಿಜೆಟ್ಗಳು"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"ವಾಲ್ಪೇಪರ್ಗಳು"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ಮುಖಪುಟ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"ಅವಲೋಕನ"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ಮುಖಪುಟ ತಿರುಗುವಿಕೆಯನ್ನು ಅನುಮತಿಸಿ"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ಫೋನ್ ತಿರುಗಿಸಿದಾಗ"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"ಪ್ರಸ್ತುತ ಪ್ರದರ್ಶನ ಸೆಟ್ಟಿಂಗ್ ತಿರುಗುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ಐಕಾನ್ ಬ್ಯಾಡ್ಜ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"ಎಲ್ಲ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಆನ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಆಫ್ ಆಗಿದೆ"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ಮುಖಪುಟದ ಪರದೆಗೆ ಐಕಾನ್ ಸೇರಿಸಿ"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ಹೊಸ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"ಐಕಾನ್ ಆಕಾರವನ್ನು ಬದಲಿಸಿ"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"ಬದಲಿಸಬೇಡಿ"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"ಸಿಸ್ಟಂ ಡಿಫಾಲ್ಟ್ ಬಳಸಿ"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"ಐಕಾನ್ ಆಕಾರ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತಿದೆ"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"ಅಪರಿಚಿತ"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"ತೆಗೆದುಹಾಕಿ"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"ವಿಜೆಟ್ ಅನ್ನು <xliff:g id="NUMBER_0">%1$s</xliff:g> ಅಗಲ <xliff:g id="NUMBER_1">%2$s</xliff:g> ಎತ್ತರಕ್ಕೆ ಮರುಗಾತ್ರಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ಶಾರ್ಟ್ಕಟ್ಗಳು"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> ಗೆ <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ಶಾರ್ಟ್ಕಟ್ಗಳು"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> ಗಾಗಿ <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ಶಾರ್ಟ್ಕಟ್ಗಳು ಮತ್ತು <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ಅಧಿಸೂಚನೆಗಳು"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ವಜಾಗೊಳಿಸಿ"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"ಅಧಿಸೂಚನೆಯನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ"</string>
</resources>
diff --git a/res/values-kn/config.xml b/res/values-kn/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-kn/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 9e1eba4..2e8d149 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"폴더: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"위젯"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"배경화면"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"설정"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"홈 설정"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"관리자가 사용 중지함"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"개요"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"홈 화면 회전 허용"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"휴대전화 회전 시"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"현재 표시 설정에는 회전 기능이 허용되지 않습니다."</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"아이콘 배지"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"모든 앱에서 사용 설정됨"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"모든 앱에서 사용 중지됨"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"홈 화면에 아이콘 추가"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"새로 설치한 앱에 적용"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"시스템 기본값 사용"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"폭 <xliff:g id="NUMBER_0">%1$s</xliff:g>, 높이 <xliff:g id="NUMBER_1">%2$s</xliff:g>로 위젯 크기 조정됨"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"바로가기"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g>에 사용 가능한 단축키 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>개"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"바로가기 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>개 및 <xliff:g id="APP_NAME">%3$s</xliff:g> 알림 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>개"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"닫기"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"알림이 해제되었습니다."</string>
</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index cfdcc18..791dfcb 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Фолдер: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Виджеттер"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Тушкагаздар"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Жөндөөлөр"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Башкы беттин жөндөөлөрү"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Администраторуңуз өчүрүп койгон"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Көз жүгүртүү"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Башкы экранды айлантууга уруксат берүү"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Телефон айланганда"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Экранды айлантуу параметри өчүрүлгөн"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Бейджик тагуу сүрөтчөсү"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Бардык колдонмолор үчүн күйүк"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Бардык колдонмолор үчүн өчүк"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Башкы экранга сүрөтчө кошуу"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Жаңы колдонмолор үчүн"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Тутум сушунтаган демейкисин колдонуу"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Виджеттин кеңдиги <xliff:g id="NUMBER_0">%1$s</xliff:g> бийиктиги <xliff:g id="NUMBER_1">%2$s</xliff:g> болду"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Кыска жолдор"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> колдонмосуна <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> кыска жол бар"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> колдонмосу үчүн <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> кыска жол жана <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> эскертме бар"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Этибарга албоо"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Эскертме көз жаздымда калтырылды"</string>
</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 334305a..cbb17d9 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ໂຟນເດີ: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ວິດເຈັດ"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"ພາບພື້ນຫຼັງ"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ການຕັ້ງຄ່າ"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ການຕັ້ງຄ່າ Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"ຖືກປິດການນຳໃຊ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"ພາບຮວມ"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ອະນຸຍາດໃຫ້ໝຸນໜ້າຈໍທຳອິດໄດ້"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ເມື່ອໝຸນໂທລະສັບ"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"ການຕັ້ງຄ່າສະແດງຜົນປັດຈຸບັນບໍ່ອະນຸຍາດໃຫ້ໝຸນໄດ້"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ປ້າຍໄອຄອນ"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"ເປີດສຳລັບທຸກແອັບ"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"ປິດສຳລັບທຸກແອັບ"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ເພີ່ມໄອຄອນໃສ່ໜ້າຈໍຫຼັກ"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ສຳລັບແອັບໃໝ່"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"ໃຊ້ຄ່າເລີ່ມຕົ້ນລະບົບ"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"ປ່ຽນຂະໜາດວິດເຈັດເປັນລວງກ້ວາງ <xliff:g id="NUMBER_0">%1$s</xliff:g> ລວງສູງ <xliff:g id="NUMBER_1">%2$s</xliff:g> ແລ້ວ"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ທາງລັດ"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ທາງລັດສຳລັບ <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ທາງລັດ ແລະ <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ການແຈ້ງເຕືອນສຳລັບ <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ປິດໄວ້"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"ປິດການແຈ້ງເຕືອນແລ້ວ"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 558e1a9..9c7f2aa 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Aplankas: „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Valdikliai"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Ekrano fonai"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Nustatymai"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"„Home“ nustatymai"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Išjungė administratorius"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Apžvalga"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Leisti pasukti pagrindinį ekraną"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kai telefonas pasukamas"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Naudojant dabartinį pateikties nustatymą neleidžiama pasukti"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Piktogramos ženklelių informacija"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Įjungta visoms programoms"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Išjungta visoms programoms"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Pridėti piktogr. prie pagrindinio ekrano"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Skirta naujoms programoms"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Naudoti numatytuosius sistemos nustatymus"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Valdiklio dydis pakeistas: plotis – <xliff:g id="NUMBER_0">%1$s</xliff:g>, aukštis – <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Spartieji klavišai"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Programos „<xliff:g id="APP_NAME">%2$s</xliff:g>“ spartieji klavišai (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>)"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"„<xliff:g id="APP_NAME">%3$s</xliff:g>“ spartieji klavišai (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) ir pranešimai (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>)"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Atsisakyti"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Pranešimo atsisakyta"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 733d647..b7f426e 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mape: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Logrīki"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fona tapetes"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Iestatījumi"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Sākumlapas iestatījumi"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Atspējojis administrators"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Kopsavilkums"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Atļaut sākuma ekrāna pagriešanu"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Pagriežot tālruni"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Pašreizējā displeja iestatījumā nav atļauta pagriešana."</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonu emblēmas"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Ieslēgts visām lietotnēm"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Izslēgts visām lietotnēm"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Pievienot ikonu sākuma ekrānā"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Jaunām lietotnēm"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Izmantot sistēmas noklusējumu"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Logrīka lielums mainīts — platums: <xliff:g id="NUMBER_0">%1$s</xliff:g>, augstums: <xliff:g id="NUMBER_1">%2$s</xliff:g>."</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Saīsnes"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> saīsnes lietotnei <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> saīsnes un <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> paziņojumi lietotnei <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Nerādīt"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Paziņojums netiek rādīts"</string>
</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 267e75b..6d6473f 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Папка: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Додатоци"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Позадини"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Поставки"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Поставки за Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Оневозможено од администраторот"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Краток преглед"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Дозволете ротација на Почетниот екран"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Кога телефонот се ротира"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Тековната поставка на Екранот не дозволува ротација"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ставање значки на икони"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Вклучено за сите апликации"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Исклучено за сите апликации"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Додајте икона на почетниот екран"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"За нови апликации"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Користи ја стандардната поставка на системот"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Големината на виџетот е променета на ширина <xliff:g id="NUMBER_0">%1$s</xliff:g> висина <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Кратенки"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> кратенки за <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> кратенки и <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> известувања за <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Отфрли"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Известувањето е отфрлено"</string>
</resources>
diff --git a/res/values-ml-rIN/config.xml b/res/values-ml-rIN/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-ml-rIN/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index a92fc03..b909c11 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -36,7 +36,7 @@
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"സ്വമേധയാ സ്ഥാപിക്കുന്നതിന് സ്പർശിച്ചുപിടിക്കുക"</string>
<string name="place_automatically" msgid="8064208734425456485">"സ്വയമേവ ചേർക്കുക"</string>
<string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ആപ്പുകളെ തിരയുക"</string>
- <string name="all_apps_loading_message" msgid="7557140873644765180">"ആപ്പ്സ് ലോഡുചെയ്യുന്നു..."</string>
+ <string name="all_apps_loading_message" msgid="7557140873644765180">"ആപ്പുകൾ ലോഡുചെയ്യുന്നു..."</string>
<string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" എന്നതുമായി പൊരുത്തപ്പെടുന്ന ആപ്പ്സൊന്നും കണ്ടെത്തിയില്ല"</string>
<string name="all_apps_search_market_message" msgid="1366263386197059176">"കൂടുതൽ ആപ്പുകൾക്ക് തിരയുക"</string>
<string name="notifications_header" msgid="1404149926117359025">"അറിയിപ്പുകൾ"</string>
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ഫോൾഡർ: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"വിജറ്റുകൾ"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"വാൾപേപ്പർ"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ക്രമീകരണം"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ഹോം ക്രമീകരണം"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"അഡ്മിൻ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"കാഴ്ച"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ഹോം സ്ക്രീൻ തിരിക്കൽ അനുവദിക്കുക"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ഫോൺ തിരിച്ച നിലയിലായിരിക്കുമ്പോൾ"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"നിലവിലെ ഡിസ്പ്ലേ ക്രമീകരണം തിരിക്കൽ അനുവദിക്കുന്നില്ല"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ഐക്കൺ ബാഡ്ജിംഗ്"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"എല്ലാ ആപ്പുകൾക്കും ഓണാണ്"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"എല്ലാ ആപ്പുകൾക്കും ഓഫാണ്"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ഹോം സ്ക്രീനിലേക്ക് ഐക്കൺ ചേർക്കുക"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"പുതിയ ആപ്പുകൾക്ക്"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"ഐക്കണിന്റെ ആകാരം മാറ്റുക"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"മാറ്റരുത്"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"സിസ്റ്റം ഡിഫോൾട്ട് ഉപയോഗിക്കുക"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"ഐക്കൺ ആകാര മാറ്റങ്ങൾ പ്രയോഗിക്കുന്നു"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"അജ്ഞാതം"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"നീക്കംചെയ്യുക"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"വീതി <xliff:g id="NUMBER_0">%1$s</xliff:g> ഉയരം <xliff:g id="NUMBER_1">%2$s</xliff:g>-ലേക്ക് വിഡ്ജെറ്റിന്റെ വലുപ്പം മാറ്റി"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"കുറുക്കുവഴികൾ"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> ആപ്പിനുള്ള <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> കുറുക്കുവഴികൾ"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> ആപ്പിനായുള്ള <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> കുറുക്കുവഴികളും <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> അറിയിപ്പുകളും"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"നിരസിക്കുക"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"അറിയിപ്പ് നിരസിച്ചു"</string>
</resources>
diff --git a/res/values-ml/config.xml b/res/values-ml/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-ml/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 5b74fd2..696b42c 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Фолдер: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Виджет"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Ханын зураг"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Тохиргоо"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Нүүр хуудасны тохиргоо"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Таны админ идэвхгүй болгосон"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Тойм"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Нүүр дэлгэцийг эргүүлэхийг зөвшөөрөх"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Утсыг эргүүлсэн үед"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Дэлгэцийн одоогийн тохиргоогоор эргүүлэх боломжгүй"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Дүрс тэмдэг"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Бүх аппад асаасан"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Бүх аппад унтраасан"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Нүүр хуудаст дүрс тэмдэг нэмэх"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Шинэ аппад зориулсан"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Системийн өгөгдмөл тохиргоог ашиглах"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Виджэтийн өргөн <xliff:g id="NUMBER_0">%1$s</xliff:g>, өндөр <xliff:g id="NUMBER_1">%2$s</xliff:g> болсон"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Товчлол"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g>-н <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> товчлол"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> товчлол болон <xliff:g id="APP_NAME">%3$s</xliff:g>-н <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> мэдэгдэл"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Хаах"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Мэдэгдлийг хаасан"</string>
</resources>
diff --git a/res/values-mr-rIN/config.xml b/res/values-mr-rIN/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-mr-rIN/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 1a10e4b..0c74b15 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"फोल्डर: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"विजेट"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"वॉलपेपर"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"सेटिंग्ज"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"होम सेटिंग्ज"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"आपल्या प्रशासकाने अक्षम केले"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"विहंगावलोकन"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"मुख्यस्क्रीन फिरविण्यास अनुमती द्या"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"फोन फिरविला जातो तेव्हा"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"वर्तमान प्रदर्शन सेटिंग फिरविण्यास परवानगी देत नाही"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"चिन्ह बॅज करणे"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"सर्व अॅपसाठी चालू आहे"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"सर्व अॅपसाठी बंद आहे"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"मुख्य स्क्रीनवर चिन्ह जोडा"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"नवीन अॅप्ससाठी"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"चिन्हाचा आकार बदला"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"बदलू नका"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"सिस्टमचे डीफॉल्ट वापरा"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"चिन्हाचा आकार बदल लागू करत आहे"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"अज्ञात"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"काढा"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"विजेटचा आकार रुंदी <xliff:g id="NUMBER_0">%1$s</xliff:g> उंची <xliff:g id="NUMBER_1">%2$s</xliff:g> मध्ये बदलला"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"शॉर्टकट"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> साठी <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> शॉर्टकट"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g>साठी <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> शॉर्टकट आणि <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> सूचना"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"डिसमिस करा"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"सूचना डिसमिस केली"</string>
</resources>
diff --git a/res/values-mr/config.xml b/res/values-mr/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-mr/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 756a2cf..20410bc 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widget"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Kertas dinding"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Tetapan"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Tetapan laman utama"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Dilumpuhkan oleh pentadbir anda"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Ikhtisar"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Benarkan putaran Skrin Utama"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Apabila telefon diputar"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Tetapan Paparan semasa tidak membenarkan putaran"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Pelencanaan ikon"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Dihidupkan untuk semua apl"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Dimatikan untuk semua apl"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Tambahkan ikon pada Skrin Utama"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Untuk apl baharu"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Gunakan lalai sistem"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Saiz widget diubah menjadi <xliff:g id="NUMBER_0">%1$s</xliff:g> lebar <xliff:g id="NUMBER_1">%2$s</xliff:g> tinggi"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Pintasan"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> pintasan untuk <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> pintasan dan <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> pemberitahuan untuk <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ketepikan"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Pemberitahuan diketepikan"</string>
</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 449aae8..19e017e 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"အကန့်အမည်: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ဝိဂျက်များ"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"နောက်ခံများ"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ဆက်တင်များ"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ပင်မဆက်တင်များ"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"သင့်စီမံခန့်ခွဲသူက ပိတ်လိုက်ပါသည်"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"ခြုံငုံသုံးသပ်ချက်"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ပင်မစာမျက်နှာလှည့်ခြင်းကို ခွင့်ပြုပါ"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ဖုန်းကိုလှည့်ထားစဉ်"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"လက်ရှိ မြင်ကွင်းဆက်တင်တွင် မြင်ကွင်းကို လှည့်ခွင့်မပေးပါ"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"သင်္ကေတ တံဆိပ်"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"အက်ပ်များအားလုံးအတွက် ဖွင့်ထားသည်"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"အက်ပ်များအားလုံးအတွက် ပိတ်ထားသည်"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ပင်မစာမျက်နှာသို့ သင်္ကေတပုံ ထည့်ရန်"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"အက်ပ်အသစ်များအတွက်"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"စနစ်၏ မူရင်းပုံကို အသုံးပြုရန်"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget အား အကျယ် <xliff:g id="NUMBER_0">%1$s</xliff:g> အမြင့် <xliff:g id="NUMBER_1">%2$s</xliff:g> အရွယ်အစားပြန်လည်ချိန်ညှိပြီး၏"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ဖြတ်လမ်းများ"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> အတွက် အမြန်နည်း <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ခု"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> အတွက် ဖြတ်လမ်းလင့်ခ် <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> နှင့် အကြောင်းကြားချက် <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ခု"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ပယ်ရန်"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"အသိပေးချက်ကို ဖယ်ထုတ်ပြီးပါပြီ"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 6c70038..4d3389e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mappe: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Moduler"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Bakgrunner"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Innstillinger"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Startsideinnstillinger"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administratoren har slått av funksjonen"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Oversikt"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Tillat rotasjon av startskjermen"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Når telefonen roteres"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Med den nåværende skjerminnstillingen støttes ikke rotasjon"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonmerking"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"På for alle apper"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Av for alle apper"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Legg til ikon på startsiden"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"For nye apper"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Bruk systemstandard"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Størrelsen på modulen er endret til bredde <xliff:g id="NUMBER_0">%1$s</xliff:g> og høyde <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Snarveier"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> snarveier for <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> snarveier og <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> varsler for <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Avvis"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Varselet ble avvist"</string>
</resources>
diff --git a/res/values-ne-rNP/config.xml b/res/values-ne-rNP/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-ne-rNP/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 46c8f9c..0f0c654 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"फोल्डर: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"विजेटहरू"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"वालपेपरहरु"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"सेटिंङहरू"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"गृहपृष्ठका सेटिङहरू"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"तपाईँको प्रशासकद्वारा असक्षम गरिएको"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"परिदृश्य"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"गृह स्क्रिनलाई घुम्ने अनुमति दिनुहोस्"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"फोनलाई घुमाइँदा"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"हालको प्रदर्शन सम्बन्धी सेटिङले घुमाउने सुविधालाई अनुमति दिँदैन"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"आइकनलाई पदक दिने कार्य"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"सबै अनुप्रयोगहरूमा सक्रिय छ"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"सबै अनुप्रयोगहरूमा निष्क्रिय छ"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"गृह स्क्रिनमा आइकन थप्नुहोस्"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"नयाँ अनुप्रयोगका लागि"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"आइकनको आकार परिवर्तन गर्नुहोस्"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"परिवर्तन नगर्नुहोस्"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"प्रणालीको पूर्वनिर्धारित सेटिङ प्रयोग गर्नुहोस्"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"आइकनको आकारमा गरिएका परिवर्तनहरू लागू गरिँदैछन्"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"अज्ञात"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"हटाउनुहोस्"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"विजेट चौडाइ <xliff:g id="NUMBER_0">%1$s</xliff:g> उचाइ <xliff:g id="NUMBER_1">%2$s</xliff:g> मा पुनः आकार मिलाइयो"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"सर्टकटहरू"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> का <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> सर्टकटहरू"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> का <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> सर्टकट र <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> सूचनाहरू"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"खारेज गर्नुहोस्"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"सूचना खारेज गरियो"</string>
</resources>
diff --git a/res/values-ne/config.xml b/res/values-ne/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-ne/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index e8caeb4..9e35568 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Map: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Achtergrond"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Instellingen"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Instellingen voor homepage"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Uitgeschakeld door je beheerder"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Overzicht"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Draaien van startscherm toestaan"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Wanneer de telefoon gedraaid is"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Huidige scherminstelling staat draaien niet toe"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Pictogrambadges"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Ingeschakeld voor alle apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Uitgeschakeld voor alle apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Pictogram toevoegen aan startscherm"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Voor nieuwe apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Systeemstandaard gebruiken"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Formaat van widget gewijzigd in breedte <xliff:g id="NUMBER_0">%1$s</xliff:g> en hoogte <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Snelkoppelingen"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> snelkoppelingen voor <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> snelkoppelingen en <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> meldingen voor <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Sluiten"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Melding gesloten"</string>
</resources>
diff --git a/res/values-pa-rIN/config.xml b/res/values-pa-rIN/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-pa-rIN/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index c4c11ce..76c6bd5 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ਫੋਲਡਰ: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ਵਿਜਿਟ"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"ਵਾਲਪੇਪਰ"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ਹੋਮ ਸੈਟਿੰਗਾਂ"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਦੁਆਰਾ ਅਯੋਗ ਬਣਾਈ ਗਈ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"ਰੂਪ-ਰੇਖਾ"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ਮੁੱਖ ਸਕ੍ਰੀਨ ਨੂੰ ਘੁੰਮਾਉਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ਜਦੋਂ ਫ਼ੋਨ ਘੁੰਮਾਇਆ ਜਾਂਦਾ ਹੈ"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"ਵਰਤਮਾਨ ਡਿਸਪਲੇ ਸੈਟਿੰਗ ਘੁੰਮਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੰਦੀ ਹੈ"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ਪ੍ਰਤੀਕ \'ਤੇ ਬੈਜ ਲਗਾਉਣਾ"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"ਸਾਰੀਆਂ ਐਪਾਂ ਦੇ ਲਈ ਚਾਲੂ ਹੈ"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"ਸਾਰੀਆਂ ਐਪਾਂ ਦੇ ਲਈ ਬੰਦ ਹੈ"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਪ੍ਰਤੀਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ਨਵੀਆਂ ਐਪਾਂ ਲਈ"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"ਆਈਕਨ ਦੀ ਆਕ੍ਰਿਤੀ ਬਦਲੋ"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"ਨਾ ਬਦਲੋ"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"ਸਿਸਟਮ ਦੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈਟਿੰਗ ਵਰਤੋ"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"ਆਈਕਨ ਦੀ ਆਕ੍ਰਿਤੀ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਨੂੰ ਲਾਗੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"ਅਗਿਆਤ"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"ਹਟਾਓ"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"ਵਿਜੈਟ ਨੂੰ ਚੌੜਾਈ <xliff:g id="NUMBER_0">%1$s</xliff:g> ਉਂਚਾਈ <xliff:g id="NUMBER_1">%2$s</xliff:g> ਨੂੰ ਮੁੜ ਆਕਾਰ ਦਿੱਤਾ"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ਸ਼ਾਰਟਕੱਟ"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> ਲਈ <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ਸ਼ਾਰਟਕੱਟ"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> ਲਈ <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ਸ਼ਾਰਟਕੱਟ ਅਤੇ <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ਸੂਚਨਾਵਾਂ"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ਖਾਰਜ ਕਰੋ"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"ਸੂਚਨਾ ਖਾਰਜ ਕੀਤੀ ਗਈ"</string>
</resources>
diff --git a/res/values-pa/config.xml b/res/values-pa/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-pa/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e611fcd..b3eb423 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widżety"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Tapety"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Ustawienia"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Ustawienia strony głównej"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Funkcja wyłączona przez administratora"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Przegląd"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Zezwalaj na obrót ekranu głównego"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Po obróceniu telefonu"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Obecne ustawienia wyświetlania nie pozwalają na obrót ekranu"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Plakietki na ikonach"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Włączone dla wszystkich aplikacji"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Wyłączone dla wszystkich aplikacji"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Dodaj ikonę do ekranu głównego"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"W przypadku nowych aplikacji"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Użyj ustawienia domyślnego"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Szerokość i wysokość widżetu zmieniła się na <xliff:g id="NUMBER_0">%1$s</xliff:g> x <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Skróty"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Skróty aplikacji <xliff:g id="APP_NAME">%2$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Skróty (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) i powiadomienia (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) aplikacji <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Odrzuć"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Powiadomienie odrzucone"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 0aa987b..d1b03aa 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Pasta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Imagens de fundo"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Definições"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Definições da página inicial"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Desativada pelo administrador"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Vista geral"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir rotação do ecrã principal"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Quando o telemóvel é rodado"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"A definição de visualização atual não permite a rotação"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Emblemas dos ícones"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Ativada para todas as aplicações"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desativada para todas as aplicações"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Adicionar ícone ao ecrã principal"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para novas aplicações"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Utilizar a predefinição do sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget redimensionado para a largura <xliff:g id="NUMBER_0">%1$s</xliff:g>, altura <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Atalhos"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> atalhos para a aplicação <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> atalhos e <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificações para a aplicação <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorar"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notificação ignorada"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 39a1651..c117672 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Pasta: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgets"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Planos de fundo"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Configurações"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Configurações da página inicial"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Desativado pelo administrador"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Visão geral"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permitir rotação da tela inicial"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Quando o smartphone for girado"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"A configuração atual de exibição não permite rotação"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Uso de selo de ícone"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Ativado para todos os apps"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Desativado para todos os apps"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Adicionar ícone à tela inicial"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para novos apps"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Usar padrão do sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget redimensionado para a largura <xliff:g id="NUMBER_0">%1$s</xliff:g>, altura <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Atalhos"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> atalhos para <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> atalhos e <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificações para o app <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Dispensar"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notificação dispensada"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index c7c0994..69b44e2 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Dosar: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgeturi"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Imagini de fundal"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Setări"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Setări pentru ecranul de pornire"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Dezactivată de administrator"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Prezentare generală"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Permiteți rotirea ecranului de pornire"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Când telefonul este rotit"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Setarea actuală a afișajului nu permite rotirea"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Aplicarea insignelor pentru pictograme"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Activată pentru toate aplicațiile"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Dezactivată pentru toate aplicațiile"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Adaugă pictograme în ecranul de pornire"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Pentru aplicații noi"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Folosiți setarea prestabilită a sistemului"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widgetul a fost redimensionat la lățimea <xliff:g id="NUMBER_0">%1$s</xliff:g> și înălțimea <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Comenzi rapide"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> comenzi rapide pentru <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> comenzi rapide și <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> notificări pentru <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Închideți"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Notificare închisă"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index acb49d5..6f00f2d 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Папка: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Виджеты"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Обои"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Настройки"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Настройки главного экрана"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Функция отключена администратором"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Обзор"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Разрешить поворачивать главный экран"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Когда телефон повернут"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"В настройках отключен поворот экрана"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Уведомления на значке приложения"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Включено для всех приложений"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Отключено для всех приложений"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Добавлять значки"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Добавлять значки установленных приложений на главный экран."</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Использовать системные настройки по умолчанию"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Изменен размер виджета: до <xliff:g id="NUMBER_0">%1$s</xliff:g> в ширину и <xliff:g id="NUMBER_1">%2$s</xliff:g> в высоту"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Ярлыки"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Количество ярлыков для приложения \"<xliff:g id="APP_NAME">%2$s</xliff:g>\": <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Количество ярлыков для приложения \"<xliff:g id="APP_NAME">%3$s</xliff:g>\": <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>. Количество уведомлений: <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>."</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Закрыть"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Уведомление закрыто"</string>
</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 569a77f..fec9ff8 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ෆෝල්ඩරය: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"විජට්"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"වෝල්පේපර"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"සැකසීම්"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home සැකසීම්"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"ඔබගේ පරිපාලක විසින් අබල කරන ලදී"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"දළ විශ්ලේෂණය"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"මුල් පිටු තිරය කරකැවීමට ඉඩ දෙන්න"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"දුරකථනය කරකවන විට"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"වත්මන් සංදර්ශක සැකසීම් කරකැවීමට සහාය නොදක්වයි"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"නිරූපක ලාංඡනය"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"සියලු යෙදුම් සඳහා ක්රියාත්මකයි"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"සියලු යෙදුම් සඳහා ක්රියාවිරහිතයි"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"මුල් පිටු තිරය වෙත අයිකනය එක් කරන්න"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"නව යෙදුම් සඳහා"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"පද්ධති පෙරනිමි භාවිත කරන්න"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"විජට් පළල <xliff:g id="NUMBER_0">%1$s</xliff:g> උස <xliff:g id="NUMBER_1">%2$s</xliff:g> වෙත ප්රමාණකරණය කරන ලදි"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"කෙටිමං"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> සඳහා කෙටි මං <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> සඳහා කෙටි මං <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>ක් සහ දැනුම්දීම් <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>ක්"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ඉවතලන්න"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"දැනුම්දීම ඉවතලන ලදී"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index dd03fd6..500f14f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Priečinok: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Miniaplikácie"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Tapety"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Nastavenia"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Nastavenia služby Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Zakázané vaším správcom"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Prehľad"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Povoliť otáčanie plochy"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Pri otočení telefónu"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Aktuálne nastavenie obrazovky nepovoľuje otáčanie"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Označovanie ikon"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Zapnuté pre všetky aplikácie"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Vypnuté pre všetky aplikácie"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Pridať ikonu na plochu"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Pri inštalácii novej aplikácie"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Použiť predvolené nastavenie systému"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Veľkosť miniaplikácie bola zmenená na <xliff:g id="NUMBER_0">%1$s</xliff:g> x <xliff:g id="NUMBER_1">%2$s</xliff:g> (šírka x výška)"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Skratky"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Počet skratiek aplikácie <xliff:g id="APP_NAME">%2$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Odkazy (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) a upozornenia (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) pre aplikáciu <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Zavrieť"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Upozornenie bolo zavreté"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index f8761d2..bc951af 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mapa: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Pripomočki"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Ozadja"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Nastavitve"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Nastavitve začetnega zaslona"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Onemogočil skrbnik."</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Pregled"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Omogočanje sukanja začetnega zaslona"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Ko se telefon zasuka"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Trenutna nastavitev zaslona ne dovoljuje sukanja"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Označevanje z ikonami"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Vklopljeno za vse aplikacije"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Izklopljeno za vse aplikacije"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Dodaj ikono na začetni zaslon"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Za nove aplikacije"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Uporabi privzeto nastavitev sistema"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Velikost pripomočka je bila spremenjena na <xliff:g id="NUMBER_0">%1$s</xliff:g> širine in <xliff:g id="NUMBER_1">%2$s</xliff:g> višine"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Bližnjice"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Št. bližnjic za aplikacijo <xliff:g id="APP_NAME">%2$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Bližnjice (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) in obvestila (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) aplikacije <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Opusti"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Obvestilo je bilo opuščeno"</string>
</resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 2b65684..f4798f6 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Dosja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Miniaplikacionet"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Imazhet e sfondit"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Cilësimet"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Cilësimet e Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Çaktivizuar nga administratori"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Përmbledhje"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Lejo rrotullimin e ekranit kryesor"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kur telefoni rrotullohet"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Cilësimi aktuali i afishimit nuk lejon rrotullimin"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Caktimi i simbolit të ikonës"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Aktiv për të gjitha aplikacionet"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Joaktiv për të gjitha aplikacionet"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Shto ikonë në ekranin bazë"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Për aplikacionet e reja"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Përdor parazgjedhjen e sisteit"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Madhësia e miniaplikacionit u ndryshua me gjerësinë <xliff:g id="NUMBER_0">%1$s</xliff:g> dhe lartësinë <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Shkurtoret"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shkurtesa për <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> shkurtore dhe <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> njoftime për <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Hiqe"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Njoftimi u hoq"</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ac21142..de24f32 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Директоријум: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Виџети"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Позадине"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Подешавања"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Подешавања почетног екрана"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Администратор је онемогућио"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Преглед"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Дозволи ротацију почетног екрана"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Када се телефон ротира"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Актуелно подешавање приказа не дозвољава ротацију"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Додавање значки на иконе"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Укључено за све апликације"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Искључено за све апликације"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Додај икону на почетни екран"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"За нове апликације"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Користи подразумевано системско подешавање"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Величина виџета је промењена на ширину <xliff:g id="NUMBER_0">%1$s</xliff:g> и висину <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Пречице"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> пречице(а) за <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Пречице (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) и обавештења (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) за <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Одбаци"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Обавештење је одбачено"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 7d6e053..0baf97d 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Mapp: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widgetar"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Bakgrunder"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Inställningar"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Inställningar för startsidan"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Inaktiverat av administratören"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Översikt"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Tillåt rotering av startskärmen"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"När mobilen vrids"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Rotering tillåts inte i de nuvarande skärminställningarna"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonmärken"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Aktiverat för alla appar"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Inaktiverat för alla appar"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Lägg till ikonen på startskärmen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"För nya appar"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Använd systemstandard"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widgetens storlek har ändrats till: bredd <xliff:g id="NUMBER_0">%1$s</xliff:g>, höjd <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Genvägar"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> genvägar för <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> har <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> genvägar och <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> aviseringar"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorera"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Aviseringen togs bort"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 62e3385..96a78db 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -72,17 +72,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folda: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Wijeti"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Mandhari"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Mipangilio"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Mipangilio ya ukurasa wa mwanzo"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Imezimwa na msimamizi wako"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Muhtasari"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Ruhusu kuzungusha skrini ya Kwanza"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Simu inapozungushwa"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Mipangilio ya sasa ya sehemu ya Onyesho hairuhusu kuzungusha"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Kuweka beji kwenye aikoni"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Imewashwa katika programu zote"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Imezimwa katika programu zote"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Ongeza aikoni kwenye Skrini ya kwanza"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Kwa ajili ya programu mpya"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Tumia umbo chaguo-msingi la mfumo"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -120,4 +130,7 @@
<string name="widget_resized" msgid="9130327887929620">"Wijeti imepunguzwa hadi upana <xliff:g id="NUMBER_0">%1$s</xliff:g> urefu <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Njia za mkato"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Njia <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> za mkato za <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Njia <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> za mkato na arifa <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> za <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Ondoa"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Arifa imeondolewa"</string>
</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index a1e00a1..15fb110 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"கோப்புறை: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ஷார்ட்கட்ஸ்"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"வால்பேப்பர்கள்"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"அமைப்பு"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"முகப்பு அமைப்புகள்"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"உங்கள் நிர்வாகி முடக்கியுள்ளார்"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"மேலோட்டப் பார்வை"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"முகப்புத் திரை சுழற்சியை அனுமதி"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"மொபைலைச் சுழற்றும் போது"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"தற்போதைய திரை அமைப்பு சுழற்றுவதை அனுமதிக்கவில்லை"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"ஐகான் பேட்ஜிங்"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"எல்லாப் பயன்பாடுகளுக்கும் இயக்கப்பட்டது"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"எல்லாப் பயன்பாடுகளுக்கும் முடக்கப்பட்டது"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"முகப்புத் திரையில் ஐகானைச் சேர்"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"புதிய பயன்பாடுகளுக்கு"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"அமைப்பின் இயல்புநிலையைப் பயன்படுத்து"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"அகலம் <xliff:g id="NUMBER_0">%1$s</xliff:g> மற்றும் உயரம் <xliff:g id="NUMBER_1">%2$s</xliff:g>க்கு விட்ஜெட் அளவு மாற்றப்பட்டது"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"குறுக்குவழிகள்"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g>க்கான <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> குறுக்குவழிகள்"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> பயன்பாட்டிற்கான <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> குறுக்குவழிகளும் <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> அறிவிப்புகளும் உள்ளன"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"நிராகரி"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"அறிவிப்பு நிராகரிக்கப்பட்டது"</string>
</resources>
diff --git a/res/values-te-rIN/config.xml b/res/values-te-rIN/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-te-rIN/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 65ca927..05c4788 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"ఫోల్డర్: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"విడ్జెట్లు"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"వాల్పేపర్లు"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"సెట్టింగ్లు"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"హోమ్ సెట్టింగ్లు"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"మీ నిర్వాహకులు నిలిపివేసారు"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"స్థూలదృష్టి"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"హోమ్ స్క్రీన్ భ్రమణాన్ని అనుమతించండి"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"ఫోన్ను తిప్పినప్పుడు"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"ప్రస్తుత డిస్ప్లే సెట్టింగ్ భ్రమణాన్ని అనుమతించలేదు"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"చిహ్నం బ్యాడ్జ్"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"అన్ని అనువర్తనాలలో ఆన్ చేయబడ్డాయి"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"అన్ని అనువర్తనాలలో ఆఫ్ చేయబడ్డాయి"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"హోమ్ స్క్రీన్కి చిహ్నాన్ని జోడించు"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"కొత్త అనువర్తనాల కోసం"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"చిహ్న ఆకారాన్ని మార్చు"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"మార్చవద్దు"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"సిస్టమ్ డిఫాల్ట్ను ఉపయోగించండి"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"చిహ్న ఆకార మార్పులను వర్తింపజేస్తోంది"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"తెలియదు"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"తీసివేయి"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"విడ్జెట్ పరిమాణం వెడల్పు <xliff:g id="NUMBER_0">%1$s</xliff:g>కి, ఎత్తు <xliff:g id="NUMBER_1">%2$s</xliff:g>కి మార్చబడింది"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"సత్వరమార్గాలు"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> కోసం <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> సత్వరమార్గాలు"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> కోసం <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> సత్వరమార్గాలు మరియు <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> నోటిఫికేషన్లు"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"తీసివేయి"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"నోటిఫికేషన్ తీసివేయబడింది"</string>
</resources>
diff --git a/res/values-te/config.xml b/res/values-te/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-te/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index fb7b587..1f5c7c8 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"โฟลเดอร์: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"วิดเจ็ต"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"วอลเปเปอร์"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"การตั้งค่า"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"การตั้งค่าหน้าแรก"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"ปิดใช้โดยผู้ดูแลระบบ"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"ภาพรวม"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"อนุญาตให้หมุนหน้าจอหลัก"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"เมื่อหมุนโทรศัพท์"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"การตั้งค่าการแสดงผลปัจจุบันไม่อนุญาตให้มีการหมุน"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"การติดป้ายไอคอน"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"เปิดสำหรับแอปทั้งหมด"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"ปิดสำหรับแอปทั้งหมด"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"เพิ่มไอคอนในหน้าจอหลัก"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"สำหรับแอปใหม่"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"ใช้ค่าเริ่มต้นของระบบ"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"ปรับขนาดของวิดเจ็ตเป็นกว้าง <xliff:g id="NUMBER_0">%1$s</xliff:g> สูง <xliff:g id="NUMBER_1">%2$s</xliff:g> แล้ว"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ทางลัด"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ทางลัดสำหรับ <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"ทางลัด <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> รายการและการแจ้งเตือน <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> รายการสำหรับ <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ปิด"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"ปิดการแจ้งเตือนแล้ว"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index d18bd1e..ff92183 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Folder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Mga Widget"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Mga Wallpaper"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Mga Setting"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Mga setting ng Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Na-disable ng iyong admin"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Pangkalahatang-ideya"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Payagan ang pag-rotate ng Home screen"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kailan maro-rotate ang telepono"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Hindi pinahihintulutan ng kasalukuyang setting ng Display ang pag-rotate"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Pag-badge ng icon"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Naka-on para sa lahat ng app"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Naka-off para sa lahat ng app"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Idagdag ang icon sa Home screen"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Para sa mga bagong app"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Gamitin ang default ng system"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Na-resize ang widget sa lapad <xliff:g id="NUMBER_0">%1$s</xliff:g> taas <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Mga Shortcut"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> (na) shortcut para sa <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> (na) shortcut at <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> (na) notification para sa <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"I-dismiss"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Na-dismiss ang notification"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 0c655fd..ff28712 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Klasör: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Widget\'lar"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Duvar Kağıtları"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Ayarlar"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Ana ekran ayarları"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Yöneticiniz tarafından devre dışı bırakıldı"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Genel bakış"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Ana ekranı döndürmeye izin ver"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefon döndürüldüğünde"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Mevcut Ekran ayarı, döndürmeye izin vermiyor"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Simge rozeti ekleme"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Tüm uygulamalar için açık"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Tüm uygulamalar için kapalı"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Ana ekrana simge ekle"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Yeni uygulamalar için"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Sistem varsayılanını kullan"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Widget, <xliff:g id="NUMBER_0">%1$s</xliff:g> genişlik ve <xliff:g id="NUMBER_1">%2$s</xliff:g> yükseklik değerine yeniden boyutlandırıldı"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Kısayollar"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> için <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> kısayol"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> için <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> kısayol ve <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> bildirim"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Kapat"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Bildirim kapatıldı"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 8679628..c904d41 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Папка <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Віджети"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Фонові малюнки"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Налаштування"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Налаштування Home"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Вимкнув адміністратор"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Огляд"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Дозволити обертання головного екрана"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Коли телефон обертається"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Поточні налаштування дисплея не підтримують обертання"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Позначення значків"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Увімкнено для всіх додатків"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Вимкнено для всіх додатків"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Додати значок на головний екран"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Для нових додатків"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Використовувати налаштування системи за умовчанням"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Розміри віджета змінено на <xliff:g id="NUMBER_0">%1$s</xliff:g> завширшки та <xliff:g id="NUMBER_1">%2$s</xliff:g> заввишки"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Ярлики"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"Ярликів для додатка <xliff:g id="APP_NAME">%2$s</xliff:g>: <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"Ярлики (<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g>) і сповіщення (<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g>) додатка <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Закрити"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Сповіщення закрито"</string>
</resources>
diff --git a/res/values-ur-rPK/config.xml b/res/values-ur-rPK/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-ur-rPK/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 29d1cd5..31ac66f 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -70,16 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"فولڈر: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"ویجیٹس"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"وال پیپرز"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"ترتیبات"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"ہوم ترتیبات"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"آپ کے منتظم کی طرف سے غیر فعال کر دیا گیا"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"مجموعی جائزہ"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"ہوم اسکرین گھمانے کی اجازت دیں"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"جب فون گھمایا جاتا ہے"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"موجودہ ڈسپلے ترتیب گھمانے کی اجازت نہیں دیتی"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"آئیکن کی بیج سازی"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"سبھی ایپس کیلئے آن ہے"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"تمام ایپس کے لئے بند ہے"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"آئیکن کو ہوم اسکرین میں شامل کریں"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"نئی ایپس کیلئے"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"آئیکن کی شکل تبدیل کریں"</string>
- <string name="icon_shape_no_override" msgid="3678524428085518367">"تبدیل نہ کریں"</string>
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"سسٹم ڈیفالٹ کا استعمال کریں"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
+ <skip />
<string name="icon_shape_override_progress" msgid="3461735694970239908">"آئيکن کی شکل کی تبدیلیاں لاگو ہو رہی ہیں"</string>
<string name="package_state_unknown" msgid="7592128424511031410">"نامعلوم"</string>
<string name="abandoned_clean_this" msgid="7610119707847920412">"ہٹائیں"</string>
@@ -115,4 +126,7 @@
<string name="widget_resized" msgid="9130327887929620">"ویجیٹ کے سائز کو چوڑائی <xliff:g id="NUMBER_0">%1$s</xliff:g> اونچائی <xliff:g id="NUMBER_1">%2$s</xliff:g> میں تبدیل کر دیا گیا"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"شارٹ کٹس"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> کیلئے <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> شارٹ کٹس"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> کے <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> شارٹ کٹس اور <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> اطلاعات"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"برخاست کریں"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"اطلاع مسترد ہو گئی"</string>
</resources>
diff --git a/res/values-ur/config.xml b/res/values-ur/config.xml
deleted file mode 100644
index 56f98c3..0000000
--- a/res/values-ur/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="icon_shape_override_paths_values">
- <item msgid="6640290598899495380"></item>
- <item msgid="4009824731445917273">"M50,0L100,0 100,100 0,100 0,0z"</item>
- <item msgid="3964229851574011244">"M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z"</item>
- <item msgid="363553284746233331">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</item>
- <item msgid="4319038504053267455">"M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0"</item>
- <item msgid="483370082941112059">"M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z"</item>
- </string-array>
- <!-- no translation found for icon_shape_override_paths_names:0 (4837899951986816538) -->
-</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 81be979..716eedd 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Jild: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Vidjetlar"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Fon rasmlari"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Sozlamalar"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home sozlamalari"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administrator tomonidan o‘chirilgan"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Umumiy ko‘rinish"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Asosiy ekranni aylantirishga ruxsat berish"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefon burilganda"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Ekran sozlamalariga ko‘ra uni aylantirib bo‘lmaydi"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ikonka ustida nishoncha"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Barcha ilovalar uchun yoniq"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Barcha ilovalar uchun o‘chiq"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Bosh ekranga ikonka qo‘shish"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Yangi o‘rnatilgan ilovalar ikonkasini bosh ekranga chiqarish"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Standart tizim parametrlaridan foydalanish"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Vidjetning eni <xliff:g id="NUMBER_0">%1$s</xliff:g>, bo‘yi <xliff:g id="NUMBER_1">%2$s</xliff:g> qilib o‘zgartirildi"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Tezkor tugmalar"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g> ilovasi uchun <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ta tezkor tugma"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g> ilovasi uchun <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> ta yorliq va <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ta bildirishnoma"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Yopish"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Bildirishnoma yopildi"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 5fc9542..580a4dd 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Thư mục: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Tiện ích con"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Hình nền"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Cài đặt"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Cài đặt trang chủ"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Bị tắt bởi quản trị viên của bạn"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Tổng quan"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Cho phép xoay Màn hình chính"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Khi xoay điện thoại"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Cài đặt Hiển thị hiện tại không cho phép xoay"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Gắn huy hiệu biểu tượng"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Bật cho tất cả ứng dụng"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Tắt cho tất cả ứng dụng"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Thêm biểu tượng vào màn hình chính"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Cho ứng dụng mới"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Sử dụng mặc định của hệ thống"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Đã đổi kích thước tiện ích thành chiều rộng <xliff:g id="NUMBER_0">%1$s</xliff:g> chiều cao <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Lối tắt"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> phím tắt cho <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> phím tắt và <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> thông báo cho <xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Loại bỏ"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Đã loại bỏ thông báo"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a6f8bf4..0a43a91 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -29,8 +29,8 @@
<string name="shortcut_not_available" msgid="2536503539825726397">"无法使用快捷方式"</string>
<string name="home_screen" msgid="806512411299847073">"主屏幕"</string>
<string name="custom_actions" msgid="3747508247759093328">"自定义操作"</string>
- <string name="long_press_widget_to_add" msgid="7699152356777458215">"触摸并按住小部件即可选择。"</string>
- <string name="long_accessible_way_to_add" msgid="4289502106628154155">"点按两次并按住小部件即可选择小部件,您也可以使用自定义操作。"</string>
+ <string name="long_press_widget_to_add" msgid="7699152356777458215">"触摸并按住微件即可选择。"</string>
+ <string name="long_accessible_way_to_add" msgid="4289502106628154155">"点按两次并按住微件即可选择微件,您也可以使用自定义操作。"</string>
<string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string>
<string name="widget_accessible_dims_format" msgid="3640149169885301790">"宽 %1$d,高 %2$d"</string>
<string name="add_item_request_drag_hint" msgid="5899764264480397019">"触摸并按住即可手动放置"</string>
@@ -54,7 +54,7 @@
<string name="permlab_write_settings" msgid="3574213698004620587">"写入主屏幕设置和快捷方式"</string>
<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="6081085226050792095">"加载小部件时出现问题"</string>
+ <string name="gadget_error_text" msgid="6081085226050792095">"加载微件时出现问题"</string>
<string name="gadget_setup_text" msgid="8274003207686040488">"设置"</string>
<string name="uninstall_system_app_text" msgid="4172046090762920660">"这是系统应用,无法卸载。"</string>
<string name="folder_hint_text" msgid="6617836969016293992">"未命名文件夹"</string>
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"文件夹:<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"微件"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"壁纸"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"设置"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"主屏幕设置"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"已被您的管理员停用"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"概览"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"允许旋转主屏幕"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"手机旋转时"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"当前的显示设置不允许旋转设备"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"在图标上显示标记"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"已针对所有应用开启"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"已针对所有应用关闭"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"将图标添加到主屏幕"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"适用于新应用"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"使用系统默认设置"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -115,7 +125,10 @@
<string name="action_increase_height" msgid="459390020612501122">"增加高度"</string>
<string name="action_decrease_width" msgid="1374549771083094654">"减小宽度"</string>
<string name="action_decrease_height" msgid="282377193880900022">"减小高度"</string>
- <string name="widget_resized" msgid="9130327887929620">"小部件尺寸已调整为:宽度 <xliff:g id="NUMBER_0">%1$s</xliff:g>,高度 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+ <string name="widget_resized" msgid="9130327887929620">"微件尺寸已调整为:宽度 <xliff:g id="NUMBER_0">%1$s</xliff:g>,高度 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"快捷方式"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="APP_NAME">%2$s</xliff:g>有 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 个快捷方式"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="APP_NAME">%3$s</xliff:g>的 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 个快捷方式和 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> 条通知"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"关闭"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"已关闭通知"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 867c350..ae66324 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"資料夾:<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"小工具"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"桌布"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"設定"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home 設定"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"已由您的管理員停用"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"概覽"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"允許主畫面旋轉"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"當手機旋轉時"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"「目前顯示屏」設定不允許旋轉"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"在圖示上顯示標誌"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"已為所有應用程式開啟"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"已為所有應用程式關閉"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"將圖示加到主畫面"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"適用於新安裝的應用程式"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"使用系統預設設定"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"已調整小工具的大小至闊 <xliff:g id="NUMBER_0">%1$s</xliff:g> 高 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"捷徑"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"「<xliff:g id="APP_NAME">%2$s</xliff:g>」嘅 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 個捷徑"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"「<xliff:g id="APP_NAME">%3$s</xliff:g>」嘅 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 個捷徑同 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> 個通知"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"關閉"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"關閉咗通知"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index ee92cf1..02f6350 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"資料夾:<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"小工具"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"桌布"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"設定"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Home 設定"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"已由你的管理員停用"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"總覽"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"允許旋轉主螢幕"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"當手機旋轉時"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"目前的顯示設定不允許旋轉畫面"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"在圖示上顯示標記"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"為所有應用程式開啟這項設定"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"為所有應用程式關閉這項設定"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"將圖示加到主螢幕"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"適用於新安裝的應用程式"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"使用系統預設值"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"已將小工具的寬度和高度分別調整為 <xliff:g id="NUMBER_0">%1$s</xliff:g> 和 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"捷徑"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"「<xliff:g id="APP_NAME">%2$s</xliff:g>」有 <xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 個捷徑"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> 個捷徑和 <xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> 則「<xliff:g id="APP_NAME">%3$s</xliff:g>」通知"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"關閉"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"已關閉通知"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index aa918b3..bdb46a3 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -70,17 +70,27 @@
<string name="folder_name_format" msgid="6629239338071103179">"Ifolda: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="widget_button_text" msgid="2880537293434387943">"Amawijethi"</string>
<string name="wallpaper_button_text" msgid="8404103075899945851">"Izithombe zangemuva"</string>
- <string name="settings_button_text" msgid="8119458837558863227">"Izilungiselelo"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Izilungiselelo zasekhaya"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Kukhutshazwe umlawuli wakho"</string>
<string name="accessibility_action_overview" msgid="6257665857640347026">"Ukubuka konke"</string>
<string name="allow_rotation_title" msgid="7728578836261442095">"Vumela ukuphendukiswa kwesikrini sasekhaya"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Uma ifoni iphendukiswa"</string>
<string name="allow_rotation_blocked_desc" msgid="3212602545192996253">"Isilungiselelo sesiboniso samanje asivumeli ukuzungezisa"</string>
+ <string name="icon_badging_title" msgid="4418239350706629417">"Ibheji yesithonjana"</string>
+ <string name="icon_badging_desc_on" msgid="6022379097717134764">"Kuvuliwe kuzo zonke izinhlelo zokusebenza"</string>
+ <string name="icon_badging_desc_off" msgid="1574640601251590211">"Kuvaliwe kuzo zonke izinhlelo zokusebenza"</string>
<string name="auto_add_shortcuts_label" msgid="8222286205987725611">"Engeza isithonjana eskrinini sasekhaya"</string>
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"Kwezinhlelo zokusebenza ezintsha"</string>
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
- <!-- no translation found for icon_shape_no_override (3678524428085518367) -->
+ <string name="icon_shape_system_default" msgid="1709762974822753030">"Sebenzisa okuzenzakalelayo kwesistimu"</string>
+ <!-- no translation found for icon_shape_square (633575066111622774) -->
+ <skip />
+ <!-- no translation found for icon_shape_squircle (5658049910802669495) -->
+ <skip />
+ <!-- no translation found for icon_shape_circle (6550072265930144217) -->
+ <skip />
+ <!-- no translation found for icon_shape_teardrop (4525869388200835463) -->
<skip />
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
@@ -118,4 +128,7 @@
<string name="widget_resized" msgid="9130327887929620">"Iwijethi inikezwe usayizi omusha ngobubanzi obungu-<xliff:g id="NUMBER_0">%1$s</xliff:g> ubude obungu-<xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"Izinqamuleli"</string>
<string name="shortcuts_menu_description" msgid="406159963824238648">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> izinqamuleli ze-<xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
+ <string name="shortcuts_menu_with_notifications_description" msgid="8985659504915468840">"<xliff:g id="NUMBER_OF_SHORTCUTS">%1$d</xliff:g> izinqamuleli nezaziso ezingu-<xliff:g id="NUMBER_OF_NOTIFICATIONS">%2$d</xliff:g> ze-<xliff:g id="APP_NAME">%3$s</xliff:g>"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"Cashisa"</string>
+ <string name="notification_dismissed" msgid="6002233469409822874">"Isaziso sicashisiwe"</string>
</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 18759f8..eaadd47 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -18,6 +18,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- Attributes used for launcher theme -->
+ <attr name="allAppsScrimColor" format="color" />
+ <attr name="isPrimaryColorDark" format="boolean" />
+
<!-- BubbleTextView specific attributes. -->
<declare-styleable name="BubbleTextView">
<attr name="layoutHorizontal" format="boolean" />
@@ -114,5 +118,6 @@
<declare-styleable name="ShadowDrawable">
<attr name="android:src" />
<attr name="android:shadowColor" />
+ <attr name="android:elevation" />
</declare-styleable>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 47bc5b5..f4cd8c8 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -35,6 +35,8 @@
<color name="popup_background_color">#FFF</color>
<color name="notification_icon_default_color">#757575</color> <!-- Gray 600 -->
<color name="notification_color_beneath">#E0E0E0</color> <!-- Gray 300 -->
+ <color name="badge_color">#1DE9B6</color> <!-- Teal A400 -->
+ <color name="system_shortcuts_icon_color">@android:color/tertiary_text_light</color>
<color name="icon_background">#E0E0E0</color> <!-- Gray 300 -->
<color name="legacy_icon_background">#FFFFFF</color>
diff --git a/res/values/config.xml b/res/values/config.xml
index 71984d6..9b7c795 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -19,24 +19,23 @@
<!-- Values for icon shape overrides. These should correspond to entries defined
in icon_shape_override_paths_names -->
- <string-array name="icon_shape_override_paths_values">
+ <string-array translatable="false" name="icon_shape_override_paths_values">
<item></item>
- <item translatable="false">M50,0L100,0 100,100 0,100 0,0z</item>
- <item translatable="false">M50,0L80,0 A20,20,0,0 1 100,20 L100,80 A20,20,0,0 1 80,100 L20,100 A20,20,0,0 1 0,80 L 0,20 A20,20,0,0 1 20,0z</item>
- <item translatable="false">M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z</item>
- <item translatable="false">M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0</item>
- <item translatable="false">M50,0A50,30 0,0,1 100,30V70A50,30 0,0,1 0,70V30A50,30 0,0,1 50,0z</item>
+ <item>M50,0L100,0 100,100 0,100 0,0z</item>
+ <item>M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z</item>
+ <item>M50 0A50 50,0,1,1,50 100A50 50,0,1,1,50 0</item>
+ <item>M50,0A50,50,0,0 1 100,50 L100,85 A15,15,0,0 1 85,100 L50,100 A50,50,0,0 1 50,0z</item>
</string-array>
- <string-array name="icon_shape_override_paths_names">
+ <string-array translatable="false" name="icon_shape_override_paths_names">
<!-- Option to not change the icon shape on home screen. [CHAR LIMIT=50] -->
- <item>@string/icon_shape_no_override</item>
- <item translatable="false">Square</item>
- <item translatable="false">Rounded corner rect</item>
- <item translatable="false">Squircle</item>
- <item translatable="false">Circle</item>
- <item translatable="false">Cylinder</item>
+ <item>@string/icon_shape_system_default</item>
+ <item>@string/icon_shape_square</item>
+ <item>@string/icon_shape_squircle</item>
+ <item>@string/icon_shape_circle</item>
+ <item>@string/icon_shape_teardrop</item>
</string-array>
+
<!-- DragController -->
<item type="id" name="drag_event_parity" />
@@ -106,6 +105,9 @@
<!-- Name of a user event dispatcher class. -->
<string name="user_event_dispatcher_class" translatable="false"></string>
+ <!-- Name of a color extraction implementation class. -->
+ <string name="color_extraction_impl_class" translatable="false"></string>
+
<!-- Package name of the default wallpaper picker. -->
<string name="wallpaper_picker_package" translatable="false"></string>
@@ -140,4 +142,5 @@
<item type="id" name="action_move_screen_forwards" />
<item type="id" name="action_resize" />
<item type="id" name="action_deep_shortcuts" />
+ <item type="id" name="action_dismiss_notification" />
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 6add64d..110e790 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -48,11 +48,6 @@
<dimen name="resize_frame_background_padding">24dp</dimen>
<!-- Container -->
- <!-- Note: This needs to match the fixed insets for the search box. -->
- <dimen name="container_bounds_inset">8dp</dimen>
- <!-- Notes: container_bounds_inset - quantum_panel_outer_padding -->
- <dimen name="container_bounds_minus_quantum_panel_padding_inset">4dp</dimen>
-
<dimen name="container_fastscroll_thumb_min_width">5dp</dimen>
<dimen name="container_fastscroll_thumb_max_width">9dp</dimen>
<dimen name="container_fastscroll_popup_margin">18dp</dimen>
@@ -65,9 +60,6 @@
<dimen name="all_apps_button_scale_down">0dp</dimen>
<dimen name="all_apps_search_bar_field_height">48dp</dimen>
<dimen name="all_apps_search_bar_height">60dp</dimen>
- <dimen name="all_apps_search_bar_icon_margin_right">4dp</dimen>
- <dimen name="all_apps_search_bar_icon_margin_top">1dp</dimen>
- <dimen name="all_apps_list_bottom_padding">8dp</dimen>
<dimen name="all_apps_empty_search_message_top_offset">40dp</dimen>
<dimen name="all_apps_empty_search_bg_top_offset">144dp</dimen>
<dimen name="all_apps_background_canvas_width">700dp</dimen>
@@ -112,6 +104,7 @@
<!-- Drag padding to add to the bottom of drop targets -->
<dimen name="drop_target_drag_padding">14dp</dimen>
<dimen name="drop_target_text_size">14sp</dimen>
+ <dimen name="drop_target_shadow_elevation">2dp</dimen>
<!-- the distance an icon must be dragged before button drop targets accept it -->
<dimen name="drag_distanceThreshold">30dp</dimen>
@@ -126,7 +119,7 @@
<!-- Folders -->
<!-- The size of the padding on the preview background drawable -->
- <dimen name="folder_preview_padding">6dp</dimen>
+ <dimen name="folder_preview_padding">10dp</dimen>
<dimen name="page_indicator_dot_size">8dp</dimen>
<dimen name="folder_cell_x_padding">9dp</dimen>
@@ -146,7 +139,6 @@
<dimen name="blur_size_medium_outline">2dp</dimen>
<dimen name="blur_size_click_shadow">4dp</dimen>
<dimen name="click_shadow_high_shift">2dp</dimen>
- <dimen name="drawable_shadow_size">2dp</dimen>
<!-- Pending widget -->
<dimen name="pending_widget_min_padding">8dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4bee87d..24a7b88 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -159,7 +159,7 @@
<!-- Text for wallpaper change button -->
<string name="wallpaper_button_text">Wallpapers</string>
<!-- Text for settings button -->
- <string name="settings_button_text">Settings</string>
+ <string name="settings_button_text">Home settings</string>
<!-- Message shown when a feature is disabled by the administrator -->
<string name="msg_disabled_by_admin">Disabled by your admin</string>
<!-- Text for custom accessibility action to go to the overview mode, where users can look and change the overall UI of the launcher. -->
@@ -172,6 +172,12 @@
<string name="allow_rotation_desc">When phone is rotated</string>
<!-- Text explaining that rotation is disabled in Display settings. 'Display' refers to the Display section in system settings [CHAR LIMIT=100] -->
<string name="allow_rotation_blocked_desc">Current Display setting doesn\'t permit rotation</string>
+ <!-- Title for Icon Badging setting. Tapping this will link to the system Notifications Settings screen where the user can turn off badging globally. [CHAR LIMIT=50] -->
+ <string name="icon_badging_title">Icon badging</string>
+ <!-- Text to indicate that the system icon badging setting is on [CHAR LIMIT=100] -->
+ <string name="icon_badging_desc_on">On for all apps</string>
+ <!-- Text to indicate that the system icon badging setting is off [CHAR LIMIT=100] -->
+ <string name="icon_badging_desc_off">Off for all apps</string>
<!-- Label for the setting that allows the automatic placement of launcher shortcuts for applications and games installed on the device [CHAR LIMIT=40] -->
<string name="auto_add_shortcuts_label">Add icon to Home screen</string>
@@ -180,8 +186,17 @@
<!-- Developer setting to change the shape of icons on home screen. [CHAR LIMIT=50] -->
<string name="icon_shape_override_label">Change icon shape</string>
- <!-- Option to not change the icon shape on home screen. [CHAR LIMIT=50] -->
- <string name="icon_shape_no_override">Do not change</string>
+ <!-- Option to not change the icon shape on home screen and use the system default setting instead. [CHAR LIMIT=50] -->
+ <string name="icon_shape_system_default">Use system default</string>
+ <!-- Option to change the shape of the home screen icons to a square. [CHAR LIMIT=50] -->
+ <string name="icon_shape_square">Square</string>
+ <!-- Option to change the shape of the home screen icons to a squircle. This represents the name of the shape somewhere between a circle and a square. [CHAR LIMIT=50] -->
+ <string name="icon_shape_squircle">Squircle</string>
+ <!-- Option to change the shape of the home screen icons to a circle. [CHAR LIMIT=50] -->
+ <string name="icon_shape_circle">Circle</string>
+ <!-- Option to change the shape of the home screen icons to a teardrop. This represents the name of the shape similar to a circle with with the bottom right corner pushed out like a square [CHAR LIMIT=50] -->
+ <string name="icon_shape_teardrop">Teardrop</string>
+
<!-- Message shown in the progress dialog when the icon shape override is being applied [CHAR LIMIT=100]-->
<string name="icon_shape_override_progress">Applying icon shape changes</string>
@@ -286,5 +301,13 @@
<!-- Accessibility description for the shortcuts menu shown for an app. -->
<string name="shortcuts_menu_description"><xliff:g id="number_of_shortcuts" example="3">%1$d</xliff:g> shortcuts for <xliff:g id="app_name" example="Messenger">%2$s</xliff:g></string>
+ <!-- Accessibility description when the shortcuts menu has notifications as well as shortcuts. -->
+ <string name="shortcuts_menu_with_notifications_description"><xliff:g id="number_of_shortcuts" example="3">%1$d</xliff:g> shortcuts and <xliff:g id="number_of_notifications" example="3">%2$d</xliff:g> notifications for <xliff:g id="app_name" example="Messenger">%3$s</xliff:g></string>
+
+ <!-- Accessibility action to dismiss a notification in the shortcuts menu for an icon. [CHAR_LIMIT=30] -->
+ <string name="action_dismiss_notification">Dismiss</string>
+
+ <!-- Accessibility confirmation for notification being dismissed. -->
+ <string name="notification_dismissed">Notification dismissed</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e2d9ff4..f75ca4e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -26,10 +26,23 @@
<item name="android:windowNoTitle">true</item>
<item name="android:colorEdgeEffect">#FF757575</item>
<item name="android:keyboardLayout">@layout/all_apps_search_container</item>
+ <item name="allAppsScrimColor">#DDFFFFFF</item>
+ <item name="isPrimaryColorDark">false</item>
</style>
<style name="LauncherTheme" parent="@style/BaseLauncherTheme"></style>
+ <style name="LauncherThemeDark" parent="@style/LauncherTheme">
+ <item name="android:textColorSecondary">#FFFFFFFF</item>
+ <item name="android:textColorTertiary">#CCFFFFFF</item>
+ <item name="android:textColorHint">#A0FFFFFF</item>
+
+ <item name="android:colorControlHighlight">#A0FFFFFF</item>
+ <item name="android:colorPrimary">#FF333333</item>
+ <item name="allAppsScrimColor">#33000000</item>
+ <item name="isPrimaryColorDark">true</item>
+ </style>
+
<!--
Theme overrides to element on homescreen, i.e., which are drawn on top on wallpaper.
Various foreground colors are overridden to be white so that they are properly visible on
@@ -93,17 +106,11 @@
</style>
<!-- Theme for the popup container -->
- <style name="PopupContainer" parent="@style/LauncherTheme">
- <!-- TODO: move hardcoded colors from colors.xml to this theme and use for popup items -->
- </style>
- <style name="IconOnlySystemShortcut">
- <!-- The icons use this color, then are tinted -->
- <item name="android:textColorPrimary">@android:color/white</item>
+ <!-- TODO: Add support for dark theme in shortcuts and widgets popup -->
+ <style name="IconOnlySystemShortcut" parent="@style/LauncherTheme">
<item name="android:tint">?android:attr/textColorHint</item>
</style>
- <style name="IconWithTextSystemShortcut">
- <!-- The icons use this color, then are tinted -->
- <item name="android:textColorPrimary">@android:color/white</item>
+ <style name="IconWithTextSystemShortcut" parent="@style/LauncherTheme">
<item name="android:backgroundTint">?android:attr/textColorTertiary</item>
</style>
diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml
index 301bef1..8763883 100644
--- a/res/xml/launcher_preferences.xml
+++ b/res/xml/launcher_preferences.xml
@@ -17,13 +17,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
- android:key="pref_allowRotation"
- android:title="@string/allow_rotation_title"
- android:defaultValue="@bool/allow_rotation"
- android:persistent="true"
- />
-
- <SwitchPreference
android:key="pref_add_icon_to_home"
android:title="@string/auto_add_shortcuts_label"
android:summary="@string/auto_add_shortcuts_description"
@@ -40,4 +33,23 @@
android:defaultValue=""
android:persistent="false" />
+ <Preference
+ android:key="pref_icon_badging"
+ android:title="@string/icon_badging_title"
+ android:persistent="false">
+ <intent android:action="android.settings.NOTIFICATION_SETTINGS">
+ <!-- This extra highlights the "Allow icon badges" field in Notification settings -->
+ <extra
+ android:name=":settings:fragment_args_key"
+ android:value="notification_badging" />
+ </intent>
+ </Preference>/>
+
+ <SwitchPreference
+ android:key="pref_allowRotation"
+ android:title="@string/allow_rotation_title"
+ android:defaultValue="@bool/allow_rotation"
+ android:persistent="true"
+ />
+
</PreferenceScreen>
diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java
index be0192b..8ac8570 100644
--- a/src/com/android/launcher3/AllAppsList.java
+++ b/src/com/android/launcher3/AllAppsList.java
@@ -45,15 +45,13 @@
public static final int DEFAULT_APPLICATIONS_NUMBER = 42;
/** The list off all apps. */
- public ArrayList<AppInfo> data =
- new ArrayList<AppInfo>(DEFAULT_APPLICATIONS_NUMBER);
+ public final ArrayList<AppInfo> data = new ArrayList<>(DEFAULT_APPLICATIONS_NUMBER);
/** The list of apps that have been added since the last notify() call. */
- public ArrayList<AppInfo> added =
- new ArrayList<AppInfo>(DEFAULT_APPLICATIONS_NUMBER);
+ public ArrayList<AppInfo> added = new ArrayList<>(DEFAULT_APPLICATIONS_NUMBER);
/** The list of apps that have been removed since the last notify() call. */
- public ArrayList<AppInfo> removed = new ArrayList<AppInfo>();
+ public ArrayList<AppInfo> removed = new ArrayList<>();
/** The list of apps that have been modified since the last notify() call. */
- public ArrayList<AppInfo> modified = new ArrayList<AppInfo>();
+ public ArrayList<AppInfo> modified = new ArrayList<>();
private IconCache mIconCache;
diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java
index 410d590..08cd955 100644
--- a/src/com/android/launcher3/BaseActivity.java
+++ b/src/com/android/launcher3/BaseActivity.java
@@ -39,7 +39,7 @@
public final UserEventDispatcher getUserEventDispatcher() {
if (mUserEventDispatcher == null) {
mUserEventDispatcher = UserEventDispatcher.newInstance(this,
- isInMultiWindowModeCompat());
+ mDeviceProfile.isLandscape, isInMultiWindowModeCompat());
}
return mUserEventDispatcher;
}
diff --git a/src/com/android/launcher3/BaseRecyclerView.java b/src/com/android/launcher3/BaseRecyclerView.java
index c056336..1e6d894 100644
--- a/src/com/android/launcher3/BaseRecyclerView.java
+++ b/src/com/android/launcher3/BaseRecyclerView.java
@@ -113,6 +113,7 @@
* it is already showing).
*/
private boolean handleTouchEvent(MotionEvent ev) {
+ ev.offsetLocation(0, -getPaddingTop());
int action = ev.getAction();
int x = (int) ev.getX();
int y = (int) ev.getY();
@@ -136,6 +137,7 @@
mScrollbar.handleTouchEvent(ev, mDownX, mDownY, mLastY);
break;
}
+ ev.offsetLocation(0, getPaddingTop());
return mScrollbar.isDraggingThumb();
}
@@ -162,7 +164,7 @@
* Returns the height of the fast scroll bar
*/
protected int getScrollbarTrackHeight() {
- return getHeight();
+ return getHeight() - getPaddingTop() - getPaddingBottom();
}
/**
diff --git a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java
index 5feb42e..3039744 100644
--- a/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java
+++ b/src/com/android/launcher3/BaseRecyclerViewFastScrollBar.java
@@ -136,6 +136,7 @@
mTmpRect.set(drawLeft, mThumbOffsetY, drawLeft + mMaxWidth, mThumbOffsetY + mThumbHeight);
mThumbOffsetY = y;
mTmpRect.union(drawLeft, mThumbOffsetY, drawLeft + mMaxWidth, mThumbOffsetY + mThumbHeight);
+ mTmpRect.offset(0, mRv.getPaddingTop());
mRv.invalidate(mTmpRect);
}
@@ -148,8 +149,9 @@
return;
}
int left = getDrawLeft();
+ int top = mRv.getPaddingTop();
// Invalidate the whole scroll bar area.
- mRv.invalidate(left, 0, left + mMaxWidth, mRv.getScrollbarTrackHeight());
+ mRv.invalidate(left, top, left + mMaxWidth, top + mRv.getScrollbarTrackHeight());
mWidth = width;
updateThumbPath();
@@ -265,6 +267,7 @@
if (!mIsRtl) {
canvas.translate(mRv.getWidth(), 0);
}
+ canvas.translate(0, mRv.getPaddingTop());
// Draw the track
int thumbWidth = mIsRtl ? mWidth : -mWidth;
canvas.drawRect(0, 0, thumbWidth, mRv.getScrollbarTrackHeight(), mTrackPaint);
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 07236d6a..1f7eba8 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -23,10 +23,12 @@
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Property;
@@ -93,6 +95,7 @@
private final int mIconSize;
@ViewDebug.ExportedProperty(category = "launcher")
private int mTextColor;
+ private boolean mIsIconVisible = true;
private BadgeInfo mBadgeInfo;
private BadgeRenderer mBadgeRenderer;
@@ -457,7 +460,7 @@
final int scrollX = getScrollX();
final int scrollY = getScrollY();
canvas.translate(scrollX, scrollY);
- mBadgeRenderer.draw(canvas, mIconPalette, mBadgeInfo, mTempIconBounds, mBadgeScale,
+ mBadgeRenderer.draw(canvas, mBadgeInfo, mTempIconBounds, mBadgeScale,
mTempSpaceForBadgeOffset);
canvas.translate(-scrollX, -scrollY);
}
@@ -609,7 +612,21 @@
private void setIcon(Drawable icon) {
mIcon = icon;
mIcon.setBounds(0, 0, mIconSize, mIconSize);
- applyCompoundDrawables(mIcon);
+ if (mIsIconVisible) {
+ applyCompoundDrawables(mIcon);
+ }
+ }
+
+ public void setIconVisible(boolean visible) {
+ mIsIconVisible = visible;
+ mDisableRelayout = true;
+ Drawable icon = mIcon;
+ if (!visible) {
+ icon = new ColorDrawable(Color.TRANSPARENT);
+ icon.setBounds(0, 0, mIconSize, mIconSize);
+ }
+ applyCompoundDrawables(icon);
+ mDisableRelayout = false;
}
protected void applyCompoundDrawables(Drawable icon) {
@@ -674,14 +691,6 @@
}
}
- /**
- * Returns true if the view can show custom shortcuts.
- */
- public boolean hasDeepShortcuts() {
- return !mLauncher.getPopupDataProvider().getShortcutIdsForItem((ItemInfo) getTag())
- .isEmpty();
- }
-
public int getIconSize() {
return mIconSize;
}
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index c0946a0..78030ce 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -542,11 +542,8 @@
}
public void setFolderLeaveBehindCell(int x, int y) {
-
- DeviceProfile grid = mLauncher.getDeviceProfile();
View child = getChildAt(x, y);
-
- mFolderLeaveBehind.setup(getResources().getDisplayMetrics(), grid, null,
+ mFolderLeaveBehind.setup(mLauncher, null,
child.getMeasuredWidth(), child.getPaddingTop());
mFolderLeaveBehind.delegateCellX = x;
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index c32f2d5..508fc34 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -113,9 +113,9 @@
public int hotseatCellHeightPx;
public int hotseatIconSizePx;
public int hotseatBarHeightPx;
- private int hotseatBarTopPaddingPx;
- private int hotseatBarBottomPaddingPx;
- private int hotseatLandGutterPx;
+ public int hotseatBarTopPaddingPx;
+ public int hotseatBarBottomPaddingPx;
+ public int hotseatLandGutterPx;
// All apps
public int allAppsNumCols;
@@ -231,9 +231,6 @@
profile.cellHeightPx = profile.iconSizePx + profile.iconDrawablePaddingPx
+ Utilities.calculateTextHeight(profile.iconTextSizePx);
- // The nav bar is black so we add bottom padding to visually center hotseat icons.
- profile.hotseatBarBottomPaddingPx = profile.hotseatBarTopPaddingPx;
-
// We use these scales to measure and layout the widgets using their full invariant profile
// sizes and then draw them scaled and centered to fit in their multi-window mode cellspans.
float appWidgetScaleX = (float) profile.getCellSize().x / getCellSize().x;
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java
index 0041bb4..21254ab 100644
--- a/src/com/android/launcher3/FolderInfo.java
+++ b/src/com/android/launcher3/FolderInfo.java
@@ -65,9 +65,17 @@
* @param item
*/
public void add(ShortcutInfo item, boolean animate) {
- contents.add(item);
+ add(item, contents.size(), animate);
+ }
+
+ /**
+ * Add an app or shortcut for a specified rank.
+ */
+ public void add(ShortcutInfo item, int rank, boolean animate) {
+ rank = Utilities.boundToRange(rank, 0, contents.size());
+ contents.add(rank, item);
for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onAdd(item);
+ listeners.get(i).onAdd(item, rank);
}
itemsChanged(animate);
}
@@ -121,7 +129,7 @@
}
public interface FolderListener {
- public void onAdd(ShortcutInfo item);
+ public void onAdd(ShortcutInfo item, int rank);
public void onRemove(ShortcutInfo item);
public void onTitleChanged(CharSequence title);
public void onItemsChanged(boolean animate);
diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java
index 1217030..ad816af 100644
--- a/src/com/android/launcher3/IconCache.java
+++ b/src/com/android/launcher3/IconCache.java
@@ -32,10 +32,6 @@
import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Handler;
@@ -55,7 +51,6 @@
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.Provider;
import com.android.launcher3.util.SQLiteCacheHelper;
-import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Thunk;
import java.util.Collections;
@@ -100,24 +95,14 @@
@Thunk final UserManagerCompat mUserManager;
private final LauncherAppsCompat mLauncherApps;
private final HashMap<ComponentKey, CacheEntry> mCache =
- new HashMap<ComponentKey, CacheEntry>(INITIAL_ICON_CACHE_CAPACITY);
+ new HashMap<>(INITIAL_ICON_CACHE_CAPACITY);
private final int mIconDpi;
@Thunk final IconDB mIconDb;
@Thunk final Handler mWorkerHandler;
- // The background color used for activity icons. Since these icons are displayed in all-apps
- // and folders, this would be same as the light quantum panel background. This color
- // is used to convert icons to RGB_565.
- private final int mActivityBgColor;
- // The background color used for package icons. These are displayed in widget tray, which
- // has a dark quantum panel background.
- private final int mPackageBgColor;
private final BitmapFactory.Options mLowResOptions;
- private Canvas mLowResCanvas;
- private Paint mLowResPaint;
-
public IconCache(Context context, InvariantDeviceProfile inv) {
mContext = context;
mPackageManager = context.getPackageManager();
@@ -125,16 +110,11 @@
mLauncherApps = LauncherAppsCompat.getInstance(mContext);
mIconDpi = inv.fillResIconDpi;
mIconDb = new IconDB(context, inv.iconBitmapSize);
- mLowResCanvas = new Canvas();
- mLowResPaint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG);
mIconProvider = Utilities.getOverrideObject(
IconProvider.class, context, R.string.icon_provider_class);
mWorkerHandler = new Handler(LauncherModel.getWorkerLooper());
- mActivityBgColor = Themes.getColorPrimary(context, R.style.LauncherTheme);
- mPackageBgColor = Themes.getColorPrimary(context, R.style.WidgetContainerTheme);
-
mLowResOptions = new BitmapFactory.Options();
// Always prefer RGB_565 config for low res. If the bitmap has transparency, it will
// automatically be loaded as ALPHA_8888.
@@ -387,7 +367,7 @@
entry.contentDescription = mUserManager.getBadgedLabelForUser(entry.title, app.getUser());
mCache.put(key, entry);
- Bitmap lowResIcon = generateLowResIcon(entry.icon, mActivityBgColor);
+ Bitmap lowResIcon = generateLowResIcon(entry.icon);
ContentValues values = newContentValues(entry.icon, lowResIcon, entry.title.toString(),
app.getApplicationInfo().packageName);
addIconToDB(values, app.getComponentName(), info, userSerial);
@@ -637,7 +617,7 @@
// only keep the low resolution icon instead of the larger full-sized icon
Bitmap icon = LauncherIcons.createBadgedIconBitmap(
appInfo.loadIcon(mPackageManager), user, mContext, appInfo.targetSdkVersion);
- Bitmap lowResIcon = generateLowResIcon(icon, mPackageBgColor);
+ Bitmap lowResIcon = generateLowResIcon(icon);
entry.title = appInfo.loadLabel(mPackageManager);
entry.contentDescription = mUserManager.getBadgedLabelForUser(entry.title, user);
entry.icon = useLowResIcon ? lowResIcon : icon;
@@ -769,7 +749,7 @@
}
private static final class IconDB extends SQLiteCacheHelper {
- private final static int DB_VERSION = 13;
+ private final static int DB_VERSION = 14;
private final static int RELEASE_VERSION = DB_VERSION +
(FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION ? 0 : 1);
@@ -822,24 +802,10 @@
/**
* Generates a new low-res icon given a high-res icon.
*/
- private Bitmap generateLowResIcon(Bitmap icon, int lowResBackgroundColor) {
- if (lowResBackgroundColor == Color.TRANSPARENT) {
- return Bitmap.createScaledBitmap(icon,
- icon.getWidth() / LOW_RES_SCALE_FACTOR,
- icon.getHeight() / LOW_RES_SCALE_FACTOR, true);
- } else {
- Bitmap lowResIcon = Bitmap.createBitmap(icon.getWidth() / LOW_RES_SCALE_FACTOR,
- icon.getHeight() / LOW_RES_SCALE_FACTOR, Bitmap.Config.RGB_565);
- synchronized (this) {
- mLowResCanvas.setBitmap(lowResIcon);
- mLowResCanvas.drawColor(lowResBackgroundColor);
- mLowResCanvas.drawBitmap(icon, new Rect(0, 0, icon.getWidth(), icon.getHeight()),
- new Rect(0, 0, lowResIcon.getWidth(), lowResIcon.getHeight()),
- mLowResPaint);
- mLowResCanvas.setBitmap(null);
- }
- return lowResIcon;
- }
+ private Bitmap generateLowResIcon(Bitmap icon) {
+ return Bitmap.createScaledBitmap(icon,
+ icon.getWidth() / LOW_RES_SCALE_FACTOR,
+ icon.getHeight() / LOW_RES_SCALE_FACTOR, true);
}
private static Bitmap loadIconNoResize(Cursor c, int iconIndex, BitmapFactory.Options options) {
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index ce85570..b136e7d 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -34,6 +34,7 @@
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
+import android.util.Pair;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.UserManagerCompat;
@@ -59,6 +60,16 @@
import java.util.Set;
public class InstallShortcutReceiver extends BroadcastReceiver {
+
+ public static final int FLAG_ACTIVITY_PAUSED = 1;
+ public static final int FLAG_LOADER_RUNNING = 2;
+ public static final int FLAG_DRAG_AND_DROP = 4;
+ public static final int FLAG_BULK_ADD = 4;
+
+ // Determines whether to defer installing shortcuts immediately until
+ // processAllPendingInstalls() is called.
+ private static int sInstallQueueDisabledFlags = 0;
+
private static final String TAG = "InstallShortcutReceiver";
private static final boolean DBG = false;
@@ -151,10 +162,6 @@
}
}
- // Determines whether to defer installing shortcuts immediately until
- // processAllPendingInstalls() is called.
- private static boolean mUseInstallQueue = false;
-
public void onReceive(Context context, Intent data) {
if (!ACTION_INSTALL_SHORTCUT.equals(data.getAction())) {
return;
@@ -207,7 +214,7 @@
public static ShortcutInfo fromShortcutIntent(Context context, Intent data) {
PendingInstallShortcutInfo info = createPendingInfo(context, data);
- return info == null ? null : (ShortcutInfo) info.getItemInfo();
+ return info == null ? null : (ShortcutInfo) info.getItemInfo().first;
}
public static void queueShortcut(ShortcutInfoCompat info, Context context) {
@@ -245,27 +252,28 @@
private static void queuePendingShortcutInfo(PendingInstallShortcutInfo info, Context context) {
// Queue the item up for adding if launcher has not loaded properly yet
- LauncherAppState app = LauncherAppState.getInstance(context);
- boolean launcherNotLoaded = app.getModel().getCallback() == null;
-
addToInstallQueue(Utilities.getPrefs(context), info);
- if (!mUseInstallQueue && !launcherNotLoaded) {
- flushInstallQueue(context);
- }
+ flushInstallQueue(context);
}
- static void enableInstallQueue() {
- mUseInstallQueue = true;
+ public static void enableInstallQueue(int flag) {
+ sInstallQueueDisabledFlags |= flag;
}
- static void disableAndFlushInstallQueue(Context context) {
- mUseInstallQueue = false;
+ public static void disableAndFlushInstallQueue(int flag, Context context) {
+ sInstallQueueDisabledFlags &= ~flag;
flushInstallQueue(context);
}
static void flushInstallQueue(Context context) {
+ LauncherModel model = LauncherAppState.getInstance(context).getModel();
+ boolean launcherNotLoaded = model.getCallback() == null;
+ if (sInstallQueueDisabledFlags != 0 || launcherNotLoaded) {
+ return;
+ }
+
ArrayList<PendingInstallShortcutInfo> items = getAndClearInstallQueue(context);
if (!items.isEmpty()) {
- LauncherAppState.getInstance(context).getModel().addAndBindAddedWorkspaceItems(
+ model.addAndBindAddedWorkspaceItems(
new LazyShortcutsProvider(context.getApplicationContext(), items));
}
}
@@ -439,7 +447,7 @@
}
}
- public ItemInfo getItemInfo() {
+ public Pair<ItemInfo, Object> getItemInfo() {
if (activityInfo != null) {
AppInfo appInfo = new AppInfo(mContext, activityInfo, user);
final LauncherAppState app = LauncherAppState.getInstance(mContext);
@@ -459,11 +467,11 @@
}
});
}
- return si;
+ return Pair.create((ItemInfo) si, (Object) activityInfo);
} else if (shortcutInfo != null) {
ShortcutInfo si = new ShortcutInfo(shortcutInfo, mContext);
si.iconBitmap = LauncherIcons.createShortcutIcon(shortcutInfo, mContext);
- return si;
+ return Pair.create((ItemInfo) si, (Object) shortcutInfo);
} else if (providerInfo != null) {
LauncherAppWidgetProviderInfo info = LauncherAppWidgetProviderInfo
.fromProviderInfo(mContext, providerInfo);
@@ -475,9 +483,10 @@
widgetInfo.minSpanY = info.minSpanY;
widgetInfo.spanX = Math.min(info.spanX, idp.numColumns);
widgetInfo.spanY = Math.min(info.spanY, idp.numRows);
- return widgetInfo;
+ return Pair.create((ItemInfo) widgetInfo, (Object) providerInfo);
} else {
- return createShortcutInfo(data, LauncherAppState.getInstance(mContext));
+ ShortcutInfo si = createShortcutInfo(data, LauncherAppState.getInstance(mContext));
+ return Pair.create((ItemInfo) si, null);
}
}
@@ -588,7 +597,7 @@
return new PendingInstallShortcutInfo(info, original.mContext);
}
- private static class LazyShortcutsProvider extends Provider<List<ItemInfo>> {
+ private static class LazyShortcutsProvider extends Provider<List<Pair<ItemInfo, Object>>> {
private final Context mContext;
private final ArrayList<PendingInstallShortcutInfo> mPendingItems;
@@ -603,9 +612,9 @@
* packageManager and icon cache.
*/
@Override
- public ArrayList<ItemInfo> get() {
+ public ArrayList<Pair<ItemInfo, Object>> get() {
Preconditions.assertNonUiThread();
- ArrayList<ItemInfo> installQueue = new ArrayList<>();
+ ArrayList<Pair<ItemInfo, Object>> installQueue = new ArrayList<>();
LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(mContext);
for (PendingInstallShortcutInfo pendingInfo : mPendingItems) {
// If the intent specifies a package, make sure the package exists
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 17d401c..ff7ca81 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -84,13 +84,14 @@
import com.android.launcher3.DropTarget.DragObject;
import com.android.launcher3.LauncherSettings.Favorites;
+import com.android.launcher3.Workspace.ItemOperator;
import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.allapps.AllAppsTransitionController;
import com.android.launcher3.anim.AnimationLayerSet;
import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.compat.LauncherAppsCompat;
-import com.android.launcher3.compat.PinItemRequestCompat;
+import com.android.launcher3.compat.LauncherAppsCompatVO;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
@@ -98,6 +99,7 @@
import com.android.launcher3.dragndrop.DragView;
import com.android.launcher3.dragndrop.PinItemDragListener;
import com.android.launcher3.dynamicui.ExtractedColors;
+import com.android.launcher3.dynamicui.WallpaperColorInfo;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.keyboard.CustomActionsPopup;
@@ -148,7 +150,8 @@
public class Launcher extends BaseActivity
implements LauncherExterns, View.OnClickListener, OnLongClickListener,
LauncherModel.Callbacks, View.OnTouchListener, LauncherProviderChangeListener,
- AccessibilityManager.AccessibilityStateChangeListener {
+ AccessibilityManager.AccessibilityStateChangeListener,
+ WallpaperColorInfo.OnThemeChangeListener {
public static final String TAG = "Launcher";
static final boolean LOGD = false;
@@ -158,14 +161,15 @@
private static final int REQUEST_CREATE_SHORTCUT = 1;
private static final int REQUEST_CREATE_APPWIDGET = 5;
+
private static final int REQUEST_PICK_APPWIDGET = 9;
private static final int REQUEST_PICK_WALLPAPER = 10;
private static final int REQUEST_BIND_APPWIDGET = 11;
- private static final int REQUEST_BIND_PENDING_APPWIDGET = 14;
- private static final int REQUEST_RECONFIGURE_APPWIDGET = 12;
+ private static final int REQUEST_BIND_PENDING_APPWIDGET = 12;
+ private static final int REQUEST_RECONFIGURE_APPWIDGET = 13;
- private static final int REQUEST_PERMISSION_CALL_PHONE = 13;
+ private static final int REQUEST_PERMISSION_CALL_PHONE = 14;
private static final float BOUNCE_ANIMATION_TENSION = 1.3f;
@@ -363,6 +367,10 @@
mLauncherCallbacks.preOnCreate();
}
+ WallpaperColorInfo wallpaperColorInfo = WallpaperColorInfo.getInstance(this);
+ wallpaperColorInfo.setOnThemeChangeListener(this);
+ overrideTheme(wallpaperColorInfo.isDark());
+
super.onCreate(savedInstanceState);
LauncherAppState app = LauncherAppState.getInstance(this);
@@ -462,6 +470,17 @@
}
@Override
+ public void onThemeChanged() {
+ recreate();
+ }
+
+ protected void overrideTheme(boolean isDark) {
+ if (isDark) {
+ setTheme(R.style.LauncherThemeDark);
+ }
+ }
+
+ @Override
public View findViewById(int id) {
return mLauncherView.findViewById(id);
}
@@ -489,13 +508,6 @@
mExtractedColors.load(this);
mHotseat.updateColor(mExtractedColors, !mPaused);
mWorkspace.getPageIndicator().updateColor(mExtractedColors);
- boolean lightStatusBar = (FeatureFlags.LIGHT_STATUS_BAR &&
- mExtractedColors.getColor(ExtractedColors.STATUS_BAR_INDEX) ==
- ExtractedColors.DEFAULT_LIGHT);
- // It's possible that All Apps is visible when this is run,
- // so always use light status bar in that case. Only change nav bar color to status bar
- // color when All Apps is visible.
- activateLightSystemBars(lightStatusBar || isAllAppsVisible(), true, isAllAppsVisible());
}
}
@@ -1033,13 +1045,12 @@
updateInteraction(Workspace.State.NORMAL, mWorkspace.getState());
mWorkspace.onResume();
- if (!isWorkspaceLoading()) {
- // Process any items that were added while Launcher was away.
- InstallShortcutReceiver.disableAndFlushInstallQueue(this);
+ // Process any items that were added while Launcher was away.
+ InstallShortcutReceiver.disableAndFlushInstallQueue(
+ InstallShortcutReceiver.FLAG_ACTIVITY_PAUSED, this);
- // Refresh shortcuts if the permission changed.
- mModel.refreshShortcutsIfRequired();
- }
+ // Refresh shortcuts if the permission changed.
+ mModel.refreshShortcutsIfRequired();
if (shouldShowDiscoveryBounce()) {
mAllAppsController.showDiscoveryBounce();
@@ -1054,7 +1065,7 @@
@Override
protected void onPause() {
// Ensure that items added to Launcher are queued until Launcher returns
- InstallShortcutReceiver.enableInstallQueue();
+ InstallShortcutReceiver.enableInstallQueue(InstallShortcutReceiver.FLAG_ACTIVITY_PAUSED);
super.onPause();
mPaused = true;
@@ -1404,24 +1415,24 @@
}
/**
- * Add a shortcut to the workspace.
+ * Add a shortcut to the workspace or to a Folder.
*
* @param data The intent describing the shortcut.
*/
private void completeAddShortcut(Intent data, long container, long screenId, int cellX,
int cellY, PendingRequestArgs args) {
- int[] cellXY = mTmpAddItemCellCoordinates;
- CellLayout layout = getCellLayout(container, screenId);
-
- if (args.getRequestCode() != REQUEST_CREATE_SHORTCUT ||
- args.getPendingIntent().getComponent() == null) {
+ if (args.getRequestCode() != REQUEST_CREATE_SHORTCUT
+ || args.getPendingIntent().getComponent() == null) {
return;
}
+ int[] cellXY = mTmpAddItemCellCoordinates;
+ CellLayout layout = getCellLayout(container, screenId);
+
ShortcutInfo info = null;
if (Utilities.isAtLeastO()) {
- info = LauncherAppsCompat.createShortcutInfoFromPinItemRequest(
- this, PinItemRequestCompat.getPinItemRequest(data), 0);
+ info = LauncherAppsCompatVO.createShortcutInfoFromPinItemRequest(
+ this, LauncherAppsCompatVO.getPinItemRequest(data), 0);
}
if (info == null) {
@@ -1440,36 +1451,55 @@
}
}
- final View view = createShortcut(info);
- boolean foundCellSpan = false;
- // First we check if we already know the exact location where we want to add this item.
- if (cellX >= 0 && cellY >= 0) {
- cellXY[0] = cellX;
- cellXY[1] = cellY;
- foundCellSpan = true;
+ if (container < 0) {
+ // Adding a shortcut to the Workspace.
+ final View view = createShortcut(info);
+ boolean foundCellSpan = false;
+ // First we check if we already know the exact location where we want to add this item.
+ if (cellX >= 0 && cellY >= 0) {
+ cellXY[0] = cellX;
+ cellXY[1] = cellY;
+ foundCellSpan = true;
- // If appropriate, either create a folder or add to an existing folder
- if (mWorkspace.createUserFolderIfNecessary(view, container, layout, cellXY, 0,
- true, null,null)) {
+ // If appropriate, either create a folder or add to an existing folder
+ if (mWorkspace.createUserFolderIfNecessary(view, container, layout, cellXY, 0,
+ true, null, null)) {
+ return;
+ }
+ DragObject dragObject = new DragObject();
+ dragObject.dragInfo = info;
+ if (mWorkspace.addToExistingFolderIfNecessary(view, layout, cellXY, 0, dragObject,
+ true)) {
+ return;
+ }
+ } else {
+ foundCellSpan = layout.findCellForSpan(cellXY, 1, 1);
+ }
+
+ if (!foundCellSpan) {
+ mWorkspace.onNoCellFound(layout);
return;
}
- DragObject dragObject = new DragObject();
- dragObject.dragInfo = info;
- if (mWorkspace.addToExistingFolderIfNecessary(view, layout, cellXY, 0, dragObject,
- true)) {
- return;
- }
+
+ getModelWriter().addItemToDatabase(info, container, screenId, cellXY[0], cellXY[1]);
+ mWorkspace.addInScreen(view, info);
} else {
- foundCellSpan = layout.findCellForSpan(cellXY, 1, 1);
- }
+ // Adding a shortcut to a Folder.
+ final long folderIconId = container;
+ FolderIcon folderIcon = (FolderIcon) mWorkspace.getFirstMatch(new ItemOperator() {
+ @Override
+ public boolean evaluate(ItemInfo info, View view) {
+ return info != null && info.id == folderIconId;
+ }
+ });
- if (!foundCellSpan) {
- mWorkspace.onNoCellFound(layout);
- return;
+ if (folderIcon != null) {
+ FolderInfo folderInfo = (FolderInfo) folderIcon.getTag();
+ folderInfo.add(info, args.rank, false);
+ } else {
+ Log.e(TAG, "Could not find folder with id " + folderIconId + " to add shortcut.");
+ }
}
-
- getModelWriter().addItemToDatabase(info, container, screenId, cellXY[0], cellXY[1]);
- mWorkspace.addInScreen(view, info);
}
/**
@@ -1843,6 +1873,8 @@
((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE))
.removeAccessibilityStateChangeListener(this);
+ WallpaperColorInfo.getInstance(this).setOnThemeChangeListener(null);
+
LauncherAnimUtils.onDestroyActivity();
if (mLauncherCallbacks != null) {
@@ -3652,7 +3684,8 @@
mPendingActivityResult = null;
}
- InstallShortcutReceiver.disableAndFlushInstallQueue(this);
+ InstallShortcutReceiver.disableAndFlushInstallQueue(
+ InstallShortcutReceiver.FLAG_LOADER_RUNNING, this);
NotificationListener.setNotificationsChangedListener(mPopupDataProvider);
@@ -4051,8 +4084,8 @@
shortcutInfos.add(new KeyboardShortcutInfo(getString(R.string.custom_actions),
KeyEvent.KEYCODE_O, KeyEvent.META_CTRL_ON));
}
- if (currentFocus instanceof BubbleTextView &&
- ((BubbleTextView) currentFocus).hasDeepShortcuts()) {
+ if (currentFocus.getTag() instanceof ItemInfo
+ && DeepShortcutManager.supportsShortcuts((ItemInfo) currentFocus.getTag())) {
shortcutInfos.add(new KeyboardShortcutInfo(getString(R.string.action_deep_shortcut),
KeyEvent.KEYCODE_S, KeyEvent.META_CTRL_ON));
}
@@ -4116,9 +4149,8 @@
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(key)) {
- // Finish this instance of the activity. When the activity is recreated,
- // it will initialize the rotation preference again.
- finish();
+ // Recreate the activity so that it initializes the rotation preference again.
+ recreate();
}
}
}
diff --git a/src/com/android/launcher3/LauncherAppWidgetHostView.java b/src/com/android/launcher3/LauncherAppWidgetHostView.java
index 13cc7ba..c7b7782 100644
--- a/src/com/android/launcher3/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher3/LauncherAppWidgetHostView.java
@@ -23,7 +23,6 @@
import android.graphics.Rect;
import android.os.Handler;
import android.os.SystemClock;
-import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -40,9 +39,7 @@
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragLayer.TouchCompleteListener;
-import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.concurrent.Executor;
/**
* {@inheritDoc}
@@ -50,8 +47,6 @@
public class LauncherAppWidgetHostView extends AppWidgetHostView
implements TouchCompleteListener, View.OnLongClickListener {
- private static final String TAG = "LauncherWidgetHostView";
-
// Related to the auto-advancing of widgets
private static final long ADVANCE_INTERVAL = 20000;
private static final long ADVANCE_STAGGER = 250;
@@ -98,13 +93,7 @@
setBackgroundResource(R.drawable.widget_internal_focus_bg);
if (Utilities.isAtLeastO()) {
- try {
- Method asyncMethod = AppWidgetHostView.class
- .getMethod("setExecutor", Executor.class);
- asyncMethod.invoke(this, Utilities.THREAD_POOL_EXECUTOR);
- } catch (Exception e) {
- Log.e(TAG, "Unable to set async executor", e);
- }
+ setExecutor(Utilities.THREAD_POOL_EXECUTOR);
}
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index ca9f312..b5ca301 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -40,6 +40,7 @@
import android.util.Log;
import android.util.LongSparseArray;
import android.util.MutableInt;
+import android.util.Pair;
import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.compat.LauncherAppsCompat;
@@ -138,12 +139,6 @@
}
}
- /**
- * Set of runnables to be called on the background thread after the workspace binding
- * is complete.
- */
- static final ArrayList<Runnable> mBindCompleteRunnables = new ArrayList<Runnable>();
-
@Thunk WeakReference<Callbacks> mCallbacks;
// < only access in worker thread >
@@ -251,15 +246,8 @@
/**
* Adds the provided items to the workspace.
*/
- public void addAndBindAddedWorkspaceItems(List<ItemInfo> workspaceApps) {
- addAndBindAddedWorkspaceItems(Provider.of(workspaceApps));
- }
-
- /**
- * Adds the provided items to the workspace.
- */
public void addAndBindAddedWorkspaceItems(
- Provider<List<ItemInfo>> appsProvider) {
+ Provider<List<Pair<ItemInfo, Object>>> appsProvider) {
enqueueModelUpdateTask(new AddWorkspaceItemsTask(appsProvider));
}
@@ -529,7 +517,7 @@
*/
public boolean startLoader(int synchronousBindPage) {
// Enable queue before starting loader. It will get disabled in Launcher#finishBindingItems
- InstallShortcutReceiver.enableInstallQueue();
+ InstallShortcutReceiver.enableInstallQueue(InstallShortcutReceiver.FLAG_LOADER_RUNNING);
synchronized (mLock) {
// Don't bother to start the thread if we know it's not going to do anything
if (mCallbacks != null && mCallbacks.get() != null) {
@@ -607,7 +595,6 @@
private Context mContext;
private int mPageToBindFirst;
- @Thunk boolean mIsLoadingAndBindingWorkspace;
private boolean mStopped;
LoaderTask(Context context, int pageToBindFirst) {
@@ -675,8 +662,6 @@
try {
long now = 0;
if (DEBUG_LOADERS) Log.d(TAG, "step 1.1: loading workspace");
- // Set to false in bindWorkspace()
- mIsLoadingAndBindingWorkspace = true;
loadWorkspace();
verifyNotStopped();
@@ -1584,18 +1569,6 @@
callbacks.finishBindingItems();
}
- mIsLoadingAndBindingWorkspace = false;
-
- // Run all the bind complete runnables after workspace is bound.
- if (!mBindCompleteRunnables.isEmpty()) {
- synchronized (mBindCompleteRunnables) {
- for (final Runnable r : mBindCompleteRunnables) {
- runOnWorkerThread(r);
- }
- mBindCompleteRunnables.clear();
- }
- }
-
// If we're profiling, ensure this is the last thing in the queue.
if (DEBUG_LOADERS) {
Log.d(TAG, "bound workspace in "
@@ -1710,31 +1683,7 @@
mBgAllAppsList.add(new AppInfo(app, user, quietMode), app);
}
- final ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(mContext, user);
- if (heuristic != null) {
- final Runnable r = new Runnable() {
-
- @Override
- public void run() {
- heuristic.processUserApps(apps);
- }
- };
- mUiExecutor.execute(new Runnable() {
-
- @Override
- public void run() {
- // Check isLoadingWorkspace on the UI thread, as it is updated on
- // the UI thread.
- if (mIsLoadingAndBindingWorkspace) {
- synchronized (mBindCompleteRunnables) {
- mBindCompleteRunnables.add(r);
- }
- } else {
- runOnWorkerThread(r);
- }
- }
- });
- }
+ ManagedProfileHeuristic.onAllAppsLoaded(mContext, apps, user);
}
if (FeatureFlags.LAUNCHER3_PROMISE_APPS_IN_ALL_APPS) {
@@ -1768,8 +1717,6 @@
}
}
});
- // Cleanup any data stored for a deleted user.
- ManagedProfileHeuristic.processAllUsers(profiles, mContext);
if (DEBUG_LOADERS) {
Log.d(TAG, "Icons processed in "
+ (SystemClock.uptimeMillis() - loadTime) + "ms");
@@ -1777,17 +1724,15 @@
}
private void loadDeepShortcuts() {
- if (!mModelLoaded) {
- sBgDataModel.deepShortcutMap.clear();
- DeepShortcutManager shortcutManager = DeepShortcutManager.getInstance(mContext);
- mHasShortcutHostPermission = shortcutManager.hasHostPermission();
- if (mHasShortcutHostPermission) {
- for (UserHandle user : mUserManager.getUserProfiles()) {
- if (mUserManager.isUserUnlocked(user)) {
- List<ShortcutInfoCompat> shortcuts =
- shortcutManager.queryForAllShortcuts(user);
- sBgDataModel.updateDeepShortcutMap(null, user, shortcuts);
- }
+ sBgDataModel.deepShortcutMap.clear();
+ DeepShortcutManager shortcutManager = DeepShortcutManager.getInstance(mContext);
+ mHasShortcutHostPermission = shortcutManager.hasHostPermission();
+ if (mHasShortcutHostPermission) {
+ for (UserHandle user : mUserManager.getUserProfiles()) {
+ if (mUserManager.isUserUnlocked(user)) {
+ List<ShortcutInfoCompat> shortcuts =
+ shortcutManager.queryForAllShortcuts(user);
+ sBgDataModel.updateDeepShortcutMap(null, user, shortcuts);
}
}
}
@@ -1831,7 +1776,7 @@
CacheDataUpdatedTask.OP_CACHE_UPDATE, user, updatedPackages));
}
- void enqueueModelUpdateTask(BaseModelUpdateTask task) {
+ public void enqueueModelUpdateTask(BaseModelUpdateTask task) {
if (!mModelLoaded && mLoaderTask == null) {
if (DEBUG_LOADERS) {
Log.d(TAG, "enqueueModelUpdateTask Ignoring task since loader is pending=" + task);
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index c84a431..4813571 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -16,6 +16,7 @@
package com.android.launcher3;
+import android.annotation.TargetApi;
import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
@@ -38,6 +39,7 @@
import android.database.sqlite.SQLiteStatement;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -68,7 +70,6 @@
import java.io.File;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.lang.reflect.Method;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
@@ -855,15 +856,16 @@
* Removes widgets which are registered to the Launcher's host, but are not present
* in our model.
*/
+ @TargetApi(Build.VERSION_CODES.O)
public void removeGhostWidgets(SQLiteDatabase db) {
// Get all existing widget ids.
final AppWidgetHost host = newLauncherWidgetHost();
final int[] allWidgets;
try {
- Method getter = AppWidgetHost.class.getDeclaredMethod("getAppWidgetIds");
- getter.setAccessible(true);
- allWidgets = (int[]) getter.invoke(host);
- } catch (Exception e) {
+ // Although the method was defined in O, it has existed since the beginning of time,
+ // so it might work on older platforms as well.
+ allWidgets = host.getAppWidgetIds();
+ } catch (IncompatibleClassChangeError e) {
Log.e(TAG, "getAppWidgetIds not supported", e);
return;
}
diff --git a/src/com/android/launcher3/SessionCommitReceiver.java b/src/com/android/launcher3/SessionCommitReceiver.java
index 61bcc17..8caba75 100644
--- a/src/com/android/launcher3/SessionCommitReceiver.java
+++ b/src/com/android/launcher3/SessionCommitReceiver.java
@@ -67,18 +67,19 @@
SessionInfo info = intent.getParcelableExtra(PackageInstaller.EXTRA_SESSION);
UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER);
- if (TextUtils.isEmpty(info.getAppPackageName()) ||
- info.getInstallReason() != PackageManager.INSTALL_REASON_USER) {
- return;
+ if (Process.myUserHandle().equals(user)) {
+ if (TextUtils.isEmpty(info.getAppPackageName()) ||
+ info.getInstallReason() != PackageManager.INSTALL_REASON_USER) {
+ return;
+ }
}
- if (!Process.myUserHandle().equals(user)) {
- // Managed profile is handled using ManagedProfileHeuristic
- return;
- }
+ queueAppIconAddition(context, info.getAppPackageName(), user);
+ }
+ public static void queueAppIconAddition(Context context, String packageName, UserHandle user) {
List<LauncherActivityInfo> activities = LauncherAppsCompat.getInstance(context)
- .getActivityList(info.getAppPackageName(), user);
+ .getActivityList(packageName, user);
if (activities == null || activities.isEmpty()) {
// no activity found
return;
diff --git a/src/com/android/launcher3/SettingsActivity.java b/src/com/android/launcher3/SettingsActivity.java
index 7ae6b26..0902b20 100644
--- a/src/com/android/launcher3/SettingsActivity.java
+++ b/src/com/android/launcher3/SettingsActivity.java
@@ -34,6 +34,11 @@
* Settings activity for Launcher. Currently implements the following setting: Allow rotation
*/
public class SettingsActivity extends Activity {
+
+ private static final String ICON_BADGING_PREFERENCE_KEY = "pref_icon_badging";
+ // TODO: use Settings.Secure.NOTIFICATION_BADGING
+ private static final String NOTIFICATION_BADGING = "notification_badging";
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -50,6 +55,7 @@
public static class LauncherSettingsFragment extends PreferenceFragment {
private SystemDisplayRotationLockObserver mRotationLockObserver;
+ private IconBadgingObserver mIconBadgingObserver;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -57,13 +63,14 @@
getPreferenceManager().setSharedPreferencesName(LauncherFiles.SHARED_PREFERENCES_KEY);
addPreferencesFromResource(R.xml.launcher_preferences);
+ ContentResolver resolver = getActivity().getContentResolver();
+
// Setup allow rotation preference
Preference rotationPref = findPreference(Utilities.ALLOW_ROTATION_PREFERENCE_KEY);
if (getResources().getBoolean(R.bool.allow_rotation)) {
// Launcher supports rotation by default. No need to show this setting.
getPreferenceScreen().removePreference(rotationPref);
} else {
- ContentResolver resolver = getActivity().getContentResolver();
mRotationLockObserver = new SystemDisplayRotationLockObserver(rotationPref, resolver);
// Register a content observer to listen for system setting changes while
@@ -77,9 +84,18 @@
rotationPref.setDefaultValue(Utilities.getAllowRotationDefaultValue(getActivity()));
}
+ Preference iconBadgingPref = findPreference(ICON_BADGING_PREFERENCE_KEY);
if (!BuildCompat.isAtLeastO()) {
getPreferenceScreen().removePreference(
findPreference(SessionCommitReceiver.ADD_ICON_PREFERENCE_KEY));
+ getPreferenceScreen().removePreference(iconBadgingPref);
+ } else {
+ // Listen to system notification badge settings while this UI is active.
+ mIconBadgingObserver = new IconBadgingObserver(iconBadgingPref, resolver);
+ resolver.registerContentObserver(
+ Settings.Secure.getUriFor(NOTIFICATION_BADGING),
+ false, mIconBadgingObserver);
+ mIconBadgingObserver.onChange(true);
}
Preference iconShapeOverride = findPreference(IconShapeOverride.KEY_PREFERENCE);
@@ -98,6 +114,10 @@
getActivity().getContentResolver().unregisterContentObserver(mRotationLockObserver);
mRotationLockObserver = null;
}
+ if (mIconBadgingObserver != null) {
+ getActivity().getContentResolver().unregisterContentObserver(mIconBadgingObserver);
+ mIconBadgingObserver = null;
+ }
super.onDestroy();
}
}
@@ -127,4 +147,29 @@
? R.string.allow_rotation_desc : R.string.allow_rotation_blocked_desc);
}
}
+
+ /**
+ * Content observer which listens for system badging setting changes,
+ * and updates the launcher badging setting subtext accordingly.
+ */
+ private static class IconBadgingObserver extends ContentObserver {
+
+ private final Preference mBadgingPref;
+ private final ContentResolver mResolver;
+
+ public IconBadgingObserver(Preference badgingPref, ContentResolver resolver) {
+ super(new Handler());
+ mBadgingPref = badgingPref;
+ mResolver = resolver;
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ boolean enabled = Settings.Secure.getInt(mResolver, NOTIFICATION_BADGING, 1) == 1;
+ mBadgingPref.setSummary(enabled
+ ? R.string.icon_badging_desc_on
+ : R.string.icon_badging_desc_off);
+ }
+ }
+
}
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 54e7dd2..61c9707 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -259,7 +259,7 @@
return scale;
}
- static boolean isSystemApp(Context context, Intent intent) {
+ public static boolean isSystemApp(Context context, Intent intent) {
PackageManager pm = context.getPackageManager();
ComponentName cn = intent.getComponent();
String packageName = null;
@@ -650,11 +650,11 @@
/**
* @return creates a new alpha mask bitmap out of an existing bitmap
*/
- public static Bitmap convertToAlphaMask(Bitmap b, float applyAlpha) {
+ public static Bitmap convertToAlphaMask(Bitmap b, int applyAlpha) {
Bitmap a = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ALPHA_8);
Canvas c = new Canvas(a);
Paint paint = new Paint();
- paint.setAlpha((int) (255f * applyAlpha));
+ paint.setAlpha(applyAlpha);
c.drawBitmap(b, 0f, 0f, paint);
return a;
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 25e5749..ea4a662 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -451,7 +451,7 @@
mLauncher.lockScreenOrientation();
mLauncher.onInteractionBegin();
// Prevent any Un/InstallShortcutReceivers from updating the db while we are dragging
- InstallShortcutReceiver.enableInstallQueue();
+ InstallShortcutReceiver.enableInstallQueue(InstallShortcutReceiver.FLAG_DRAG_AND_DROP);
// Do not add a new page if it is a accessible drag which was not started by the workspace.
// We do not support accessibility drag from other sources and instead provide a direct
@@ -504,7 +504,8 @@
mLauncher.unlockScreenOrientation(false);
// Re-enable any Un/InstallShortcutReceiver and now process any queued items
- InstallShortcutReceiver.disableAndFlushInstallQueue(getContext());
+ InstallShortcutReceiver.disableAndFlushInstallQueue(
+ InstallShortcutReceiver.FLAG_DRAG_AND_DROP, getContext());
mOutlineProvider = null;
mDragInfo = null;
@@ -2277,7 +2278,7 @@
mDragSourceInternal = (ShortcutAndWidgetContainer) child.getParent();
}
- if (child instanceof BubbleTextView) {
+ if (child instanceof BubbleTextView && !dragOptions.isAccessibleDrag) {
PopupContainerWithArrow popupContainer = PopupContainerWithArrow
.showForIcon((BubbleTextView) child);
if (popupContainer != null) {
@@ -2529,6 +2530,8 @@
}
}
+ boolean droppedOnOriginalCell = false;
+
int snapScreen = -1;
boolean resizeOnDrop = false;
if (d.dragSource != this) {
@@ -2580,9 +2583,9 @@
minSpanY = item.minSpanY;
}
- droppedOnOriginalCellDuringTransition = mIsSwitchingState
- && item.screenId == screenId && item.container == container
+ droppedOnOriginalCell = item.screenId == screenId && item.container == container
&& item.cellX == mTargetCell[0] && item.cellY == mTargetCell[1];
+ droppedOnOriginalCellDuringTransition = droppedOnOriginalCell && mIsSwitchingState;
// When quickly moving an item, a user may accidentally rearrange their
// workspace. So instead we move the icon back safely to its original position.
@@ -2717,7 +2720,7 @@
}
parent.onDropChild(cell);
}
- if (d.stateAnnouncer != null) {
+ if (d.stateAnnouncer != null && !droppedOnOriginalCell) {
d.stateAnnouncer.completeAction(R.string.item_moved);
}
}
@@ -3163,11 +3166,8 @@
this.cellX = cellX;
this.cellY = cellY;
- DeviceProfile grid = mLauncher.getDeviceProfile();
BubbleTextView cell = (BubbleTextView) layout.getChildAt(cellX, cellY);
-
- bg.setup(getResources().getDisplayMetrics(), grid, null,
- cell.getMeasuredWidth(), cell.getPaddingTop());
+ bg.setup(mLauncher, null, cell.getMeasuredWidth(), cell.getPaddingTop());
// The full preview background should appear behind the icon
bg.isClipping = false;
diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
index e8127c4..3433533 100644
--- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
@@ -36,6 +36,7 @@
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.popup.PopupContainerWithArrow;
+import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.util.Thunk;
import java.util.ArrayList;
@@ -103,8 +104,7 @@
// If the request came from keyboard, do not add custom shortcuts as that is already
// exposed as a direct shortcut
- if (!fromKeyboard && host instanceof BubbleTextView
- && ((BubbleTextView) host).hasDeepShortcuts()) {
+ if (!fromKeyboard && DeepShortcutManager.supportsShortcuts(item)) {
info.addAction(mActions.get(DEEP_SHORTCUTS));
}
diff --git a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java
index 2ad0edb..8161219 100644
--- a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java
@@ -18,6 +18,7 @@
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.ItemInfo;
@@ -25,6 +26,7 @@
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
import com.android.launcher3.ShortcutInfo;
+import com.android.launcher3.notification.NotificationMainView;
import com.android.launcher3.shortcuts.DeepShortcutView;
import java.util.ArrayList;
@@ -35,14 +37,23 @@
*/
public class ShortcutMenuAccessibilityDelegate extends LauncherAccessibilityDelegate {
+ private static final int DISMISS_NOTIFICATION = R.id.action_dismiss_notification;
+
public ShortcutMenuAccessibilityDelegate(Launcher launcher) {
super(launcher);
+ mActions.put(DISMISS_NOTIFICATION, new AccessibilityAction(DISMISS_NOTIFICATION,
+ launcher.getText(R.string.action_dismiss_notification)));
}
@Override
public void addSupportedActions(View host, AccessibilityNodeInfo info, boolean fromKeyboard) {
if ((host.getParent() instanceof DeepShortcutView)) {
info.addAction(mActions.get(ADD_TO_WORKSPACE));
+ } else if (host instanceof NotificationMainView) {
+ NotificationMainView notificationView = (NotificationMainView) host;
+ if (notificationView.canChildBeDismissed(notificationView)) {
+ info.addAction(mActions.get(DISMISS_NOTIFICATION));
+ }
}
}
@@ -73,6 +84,14 @@
onComplete.run();
}
return true;
+ } else if (action == DISMISS_NOTIFICATION) {
+ if (!(host instanceof NotificationMainView)) {
+ return false;
+ }
+ NotificationMainView notificationView = (NotificationMainView) host;
+ notificationView.onChildDismissed(notificationView);
+ announceConfirmation(R.string.notification_dismissed);
+ return true;
}
return false;
}
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index 0ea61f4..a399d74 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -20,6 +20,8 @@
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.InsetDrawable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Selection;
import android.text.SpannableStringBuilder;
@@ -42,6 +44,7 @@
import com.android.launcher3.PromiseAppInfo;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.SpringAnimationHandler;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragOptions;
@@ -63,7 +66,7 @@
private final Launcher mLauncher;
private final AlphabeticalAppsList mApps;
private final AllAppsGridAdapter mAdapter;
- private final RecyclerView.LayoutManager mLayoutManager;
+ private final LinearLayoutManager mLayoutManager;
private AllAppsRecyclerView mAppsRecyclerView;
private SearchUiManager mSearchUiManager;
@@ -74,6 +77,8 @@
private int mNumAppsPerRow;
private int mNumPredictedAppsPerRow;
+ private SpringAnimationHandler mSpringAnimationHandler;
+
public AllAppsContainerView(Context context) {
this(context, null);
}
@@ -87,7 +92,9 @@
mLauncher = Launcher.getLauncher(context);
mApps = new AlphabeticalAppsList(context);
- mAdapter = new AllAppsGridAdapter(mLauncher, mApps, mLauncher, this);
+ mSpringAnimationHandler = new SpringAnimationHandler(SpringAnimationHandler.Y_DIRECTION);
+ mAdapter = new AllAppsGridAdapter(mLauncher, mApps, mLauncher, this,
+ mSpringAnimationHandler);
mApps.setAdapter(mAdapter);
mLayoutManager = mAdapter.getLayoutManager();
mSearchQueryBuilder = new SpannableStringBuilder();
@@ -227,6 +234,10 @@
mAppsRecyclerView.setLayoutManager(mLayoutManager);
mAppsRecyclerView.setAdapter(mAdapter);
mAppsRecyclerView.setHasFixedSize(true);
+ if (FeatureFlags.LAUNCHER3_PHYSICS) {
+ mAppsRecyclerView.setSpringAnimationHandler(mSpringAnimationHandler);
+ mAppsRecyclerView.addOnScrollListener(new SpringMotionOnScrollListener());
+ }
mSearchContainer = findViewById(R.id.search_container);
mSearchUiManager = (SearchUiManager) mSearchContainer;
@@ -245,6 +256,10 @@
}
}
+ public SearchUiManager getSearchUiManager() {
+ return mSearchUiManager;
+ }
+
@Override
public View getTouchDelegateTargetView() {
return mAppsRecyclerView;
@@ -366,6 +381,10 @@
@Override
public void setInsets(Rect insets) {
DeviceProfile grid = mLauncher.getDeviceProfile();
+ mAppsRecyclerView.setPadding(
+ mAppsRecyclerView.getPaddingLeft(), mAppsRecyclerView.getPaddingTop(),
+ mAppsRecyclerView.getPaddingRight(), insets.bottom);
+
if (grid.isVerticalBarLayout()) {
ViewGroup.MarginLayoutParams mlp = (MarginLayoutParams) getLayoutParams();
mlp.leftMargin = insets.left;
@@ -396,4 +415,36 @@
}
}
}
+
+ public SpringAnimationHandler getSpringAnimationHandler() {
+ return mSpringAnimationHandler;
+ }
+
+ public class SpringMotionOnScrollListener extends RecyclerView.OnScrollListener {
+
+ private int mScrollState = RecyclerView.SCROLL_STATE_IDLE;
+
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ if (mScrollState == RecyclerView.SCROLL_STATE_DRAGGING) {
+ mSpringAnimationHandler.skipToEnd();
+ return;
+ }
+
+ int first = mLayoutManager.findFirstVisibleItemPosition();
+ int last = mLayoutManager.findLastVisibleItemPosition();
+
+ // We only show the spring animation when at the top or bottom, so we wait until the
+ // first or last row is visible to ensure that all animations run in sync.
+ if (first == 0 || last >= mAdapter.getItemCount() - mAdapter.getNumAppsPerRow()) {
+ mSpringAnimationHandler.animateToFinalPosition(0);
+ }
+ }
+
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ mScrollState = newState;
+ }
+ }
}
diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
index e126102..d3d23ca 100644
--- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
+++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
@@ -19,6 +19,7 @@
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Point;
+import android.support.animation.SpringAnimation;
import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v4.view.accessibility.AccessibilityRecordCompat;
@@ -38,6 +39,8 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.allapps.AlphabeticalAppsList.AdapterItem;
+import com.android.launcher3.anim.SpringAnimationHandler;
+import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.discovery.AppDiscoveryAppInfo;
import com.android.launcher3.discovery.AppDiscoveryItemView;
import com.android.launcher3.util.PackageManagerHelper;
@@ -80,6 +83,8 @@
| VIEW_TYPE_PREDICTION_ICON;
public static final int VIEW_TYPE_MASK_CONTENT = VIEW_TYPE_MASK_ICON
| VIEW_TYPE_DISCOVERY_ITEM;
+ public static final int VIEW_TYPE_MASK_HAS_SPRINGS = VIEW_TYPE_MASK_ICON
+ | VIEW_TYPE_PREDICTION_DIVIDER;
public interface BindViewCallback {
@@ -90,6 +95,12 @@
* ViewHolder for each icon.
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
+
+ /**
+ * Springs used for items where isViewType(viewType, VIEW_TYPE_MASK_HAS_SPRINGS) is true.
+ */
+ private SpringAnimation spring;
+
public ViewHolder(View v) {
super(v);
}
@@ -161,11 +172,6 @@
}
return extraRows;
}
-
- @Override
- public int getPaddingBottom() {
- return mLauncher.getDragLayer().getInsets().bottom;
- }
}
/**
@@ -207,8 +213,11 @@
// The intent to send off to the market app, updated each time the search query changes.
private Intent mMarketSearchIntent;
+ private SpringAnimationHandler mSpringAnimationHandler;
+
public AllAppsGridAdapter(Launcher launcher, AlphabeticalAppsList apps, View.OnClickListener
- iconClickListener, View.OnLongClickListener iconLongClickListener) {
+ iconClickListener, View.OnLongClickListener iconLongClickListener,
+ SpringAnimationHandler springAnimationHandler) {
Resources res = launcher.getResources();
mLauncher = launcher;
mApps = apps;
@@ -219,6 +228,7 @@
mLayoutInflater = LayoutInflater.from(launcher);
mIconClickListener = iconClickListener;
mIconLongClickListener = iconLongClickListener;
+ mSpringAnimationHandler = springAnimationHandler;
}
public static boolean isDividerViewType(int viewType) {
@@ -241,6 +251,10 @@
mGridLayoutMgr.setSpanCount(appsPerRow);
}
+ public int getNumAppsPerRow() {
+ return mAppsPerRow;
+ }
+
public void setIconFocusListener(OnFocusChangeListener focusListener) {
mIconFocusListener = focusListener;
}
@@ -332,7 +346,6 @@
AppInfo info = mApps.getAdapterItems().get(position).appInfo;
BubbleTextView icon = (BubbleTextView) holder.itemView;
icon.applyFromApplicationInfo(info);
- icon.setAccessibilityDelegate(mLauncher.getAccessibilityDelegate());
break;
case VIEW_TYPE_DISCOVERY_ITEM:
AppDiscoveryAppInfo appDiscoveryAppInfo = (AppDiscoveryAppInfo)
@@ -370,6 +383,23 @@
}
@Override
+ public void onViewAttachedToWindow(ViewHolder holder) {
+ int type = holder.getItemViewType();
+ if (FeatureFlags.LAUNCHER3_PHYSICS && isViewType(type, VIEW_TYPE_MASK_HAS_SPRINGS)) {
+ holder.spring = mSpringAnimationHandler.add(holder.itemView,
+ holder.getAdapterPosition(), mApps, mAppsPerRow, holder.spring);
+ }
+ }
+
+ @Override
+ public void onViewDetachedFromWindow(ViewHolder holder) {
+ int type = holder.getItemViewType();
+ if (FeatureFlags.LAUNCHER3_PHYSICS && isViewType(type, VIEW_TYPE_MASK_HAS_SPRINGS)) {
+ holder.spring = mSpringAnimationHandler.remove(holder.spring);
+ }
+ }
+
+ @Override
public boolean onFailedToRecycleView(ViewHolder holder) {
// Always recycle and we will reset the view when it is bound
return true;
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index f3089d2..d76abcc 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -28,8 +28,8 @@
import com.android.launcher3.BaseRecyclerView;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.Launcher;
import com.android.launcher3.R;
+import com.android.launcher3.anim.SpringAnimationHandler;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.DrawableFactory;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
@@ -53,6 +53,8 @@
private AllAppsBackgroundDrawable mEmptySearchBackground;
private int mEmptySearchBackgroundTopOffset;
+ private SpringAnimationHandler mSpringAnimationHandler;
+
public AllAppsRecyclerView(Context context) {
this(context, null);
}
@@ -75,6 +77,18 @@
R.dimen.all_apps_empty_search_bg_top_offset);
}
+ public void setSpringAnimationHandler(SpringAnimationHandler springAnimationHandler) {
+ mSpringAnimationHandler = springAnimationHandler;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent e) {
+ if (FeatureFlags.LAUNCHER3_PHYSICS && mSpringAnimationHandler != null) {
+ mSpringAnimationHandler.addMovement(e);
+ }
+ return super.onTouchEvent(e);
+ }
+
/**
* Sets the list of apps in this view, used to determine the fastscroll position.
*/
@@ -392,21 +406,14 @@
return getPaddingTop() + y - offset;
}
- @Override
- protected int getScrollbarTrackHeight() {
- return super.getScrollbarTrackHeight()
- - Launcher.getLauncher(getContext()).getDragLayer().getInsets().bottom;
- }
-
/**
* Returns the available scroll height:
* AvailableScrollHeight = Total height of the all items - last page height
*/
@Override
protected int getAvailableScrollHeight() {
- int paddedHeight = getCurrentScrollY(mApps.getAdapterItems().size(), 0);
- int totalHeight = paddedHeight + getPaddingBottom();
- return totalHeight - getScrollbarTrackHeight();
+ return getCurrentScrollY(mApps.getAdapterItems().size(), 0)
+ - getHeight() + getPaddingBottom();
}
/**
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index 9c1854a..ba20135 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -22,9 +22,9 @@
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
+import com.android.launcher3.anim.SpringAnimationHandler;
import com.android.launcher3.config.FeatureFlags;
-import com.android.launcher3.dynamicui.ExtractedColors;
-import com.android.launcher3.graphics.RadialGradientView;
+import com.android.launcher3.graphics.GradientView;
import com.android.launcher3.graphics.ScrimView;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
@@ -42,12 +42,13 @@
* closer to top or closer to the page indicator.
*/
public class AllAppsTransitionController implements TouchController, VerticalPullDetector.Listener,
- View.OnLayoutChangeListener, ExtractedColors.OnChangeListener {
+ SearchUiManager.OnScrollRangeChangeListener {
private static final String TAG = "AllAppsTrans";
private static final boolean DBG = false;
- private final Interpolator mAccelInterpolator = new AccelerateInterpolator(2f);
+ private final Interpolator mWorkspaceAccelnterpolator = new AccelerateInterpolator(2f);
+ private final Interpolator mHotseatAccelInterpolator = new AccelerateInterpolator(.5f);
private final Interpolator mDecelInterpolator = new DecelerateInterpolator(3f);
private final Interpolator mFastOutSlowInInterpolator = new FastOutSlowInInterpolator();
private final VerticalPullDetector.ScrollInterpolator mScrollInterpolator
@@ -69,6 +70,7 @@
private final Launcher mLauncher;
private final VerticalPullDetector mDetector;
private final ArgbEvaluator mEvaluator;
+ private final boolean mIsDarkTheme;
// Animation in this class is controlled by a single variable {@link mProgress}.
// Visually, it represents top y coordinate of the all apps container if multiplied with
@@ -91,13 +93,16 @@
private AnimatorSet mCurrentAnimation;
private boolean mNoIntercept;
+ private boolean mTouchEventStartedOnHotseat;
// Used in discovery bounce animation to provide the transition without workspace changing.
private boolean mIsTranslateWithoutWorkspace = false;
private AnimatorSet mDiscoBounceAnimation;
- private RadialGradientView mGradientView;
+ private GradientView mGradientView;
private ScrimView mScrimView;
+ private SpringAnimationHandler mSpringAnimationHandler;
+
public AllAppsTransitionController(Launcher l) {
mLauncher = l;
mDetector = new VerticalPullDetector(l);
@@ -107,13 +112,14 @@
mEvaluator = new ArgbEvaluator();
mAllAppsBackgroundColor = Themes.getAttrColor(l, android.R.attr.colorPrimary);
- mLauncher.getExtractedColors().addOnChangeListener(this);
+ mIsDarkTheme = Themes.getAttrBoolean(mLauncher, R.attr.isPrimaryColorDark);
}
@Override
public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
mNoIntercept = false;
+ mTouchEventStartedOnHotseat = mLauncher.getDragLayer().isEventOverHotseat(ev);
if (!mLauncher.isAllAppsVisible() && mLauncher.getWorkspace().workspaceInModalState()) {
mNoIntercept = true;
} else if (mLauncher.isAllAppsVisible() &&
@@ -160,6 +166,9 @@
@Override
public boolean onControllerTouchEvent(MotionEvent ev) {
+ if (hasSpringAnimationHandler()) {
+ mSpringAnimationHandler.addMovement(ev);
+ }
return mDetector.onTouchEvent(ev);
}
@@ -178,6 +187,9 @@
mCurrentAnimation = LauncherAnimUtils.createAnimatorSet();
mShiftStart = mAppsView.getTranslationY();
preparePull(start);
+ if (hasSpringAnimationHandler()) {
+ mSpringAnimationHandler.skipToEnd();
+ }
}
@Override
@@ -200,6 +212,9 @@
return; // early termination.
}
+ final int containerType = mTouchEventStartedOnHotseat
+ ? ContainerType.HOTSEAT : ContainerType.WORKSPACE;
+
if (fling) {
if (velocity < 0) {
calculateDuration(velocity, mAppsView.getTranslationY());
@@ -208,11 +223,14 @@
mLauncher.getUserEventDispatcher().logActionOnContainer(
Action.Touch.FLING,
Action.Direction.UP,
- ContainerType.HOTSEAT);
+ containerType);
}
mLauncher.showAppsView(true /* animated */,
false /* updatePredictedApps */,
false /* focusSearchBar */);
+ if (hasSpringAnimationHandler()) {
+ mSpringAnimationHandler.animateToFinalPosition(0);
+ }
} else {
calculateDuration(velocity, Math.abs(mShiftRange - mAppsView.getTranslationY()));
mLauncher.showWorkspace(true);
@@ -228,7 +246,7 @@
mLauncher.getUserEventDispatcher().logActionOnContainer(
Action.Touch.SWIPE,
Action.Direction.UP,
- ContainerType.HOTSEAT);
+ containerType);
}
mLauncher.showAppsView(true, /* animated */
false /* updatePredictedApps */,
@@ -262,8 +280,9 @@
}
private void updateLightStatusBar(float shift) {
- // Do not modify status bar on landscape as all apps is not full bleed.
- if (mLauncher.getDeviceProfile().isVerticalBarLayout()) {
+ // Do not modify status bar in dark theme or on landscape as all apps is not full bleed.
+ if (mIsDarkTheme || (!FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS
+ && mLauncher.getDeviceProfile().isVerticalBarLayout())) {
return;
}
// Use a light status bar (dark icons) if all apps is behind at least half of the status
@@ -275,9 +294,8 @@
private void updateAllAppsBg(float progress) {
// gradient
if (mGradientView == null) {
- mGradientView = (RadialGradientView) mLauncher.findViewById(R.id.gradient_bg);
+ mGradientView = (GradientView) mLauncher.findViewById(R.id.gradient_bg);
mGradientView.setVisibility(View.VISIBLE);
- onExtractedColorsChanged();
}
mGradientView.setProgress(progress);
@@ -289,20 +307,6 @@
mScrimView.setProgress(progress);
}
- @Override
- public void onExtractedColorsChanged() {
- if (FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
- if (mGradientView != null) {
- int color1 = mLauncher.getExtractedColors()
- .getColor(ExtractedColors.ALLAPPS_GRADIENT_MAIN_INDEX);
- int color2 = mLauncher.getExtractedColors()
- .getColor(ExtractedColors.ALLAPPS_GRADIENT_SECONDARY_INDEX);
- mGradientView.onExtractedColorsChanged(color1, color2);
- mGradientView.requestLayout();
- }
- }
- }
-
/**
* @param progress value between 0 and 1, 0 shows all apps and 1 shows workspace
*/
@@ -313,7 +317,8 @@
float workspaceHotseatAlpha = Utilities.boundToRange(progress, 0f, 1f);
float alpha = 1 - workspaceHotseatAlpha;
- float interpolation = mAccelInterpolator.getInterpolation(workspaceHotseatAlpha);
+ float workspaceAlpha = mWorkspaceAccelnterpolator.getInterpolation(workspaceHotseatAlpha);
+ float hotseatAlpha = mHotseatAccelInterpolator.getInterpolation(workspaceHotseatAlpha);
int color = (Integer) mEvaluator.evaluate(mDecelInterpolator.getInterpolation(alpha),
mHotseatBackgroundColor, mAllAppsBackgroundColor);
@@ -331,18 +336,18 @@
if (!mLauncher.getDeviceProfile().isVerticalBarLayout()) {
mWorkspace.setHotseatTranslationAndAlpha(Workspace.Direction.Y, -mShiftRange + shiftCurrent,
- interpolation);
+ hotseatAlpha);
} else {
mWorkspace.setHotseatTranslationAndAlpha(Workspace.Direction.Y,
PARALLAX_COEFFICIENT * (-mShiftRange + shiftCurrent),
- interpolation);
+ hotseatAlpha);
}
if (mIsTranslateWithoutWorkspace) {
return;
}
mWorkspace.setWorkspaceYTranslationAndAlpha(
- PARALLAX_COEFFICIENT * (-mShiftRange + shiftCurrent), interpolation);
+ PARALLAX_COEFFICIENT * (-mShiftRange + shiftCurrent), workspaceAlpha);
if (!mDetector.isDraggingState()) {
mContainerVelocity = mDetector.computeVelocity(shiftCurrent - shiftPrevious,
@@ -496,6 +501,9 @@
public void finishPullUp() {
mHotseat.setVisibility(View.INVISIBLE);
+ if (hasSpringAnimationHandler()) {
+ mSpringAnimationHandler.reset();
+ }
setProgress(0f);
}
@@ -504,6 +512,9 @@
mHotseat.setBackgroundTransparent(false /* transparent */);
mHotseat.setVisibility(View.VISIBLE);
mAppsView.reset();
+ if (hasSpringAnimationHandler()) {
+ mSpringAnimationHandler.reset();
+ }
setProgress(1f);
}
@@ -531,21 +542,20 @@
mAppsView = appsView;
mHotseat = hotseat;
mWorkspace = workspace;
- mHotseat.addOnLayoutChangeListener(this);
mHotseat.bringToFront();
mCaretController = new AllAppsCaretController(
mWorkspace.getPageIndicator().getCaretDrawable(), mLauncher);
+ mAppsView.getSearchUiManager().addOnScrollRangeChangeListener(this);
+ mSpringAnimationHandler = mAppsView.getSpringAnimationHandler();
+ }
+
+ private boolean hasSpringAnimationHandler() {
+ return FeatureFlags.LAUNCHER3_PHYSICS && mSpringAnimationHandler != null;
}
@Override
- public void onLayoutChange(View v, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
- if (!mLauncher.getDeviceProfile().isVerticalBarLayout()) {
- mShiftRange = top;
- } else {
- mShiftRange = bottom;
- }
+ public void onScrollRangeChanged(int scrollRange) {
+ mShiftRange = scrollRange;
setProgress(mProgress);
}
-
}
diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
index 0474419..b84c627 100644
--- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
+++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
@@ -228,6 +228,13 @@
}
/**
+ * Returns the predicted apps.
+ */
+ public List<AppInfo> getPredictedApps() {
+ return mPredictedApps;
+ }
+
+ /**
* Returns fast scroller sections of all the current filtered applications.
*/
public List<FastScrollSectionInfo> getFastScrollerSections() {
diff --git a/src/com/android/launcher3/allapps/SearchUiManager.java b/src/com/android/launcher3/allapps/SearchUiManager.java
index 15455bc..0d013c7 100644
--- a/src/com/android/launcher3/allapps/SearchUiManager.java
+++ b/src/com/android/launcher3/allapps/SearchUiManager.java
@@ -55,4 +55,14 @@
* TODO: Remove when removing support for opening all-apps in search mode.
*/
void startAppsSearch();
+
+ void addOnScrollRangeChangeListener(OnScrollRangeChangeListener listener);
+
+ /**
+ * Callback for listening to changes in the vertical scroll range when opening all-apps.
+ */
+ interface OnScrollRangeChangeListener {
+
+ void onScrollRangeChanged(int scrollRange);
+ }
}
diff --git a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
index 116ec88..126a02c 100644
--- a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
+++ b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java
@@ -16,6 +16,7 @@
package com.android.launcher3.allapps.search;
import android.content.Context;
+import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.Selection;
@@ -26,8 +27,10 @@
import android.text.method.TextKeyListener;
import android.util.AttributeSet;
import android.view.KeyEvent;
+import android.view.View;
import android.widget.FrameLayout;
+import com.android.launcher3.DeviceProfile;
import com.android.launcher3.ExtendedEditText;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
@@ -51,6 +54,7 @@
private final Launcher mLauncher;
private final int mMinHeight;
+ private final int mSearchBoxHeight;
private final AllAppsSearchBarController mSearchBarController;
private final SpannableStringBuilder mSearchQueryBuilder;
private final HeaderElevationController mElevationController;
@@ -73,6 +77,8 @@
mLauncher = Launcher.getLauncher(context);
mMinHeight = getResources().getDimensionPixelSize(R.dimen.all_apps_search_bar_height);
+ mSearchBoxHeight = getResources()
+ .getDimensionPixelSize(R.dimen.all_apps_search_bar_field_height);
mSearchBarController = new AllAppsSearchBarController();
mElevationController = new HeaderElevationController(this);
@@ -192,4 +198,23 @@
mElevationController.reset();
mAppsRecyclerView.onSearchResultsChanged();
}
+
+ @Override
+ public void addOnScrollRangeChangeListener(final OnScrollRangeChangeListener listener) {
+ mLauncher.getHotseat().addOnLayoutChangeListener(new OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom,
+ int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ DeviceProfile dp = mLauncher.getDeviceProfile();
+ if (!dp.isVerticalBarLayout()) {
+ Rect insets = mLauncher.getDragLayer().getInsets();
+ int hotseatBottom = bottom - dp.hotseatBarBottomPaddingPx - insets.bottom;
+ int searchTopMargin = insets.top + (mMinHeight - mSearchBoxHeight);
+ listener.onScrollRangeChanged(hotseatBottom - searchTopMargin);
+ } else {
+ listener.onScrollRangeChanged(bottom);
+ }
+ }
+ });
+ }
}
diff --git a/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java b/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java
index 457b454..06097d0 100644
--- a/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java
+++ b/src/com/android/launcher3/allapps/search/DefaultAppSearchAlgorithm.java
@@ -54,7 +54,7 @@
});
}
- protected ArrayList<ComponentKey> getTitleMatchResult(String query) {
+ public ArrayList<ComponentKey> getTitleMatchResult(String query) {
// Do an intersection of the words in the query and each title, and filter out all the
// apps that don't match all of the words in the query.
final String queryTextLower = query.toLowerCase();
@@ -67,7 +67,7 @@
return result;
}
- protected boolean matches(AppInfo info, String query) {
+ public boolean matches(AppInfo info, String query) {
int queryLength = query.length();
String title = info.title.toString();
diff --git a/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java b/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java
index a0d1f8b..9c09477 100644
--- a/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java
+++ b/src/com/android/launcher3/anim/RoundedRectRevealOutlineProvider.java
@@ -42,7 +42,7 @@
@Override
public boolean shouldRemoveElevationDuringAnimation() {
- return true;
+ return false;
}
@Override
diff --git a/src/com/android/launcher3/anim/SpringAnimationHandler.java b/src/com/android/launcher3/anim/SpringAnimationHandler.java
new file mode 100644
index 0000000..488657c
--- /dev/null
+++ b/src/com/android/launcher3/anim/SpringAnimationHandler.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2017 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.anim;
+
+import android.support.animation.DynamicAnimation;
+import android.support.animation.SpringAnimation;
+import android.support.animation.SpringForce;
+import android.support.annotation.IntDef;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+
+import com.android.launcher3.Utilities;
+import com.android.launcher3.allapps.AlphabeticalAppsList;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+
+/**
+ * Handler class that manages springs for a set of views that should all move based on the same
+ * {@link MotionEvent}s.
+ *
+ * Supports using physics for X or Y translations.
+ */
+public class SpringAnimationHandler {
+
+ private static final String TAG = "SpringAnimationHandler";
+ private static final boolean DEBUG = false;
+
+ private static final float DEFAULT_MAX_VALUE = 100;
+ private static final float DEFAULT_MIN_VALUE = -DEFAULT_MAX_VALUE;
+
+ private static final float SPRING_DAMPING_RATIO = 0.55f;
+ private static final float MIN_SPRING_STIFFNESS = 580f;
+ private static final float MAX_SPRING_STIFFNESS = 900f;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({Y_DIRECTION, X_DIRECTION})
+ public @interface Direction {}
+ public static final int Y_DIRECTION = 0;
+ public static final int X_DIRECTION = 1;
+ private int mDirection;
+
+ private VelocityTracker mVelocityTracker;
+ private float mCurrentVelocity = 0;
+ private boolean mShouldComputeVelocity = false;
+
+ private ArrayList<SpringAnimation> mAnimations = new ArrayList<>();
+
+ public SpringAnimationHandler(@Direction int direction) {
+ mDirection = direction;
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+
+ public SpringAnimation add(View view, int position, AlphabeticalAppsList apps, int appsPerRow,
+ SpringAnimation recycle) {
+ int numPredictedApps = Math.min(appsPerRow, apps.getPredictedApps().size());
+ int appPosition = getAppPosition(position, numPredictedApps, appsPerRow);
+
+ int col = appPosition % appsPerRow;
+ int row = appPosition / appsPerRow;
+
+ int numTotalRows = apps.getNumAppRows() - 1; // zero offset
+ if (row > (numTotalRows / 2)) {
+ // Mirror the rows so that the top row acts the same as the bottom row.
+ row = Math.abs(numTotalRows - row);
+ }
+
+ // We manipulate the stiffness, min, and max values based on the items distance to the first
+ // row and the items distance to the center column to create the ^-shaped motion effect.
+ float rowFactor = (1 + row) * 0.5f;
+ float colFactor = getColumnFactor(col, appsPerRow);
+
+ float minValue = DEFAULT_MIN_VALUE * (rowFactor + colFactor);
+ float maxValue = DEFAULT_MAX_VALUE * (rowFactor + colFactor);
+
+ float stiffness = Utilities.boundToRange(MAX_SPRING_STIFFNESS - (row * 50f),
+ MIN_SPRING_STIFFNESS, MAX_SPRING_STIFFNESS);
+
+ SpringAnimation animation = (recycle != null ? recycle : createSpringAnimation(view))
+ .setStartVelocity(mCurrentVelocity)
+ .setMinValue(minValue)
+ .setMaxValue(maxValue);
+ animation.getSpring().setStiffness(stiffness);
+
+ mAnimations.add(animation);
+ return animation;
+ }
+
+ public SpringAnimation remove(SpringAnimation animation) {
+ animation.skipToEnd();
+ mAnimations.remove(animation);
+ return animation;
+ }
+
+ public void addMovement(MotionEvent event) {
+ int action = event.getActionMasked();
+ if (DEBUG) Log.d(TAG, "addMovement#action=" + action);
+ switch (action) {
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_DOWN:
+ reset();
+ break;
+ }
+
+ getVelocityTracker().addMovement(event);
+ mShouldComputeVelocity = true;
+ }
+
+ public void animateToFinalPosition(float position) {
+ if (DEBUG) Log.d(TAG, "animateToFinalPosition#computeVelocity=" + mShouldComputeVelocity);
+
+ if (mShouldComputeVelocity) {
+ computeVelocity();
+ setStartVelocity(mCurrentVelocity);
+ }
+
+ int size = mAnimations.size();
+ for (int i = 0; i < size; ++i) {
+ mAnimations.get(i).animateToFinalPosition(position);
+ }
+
+ reset();
+ }
+
+ public void skipToEnd() {
+ if (DEBUG) Log.d(TAG, "setStartVelocity#skipToEnd");
+ if (DEBUG) Log.v(TAG, "setStartVelocity#skipToEnd", new Exception());
+
+ int size = mAnimations.size();
+ for (int i = 0; i < size; ++i) {
+ mAnimations.get(i).skipToEnd();
+ }
+ }
+
+ public void reset() {
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ mCurrentVelocity = 0;
+ }
+
+ private void setStartVelocity(float velocity) {
+ int size = mAnimations.size();
+ for (int i = 0; i < size; ++i) {
+ mAnimations.get(i).setStartVelocity(velocity);
+ }
+ }
+
+ private void computeVelocity() {
+ getVelocityTracker().computeCurrentVelocity(175);
+
+ mCurrentVelocity = isVerticalDirection()
+ ? getVelocityTracker().getYVelocity()
+ : getVelocityTracker().getXVelocity();
+ mShouldComputeVelocity = false;
+
+ if (DEBUG) Log.d(TAG, "computeVelocity=" + mCurrentVelocity);
+ }
+
+ private boolean isVerticalDirection() {
+ return mDirection == Y_DIRECTION;
+ }
+
+ private SpringAnimation createSpringAnimation(View view) {
+ DynamicAnimation.ViewProperty property = isVerticalDirection()
+ ? DynamicAnimation.TRANSLATION_Y
+ : DynamicAnimation.TRANSLATION_X;
+
+ return new SpringAnimation(view, property, 0)
+ .setStartValue(1f)
+ .setSpring(new SpringForce(0)
+ .setDampingRatio(SPRING_DAMPING_RATIO));
+ }
+
+ /**
+ * @return The app position is the position of the app in the Adapter if we ignored all other
+ * view types.
+ *
+ * ie. The first predicted app is at position 0, and the first app of all apps is
+ * at {@param appsPerRow}.
+ */
+ private int getAppPosition(int position, int numPredictedApps, int appsPerRow) {
+ int appPosition = position;
+ int numDividerViews = 1 + (numPredictedApps == 0 ? 0 : 1);
+
+ int allAppsStartAt = numDividerViews + numPredictedApps;
+ if (numDividerViews == 1 || position < allAppsStartAt) {
+ appPosition -= 1;
+ } else {
+ // We cannot assume that the predicted row will always be full.
+ int numPredictedAppsOffset = appsPerRow - numPredictedApps;
+ appPosition = position + numPredictedAppsOffset - numDividerViews;
+ }
+
+ return appPosition;
+ }
+
+ /**
+ * Increase the column factor as the distance increases between the column and the center
+ * column(s).
+ */
+ private float getColumnFactor(int col, int numCols) {
+ float centerColumn = numCols / 2;
+ int distanceToCenter = (int) Math.abs(col - centerColumn);
+
+ boolean evenNumberOfColumns = numCols % 2 == 0;
+ if (evenNumberOfColumns && col < centerColumn) {
+ distanceToCenter -= 1;
+ }
+
+ float factor = 0;
+ while (distanceToCenter > 0) {
+ if (distanceToCenter == 1) {
+ factor += 0.2f;
+ } else {
+ factor += 0.1f;
+ }
+ --distanceToCenter;
+ }
+
+ return factor;
+ }
+
+ private VelocityTracker getVelocityTracker() {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ return mVelocityTracker;
+ }
+}
diff --git a/src/com/android/launcher3/badge/BadgeRenderer.java b/src/com/android/launcher3/badge/BadgeRenderer.java
index ba1977a..adde4a2 100644
--- a/src/com/android/launcher3/badge/BadgeRenderer.java
+++ b/src/com/android/launcher3/badge/BadgeRenderer.java
@@ -63,6 +63,7 @@
private final Paint mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG
| Paint.FILTER_BITMAP_FLAG);
private final SparseArray<Bitmap> mBackgroundsWithShadow;
+ private final IconPalette mIconPalette;
public BadgeRenderer(Context context, int iconSizePx) {
mContext = context;
@@ -82,24 +83,25 @@
mTextHeight = tempTextHeight.height();
mBackgroundsWithShadow = new SparseArray<>(3);
+
+ mIconPalette = IconPalette.fromDominantColor(context.getColor(R.color.badge_color));
}
/**
* Draw a circle in the top right corner of the given bounds, and draw
* {@link BadgeInfo#getNotificationCount()} on top of the circle.
- * @param palette The colors (based on the icon) to use for the badge.
* @param badgeInfo Contains data to draw on the badge. Could be null if we are animating out.
* @param iconBounds The bounds of the icon being badged.
* @param badgeScale The progress of the animation, from 0 to 1.
* @param spaceForOffset How much space is available to offset the badge up and to the right.
*/
- public void draw(Canvas canvas, IconPalette palette, @Nullable BadgeInfo badgeInfo,
+ public void draw(Canvas canvas, @Nullable BadgeInfo badgeInfo,
Rect iconBounds, float badgeScale, Point spaceForOffset) {
- mTextPaint.setColor(palette.textColor);
+ mTextPaint.setColor(mIconPalette.textColor);
IconDrawer iconDrawer = badgeInfo != null && badgeInfo.isIconLarge()
? mLargeIconDrawer : mSmallIconDrawer;
Shader icon = badgeInfo == null ? null : badgeInfo.getNotificationIconForBadge(
- mContext, palette.backgroundColor, mSize, iconDrawer.mPadding);
+ mContext, mIconPalette.backgroundColor, mSize, iconDrawer.mPadding);
String notificationCount = badgeInfo == null ? "0"
: String.valueOf(badgeInfo.getNotificationCount());
int numChars = notificationCount.length();
@@ -125,7 +127,7 @@
canvas.translate(badgeCenterX + offsetX, badgeCenterY - offsetY);
canvas.scale(badgeScale, badgeScale);
// Prepare the background and shadow and possible stacking effect.
- mBackgroundPaint.setColorFilter(palette.backgroundColorMatrixFilter);
+ mBackgroundPaint.setColorFilter(mIconPalette.backgroundColorMatrixFilter);
int backgroundWithShadowSize = backgroundWithShadow.getHeight(); // Same as width.
boolean shouldStack = !isDot && badgeInfo != null
&& badgeInfo.getNotificationKeys().size() > 1;
@@ -147,7 +149,7 @@
-backgroundWithShadowSize / 2, mBackgroundPaint);
iconDrawer.drawIcon(icon, canvas);
} else if (isDot) {
- mBackgroundPaint.setColorFilter(palette.saturatedBackgroundColorMatrixFilter);
+ mBackgroundPaint.setColorFilter(mIconPalette.saturatedBackgroundColorMatrixFilter);
canvas.drawBitmap(backgroundWithShadow, -backgroundWithShadowSize / 2,
-backgroundWithShadowSize / 2, mBackgroundPaint);
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java
index 472cfc9..26f4ae7 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompat.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java
@@ -26,13 +26,8 @@
import android.os.UserHandle;
import android.support.annotation.Nullable;
-import com.android.launcher3.LauncherAppState;
-import com.android.launcher3.LauncherModel;
-import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
-import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
-import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.PackageUserKey;
import java.util.List;
@@ -88,62 +83,6 @@
public abstract List<ShortcutConfigActivityInfo> getCustomShortcutActivityList(
@Nullable PackageUserKey packageUser);
- /**
- * request.accept() will initiate the following flow:
- * -> go-to-system-process for actual processing (a)
- * -> callback-to-launcher on UI thread (b)
- * -> post callback on the worker thread (c)
- * -> Update model and unpin (in system) any shortcut not in out model. (d)
- *
- * Note that (b) will take at-least one frame as it involves posting callback from binder
- * thread to UI thread.
- * If (d) happens before we add this shortcut to our model, we will end up unpinning
- * the shortcut in the system.
- * Here its the caller's responsibility to add the newly created ShortcutInfo immediately
- * to the model (which may involves a single post-to-worker-thread). That will guarantee
- * that (d) happens after model is updated.
- */
- @Nullable
- public static ShortcutInfo createShortcutInfoFromPinItemRequest(
- Context context, final PinItemRequestCompat request, final long acceptDelay) {
- if (request != null &&
- request.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_SHORTCUT &&
- request.isValid()) {
-
- if (acceptDelay <= 0) {
- if (!request.accept()) {
- return null;
- }
- } else {
- // Block the worker thread until the accept() is called.
- new LooperExecutor(LauncherModel.getWorkerLooper()).execute(new Runnable() {
- @Override
- public void run() {
- try {
- Thread.sleep(acceptDelay);
- } catch (InterruptedException e) {
- // Ignore
- }
- if (request.isValid()) {
- request.accept();
- }
- }
- });
- }
-
- ShortcutInfoCompat compat = new ShortcutInfoCompat(request.getShortcutInfo());
- ShortcutInfo info = new ShortcutInfo(compat, context);
- // Apply the unbadged icon and fetch the actual icon asynchronously.
- info.iconBitmap = LauncherIcons
- .createShortcutIcon(compat, context, false /* badged */);
- LauncherAppState.getInstance(context).getModel()
- .updateAndBindShortcutInfo(info, compat);
- return info;
- } else {
- return null;
- }
- }
-
public void showAppDetailsForProfile(ComponentName component, UserHandle user) {
showAppDetailsForProfile(component, user, null, null);
}
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
index d145539..3214b46 100644
--- a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
+++ b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java
@@ -18,20 +18,27 @@
import android.annotation.TargetApi;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
+import android.content.pm.LauncherApps.PinItemRequest;
import android.content.pm.PackageManager;
import android.os.Build;
+import android.os.Parcelable;
import android.os.Process;
import android.os.UserHandle;
import android.support.annotation.Nullable;
-import android.util.Log;
+import com.android.launcher3.LauncherAppState;
+import com.android.launcher3.LauncherModel;
+import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.compat.ShortcutConfigActivityInfo.ShortcutConfigActivityInfoVO;
+import com.android.launcher3.graphics.LauncherIcons;
+import com.android.launcher3.shortcuts.ShortcutInfoCompat;
+import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.PackageUserKey;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@@ -45,11 +52,6 @@
@Override
public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) {
try {
- // TODO: Temporary workaround until the API signature is updated
- if (false) {
- throw new PackageManager.NameNotFoundException();
- }
-
ApplicationInfo info = mLauncherApps.getApplicationInfo(packageName, flags, user);
return (info.flags & ApplicationInfo.FLAG_INSTALLED) == 0 || !info.enabled
? null : info;
@@ -64,34 +66,89 @@
List<ShortcutConfigActivityInfo> result = new ArrayList<>();
UserHandle myUser = Process.myUserHandle();
- try {
- Method m = LauncherApps.class.getDeclaredMethod("getShortcutConfigActivityList",
- String.class, UserHandle.class);
- final List<UserHandle> users;
- final String packageName;
- if (packageUser == null) {
- users = UserManagerCompat.getInstance(mContext).getUserProfiles();
- packageName = null;
- } else {
- users = new ArrayList<>(1);
- users.add(packageUser.mUser);
- packageName = packageUser.mPackageName;
- }
- for (UserHandle user : users) {
- boolean ignoreTargetSdk = myUser.equals(user);
- List<LauncherActivityInfo> activities =
- (List<LauncherActivityInfo>) m.invoke(mLauncherApps, packageName, user);
- for (LauncherActivityInfo activityInfo : activities) {
- if (ignoreTargetSdk || activityInfo.getApplicationInfo().targetSdkVersion >=
- Build.VERSION_CODES.O) {
- result.add(new ShortcutConfigActivityInfoVO(activityInfo));
- }
+ final List<UserHandle> users;
+ final String packageName;
+ if (packageUser == null) {
+ users = UserManagerCompat.getInstance(mContext).getUserProfiles();
+ packageName = null;
+ } else {
+ users = new ArrayList<>(1);
+ users.add(packageUser.mUser);
+ packageName = packageUser.mPackageName;
+ }
+ for (UserHandle user : users) {
+ boolean ignoreTargetSdk = myUser.equals(user);
+ List<LauncherActivityInfo> activities =
+ mLauncherApps.getShortcutConfigActivityList(packageName, user);
+ for (LauncherActivityInfo activityInfo : activities) {
+ if (ignoreTargetSdk || activityInfo.getApplicationInfo().targetSdkVersion >=
+ Build.VERSION_CODES.O) {
+ result.add(new ShortcutConfigActivityInfoVO(activityInfo));
}
}
- } catch (Exception e) {
- Log.e("LauncherAppsCompatVO", "Error calling new API", e);
}
return result;
}
+
+ /**
+ * request.accept() will initiate the following flow:
+ * -> go-to-system-process for actual processing (a)
+ * -> callback-to-launcher on UI thread (b)
+ * -> post callback on the worker thread (c)
+ * -> Update model and unpin (in system) any shortcut not in out model. (d)
+ *
+ * Note that (b) will take at-least one frame as it involves posting callback from binder
+ * thread to UI thread.
+ * If (d) happens before we add this shortcut to our model, we will end up unpinning
+ * the shortcut in the system.
+ * Here its the caller's responsibility to add the newly created ShortcutInfo immediately
+ * to the model (which may involves a single post-to-worker-thread). That will guarantee
+ * that (d) happens after model is updated.
+ */
+ @Nullable
+ public static ShortcutInfo createShortcutInfoFromPinItemRequest(
+ Context context, final PinItemRequest request, final long acceptDelay) {
+ if (request != null &&
+ request.getRequestType() == PinItemRequest.REQUEST_TYPE_SHORTCUT &&
+ request.isValid()) {
+
+ if (acceptDelay <= 0) {
+ if (!request.accept()) {
+ return null;
+ }
+ } else {
+ // Block the worker thread until the accept() is called.
+ new LooperExecutor(LauncherModel.getWorkerLooper()).execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(acceptDelay);
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+ if (request.isValid()) {
+ request.accept();
+ }
+ }
+ });
+ }
+
+ ShortcutInfoCompat compat = new ShortcutInfoCompat(request.getShortcutInfo());
+ ShortcutInfo info = new ShortcutInfo(compat, context);
+ // Apply the unbadged icon and fetch the actual icon asynchronously.
+ info.iconBitmap = LauncherIcons
+ .createShortcutIcon(compat, context, false /* badged */);
+ LauncherAppState.getInstance(context).getModel()
+ .updateAndBindShortcutInfo(info, compat);
+ return info;
+ } else {
+ return null;
+ }
+ }
+
+ public static PinItemRequest getPinItemRequest(Intent intent) {
+ Parcelable extra = intent.getParcelableExtra(LauncherApps.EXTRA_PIN_ITEM_REQUEST);
+ return extra instanceof PinItemRequest ? (PinItemRequest) extra : null;
+ }
}
diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java
index bbf1546..1ffd3da 100644
--- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java
+++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java
@@ -24,6 +24,7 @@
import android.os.Handler;
import android.os.Process;
import android.os.UserHandle;
+import android.text.TextUtils;
import android.util.SparseArray;
import com.android.launcher3.IconCache;
@@ -151,7 +152,9 @@
};
private PackageInstaller.SessionInfo verify(PackageInstaller.SessionInfo sessionInfo) {
- if (sessionInfo == null || sessionInfo.getInstallerPackageName() == null) {
+ if (sessionInfo == null
+ || sessionInfo.getInstallerPackageName() == null
+ || TextUtils.isEmpty(sessionInfo.getAppPackageName())) {
return null;
}
String pkg = sessionInfo.getInstallerPackageName();
diff --git a/src/com/android/launcher3/compat/PinItemRequestCompat.java b/src/com/android/launcher3/compat/PinItemRequestCompat.java
deleted file mode 100644
index 1308cba..0000000
--- a/src/com/android/launcher3/compat/PinItemRequestCompat.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2017 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.compat;
-
-import android.appwidget.AppWidgetProviderInfo;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ShortcutInfo;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.launcher3.Utilities;
-
-/**
- * A wrapper around platform implementation of PinItemRequestCompat until the
- * updated SDK is available.
- */
-public class PinItemRequestCompat implements Parcelable {
-
- public static final String EXTRA_PIN_ITEM_REQUEST = "android.content.pm.extra.PIN_ITEM_REQUEST";
-
- public static final int REQUEST_TYPE_SHORTCUT = 1;
- public static final int REQUEST_TYPE_APPWIDGET = 2;
-
- private final Parcelable mObject;
-
- private PinItemRequestCompat(Parcelable object) {
- mObject = object;
- }
-
- public int getRequestType() {
- return (Integer) invokeMethod("getRequestType");
- }
-
- public ShortcutInfo getShortcutInfo() {
- return (ShortcutInfo) invokeMethod("getShortcutInfo");
- }
-
- public AppWidgetProviderInfo getAppWidgetProviderInfo(Context context) {
- try {
- return (AppWidgetProviderInfo) mObject.getClass()
- .getDeclaredMethod("getAppWidgetProviderInfo", Context.class)
- .invoke(mObject, context);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- public boolean isValid() {
- return (Boolean) invokeMethod("isValid");
- }
-
- public boolean accept() {
- return (Boolean) invokeMethod("accept");
- }
-
- public boolean accept(Bundle options) {
- try {
- return (Boolean) mObject.getClass().getDeclaredMethod("accept", Bundle.class)
- .invoke(mObject, options);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- public Bundle getExtras() {
- try {
- return (Bundle) mObject.getClass().getDeclaredMethod("getExtras").invoke(mObject);
- } catch (Exception e) {
- return null;
- }
- }
-
- private Object invokeMethod(String methodName) {
- try {
- return mObject.getClass().getDeclaredMethod(methodName).invoke(mObject);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int i) {
- parcel.writeParcelable(mObject, i);
- }
-
- public static final Parcelable.Creator<PinItemRequestCompat> CREATOR =
- new Parcelable.Creator<PinItemRequestCompat>() {
- public PinItemRequestCompat createFromParcel(Parcel source) {
- Parcelable object = source.readParcelable(null);
- return new PinItemRequestCompat(object);
- }
-
- public PinItemRequestCompat[] newArray(int size) {
- return new PinItemRequestCompat[size];
- }
- };
-
- public static PinItemRequestCompat getPinItemRequest(Intent intent) {
- if (!Utilities.isAtLeastO()) {
- return null;
- }
- Parcelable extra = intent.getParcelableExtra(EXTRA_PIN_ITEM_REQUEST);
- return extra == null ? null : new PinItemRequestCompat(extra);
- }
-}
diff --git a/src/com/android/launcher3/compat/ShortcutConfigActivityInfo.java b/src/com/android/launcher3/compat/ShortcutConfigActivityInfo.java
index 4a55e8c..6bdc627 100644
--- a/src/com/android/launcher3/compat/ShortcutConfigActivityInfo.java
+++ b/src/com/android/launcher3/compat/ShortcutConfigActivityInfo.java
@@ -37,8 +37,6 @@
import com.android.launcher3.R;
import com.android.launcher3.ShortcutInfo;
-import java.lang.reflect.Method;
-
/**
* Wrapper class for representing a shortcut configure activity.
*/
@@ -151,15 +149,13 @@
if (getUser().equals(Process.myUserHandle())) {
return super.startConfigActivity(activity, requestCode);
}
+ IntentSender is = activity.getSystemService(LauncherApps.class)
+ .getShortcutConfigActivityIntent(mInfo);
try {
- Method m = LauncherApps.class.getDeclaredMethod(
- "getShortcutConfigActivityIntent", LauncherActivityInfo.class);
- IntentSender is = (IntentSender) m.invoke(
- activity.getSystemService(LauncherApps.class), mInfo);
activity.startIntentSenderForResult(is, requestCode, null, 0, 0, 0);
return true;
- } catch (Exception e) {
- Log.e(TAG, "Error calling new API", e);
+ } catch (IntentSender.SendIntentException e) {
+ Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
return false;
}
}
diff --git a/src/com/android/launcher3/compat/UserManagerCompatVL.java b/src/com/android/launcher3/compat/UserManagerCompatVL.java
index 45525f5..c7f88f6 100644
--- a/src/com/android/launcher3/compat/UserManagerCompatVL.java
+++ b/src/com/android/launcher3/compat/UserManagerCompatVL.java
@@ -22,8 +22,8 @@
import android.os.UserHandle;
import android.os.UserManager;
-import com.android.launcher3.Utilities;
import com.android.launcher3.util.LongArrayMap;
+import com.android.launcher3.util.ManagedProfileHeuristic;
import java.util.ArrayList;
import java.util.Collections;
@@ -122,7 +122,7 @@
@Override
public long getUserCreationTime(UserHandle user) {
- SharedPreferences prefs = Utilities.getPrefs(mContext);
+ SharedPreferences prefs = ManagedProfileHeuristic.prefs(mContext);
String key = USER_CREATION_TIME_KEY + getSerialNumberForUser(user);
if (!prefs.contains(key)) {
prefs.edit().putLong(key, System.currentTimeMillis()).apply();
diff --git a/src/com/android/launcher3/compat/WallpaperColorsCompat.java b/src/com/android/launcher3/compat/WallpaperColorsCompat.java
new file mode 100644
index 0000000..fd08f94
--- /dev/null
+++ b/src/com/android/launcher3/compat/WallpaperColorsCompat.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 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.compat;
+
+import android.util.SparseIntArray;
+
+/**
+ * A compatibility layer around platform implementation of WallpaperColors
+ */
+public class WallpaperColorsCompat {
+
+ private final SparseIntArray mColors;
+ private final boolean mSupportsDarkText;
+
+ public WallpaperColorsCompat(SparseIntArray colors, boolean supportsDarkText) {
+ mColors = colors;
+ mSupportsDarkText = supportsDarkText;
+ }
+
+ /**
+ * A map of color code to their occurrences. The bigger the int, the more relevant the color.
+ */
+ public SparseIntArray getColors() {
+ return mColors;
+ }
+
+ public boolean supportsDarkText() {
+ return mSupportsDarkText;
+ }
+}
diff --git a/src/com/android/launcher3/compat/WallpaperManagerCompat.java b/src/com/android/launcher3/compat/WallpaperManagerCompat.java
new file mode 100644
index 0000000..cbcabdf
--- /dev/null
+++ b/src/com/android/launcher3/compat/WallpaperManagerCompat.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2017 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.compat;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+
+import com.android.launcher3.Utilities;
+
+public abstract class WallpaperManagerCompat {
+
+ private static final Object sInstanceLock = new Object();
+ private static WallpaperManagerCompat sInstance;
+
+ public static WallpaperManagerCompat getInstance(Context context) {
+ synchronized (sInstanceLock) {
+ if (sInstance == null) {
+ context = context.getApplicationContext();
+
+ if (Utilities.isAtLeastO()) {
+ try {
+ sInstance = new WallpaperManagerCompatVOMR1(context);
+ } catch (Exception e) {
+ // The wallpaper APIs do not yet exist
+ }
+ }
+ if (sInstance == null) {
+ sInstance = new WallpaperManagerCompatVL(context);
+ }
+ }
+ return sInstance;
+ }
+ }
+
+
+ public abstract @Nullable WallpaperColorsCompat getWallpaperColors(int which);
+
+ public abstract void addOnColorsChangedListener(OnColorsChangedListenerCompat listener);
+
+ /**
+ * Interface definition for a callback to be invoked when colors change on a wallpaper.
+ */
+ public interface OnColorsChangedListenerCompat {
+
+ void onColorsChanged(WallpaperColorsCompat colors, int which);
+ }
+}
diff --git a/src/com/android/launcher3/compat/WallpaperManagerCompatVL.java b/src/com/android/launcher3/compat/WallpaperManagerCompatVL.java
new file mode 100644
index 0000000..3431664
--- /dev/null
+++ b/src/com/android/launcher3/compat/WallpaperManagerCompatVL.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2017 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.compat;
+
+import static android.app.WallpaperManager.FLAG_SYSTEM;
+
+import android.app.IntentService;
+import android.app.WallpaperInfo;
+import android.app.WallpaperManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.BitmapRegionDecoder;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ParcelFileDescriptor;
+import android.os.ResultReceiver;
+import android.support.annotation.Nullable;
+import android.support.v7.graphics.Palette;
+import android.util.Log;
+import android.util.Pair;
+import android.util.SparseIntArray;
+
+import com.android.launcher3.LauncherFiles;
+import com.android.launcher3.Utilities;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class WallpaperManagerCompatVL extends WallpaperManagerCompat {
+
+ private static final String TAG = "WMCompatVL";
+
+ private static final String VERSION_PREFIX = "1,";
+ private static final String KEY_COLORS = "wallpaper_parsed_colors";
+ private static final String EXTRA_RECEIVER = "receiver";
+
+ private final ArrayList<OnColorsChangedListenerCompat> mListeners = new ArrayList<>();
+
+ private final Context mContext;
+ private WallpaperColorsCompat mColorsCompat;
+
+ WallpaperManagerCompatVL(Context context) {
+ mContext = context;
+
+ String colors = prefs(mContext).getString(KEY_COLORS, "");
+ int wallpaperId = -1;
+ if (colors.startsWith(VERSION_PREFIX)) {
+ Pair<Integer, WallpaperColorsCompat> storedValue = parseValue(colors);
+ wallpaperId = storedValue.first;
+ mColorsCompat = storedValue.second;
+ }
+
+ if (wallpaperId == -1 || wallpaperId != getWallpaperId(context)) {
+ reloadColors();
+ }
+ context.registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ reloadColors();
+ }
+ }, new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));
+ }
+
+ @Nullable
+ @Override
+ public WallpaperColorsCompat getWallpaperColors(int which) {
+ return which == FLAG_SYSTEM ? mColorsCompat : null;
+ }
+
+ @Override
+ public void addOnColorsChangedListener(OnColorsChangedListenerCompat listener) {
+ mListeners.add(listener);
+ }
+
+ private void reloadColors() {
+ ResultReceiver receiver = new ResultReceiver(new Handler()) {
+
+ @Override
+ protected void onReceiveResult(int resultCode, Bundle resultData) {
+ handleResult(resultData.getString(KEY_COLORS));
+ }
+ };
+ mContext.startService(new Intent(mContext, ColorExtractionService.class)
+ .putExtra(EXTRA_RECEIVER, receiver));
+ }
+
+ private void handleResult(String result) {
+ prefs(mContext).edit().putString(KEY_COLORS, result).apply();
+ mColorsCompat = parseValue(result).second;
+ for (OnColorsChangedListenerCompat listener : mListeners) {
+ listener.onColorsChanged(mColorsCompat, FLAG_SYSTEM);
+ }
+ }
+
+ private static SharedPreferences prefs(Context context) {
+ return context.getSharedPreferences(
+ LauncherFiles.DEVICE_PREFERENCES_KEY, Context.MODE_PRIVATE);
+ }
+
+ private static final int getWallpaperId(Context context) {
+ if (!Utilities.ATLEAST_NOUGAT) {
+ return -1;
+ }
+ return context.getSystemService(WallpaperManager.class).getWallpaperId(FLAG_SYSTEM);
+ }
+
+ /**
+ * Parses the stored value and returns the wallpaper id and wallpaper colors.
+ */
+ private static Pair<Integer, WallpaperColorsCompat> parseValue(String value) {
+ String[] parts = value.split(",");
+ Integer wallpaperId = Integer.parseInt(parts[1]);
+ if (parts.length == 2) {
+ // There is no wallpaper color info present, eg when live wallpaper has no preview.
+ return Pair.create(wallpaperId, null);
+ }
+
+ SparseIntArray colorsToOccurrences = new SparseIntArray((parts.length - 2) / 2);
+ for (int i = 2; i < parts.length; i += 2) {
+ colorsToOccurrences.put(Integer.parseInt(parts[i]), Integer.parseInt(parts[i + 1]));
+ }
+ return Pair.create(wallpaperId, new WallpaperColorsCompat(colorsToOccurrences, false));
+ }
+
+ /**
+ * Intent service to handle color extraction
+ */
+ public static class ColorExtractionService extends IntentService {
+ private static final int MAX_WALLPAPER_EXTRACTION_AREA = 112 * 112;
+
+ public ColorExtractionService() {
+ super("ColorExtractionService");
+ }
+
+ /**
+ * Extracts the wallpaper colors and sends the result back through the receiver.
+ */
+ @Override
+ protected void onHandleIntent(@Nullable Intent intent) {
+ int wallpaperId = getWallpaperId(this);
+
+ Bitmap bitmap = null;
+ Drawable drawable = null;
+
+ WallpaperManager wm = WallpaperManager.getInstance(this);
+ WallpaperInfo info = wm.getWallpaperInfo();
+ if (info != null) {
+ // For live wallpaper, extract colors from thumbnail
+ drawable = info.loadThumbnail(getPackageManager());
+ } else {
+ if (Utilities.ATLEAST_NOUGAT) {
+ try (ParcelFileDescriptor fd = wm.getWallpaperFile(FLAG_SYSTEM)) {
+ BitmapRegionDecoder decoder = BitmapRegionDecoder
+ .newInstance(fd.getFileDescriptor(), false);
+
+ int requestedArea = decoder.getWidth() * decoder.getHeight();
+ BitmapFactory.Options options = new BitmapFactory.Options();
+
+ if (requestedArea > MAX_WALLPAPER_EXTRACTION_AREA) {
+ double areaRatio =
+ (double) requestedArea / MAX_WALLPAPER_EXTRACTION_AREA;
+ double nearestPowOf2 =
+ Math.floor(Math.log(areaRatio) / (2 * Math.log(2)));
+ options.inSampleSize = (int) Math.pow(2, nearestPowOf2);
+ }
+ Rect region = new Rect(0, 0, decoder.getWidth(), decoder.getHeight());
+ bitmap = decoder.decodeRegion(region, options);
+ decoder.recycle();
+ } catch (IOException | NullPointerException e) {
+ Log.e(TAG, "Fetching partial bitmap failed, trying old method", e);
+ }
+ }
+ if (bitmap == null) {
+ drawable = wm.getDrawable();
+ }
+ }
+
+ if (drawable != null) {
+ // Calculate how big the bitmap needs to be.
+ // This avoids unnecessary processing and allocation inside Palette.
+ final int requestedArea = drawable.getIntrinsicWidth() *
+ drawable.getIntrinsicHeight();
+ double scale = 1;
+ if (requestedArea > MAX_WALLPAPER_EXTRACTION_AREA) {
+ scale = Math.sqrt(MAX_WALLPAPER_EXTRACTION_AREA / (double) requestedArea);
+ }
+ bitmap = Bitmap.createBitmap((int) (drawable.getIntrinsicWidth() * scale),
+ (int) (drawable.getIntrinsicHeight() * scale), Bitmap.Config.ARGB_8888);
+ final Canvas bmpCanvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
+ drawable.draw(bmpCanvas);
+ }
+
+ String value = VERSION_PREFIX + wallpaperId;
+
+ if (bitmap != null) {
+ Palette palette = Palette.from(bitmap).generate();
+ bitmap.recycle();
+
+ StringBuilder builder = new StringBuilder(value);
+ for (Palette.Swatch swatch : palette.getSwatches()) {
+ builder.append(',')
+ .append(swatch.getRgb())
+ .append(',')
+ .append(swatch.getPopulation());
+ }
+ value = builder.toString();
+ }
+
+ ResultReceiver receiver = intent.getParcelableExtra(EXTRA_RECEIVER);
+ Bundle result = new Bundle();
+ result.putString(KEY_COLORS, value);
+ receiver.send(0, result);
+ }
+ }
+}
diff --git a/src/com/android/launcher3/compat/WallpaperManagerCompatVOMR1.java b/src/com/android/launcher3/compat/WallpaperManagerCompatVOMR1.java
new file mode 100644
index 0000000..c74ccc0
--- /dev/null
+++ b/src/com/android/launcher3/compat/WallpaperManagerCompatVOMR1.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2017 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.compat;
+
+import android.annotation.TargetApi;
+import android.app.WallpaperManager;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Build;
+import android.support.annotation.Nullable;
+import android.util.Log;
+import android.util.Pair;
+import android.util.SparseIntArray;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.List;
+
+@TargetApi(Build.VERSION_CODES.O)
+public class WallpaperManagerCompatVOMR1 extends WallpaperManagerCompat {
+
+ private static final String TAG = "WMCompatVOMR1";
+
+ private final WallpaperManager mWm;
+
+ private final Class mOCLClass;
+ private final Method mAddOCLMethod;
+
+ private final Method mWCGetMethod;
+ private final Method mWCGetColorsMethod;
+ private final Method mWCSupportsDarkTextMethod;
+
+ WallpaperManagerCompatVOMR1(Context context) throws Exception {
+ mWm = context.getSystemService(WallpaperManager.class);
+
+ mOCLClass = Class.forName("android.app.WallpaperManager$OnColorsChangedListener");
+ mAddOCLMethod = WallpaperManager.class.getDeclaredMethod(
+ "addOnColorsChangedListener", mOCLClass);
+
+ mWCGetMethod = WallpaperManager.class.getDeclaredMethod("getWallpaperColors", int.class);
+ Class wallpaperColorsClass = mWCGetMethod.getReturnType();
+ mWCGetColorsMethod = wallpaperColorsClass.getDeclaredMethod("getColors");
+ mWCSupportsDarkTextMethod = wallpaperColorsClass.getDeclaredMethod("supportsDarkText");
+ }
+
+ @Nullable
+ @Override
+ public WallpaperColorsCompat getWallpaperColors(int which) {
+ try {
+ return convertColorsObject(mWCGetMethod.invoke(mWm, which));
+ } catch (Exception e) {
+ Log.e(TAG, "Error calling wallpaper API", e);
+ return null;
+ }
+ }
+
+ @Override
+ public void addOnColorsChangedListener(final OnColorsChangedListenerCompat listener) {
+ Object onChangeListener = Proxy.newProxyInstance(
+ WallpaperManager.class.getClassLoader(),
+ new Class[]{mOCLClass},
+ new InvocationHandler() {
+ @Override
+ public Object invoke(Object o, Method method, Object[] objects)
+ throws Throwable {
+ String methodName = method.getName();
+ if ("onColorsChanged".equals(methodName)) {
+ listener.onColorsChanged(
+ convertColorsObject(objects[0]), (Integer) objects[1]);
+ } else if ("toString".equals(methodName)) {
+ return listener.toString();
+ }
+ return null;
+ }
+ });
+ try {
+ mAddOCLMethod.invoke(mWm, onChangeListener);
+ } catch (Exception e) {
+ Log.e(TAG, "Error calling wallpaper API", e);
+ }
+ }
+
+ private WallpaperColorsCompat convertColorsObject(Object colors) throws Exception {
+ if (colors == null) {
+ return null;
+ }
+ List<Pair<Color, Integer>> list = (List) mWCGetColorsMethod.invoke(colors);
+ boolean supportsDarkText = (Boolean) mWCSupportsDarkTextMethod.invoke(colors);
+ SparseIntArray colorMap = new SparseIntArray(list.size());
+ for (Pair<Color, Integer> color : list) {
+ colorMap.put(color.first.toArgb(), color.second);
+ }
+ return new WallpaperColorsCompat(colorMap, supportsDarkText);
+ }
+}
diff --git a/src/com/android/launcher3/discovery/AppDiscoveryItemView.java b/src/com/android/launcher3/discovery/AppDiscoveryItemView.java
index 9bb3b10..809d724 100644
--- a/src/com/android/launcher3/discovery/AppDiscoveryItemView.java
+++ b/src/com/android/launcher3/discovery/AppDiscoveryItemView.java
@@ -82,7 +82,7 @@
mPrice.setText(info.priceFormatted != null ? info.priceFormatted : "");
mReviewCount.setVisibility(SHOW_REVIEW_COUNT ? View.VISIBLE : View.GONE);
if (info.rating >= 0) {
- mRatingText.setText(new DecimalFormat("#.#").format(info.rating));
+ mRatingText.setText(new DecimalFormat("#.0").format(info.rating));
mRatingView.setRating(info.rating);
mRatingView.setVisibility(View.VISIBLE);
String reviewCountFormatted = NumberFormat.getInstance().format(info.reviewCount);
diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java
index 09592a8..29789c8 100644
--- a/src/com/android/launcher3/dragndrop/AddItemActivity.java
+++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java
@@ -28,6 +28,7 @@
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.Intent;
+import android.content.pm.LauncherApps.PinItemRequest;
import android.content.res.Configuration;
import android.graphics.Canvas;
import android.graphics.Point;
@@ -50,7 +51,7 @@
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.AppWidgetManagerCompat;
-import com.android.launcher3.compat.PinItemRequestCompat;
+import com.android.launcher3.compat.LauncherAppsCompatVO;
import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.shortcuts.ShortcutInfoCompat;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action;
@@ -60,7 +61,7 @@
import com.android.launcher3.widget.WidgetHostViewLoader;
import com.android.launcher3.widget.WidgetImageView;
-@TargetApi(Build.VERSION_CODES.N_MR1)
+@TargetApi(Build.VERSION_CODES.O)
public class AddItemActivity extends BaseActivity implements OnLongClickListener, OnTouchListener {
private static final int SHADOW_SIZE = 10;
@@ -70,7 +71,7 @@
private final PointF mLastTouchPos = new PointF();
- private PinItemRequestCompat mRequest;
+ private PinItemRequest mRequest;
private LauncherAppState mApp;
private InvariantDeviceProfile mIdp;
@@ -87,7 +88,7 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mRequest = PinItemRequestCompat.getPinItemRequest(getIntent());
+ mRequest = LauncherAppsCompatVO.getPinItemRequest(getIntent());
if (mRequest == null) {
finish();
return;
@@ -101,9 +102,9 @@
mDeviceProfile = mIdp.getDeviceProfile(getApplicationContext());
setContentView(R.layout.add_item_confirmation_activity);
- mWidgetCell = (LivePreviewWidgetCell) findViewById(R.id.widget_cell);
+ mWidgetCell = findViewById(R.id.widget_cell);
- if (mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_SHORTCUT) {
+ if (mRequest.getRequestType() == PinItemRequest.REQUEST_TYPE_SHORTCUT) {
setupShortcut();
} else {
if (!setupWidget()) {
@@ -226,7 +227,7 @@
* Called when place-automatically button is clicked.
*/
public void onPlaceAutomaticallyClick(View v) {
- if (mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_SHORTCUT) {
+ if (mRequest.getRequestType() == PinItemRequest.REQUEST_TYPE_SHORTCUT) {
InstallShortcutReceiver.queueShortcut(
new ShortcutInfoCompat(mRequest.getShortcutInfo()), this);
logCommand(Action.Command.CONFIRM);
diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
index df0c47c..f9f4e50 100644
--- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java
+++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java
@@ -16,11 +16,14 @@
package com.android.launcher3.dragndrop;
+import android.annotation.TargetApi;
import android.appwidget.AppWidgetManager;
import android.content.ClipDescription;
import android.content.Intent;
+import android.content.pm.LauncherApps.PinItemRequest;
import android.graphics.Point;
import android.graphics.Rect;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -40,7 +43,7 @@
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.PendingAddItemInfo;
import com.android.launcher3.R;
-import com.android.launcher3.compat.PinItemRequestCompat;
+import com.android.launcher3.Utilities;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
@@ -55,6 +58,7 @@
* {@link DragSource} for handling drop from a different window. This object is initialized
* in the source window and is passed on to the Launcher activity as an Intent extra.
*/
+@TargetApi(Build.VERSION_CODES.O)
public class PinItemDragListener
implements Parcelable, View.OnDragListener, DragSource, DragOptions.PreDragCondition {
@@ -63,7 +67,7 @@
private static final String MIME_TYPE_PREFIX = "com.android.launcher3.drag_and_drop/";
public static final String EXTRA_PIN_ITEM_DRAG_LISTENER = "pin_item_drag_listener";
- private final PinItemRequestCompat mRequest;
+ private final PinItemRequest mRequest;
// Position of preview relative to the touch location
private final Rect mPreviewRect;
@@ -78,7 +82,7 @@
private DragController mDragController;
private long mDragStartTime;
- public PinItemDragListener(PinItemRequestCompat request, Rect previewRect,
+ public PinItemDragListener(PinItemRequest request, Rect previewRect,
int previewBitmapWidth, int previewViewWidth) {
mRequest = request;
mPreviewRect = previewRect;
@@ -88,7 +92,7 @@
}
private PinItemDragListener(Parcel parcel) {
- mRequest = PinItemRequestCompat.CREATOR.createFromParcel(parcel);
+ mRequest = PinItemRequest.CREATOR.createFromParcel(parcel);
mPreviewRect = Rect.CREATOR.createFromParcel(parcel);
mPreviewBitmapWidth = parcel.readInt();
mPreviewViewWidth = parcel.readInt();
@@ -146,7 +150,7 @@
}
final PendingAddItemInfo item;
- if (mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_SHORTCUT) {
+ if (mRequest.getRequestType() == PinItemRequest.REQUEST_TYPE_SHORTCUT) {
item = new PendingAddShortcutInfo(
new PinShortcutRequestActivityInfo(mRequest, mLauncher));
} else {
@@ -177,7 +181,7 @@
// across windows, using drag position here give a good estimate for relative position
// to source window.
PendingItemDragHelper dragHelper = new PendingItemDragHelper(view);
- if (mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_APPWIDGET) {
+ if (mRequest.getRequestType() == PinItemRequest.REQUEST_TYPE_APPWIDGET) {
dragHelper.setPreview(getPreview(mRequest));
}
@@ -271,7 +275,7 @@
}
}
- public static RemoteViews getPreview(PinItemRequestCompat request) {
+ public static RemoteViews getPreview(PinItemRequest request) {
Bundle extras = request.getExtras();
if (extras != null &&
extras.get(AppWidgetManager.EXTRA_APPWIDGET_PREVIEW) instanceof RemoteViews) {
@@ -281,6 +285,9 @@
}
public static boolean handleDragRequest(Launcher launcher, Intent intent) {
+ if (!Utilities.isAtLeastO()) {
+ return false;
+ }
if (intent == null || !Intent.ACTION_MAIN.equals(intent.getAction())) {
return false;
}
diff --git a/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java b/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java
index bb5ac5b..52abbc7 100644
--- a/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java
+++ b/src/com/android/launcher3/dragndrop/PinShortcutRequestActivityInfo.java
@@ -21,6 +21,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.LauncherApps;
+import android.content.pm.LauncherApps.PinItemRequest;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.Drawable;
import android.os.Build;
@@ -30,26 +31,25 @@
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
-import com.android.launcher3.compat.LauncherAppsCompat;
-import com.android.launcher3.compat.PinItemRequestCompat;
+import com.android.launcher3.compat.LauncherAppsCompatVO;
import com.android.launcher3.compat.ShortcutConfigActivityInfo;
/**
* Extension of ShortcutConfigActivityInfo to be used in the confirmation prompt for pin item
* request.
*/
-@TargetApi(Build.VERSION_CODES.N_MR1)
+@TargetApi(Build.VERSION_CODES.O)
class PinShortcutRequestActivityInfo extends ShortcutConfigActivityInfo {
// Class name used in the target component, such that it will never represent an
// actual existing class.
private static final String DUMMY_COMPONENT_CLASS = "pinned-shortcut";
- private final PinItemRequestCompat mRequest;
+ private final PinItemRequest mRequest;
private final ShortcutInfo mInfo;
private final Context mContext;
- public PinShortcutRequestActivityInfo(PinItemRequestCompat request, Context context) {
+ public PinShortcutRequestActivityInfo(PinItemRequest request, Context context) {
super(new ComponentName(request.getShortcutInfo().getPackage(), DUMMY_COMPONENT_CLASS),
request.getShortcutInfo().getUserHandle());
mRequest = request;
@@ -80,7 +80,7 @@
Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT +
mContext.getResources().getInteger(R.integer.config_overlayTransitionTime) / 2;
// Delay the actual accept() call until the drop animation is complete.
- return LauncherAppsCompat.createShortcutInfoFromPinItemRequest(
+ return LauncherAppsCompatVO.createShortcutInfoFromPinItemRequest(
mContext, mRequest, duration);
}
diff --git a/src/com/android/launcher3/dragndrop/PinWidgetFlowHandler.java b/src/com/android/launcher3/dragndrop/PinWidgetFlowHandler.java
index b6da6ad..9f617e4 100644
--- a/src/com/android/launcher3/dragndrop/PinWidgetFlowHandler.java
+++ b/src/com/android/launcher3/dragndrop/PinWidgetFlowHandler.java
@@ -16,15 +16,17 @@
package com.android.launcher3.dragndrop;
+import android.annotation.TargetApi;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
+import android.content.pm.LauncherApps.PinItemRequest;
+import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
-import com.android.launcher3.compat.PinItemRequestCompat;
import com.android.launcher3.widget.WidgetAddFlowHandler;
/**
@@ -33,18 +35,19 @@
* No config activity is shown even if it is defined in widget config. And a callback is sent when
* the widget is bound.
*/
+@TargetApi(Build.VERSION_CODES.O)
public class PinWidgetFlowHandler extends WidgetAddFlowHandler implements Parcelable {
- private final PinItemRequestCompat mRequest;
+ private final PinItemRequest mRequest;
- public PinWidgetFlowHandler(AppWidgetProviderInfo providerInfo, PinItemRequestCompat request) {
+ public PinWidgetFlowHandler(AppWidgetProviderInfo providerInfo, PinItemRequest request) {
super(providerInfo);
mRequest = request;
}
protected PinWidgetFlowHandler(Parcel parcel) {
super(parcel);
- mRequest = PinItemRequestCompat.CREATOR.createFromParcel(parcel);
+ mRequest = PinItemRequest.CREATOR.createFromParcel(parcel);
}
@Override
diff --git a/src/com/android/launcher3/dynamicui/colorextraction/types/Tonal.java b/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java
similarity index 76%
rename from src/com/android/launcher3/dynamicui/colorextraction/types/Tonal.java
rename to src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java
index 1e165a3..5a0e78b 100644
--- a/src/com/android/launcher3/dynamicui/colorextraction/types/Tonal.java
+++ b/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java
@@ -1,24 +1,49 @@
-package com.android.launcher3.dynamicui.colorextraction.types;
+/*
+ * Copyright (C) 2017 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.dynamicui;
+
+import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.graphics.ColorUtils;
import android.util.Log;
import android.util.Pair;
+import android.util.SparseIntArray;
-import com.android.launcher3.dynamicui.colorextraction.ColorExtractor;
-import com.android.launcher3.dynamicui.colorextraction.WallpaperColorsCompat;
+import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
+import com.android.launcher3.compat.WallpaperColorsCompat;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Comparator;
-
+import java.util.List;
/**
* Implementation of tonal color extraction
- *
- * TODO remove this class if available by platform
- */
-public class Tonal implements ExtractionType {
+ **/
+public class ColorExtractionAlgorithm {
+
+ public static ColorExtractionAlgorithm newInstance(Context context) {
+ return Utilities.getOverrideObject(ColorExtractionAlgorithm.class,
+ context.getApplicationContext(), R.string.color_extraction_impl_class);
+ }
+
private static final String TAG = "Tonal";
// Used for tonal palette fitting
@@ -29,34 +54,46 @@
private static final float MIN_COLOR_OCCURRENCE = 0.1f;
private static final float MIN_LUMINOSITY = 0.5f;
- public void extractInto(WallpaperColorsCompat wallpaperColors,
- ColorExtractor.GradientColors gradientColors) {
- if (wallpaperColors.getColors().size() == 0) {
- return;
+ public ColorExtractionAlgorithm() {
+ }
+
+ public @Nullable Pair<Integer, Integer> extractInto(WallpaperColorsCompat wallpaperColors) {
+ if (wallpaperColors == null) {
+ return null;
+ }
+ SparseIntArray colorsArray = wallpaperColors.getColors();
+ if (colorsArray.size() == 0) {
+ return null;
}
// Tonal is not really a sort, it takes a color from the extracted
// palette and finds a best fit amongst a collection of pre-defined
// palettes. The best fit is tweaked to be closer to the source color
// and replaces the original palette
+ List<Pair<Integer, Integer>> colors = new ArrayList<>(colorsArray.size());
+ for (int i = colorsArray.size() - 1; i >= 0; i --) {
+ colors.add(Pair.create(colorsArray.keyAt(i), colorsArray.valueAt(i)));
+ }
+
// First find the most representative color in the image
- populationSort(wallpaperColors);
+ populationSort(colors);
+
// Calculate total
int total = 0;
- for (Pair<Color, Integer> weightedColor : wallpaperColors.getColors()) {
+ for (Pair<Integer, Integer> weightedColor : colors) {
total += weightedColor.second;
}
// Get bright colors that occur often enough in this image
- Pair<Color, Integer> bestColor = null;
+ Pair<Integer, Integer> bestColor = null;
float[] hsl = new float[3];
- for (Pair<Color, Integer> weightedColor : wallpaperColors.getColors()) {
+ for (Pair<Integer, Integer> weightedColor : colors) {
float colorOccurrence = weightedColor.second / (float) total;
if (colorOccurrence < MIN_COLOR_OCCURRENCE) {
break;
}
- int colorValue = weightedColor.first.toArgb();
+ int colorValue = weightedColor.first;
ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue),
Color.blue(colorValue), hsl);
if (hsl[2] > MIN_LUMINOSITY) {
@@ -66,10 +103,10 @@
// Fallback to first color
if (bestColor == null) {
- bestColor = wallpaperColors.getColors().get(0);
+ bestColor = colors.get(0);
}
- int colorValue = bestColor.first.toArgb();
+ int colorValue = bestColor.first;
ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue), Color.blue(colorValue),
hsl);
hsl[0] /= 360.0f; // normalize
@@ -80,13 +117,13 @@
// Fall back to population sort if we couldn't find a tonal palette
if (palette == null) {
Log.w(TAG, "Could not find a tonal palette!");
- return;
+ return null;
}
int fitIndex = bestFit(palette, hsl[0], hsl[1], hsl[2]);
if (fitIndex == -1) {
Log.w(TAG, "Could not find best fit!");
- return;
+ return null;
}
float[] h = fit(palette.h, hsl[0], fitIndex,
Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY);
@@ -97,18 +134,19 @@
hsl[0] = fract(h[0]) * 360.0f;
hsl[1] = s[0];
hsl[2] = l[0];
- gradientColors.setMainColor(ColorUtils.HSLToColor(hsl));
+ int mainColor = ColorUtils.HSLToColor(hsl);
hsl[0] = fract(h[1]) * 360.0f;
hsl[1] = s[1];
hsl[2] = l[1];
- gradientColors.setSecondaryColor(ColorUtils.HSLToColor(hsl));
+ int secondaryColor = ColorUtils.HSLToColor(hsl);
+ return new Pair<>(mainColor, secondaryColor);
}
- private static void populationSort(@NonNull WallpaperColorsCompat wallpaperColors) {
- wallpaperColors.getColors().sort(new Comparator<Pair<Color, Integer>>() {
+ private static void populationSort(@NonNull List<Pair<Integer, Integer>> wallpaperColors) {
+ Collections.sort(wallpaperColors, new Comparator<Pair<Integer, Integer>>() {
@Override
- public int compare(Pair<Color, Integer> a, Pair<Color, Integer> b) {
+ public int compare(Pair<Integer, Integer> a, Pair<Integer, Integer> b) {
return b.second - a.second;
}
});
@@ -129,34 +167,12 @@
float delta = v - data[index];
for (int i = 0; i < data.length; i++) {
- fitData[i] = constrain(data[i] + delta, min, max);
+ fitData[i] = Utilities.boundToRange(data[i] + delta, min, max);
}
return fitData;
}
- // TODO no MathUtils
- private static float constrain(float x, float min, float max) {
- x = Math.min(x, max);
- x = Math.max(x, min);
- return x;
- }
-
- /*function adjustSatLumForFit(val, points, fitIndex) {
- var fitValue = lerpBetweenPoints(points, fitIndex);
- var diff = val - fitValue;
-
- var newPoints = [];
- for (var ii=0; ii<points.length; ii++) {
- var point = [points[ii][0], points[ii][1]];
- point[1] += diff;
- if (point[1] > 1) point[1] = 1;
- if (point[1] < 0) point[1] = 0;
- newPoints[ii] = point;
- }
- return newPoints;
- }*/
-
/**
* Finds the closest color in a palette, given another HSL color
*
@@ -295,5 +311,5 @@
new float[] { 0.241f, 0.316f, 0.46f, 0.586f, 0.655f, 0.7f, 0.75f, 0.8f, 0.84f, 0.88f }
)
};
-}
+}
diff --git a/src/com/android/launcher3/dynamicui/ColorExtractionService.java b/src/com/android/launcher3/dynamicui/ColorExtractionService.java
index 349b4ff..06a4dab 100644
--- a/src/com/android/launcher3/dynamicui/ColorExtractionService.java
+++ b/src/com/android/launcher3/dynamicui/ColorExtractionService.java
@@ -65,9 +65,6 @@
if (FeatureFlags.QSB_IN_HOTSEAT || FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
extractedColors.updateWallpaperThemePalette(null);
- if (FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
- extractedColors.updateAllAppsGradientPalette(this);
- }
}
} else {
// We extract colors for the hotseat and status bar separately,
@@ -80,9 +77,6 @@
if (FeatureFlags.QSB_IN_HOTSEAT || FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
extractedColors.updateWallpaperThemePalette(getWallpaperPalette());
- if (FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
- extractedColors.updateAllAppsGradientPalette(this);
- }
}
}
diff --git a/src/com/android/launcher3/dynamicui/ExtractedColors.java b/src/com/android/launcher3/dynamicui/ExtractedColors.java
index e60a1bd..2d8bb86 100644
--- a/src/com/android/launcher3/dynamicui/ExtractedColors.java
+++ b/src/com/android/launcher3/dynamicui/ExtractedColors.java
@@ -26,7 +26,6 @@
import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
-import com.android.launcher3.dynamicui.colorextraction.ColorExtractor;
import java.util.ArrayList;
import java.util.Arrays;
@@ -165,20 +164,6 @@
? defaultColor : wallpaperPalette.getVibrantColor(defaultColor));
}
- public void updateAllAppsGradientPalette(Context context) {
- // TODO use isAtLeastO when available
- try {
- WallpaperManager.class.getDeclaredMethod("getWallpaperColors", int.class);
- ColorExtractor extractor = new ColorExtractor(context);
- ColorExtractor.GradientColors colors = extractor.getColors(WallpaperManager.FLAG_SYSTEM);
- setColorAtIndex(ALLAPPS_GRADIENT_MAIN_INDEX, colors.getMainColor());
- setColorAtIndex(ALLAPPS_GRADIENT_SECONDARY_INDEX, colors.getSecondaryColor());
- } catch (NoSuchMethodException e) {
- setColorAtIndex(ALLAPPS_GRADIENT_MAIN_INDEX, Color.WHITE);
- setColorAtIndex(ALLAPPS_GRADIENT_SECONDARY_INDEX, Color.WHITE);
- }
- }
-
public void addOnChangeListener(OnChangeListener listener) {
mListeners.add(listener);
}
diff --git a/src/com/android/launcher3/dynamicui/WallpaperColorInfo.java b/src/com/android/launcher3/dynamicui/WallpaperColorInfo.java
new file mode 100644
index 0000000..ca85b6a
--- /dev/null
+++ b/src/com/android/launcher3/dynamicui/WallpaperColorInfo.java
@@ -0,0 +1,111 @@
+package com.android.launcher3.dynamicui;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.support.v4.graphics.ColorUtils;
+import android.util.Pair;
+
+import com.android.launcher3.compat.WallpaperColorsCompat;
+import com.android.launcher3.compat.WallpaperManagerCompat;
+
+import java.util.ArrayList;
+
+import static android.app.WallpaperManager.FLAG_SYSTEM;
+
+public class WallpaperColorInfo implements WallpaperManagerCompat.OnColorsChangedListenerCompat {
+
+ private static final int FALLBACK_COLOR = Color.WHITE;
+ private static final Object sInstanceLock = new Object();
+ private static WallpaperColorInfo sInstance;
+
+ public static WallpaperColorInfo getInstance(Context context) {
+ synchronized (sInstanceLock) {
+ if (sInstance == null) {
+ sInstance = new WallpaperColorInfo(context.getApplicationContext());
+ }
+ return sInstance;
+ }
+ }
+
+ private final ArrayList<OnChangeListener> mListeners = new ArrayList<>();
+ private final WallpaperManagerCompat mWallpaperManager;
+ private final ColorExtractionAlgorithm mExtractionType;
+ private int mMainColor;
+ private int mSecondaryColor;
+ private boolean mIsDark;
+ private OnThemeChangeListener mOnThemeChangeListener;
+
+ private WallpaperColorInfo(Context context) {
+ mWallpaperManager = WallpaperManagerCompat.getInstance(context);
+ mWallpaperManager.addOnColorsChangedListener(this);
+ mExtractionType = ColorExtractionAlgorithm.newInstance(context);
+ update(mWallpaperManager.getWallpaperColors(FLAG_SYSTEM));
+ }
+
+ public int getMainColor() {
+ return mMainColor;
+ }
+
+ public int getSecondaryColor() {
+ return mSecondaryColor;
+ }
+
+ public boolean isDark() {
+ return mIsDark;
+ }
+
+ @Override
+ public void onColorsChanged(WallpaperColorsCompat colors, int which) {
+ if (which == FLAG_SYSTEM) {
+ boolean wasDarkTheme = mIsDark;
+ update(colors);
+ notifyChange(wasDarkTheme != mIsDark);
+ }
+ }
+
+ private void update(WallpaperColorsCompat wallpaperColors) {
+ Pair<Integer, Integer> colors = mExtractionType.extractInto(wallpaperColors);
+ if (colors != null) {
+ mMainColor = colors.first;
+ mSecondaryColor = colors.second;
+ } else {
+ mMainColor = FALLBACK_COLOR;
+ mSecondaryColor = FALLBACK_COLOR;
+ }
+ float[] hsl = new float[3];
+ ColorUtils.colorToHSL(mMainColor, hsl);
+ mIsDark = hsl[2] < 0.2f;
+ }
+
+ public void setOnThemeChangeListener(OnThemeChangeListener onThemeChangeListener) {
+ this.mOnThemeChangeListener = onThemeChangeListener;
+ }
+
+ public void addOnChangeListener(OnChangeListener listener) {
+ mListeners.add(listener);
+ }
+
+ public void removeOnChangeListener(OnChangeListener listener) {
+ mListeners.remove(listener);
+ }
+
+ public void notifyChange(boolean themeChanged) {
+ if (themeChanged) {
+ if (mOnThemeChangeListener != null) {
+ mOnThemeChangeListener.onThemeChanged();
+ }
+ } else {
+ for (OnChangeListener listener : mListeners) {
+ listener.onExtractedColorsChanged(this);
+ }
+ }
+ }
+
+ public interface OnChangeListener {
+ void onExtractedColorsChanged(WallpaperColorInfo wallpaperColorInfo);
+ }
+
+ public interface OnThemeChangeListener {
+ void onThemeChanged();
+ }
+}
diff --git a/src/com/android/launcher3/dynamicui/colorextraction/ColorExtractor.java b/src/com/android/launcher3/dynamicui/colorextraction/ColorExtractor.java
deleted file mode 100644
index 153b529..0000000
--- a/src/com/android/launcher3/dynamicui/colorextraction/ColorExtractor.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.android.launcher3.dynamicui.colorextraction;
-
-import android.app.WallpaperManager;
-import android.content.Context;
-import android.graphics.Color;
-import android.os.Parcelable;
-import android.util.Log;
-
-import com.android.launcher3.dynamicui.colorextraction.types.ExtractionType;
-import com.android.launcher3.dynamicui.colorextraction.types.Tonal;
-
-import java.lang.reflect.Method;
-
-
-/**
- * Class to process wallpaper colors and generate a tonal palette based on them.
- *
- * TODO remove this class if available by platform
- */
-public class ColorExtractor {
- private static final String TAG = "ColorExtractor";
- private static final int FALLBACK_COLOR = Color.WHITE;
-
- private int mMainFallbackColor = FALLBACK_COLOR;
- private int mSecondaryFallbackColor = FALLBACK_COLOR;
- private final GradientColors mSystemColors;
- private final GradientColors mLockColors;
- private final Context mContext;
- private final ExtractionType mExtractionType;
-
- public ColorExtractor(Context context) {
- mContext = context;
- mSystemColors = new GradientColors();
- mLockColors = new GradientColors();
- mExtractionType = new Tonal();
- WallpaperManager wallpaperManager = mContext.getSystemService(WallpaperManager.class);
-
- if (wallpaperManager == null) {
- Log.w(TAG, "Can't listen to color changes!");
- } else {
- Parcelable wallpaperColorsObj;
- try {
- Method method = WallpaperManager.class
- .getDeclaredMethod("getWallpaperColors", int.class);
-
- wallpaperColorsObj = (Parcelable) method.invoke(wallpaperManager,
- WallpaperManager.FLAG_SYSTEM);
- extractInto(new WallpaperColorsCompat(wallpaperColorsObj), mSystemColors);
- wallpaperColorsObj = (Parcelable) method.invoke(wallpaperManager,
- WallpaperManager.FLAG_LOCK);
- extractInto(new WallpaperColorsCompat(wallpaperColorsObj), mLockColors);
- } catch (Exception e) {
- Log.e(TAG, "reflection failed", e);
- }
- }
- }
-
- public GradientColors getColors(int which) {
- if (which == WallpaperManager.FLAG_LOCK) {
- return mLockColors;
- } else if (which == WallpaperManager.FLAG_SYSTEM) {
- return mSystemColors;
- } else {
- throw new IllegalArgumentException("which should be either FLAG_SYSTEM or FLAG_LOCK");
- }
- }
-
- private void extractInto(WallpaperColorsCompat inWallpaperColors, GradientColors outGradientColors) {
- applyFallback(outGradientColors);
- if (inWallpaperColors == null) {
- return;
- }
- mExtractionType.extractInto(inWallpaperColors, outGradientColors);
- }
-
- private void applyFallback(GradientColors outGradientColors) {
- outGradientColors.setMainColor(mMainFallbackColor);
- outGradientColors.setSecondaryColor(mSecondaryFallbackColor);
- }
-
- public static class GradientColors {
- private int mMainColor = FALLBACK_COLOR;
- private int mSecondaryColor = FALLBACK_COLOR;
- private boolean mSupportsDarkText;
-
- public void setMainColor(int mainColor) {
- mMainColor = mainColor;
- }
-
- public void setSecondaryColor(int secondaryColor) {
- mSecondaryColor = secondaryColor;
- }
-
- public void setSupportsDarkText(boolean supportsDarkText) {
- mSupportsDarkText = supportsDarkText;
- }
-
- public void set(GradientColors other) {
- mMainColor = other.mMainColor;
- mSecondaryColor = other.mSecondaryColor;
- mSupportsDarkText = other.mSupportsDarkText;
- }
-
- public int getMainColor() {
- return mMainColor;
- }
-
- public int getSecondaryColor() {
- return mSecondaryColor;
- }
-
- public boolean supportsDarkText() {
- return mSupportsDarkText;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == null || o.getClass() != getClass()) {
- return false;
- }
- GradientColors other = (GradientColors) o;
- return other.mMainColor == mMainColor &&
- other.mSecondaryColor == mSecondaryColor &&
- other.mSupportsDarkText == mSupportsDarkText;
- }
-
- @Override
- public int hashCode() {
- int code = mMainColor;
- code = 31 * code + mSecondaryColor;
- code = 31 * code + (mSupportsDarkText ? 0 : 1);
- return code;
- }
- }
-}
-
diff --git a/src/com/android/launcher3/dynamicui/colorextraction/WallpaperColorsCompat.java b/src/com/android/launcher3/dynamicui/colorextraction/WallpaperColorsCompat.java
deleted file mode 100644
index f80a675..0000000
--- a/src/com/android/launcher3/dynamicui/colorextraction/WallpaperColorsCompat.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.android.launcher3.dynamicui.colorextraction;
-
-import android.graphics.Color;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Pair;
-
-import java.util.List;
-
-/**
- * A wrapper around platform implementation of WallpaperColors until the
- * updated SDK is available.
- *
- * TODO remove this class if available by platform
- */
-public class WallpaperColorsCompat implements Parcelable {
-
- private final Parcelable mObject;
-
- public WallpaperColorsCompat(Parcelable object) {
- mObject = object;
- }
-
- private Object invokeMethod(String methodName) {
- try {
- return mObject.getClass().getDeclaredMethod(methodName).invoke(mObject);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel parcel, int i) {
- parcel.writeParcelable(mObject, i);
- }
-
- public static final Parcelable.Creator<WallpaperColorsCompat> CREATOR =
- new Parcelable.Creator<WallpaperColorsCompat>() {
- public WallpaperColorsCompat createFromParcel(Parcel source) {
- Parcelable object = source.readParcelable(null);
- return new WallpaperColorsCompat(object);
- }
-
- public WallpaperColorsCompat[] newArray(int size) {
- return new WallpaperColorsCompat[size];
- }
- };
-
- public List<Pair<Color, Integer>> getColors() {
- try {
- return (List<Pair<Color, Integer>>) invokeMethod("getColors");
- } catch (Exception e) {
- return null;
- }
- }
-
- public boolean supportsDarkText() {
- try {
- return (Boolean) invokeMethod("supportsDarkText");
- } catch (Exception e) {
- return false;
- }
- }
-}
diff --git a/src/com/android/launcher3/dynamicui/colorextraction/types/ExtractionType.java b/src/com/android/launcher3/dynamicui/colorextraction/types/ExtractionType.java
deleted file mode 100644
index 166c7c6..0000000
--- a/src/com/android/launcher3/dynamicui/colorextraction/types/ExtractionType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.android.launcher3.dynamicui.colorextraction.types;
-
-import com.android.launcher3.dynamicui.colorextraction.ColorExtractor;
-import com.android.launcher3.dynamicui.colorextraction.WallpaperColorsCompat;
-
-
-/**
- * Interface to allow various color extraction implementations.
- *
- * TODO remove this class if available by platform
- */
-public interface ExtractionType {
-
- /**
- * Executes color extraction by reading WallpaperColors and setting
- * main and secondary colors on GradientColors.
- *
- * @param inWallpaperColors where to read from
- * @param outGradientColors object that should receive the colors
- */
- void extractInto(WallpaperColorsCompat inWallpaperColors,
- ColorExtractor.GradientColors outGradientColors);
-}
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index 1601edb..80338ca 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -34,7 +34,6 @@
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;
import android.view.accessibility.AccessibilityEvent;
@@ -61,6 +60,7 @@
import com.android.launcher3.LogDecelerateInterpolator;
import com.android.launcher3.OnAlarmListener;
import com.android.launcher3.PagedView;
+import com.android.launcher3.PendingAddItemInfo;
import com.android.launcher3.R;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.UninstallDropTarget.DropTargetSource;
@@ -78,6 +78,7 @@
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
import com.android.launcher3.util.Thunk;
+import com.android.launcher3.widget.PendingAddShortcutInfo;
import java.util.ArrayList;
import java.util.Collections;
@@ -633,6 +634,7 @@
@Override
public void onAnimationStart(Animator animation) {
if (FeatureFlags.LAUNCHER3_NEW_FOLDER_ANIMATION) {
+ mFolderIcon.drawLeaveBehindIfExists();
mFolderIcon.setVisibility(INVISIBLE);
}
@@ -723,8 +725,12 @@
mFolderName.dispatchBackKey();
}
- if (mFolderIcon != null && !FeatureFlags.LAUNCHER3_NEW_FOLDER_ANIMATION) {
- mFolderIcon.shrinkAndFadeIn(animate);
+ if (mFolderIcon != null) {
+ if (FeatureFlags.LAUNCHER3_NEW_FOLDER_ANIMATION) {
+ mFolderIcon.clearLeaveBehindIfExists();
+ } else {
+ mFolderIcon.shrinkAndFadeIn(animate);
+ }
}
if (!(getParent() instanceof DragLayer)) return;
@@ -788,7 +794,6 @@
}
}
-
if (mRearrangeOnClose) {
rearrangeChildren();
mRearrangeOnClose = false;
@@ -1340,53 +1345,68 @@
}
mContent.completePendingPageChanges();
- View currentDragView;
- final ShortcutInfo si;
- if (d.dragInfo instanceof AppInfo) {
- // Came from all apps -- make a copy.
- si = ((AppInfo) d.dragInfo).makeShortcut();
- } else {
- // ShortcutInfo
- si = (ShortcutInfo) d.dragInfo;
- }
- if (mIsExternalDrag) {
- currentDragView = mContent.createAndAddViewForRank(si, mEmptyCellRank);
- // Actually move the item in the database if it was an external drag. Call this
- // before creating the view, so that ShortcutInfo is updated appropriately.
- mLauncher.getModelWriter().addOrMoveItemInDatabase(
- si, mInfo.id, 0, si.cellX, si.cellY);
+ if (d.dragInfo instanceof PendingAddShortcutInfo) {
+ PendingAddShortcutInfo pasi = (PendingAddShortcutInfo) d.dragInfo;
+ pasi.container = mInfo.id;
+ pasi.rank = mEmptyCellRank;
- // We only need to update the locations if it doesn't get handled in #onDropCompleted.
- if (d.dragSource != this) {
- updateItemLocationsInDatabaseBatch();
- }
- mIsExternalDrag = false;
- } else {
- currentDragView = mCurrentDragView;
- mContent.addViewForRank(currentDragView, si, mEmptyCellRank);
- }
-
- if (d.dragView.hasDrawn()) {
-
- // Temporarily reset the scale such that the animation target gets calculated correctly.
- float scaleX = getScaleX();
- float scaleY = getScaleY();
- setScaleX(1.0f);
- setScaleY(1.0f);
- mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, currentDragView,
- cleanUpRunnable, null);
- setScaleX(scaleX);
- setScaleY(scaleY);
- } else {
+ mLauncher.addPendingItem(pasi, pasi.container, pasi.screenId, null, pasi.spanX,
+ pasi.spanY);
d.deferDragViewCleanupPostAnimation = false;
- currentDragView.setVisibility(VISIBLE);
- }
- mItemsInvalidated = true;
- rearrangeChildren();
+ mRearrangeOnClose = true;
+ } else {
+ final ShortcutInfo si;
+ if (d.dragInfo instanceof AppInfo) {
+ // Came from all apps -- make a copy.
+ si = ((AppInfo) d.dragInfo).makeShortcut();
+ } else {
+ // ShortcutInfo
+ si = (ShortcutInfo) d.dragInfo;
+ }
- // Temporarily suppress the listener, as we did all the work already here.
- try (SuppressInfoChanges s = new SuppressInfoChanges()) {
- mInfo.add(si, false);
+ View currentDragView;
+ if (mIsExternalDrag) {
+ currentDragView = mContent.createAndAddViewForRank(si, mEmptyCellRank);
+
+ // Actually move the item in the database if it was an external drag. Call this
+ // before creating the view, so that ShortcutInfo is updated appropriately.
+ mLauncher.getModelWriter().addOrMoveItemInDatabase(
+ si, mInfo.id, 0, si.cellX, si.cellY);
+
+ // We only need to update the locations if it doesn't get handled in
+ // #onDropCompleted.
+ if (d.dragSource != this) {
+ updateItemLocationsInDatabaseBatch();
+ }
+ mIsExternalDrag = false;
+ } else {
+ currentDragView = mCurrentDragView;
+ mContent.addViewForRank(currentDragView, si, mEmptyCellRank);
+ }
+
+ if (d.dragView.hasDrawn()) {
+ // Temporarily reset the scale such that the animation target gets calculated
+ // correctly.
+ float scaleX = getScaleX();
+ float scaleY = getScaleY();
+ setScaleX(1.0f);
+ setScaleY(1.0f);
+ mLauncher.getDragLayer().animateViewIntoPosition(d.dragView, currentDragView,
+ cleanUpRunnable, null);
+ setScaleX(scaleX);
+ setScaleY(scaleY);
+ } else {
+ d.deferDragViewCleanupPostAnimation = false;
+ currentDragView.setVisibility(VISIBLE);
+ }
+
+ mItemsInvalidated = true;
+ rearrangeChildren();
+
+ // Temporarily suppress the listener, as we did all the work already here.
+ try (SuppressInfoChanges s = new SuppressInfoChanges()) {
+ mInfo.add(si, false);
+ }
}
// Clear the drag info, as it is no longer being dragged.
@@ -1415,11 +1435,15 @@
}
@Override
- public void onAdd(ShortcutInfo item) {
- mContent.createAndAddViewForRank(item, mContent.allocateRankForNewItem());
+ public void onAdd(ShortcutInfo item, int rank) {
+ View view = mContent.createAndAddViewForRank(item, rank);
+ mLauncher.getModelWriter().addOrMoveItemInDatabase(item, mInfo.id, 0, item.cellX,
+ item.cellY);
+
+ ArrayList<View> items = new ArrayList<>(getItemsInReadingOrder());
+ items.add(rank, view);
+ mContent.arrangeChildren(items, items.size());
mItemsInvalidated = true;
- mLauncher.getModelWriter().addOrMoveItemInDatabase(
- item, mInfo.id, 0, item.cellX, item.cellY);
}
public void onRemove(ShortcutInfo item) {
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index 1680f0b..236bf24 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -36,8 +36,10 @@
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
import android.os.Parcelable;
+import android.support.v4.graphics.ColorUtils;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.util.Property;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -75,8 +77,9 @@
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragView;
-import com.android.launcher3.graphics.IconPalette;
+import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Thunk;
+import com.android.launcher3.widget.PendingAddShortcutInfo;
import java.util.ArrayList;
import java.util.List;
@@ -252,11 +255,9 @@
mBackground.animateToAccept(cl, lp.cellX, lp.cellY);
mOpenAlarm.setOnAlarmListener(mOnOpenListener);
if (SPRING_LOADING_ENABLED &&
- ((dragInfo instanceof AppInfo) || (dragInfo instanceof ShortcutInfo))) {
- // TODO: we currently don't support spring-loading for PendingAddShortcutInfos even
- // though widget-style shortcuts can be added to folders. The issue is that we need
- // to deal with configuration activities which are currently handled in
- // Workspace#onDropExternal.
+ ((dragInfo instanceof AppInfo)
+ || (dragInfo instanceof ShortcutInfo)
+ || (dragInfo instanceof PendingAddShortcutInfo))) {
mOpenAlarm.setAlarm(ON_OPEN_DELAY);
}
}
@@ -386,14 +387,11 @@
private void computePreviewDrawingParams(int drawableSize, int totalSize) {
if (mIntrinsicIconSize != drawableSize || mTotalWidth != totalSize ||
mPrevTopPadding != getPaddingTop()) {
- DeviceProfile grid = mLauncher.getDeviceProfile();
-
mIntrinsicIconSize = drawableSize;
mTotalWidth = totalSize;
mPrevTopPadding = getPaddingTop();
- mBackground.setup(getResources().getDisplayMetrics(), grid, this, mTotalWidth,
- getPaddingTop());
+ mBackground.setup(mLauncher, this, mTotalWidth, getPaddingTop());
mPreviewLayoutRule.init(mBackground.previewSize, mIntrinsicIconSize,
Utilities.isRtl(getResources()));
@@ -546,6 +544,7 @@
private float mScale = 1f;
private float mColorMultiplier = 1f;
+ private int mBgColor;
private float mStrokeWidth;
private int mStrokeAlpha = MAX_BG_OPACITY;
private View mInvalidateDelegate;
@@ -569,7 +568,6 @@
// Expressed on a scale from 0 to 255.
private static final int BG_OPACITY = 160;
private static final int MAX_BG_OPACITY = 225;
- private static final int BG_INTENSITY = 245;
private static final int SHADOW_OPACITY = 40;
ValueAnimator mScaleAnimator;
@@ -589,10 +587,12 @@
}
};
- public void setup(DisplayMetrics dm, DeviceProfile grid, View invalidateDelegate,
+ public void setup(Launcher launcher, View invalidateDelegate,
int availableSpace, int topPadding) {
mInvalidateDelegate = invalidateDelegate;
+ mBgColor = Themes.getAttrColor(launcher, android.R.attr.colorPrimary);
+ DeviceProfile grid = launcher.getDeviceProfile();
final int previewSize = grid.folderIconSizePx;
final int previewPadding = grid.folderIconPreviewPadding;
@@ -602,7 +602,7 @@
basePreviewOffsetY = previewPadding + grid.folderBackgroundOffset + topPadding;
// Stroke width is 1dp
- mStrokeWidth = dm.density;
+ mStrokeWidth = launcher.getResources().getDisplayMetrics().density;
float radius = getScaledRadius();
float shadowRadius = radius + mStrokeWidth;
@@ -657,7 +657,7 @@
public void drawBackground(Canvas canvas) {
mPaint.setStyle(Paint.Style.FILL);
int alpha = (int) Math.min(MAX_BG_OPACITY, BG_OPACITY * mColorMultiplier);
- mPaint.setColor(Color.argb(alpha, BG_INTENSITY, BG_INTENSITY, BG_INTENSITY));
+ mPaint.setColor(ColorUtils.setAlphaComponent(mBgColor, alpha));
drawCircle(canvas, 0 /* deltaRadius */);
@@ -702,7 +702,7 @@
mStrokeAlphaAnimator.cancel();
}
mStrokeAlphaAnimator = ObjectAnimator
- .ofArgb(this, STROKE_ALPHA, MAX_BG_OPACITY / 2, MAX_BG_OPACITY)
+ .ofInt(this, STROKE_ALPHA, MAX_BG_OPACITY / 2, MAX_BG_OPACITY)
.setDuration(100);
mStrokeAlphaAnimator.addListener(new AnimatorListenerAdapter() {
@Override
@@ -714,7 +714,7 @@
}
public void drawBackgroundStroke(Canvas canvas) {
- mPaint.setColor(Color.argb(mStrokeAlpha, BG_INTENSITY, BG_INTENSITY, BG_INTENSITY));
+ mPaint.setColor(ColorUtils.setAlphaComponent(mBgColor, mStrokeAlpha));
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mStrokeWidth);
drawCircle(canvas, 1 /* deltaRadius */);
@@ -933,7 +933,7 @@
// If we are animating to the accepting state, animate the badge out.
float badgeScale = Math.max(0, mBadgeScale - mBackground.getScaleProgress());
mTempSpaceForBadgeOffset.set(getWidth() - mTempBounds.right, mTempBounds.top);
- mBadgeRenderer.draw(canvas, IconPalette.FOLDER_ICON_PALETTE, mBadgeInfo, mTempBounds,
+ mBadgeRenderer.draw(canvas, mBadgeInfo, mTempBounds,
badgeScale, mTempSpaceForBadgeOffset);
}
}
@@ -1108,7 +1108,7 @@
}
@Override
- public void onAdd(ShortcutInfo item) {
+ public void onAdd(ShortcutInfo item, int rank) {
boolean wasBadged = mBadgeInfo.hasBadge();
mBadgeInfo.addBadgeInfo(mLauncher.getPopupDataProvider().getBadgeInfoForItem(item));
boolean isBadged = mBadgeInfo.hasBadge();
@@ -1174,28 +1174,21 @@
}
public void shrinkAndFadeIn(boolean animate) {
- final CellLayout cl = (CellLayout) getParent().getParent();
- ((CellLayout.LayoutParams) getLayoutParams()).canReorder = true;
-
// We remove and re-draw the FolderIcon in-case it has changed
final PreviewImageView previewImage = PreviewImageView.get(getContext());
previewImage.removeFromParent();
copyToPreview(previewImage);
- if (cl != null) {
- cl.clearFolderLeaveBehind();
- }
+ clearLeaveBehindIfExists();
ObjectAnimator oa = LauncherAnimUtils.ofViewAlphaAndScale(previewImage, 1, 1, 1);
oa.setDuration(getResources().getInteger(R.integer.config_folderExpandDuration));
oa.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
- if (cl != null) {
- // Remove the ImageView copy of the FolderIcon and make the original visible.
- previewImage.removeFromParent();
- setVisibility(View.VISIBLE);
- }
+ // Remove the ImageView copy of the FolderIcon and make the original visible.
+ previewImage.removeFromParent();
+ setVisibility(View.VISIBLE);
}
});
oa.start();
@@ -1204,7 +1197,15 @@
}
}
- public void growAndFadeOut() {
+ public void clearLeaveBehindIfExists() {
+ ((CellLayout.LayoutParams) getLayoutParams()).canReorder = true;
+ if (mInfo.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
+ CellLayout cl = (CellLayout) getParent().getParent();
+ cl.clearFolderLeaveBehind();
+ }
+ }
+
+ public void drawLeaveBehindIfExists() {
CellLayout.LayoutParams lp = (CellLayout.LayoutParams) getLayoutParams();
// While the folder is open, the position of the icon cannot change.
lp.canReorder = false;
@@ -1212,6 +1213,10 @@
CellLayout cl = (CellLayout) getParent().getParent();
cl.setFolderLeaveBehindCell(lp.cellX, lp.cellY);
}
+ }
+
+ public void growAndFadeOut() {
+ drawLeaveBehindIfExists();
// Push an ImageView copy of the FolderIcon into the DragLayer and hide the original
PreviewImageView previewImage = PreviewImageView.get(getContext());
diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java
index 2a6007a..19a16b1 100644
--- a/src/com/android/launcher3/folder/FolderPagedView.java
+++ b/src/com/android/launcher3/folder/FolderPagedView.java
@@ -199,21 +199,26 @@
return extra;
}
+ public void allocateSpaceForRank(int rank) {
+ ArrayList<View> views = new ArrayList<>(mFolder.getItemsInReadingOrder());
+ views.add(rank, null);
+ arrangeChildren(views, views.size(), false);
+ }
+
/**
* Create space for a new item at the end, and returns the rank for that item.
* Also sets the current page to the last page.
*/
public int allocateRankForNewItem() {
int rank = getItemCount();
- ArrayList<View> views = new ArrayList<>(mFolder.getItemsInReadingOrder());
- views.add(rank, null);
- arrangeChildren(views, views.size(), false);
+ allocateSpaceForRank(rank);
setCurrentPage(rank / mMaxItemsPerPage);
return rank;
}
public View createAndAddViewForRank(ShortcutInfo item, int rank) {
View icon = createNewView(item);
+ allocateSpaceForRank(rank);
addViewForRank(icon, item, rank);
return icon;
}
diff --git a/src/com/android/launcher3/graphics/GradientView.java b/src/com/android/launcher3/graphics/GradientView.java
new file mode 100644
index 0000000..9dd9504
--- /dev/null
+++ b/src/com/android/launcher3/graphics/GradientView.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2017 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.graphics;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RadialGradient;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.Interpolator;
+
+import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
+import com.android.launcher3.dynamicui.WallpaperColorInfo;
+
+/**
+ * Draws a translucent radial gradient background from an initial state with progress 0.0 to a
+ * final state with progress 1.0;
+ */
+public class GradientView extends View implements WallpaperColorInfo.OnChangeListener {
+
+ private static final int DEFAULT_COLOR = Color.WHITE;
+ private static final float GRADIENT_ALPHA_MASK_LENGTH_DP = 300;
+ private static final boolean DEBUG = false;
+
+ private final Bitmap mFinalGradientMask;
+ private final Bitmap mAlphaGradientMask;
+
+ private int mColor1 = DEFAULT_COLOR;
+ private int mColor2 = DEFAULT_COLOR;
+ private int mWidth;
+ private int mHeight;
+ private final RectF mAlphaMaskRect = new RectF();
+ private final RectF mFinalMaskRect = new RectF();
+ private final Paint mPaint = new Paint();
+ private float mProgress;
+ private final int mMaskHeight;
+ private final Context mAppContext;
+ private final Paint mDebugPaint = DEBUG ? new Paint() : null;
+ private final Interpolator mAccelerator = new AccelerateInterpolator();
+ private final float mAlphaStart;
+ private final WallpaperColorInfo mWallpaperColorInfo;
+
+ public GradientView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.mAppContext = context.getApplicationContext();
+ this.mMaskHeight = Utilities.pxFromDp(GRADIENT_ALPHA_MASK_LENGTH_DP,
+ mAppContext.getResources().getDisplayMetrics());
+ Launcher launcher = Launcher.getLauncher(context);
+ this.mAlphaStart = launcher.getDeviceProfile().isVerticalBarLayout() ? 0 : 100;
+ this.mWallpaperColorInfo = WallpaperColorInfo.getInstance(launcher);
+ updateColors();
+
+ int finalAlpha = 0xBF;
+ mFinalGradientMask = Utilities.convertToAlphaMask(
+ Utilities.createOnePixBitmap(), finalAlpha);
+ Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(context.getResources(),
+ R.drawable.all_apps_alpha_mask);
+ mAlphaGradientMask = Utilities.convertToAlphaMask(
+ alphaMaskFromResource, finalAlpha);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ mWallpaperColorInfo.addOnChangeListener(this);
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mWallpaperColorInfo.removeOnChangeListener(this);
+ }
+
+ @Override
+ public void onExtractedColorsChanged(WallpaperColorInfo info) {
+ updateColors();
+ invalidate();
+ }
+
+ private void updateColors() {
+ this.mColor1 = mWallpaperColorInfo.getMainColor();
+ this.mColor2 = mWallpaperColorInfo.getSecondaryColor();
+ if (mWidth + mHeight > 0) {
+ createRadialShader();
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ this.mWidth = getMeasuredWidth();
+ this.mHeight = getMeasuredHeight();
+ if (mWidth + mHeight > 0) {
+ createRadialShader();
+ }
+ }
+
+ // only being called when colors change
+ private void createRadialShader() {
+ final float gradientCenterY = 1.05f;
+ float radius = Math.max(mHeight, mWidth) * gradientCenterY;
+
+ float posScreenBottom = (radius - mHeight) / radius; // center lives below screen
+ RadialGradient shader = new RadialGradient(
+ mWidth * 0.5f,
+ mHeight * gradientCenterY,
+ radius,
+ new int[] {mColor1, mColor1, mColor2},
+ new float[] {0f, posScreenBottom, 1f},
+ Shader.TileMode.CLAMP);
+ mPaint.setShader(shader);
+ }
+
+ public void setProgress(float progress) {
+ this.mProgress = progress;
+ invalidate();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ float head = 0.29f;
+ float linearProgress = head + (mProgress * (1f - head));
+ float startMaskY = (1f - linearProgress) * mHeight - mMaskHeight * linearProgress;
+ float interpolatedAlpha = (255 - mAlphaStart) * mAccelerator.getInterpolation(mProgress);
+ mPaint.setAlpha((int) (mAlphaStart + interpolatedAlpha));
+ mAlphaMaskRect.set(0, startMaskY, mWidth, startMaskY + mMaskHeight);
+ mFinalMaskRect.set(0, startMaskY + mMaskHeight, mWidth, mHeight);
+ canvas.drawBitmap(mAlphaGradientMask, null, mAlphaMaskRect, mPaint);
+ canvas.drawBitmap(mFinalGradientMask, null, mFinalMaskRect, mPaint);
+
+ if (DEBUG) {
+ mDebugPaint.setColor(0xFF00FF00);
+ canvas.drawLine(0, startMaskY, mWidth, startMaskY, mDebugPaint);
+ canvas.drawLine(0, startMaskY + mMaskHeight, mWidth, startMaskY + mMaskHeight, mDebugPaint);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/launcher3/graphics/IconPalette.java b/src/com/android/launcher3/graphics/IconPalette.java
index 0182e53..60ca7b2 100644
--- a/src/com/android/launcher3/graphics/IconPalette.java
+++ b/src/com/android/launcher3/graphics/IconPalette.java
@@ -49,7 +49,7 @@
private IconPalette(int color) {
dominantColor = color;
- backgroundColor = getMutedColor(dominantColor);
+ backgroundColor = dominantColor;
ColorMatrix backgroundColorMatrix = new ColorMatrix();
Themes.setColorScaleOnMatrix(backgroundColor, backgroundColorMatrix);
backgroundColorMatrixFilter = new ColorMatrixColorFilter(backgroundColorMatrix);
@@ -176,10 +176,6 @@
return ColorUtils.LABToColor(low, a, b);
}
- private static int getMutedColor(int color) {
- return getMutedColor(color, 0.87f);
- }
-
private static int getMutedColor(int color, float whiteScrimAlpha) {
int whiteScrim = ColorUtils.setAlphaComponent(Color.WHITE, (int) (255 * whiteScrimAlpha));
return ColorUtils.compositeColors(whiteScrim, color);
diff --git a/src/com/android/launcher3/graphics/RadialGradientView.java b/src/com/android/launcher3/graphics/RadialGradientView.java
deleted file mode 100644
index cf6851c..0000000
--- a/src/com/android/launcher3/graphics/RadialGradientView.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2017 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.graphics;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.RadialGradient;
-import android.graphics.RectF;
-import android.graphics.Shader;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-
-import com.android.launcher3.R;
-import com.android.launcher3.Utilities;
-
-/**
- * Draws a translucent radial gradient background from an initial state with progress 0.0 to a
- * final state with progress 1.0;
- */
-public class RadialGradientView extends View {
-
- public static final int DEFAULT_COLOR_1 = Color.WHITE;
- public static final int DEFAULT_COLOR_2 = Color.BLACK;
-
- private static Bitmap sFinalGradientMask;
- private static Bitmap sAlphaGradientMask;
-
- // TODO needs to be cleaned up once design finalizes
- static class Config {
- // dimens
- final float gradientCenterX = 0.5f;
- final float gradientCenterY = 1.05f;
- final float gradientHeadStartFactor = 0.35f;
- final float gradientAlphaMaskLengthDp = 700;
- // interpolation
- final boolean useGradientAlphaDecel = false;
- final float decelFactorForGradientAlpha = 2f;
- // colors
- final float finalGradientAlpha = 0.75f;
- int color1 = DEFAULT_COLOR_1;
- int color2 = DEFAULT_COLOR_2;
- }
-
- private final RectF mAlphaMaskRect = new RectF();
- private final RectF mFinalMaskRect = new RectF();
- private final Paint mPaint = new Paint();
- private final Config mConfig = new Config();
- private final DecelerateInterpolator mDecelInterpolator;
- private float mProgress;
- private int mWidth;
- private int mHeight;
- private final int mMaskHeight;
- private final Context mAppContext;
-
- public RadialGradientView(Context context, AttributeSet attrs) {
- super(context, attrs);
- this.mAppContext = context.getApplicationContext();
- this.mDecelInterpolator = new DecelerateInterpolator(mConfig.decelFactorForGradientAlpha);
- this.mMaskHeight = Utilities.pxFromDp(mConfig.gradientAlphaMaskLengthDp,
- mAppContext.getResources().getDisplayMetrics());
-
- if (sFinalGradientMask == null) {
- sFinalGradientMask = Utilities.convertToAlphaMask(
- Utilities.createOnePixBitmap(), mConfig.finalGradientAlpha);
- }
- if (sAlphaGradientMask == null) {
- Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(context.getResources(),
- R.drawable.all_apps_alpha_mask);
- sAlphaGradientMask = Utilities.convertToAlphaMask(
- alphaMaskFromResource, mConfig.finalGradientAlpha);
- }
- }
-
- public void onExtractedColorsChanged(int color1, int color2) {
- mConfig.color1 = color1;
- mConfig.color2 = color2;
- if (mWidth + mHeight > 0) {
- createRadialShader();
- }
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- this.mWidth = getMeasuredWidth();
- this.mHeight = getMeasuredHeight();
- if (mWidth + mHeight > 0) {
- createRadialShader();
- }
- }
-
- // only being called when colors change
- private void createRadialShader() {
- float radius = Math.max(mHeight, mWidth) * mConfig.gradientCenterY;
-
- float posScreenBottom = (radius - mHeight) / radius; // center lives below screen
- RadialGradient shader = new RadialGradient(
- mWidth * mConfig.gradientCenterX,
- mHeight * mConfig.gradientCenterY,
- radius,
- new int[] {mConfig.color1, mConfig.color1, mConfig.color2},
- new float[] {0f, posScreenBottom, 1f},
- Shader.TileMode.CLAMP);
- mPaint.setShader(shader);
- }
-
- public void setProgress(float progress) {
- this.mProgress = progress;
- invalidate();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- float head = mConfig.gradientHeadStartFactor;
- float linearProgress = head + (mProgress * (1f - head));
- float adjustProgress = mConfig.useGradientAlphaDecel
- ? mDecelInterpolator.getInterpolation(linearProgress)
- : linearProgress;
- float startMaskY = (1f - adjustProgress) * mHeight - mMaskHeight * adjustProgress;
-
- mAlphaMaskRect.set(0, startMaskY, mWidth, startMaskY + mMaskHeight);
- mFinalMaskRect.set(0, startMaskY + mMaskHeight, mWidth, mHeight);
- canvas.drawBitmap(sAlphaGradientMask, null, mAlphaMaskRect, mPaint);
- canvas.drawBitmap(sFinalGradientMask, null, mFinalMaskRect, mPaint);
- }
-
-}
\ No newline at end of file
diff --git a/src/com/android/launcher3/graphics/ScrimView.java b/src/com/android/launcher3/graphics/ScrimView.java
index 521fbed..6d1f30a 100644
--- a/src/com/android/launcher3/graphics/ScrimView.java
+++ b/src/com/android/launcher3/graphics/ScrimView.java
@@ -26,21 +26,24 @@
import android.support.v4.graphics.ColorUtils;
import android.util.AttributeSet;
import android.view.View;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.Interpolator;
+import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
+import com.android.launcher3.util.Themes;
public class ScrimView extends View {
- // Config
- private static final int MASK_HEIGHT_DP = 600;
- private static final float MASK_START_LENGTH_FACTOR = 0.4f;
- private static final float FINAL_ALPHA = 0.87f;
- private static final int SCRIM_COLOR = ColorUtils.setAlphaComponent(
- Color.WHITE, (int) (FINAL_ALPHA * 255));
+ private static final boolean DEBUG = false;
- private static Bitmap sFinalScrimMask;
- private static Bitmap sAlphaScrimMask;
+ private static final int MASK_HEIGHT_DP = 300;
+ private static final float MASK_START_LENGTH_FACTOR = 1f;
+ private static final boolean APPLY_ALPHA = true;
+
+ private final Bitmap mFinalScrimMask;
+ private final Bitmap mAlphaScrimMask;
private final int mMaskHeight;
private int mVisibleHeight;
@@ -50,22 +53,25 @@
private final RectF mFinalMaskRect = new RectF();
private final Paint mPaint = new Paint();
private float mProgress;
+ private final Interpolator mAccelerator = new AccelerateInterpolator();
+ private final Paint mDebugPaint = DEBUG ? new Paint() : null;
+ private final int mAlphaStart;
public ScrimView(Context context, AttributeSet attrs) {
super(context, attrs);
mMaskHeight = Utilities.pxFromDp(MASK_HEIGHT_DP, getResources().getDisplayMetrics());
mHeadStart = (int) (mMaskHeight * MASK_START_LENGTH_FACTOR);
- mPaint.setColor(SCRIM_COLOR);
+ mAlphaStart = Launcher.getLauncher(context)
+ .getDeviceProfile().isVerticalBarLayout() ? 0 : 55;
- if (sFinalScrimMask == null) {
- sFinalScrimMask = Utilities.convertToAlphaMask(
- Utilities.createOnePixBitmap(), FINAL_ALPHA);
- }
- if (sAlphaScrimMask == null) {
- Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(getResources(),
- R.drawable.all_apps_alpha_mask);
- sAlphaScrimMask = Utilities.convertToAlphaMask(alphaMaskFromResource, FINAL_ALPHA);
- }
+ int scrimColor = Themes.getAttrColor(context, R.attr.allAppsScrimColor);
+ int scrimAlpha = Color.alpha(scrimColor);
+ mPaint.setColor(scrimColor);
+ mFinalScrimMask = Utilities.convertToAlphaMask(
+ Utilities.createOnePixBitmap(), scrimAlpha);
+ Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(getResources(),
+ R.drawable.all_apps_alpha_mask);
+ mAlphaScrimMask = Utilities.convertToAlphaMask(alphaMaskFromResource, scrimAlpha);
}
@Override
@@ -73,25 +79,37 @@
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
mVisibleHeight = MeasureSpec.getSize(heightMeasureSpec);
- int fullHeight = mVisibleHeight * 2 + mMaskHeight;
- setMeasuredDimension(width, fullHeight);
+ setMeasuredDimension(width, mVisibleHeight * 2);
setProgress(mProgress);
}
public void setProgress(float progress) {
mProgress = progress;
float initialY = mVisibleHeight - mHeadStart;
- float fullTranslationY = mMaskHeight + initialY + mVisibleHeight;
- float translationY = initialY - progress * fullTranslationY;
- setTranslationY(translationY);
+ float fullTranslationY = mVisibleHeight;
+ float linTranslationY = initialY - progress * fullTranslationY;
+ setTranslationY(linTranslationY);
+
+ if (APPLY_ALPHA) {
+ int alpha = mAlphaStart + (int) ((255f - mAlphaStart)
+ * mAccelerator.getInterpolation(progress));
+ mPaint.setAlpha(alpha);
+ invalidate();
+ }
}
@Override
protected void onDraw(Canvas canvas) {
mAlphaMaskRect.set(0, 0, getWidth(), mMaskHeight);
mFinalMaskRect.set(0, mMaskHeight, getWidth(), getHeight());
- canvas.drawBitmap(sAlphaScrimMask, null, mAlphaMaskRect, mPaint);
- canvas.drawBitmap(sFinalScrimMask, null, mFinalMaskRect, mPaint);
+ canvas.drawBitmap(mAlphaScrimMask, null, mAlphaMaskRect, mPaint);
+ canvas.drawBitmap(mFinalScrimMask, null, mFinalMaskRect, mPaint);
+
+ if (DEBUG) {
+ mDebugPaint.setColor(0xFF0000FF);
+ canvas.drawLine(0, mAlphaMaskRect.top, getWidth(), mAlphaMaskRect.top, mDebugPaint);
+ canvas.drawLine(0, mAlphaMaskRect.bottom, getWidth(), mAlphaMaskRect.bottom, mDebugPaint);
+ }
}
}
diff --git a/src/com/android/launcher3/graphics/ShadowDrawable.java b/src/com/android/launcher3/graphics/ShadowDrawable.java
index 5e76649..5f4fc6c 100644
--- a/src/com/android/launcher3/graphics/ShadowDrawable.java
+++ b/src/com/android/launcher3/graphics/ShadowDrawable.java
@@ -46,6 +46,7 @@
private final ShadowDrawableState mState;
+ @SuppressWarnings("unused")
public ShadowDrawable() {
this(new ShadowDrawableState());
}
@@ -98,17 +99,6 @@
return mState.mIntrinsicWidth;
}
- /**
- * Sets the color for the generated shadow
- */
- public void setShadowColor(int color) {
- if (mState.mShadowColor != color) {
- mState.mShadowColor = color;
- mState.mLastDrawnBitmap = null;
- invalidateSelf();
- }
- }
-
private void regenerateBitmapCache() {
Bitmap bitmap = Bitmap.createBitmap(mState.mIntrinsicWidth, mState.mIntrinsicHeight,
Bitmap.Config.ARGB_8888);
@@ -154,7 +144,8 @@
}
mState.mShadowColor = a.getColor(
R.styleable.ShadowDrawable_android_shadowColor, Color.BLACK);
- mState.mShadowSize = r.getDimensionPixelSize(R.dimen.drawable_shadow_size);
+ mState.mShadowSize = a.getDimensionPixelSize(
+ R.styleable.ShadowDrawable_android_elevation, 0);
mState.mIntrinsicHeight = d.getIntrinsicHeight() + 2 * mState.mShadowSize;
mState.mIntrinsicWidth = d.getIntrinsicWidth() + 2 * mState.mShadowSize;
diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java
index 7899846..edbb88c 100644
--- a/src/com/android/launcher3/logging/UserEventDispatcher.java
+++ b/src/com/android/launcher3/logging/UserEventDispatcher.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
+import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.ViewParent;
@@ -62,9 +63,11 @@
private static final boolean IS_VERBOSE =
FeatureFlags.IS_DOGFOOD_BUILD && Utilities.isPropertyEnabled(LogConfig.USEREVENT);
- public static UserEventDispatcher newInstance(Context context, boolean isInMultiWindowMode) {
+ public static UserEventDispatcher newInstance(Context context, boolean isInLandscapeMode,
+ boolean isInMultiWindowMode) {
UserEventDispatcher ued = Utilities.getOverrideObject(UserEventDispatcher.class,
context.getApplicationContext(), R.string.user_event_dispatcher_class);
+ ued.mIsInLandscapeMode = isInLandscapeMode;
ued.mIsInMultiWindowMode = isInMultiWindowMode;
return ued;
}
@@ -88,7 +91,7 @@
/**
* Recursively finds the parent of the given child which implements IconLogInfoProvider
*/
- public static LogContainerProvider getLaunchProviderRecursive(View v) {
+ public static LogContainerProvider getLaunchProviderRecursive(@Nullable View v) {
ViewParent parent;
if (v != null) {
parent = v.getParent();
@@ -112,6 +115,7 @@
private long mElapsedSessionMillis;
private long mActionDurationMillis;
private boolean mIsInMultiWindowMode;
+ private boolean mIsInLandscapeMode;
// Used for filling in predictedRank on {@link Target}s.
private List<ComponentKey> mPredictedApps;
@@ -144,7 +148,11 @@
return event;
}
- public boolean fillInLogContainerData(LauncherEvent event, View v) {
+ /**
+ * Fills in the container data on the given event if the given view is not null.
+ * @return whether container data was added.
+ */
+ private boolean fillInLogContainerData(LauncherEvent event, @Nullable View v) {
// Fill in grid(x,y), pageIndex of the child and container type of the parent
LogContainerProvider provider = getLaunchProviderRecursive(v);
if (v == null || !(v.getTag() instanceof ItemInfo) || provider == null) {
@@ -200,9 +208,16 @@
}
public void logActionOnControl(int action, int controlType) {
- LauncherEvent event = newLauncherEvent(
- newTouchAction(action), newTarget(Target.Type.CONTROL));
+ logActionOnControl(action, controlType, null);
+ }
+
+ public void logActionOnControl(int action, int controlType, @Nullable View controlInContainer) {
+ final LauncherEvent event = controlInContainer == null
+ ? newLauncherEvent(newTouchAction(action), newTarget(Target.Type.CONTROL))
+ : newLauncherEvent(newTouchAction(action), newTarget(Target.Type.CONTROL),
+ newTarget(Target.Type.CONTAINER));
event.srcTarget[0].controlType = controlType;
+ fillInLogContainerData(event, controlInContainer);
dispatchUserEvent(event, null);
}
@@ -296,6 +311,7 @@
}
public void dispatchUserEvent(LauncherEvent ev, Intent intent) {
+ ev.isInLandscapeMode = mIsInLandscapeMode;
ev.isInMultiWindowMode = mIsInMultiWindowMode;
ev.elapsedContainerMillis = SystemClock.uptimeMillis() - mElapsedContainerMillis;
ev.elapsedSessionMillis = SystemClock.uptimeMillis() - mElapsedSessionMillis;
@@ -315,6 +331,7 @@
ev.elapsedContainerMillis,
ev.elapsedSessionMillis,
ev.actionDurationMillis);
+ log += "\n isInLandscapeMode " + ev.isInLandscapeMode;
log += "\n isInMultiWindowMode " + ev.isInMultiWindowMode;
Log.d(TAG, log);
}
diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
index 10fb582..2e8e15b 100644
--- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
+++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
@@ -17,6 +17,8 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.LauncherActivityInfo;
+import android.os.Process;
import android.os.UserHandle;
import android.util.LongSparseArray;
import android.util.Pair;
@@ -35,9 +37,11 @@
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.GridOccupancy;
+import com.android.launcher3.util.ManagedProfileHeuristic.UserFolderInfo;
import com.android.launcher3.util.Provider;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
/**
@@ -45,18 +49,18 @@
*/
public class AddWorkspaceItemsTask extends ExtendedModelTask {
- private final Provider<List<ItemInfo>> mAppsProvider;
+ private final Provider<List<Pair<ItemInfo, Object>>> mAppsProvider;
/**
* @param appsProvider items to add on the workspace
*/
- public AddWorkspaceItemsTask(Provider<List<ItemInfo>> appsProvider) {
+ public AddWorkspaceItemsTask(Provider<List<Pair<ItemInfo, Object>>> appsProvider) {
mAppsProvider = appsProvider;
}
@Override
public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) {
- List<ItemInfo> workspaceApps = mAppsProvider.get();
+ List<Pair<ItemInfo, Object>> workspaceApps = mAppsProvider.get();
if (workspaceApps.isEmpty()) {
return;
}
@@ -64,13 +68,17 @@
final ArrayList<ItemInfo> addedItemsFinal = new ArrayList<>();
final ArrayList<Long> addedWorkspaceScreensFinal = new ArrayList<>();
+ HashMap<UserHandle, UserFolderInfo> userFolderMap = new HashMap<>();
// Get the list of workspace screens. We need to append to this list and
// can not use sBgWorkspaceScreens because loadWorkspace() may not have been
// called.
ArrayList<Long> workspaceScreens = LauncherModel.loadWorkspaceScreensDb(context);
synchronized(dataModel) {
- for (ItemInfo item : workspaceApps) {
+
+ List<ItemInfo> filteredItems = new ArrayList<>();
+ for (Pair<ItemInfo, Object> entry : workspaceApps) {
+ ItemInfo item = entry.first;
if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION ||
item.itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT) {
// Short-circuit this logic if the icon exists somewhere on the workspace
@@ -79,6 +87,32 @@
}
}
+ if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
+ if (item instanceof AppInfo) {
+ item = ((AppInfo) item).makeShortcut();
+ }
+
+ if (!Process.myUserHandle().equals(item.user)) {
+ // Check if this belongs to a work folder.
+ if (!(entry.second instanceof LauncherActivityInfo)) {
+ continue;
+ }
+
+ UserFolderInfo userFolderInfo = userFolderMap.get(item.user);
+ if (userFolderInfo == null) {
+ userFolderInfo = new UserFolderInfo(context, item.user, dataModel);
+ userFolderMap.put(item.user, userFolderInfo);
+ }
+ item = userFolderInfo.convertToWorkspaceItem(
+ (ShortcutInfo) item, (LauncherActivityInfo) entry.second);
+ }
+ }
+ if (item != null) {
+ filteredItems.add(item);
+ }
+ }
+
+ for (ItemInfo item : filteredItems) {
// Find appropriate space for the item.
Pair<Long, int[]> coords = findSpaceForItem(app, dataModel, workspaceScreens,
addedWorkspaceScreensFinal, item.spanX, item.spanY);
@@ -130,6 +164,10 @@
}
});
}
+
+ for (UserFolderInfo userFolderInfo : userFolderMap.values()) {
+ userFolderInfo.applyPendingState(getModelWriter());
+ }
}
protected void updateScreens(Context context, ArrayList<Long> workspaceScreens) {
@@ -276,4 +314,5 @@
}
return occupied.findVacantCell(xy, spanX, spanY);
}
+
}
diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java
index b58efb6..8380f01 100644
--- a/src/com/android/launcher3/model/PackageUpdatedTask.java
+++ b/src/com/android/launcher3/model/PackageUpdatedTask.java
@@ -35,6 +35,7 @@
import com.android.launcher3.LauncherModel.Callbacks;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings.Favorites;
+import com.android.launcher3.SessionCommitReceiver;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.LauncherAppsCompat;
@@ -43,7 +44,6 @@
import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.util.FlagOp;
import com.android.launcher3.util.ItemInfoMatcher;
-import com.android.launcher3.util.ManagedProfileHeuristic;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageUserKey;
@@ -100,11 +100,11 @@
appsList.removePackage(packages[i], Process.myUserHandle());
}
appsList.addPackage(context, packages[i], mUser);
- }
- ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(context, mUser);
- if (heuristic != null) {
- heuristic.processPackageAdd(mPackages);
+ // Automatically add homescreen icon for work profile apps for below O device.
+ if (!Utilities.isAtLeastO() && !Process.myUserHandle().equals(mUser)) {
+ SessionCommitReceiver.queueAppIconAddition(context, packages[i], mUser);
+ }
}
break;
}
@@ -119,10 +119,6 @@
flagOp = FlagOp.removeFlag(ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE);
break;
case OP_REMOVE: {
- ManagedProfileHeuristic heuristic = ManagedProfileHeuristic.get(context, mUser);
- if (heuristic != null) {
- heuristic.processPackageRemoved(mPackages);
- }
for (int i = 0; i < N; i++) {
iconCache.removeIconsForPkg(packages[i], mUser);
}
diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java
index 1eef743..051c033 100644
--- a/src/com/android/launcher3/notification/NotificationFooterLayout.java
+++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java
@@ -141,6 +141,7 @@
icon.setBackground(info.getIconForBackground(getContext(), mBackgroundColor));
icon.setOnClickListener(info);
icon.setTag(info);
+ icon.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
mIconRow.addView(icon, 0, mIconLayoutParams);
return icon;
}
diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java
index dd272b3..997def2 100644
--- a/src/com/android/launcher3/notification/NotificationItemView.java
+++ b/src/com/android/launcher3/notification/NotificationItemView.java
@@ -77,6 +77,10 @@
mSwipeHelper.setDisableHardwareLayers(true);
}
+ public NotificationMainView getMainView() {
+ return mMainView;
+ }
+
public int getHeightMinusFooter() {
int footerHeight = mFooter.getParent() == null ? 0 : mFooter.getHeight();
return getHeight() - footerHeight;
diff --git a/src/com/android/launcher3/notification/NotificationMainView.java b/src/com/android/launcher3/notification/NotificationMainView.java
index d6e0272..0d6da77 100644
--- a/src/com/android/launcher3/notification/NotificationMainView.java
+++ b/src/com/android/launcher3/notification/NotificationMainView.java
@@ -122,7 +122,7 @@
@Override
public boolean canChildBeDismissed(View v) {
- return mNotificationInfo.dismissable;
+ return mNotificationInfo != null && mNotificationInfo.dismissable;
}
@Override
diff --git a/src/com/android/launcher3/pageindicators/CaretDrawable.java b/src/com/android/launcher3/pageindicators/CaretDrawable.java
index 349b41c..416b2f0 100644
--- a/src/com/android/launcher3/pageindicators/CaretDrawable.java
+++ b/src/com/android/launcher3/pageindicators/CaretDrawable.java
@@ -49,8 +49,8 @@
mCaretPaint.setAntiAlias(true);
mCaretPaint.setStrokeWidth(strokeWidth);
mCaretPaint.setStyle(Paint.Style.STROKE);
- mCaretPaint.setStrokeCap(Paint.Cap.SQUARE);
- mCaretPaint.setStrokeJoin(Paint.Join.MITER);
+ mCaretPaint.setStrokeCap(Paint.Cap.ROUND);
+ mCaretPaint.setStrokeJoin(Paint.Join.ROUND);
mShadowPaint.setColor(res.getColor(R.color.default_shadow_color_no_alpha));
mShadowPaint.setAlpha(Themes.getAlpha(context, android.R.attr.spotShadowAlpha));
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index d4ee3b8..b373a17 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -114,7 +114,6 @@
mStartDragThreshold = getResources().getDimensionPixelSize(
R.dimen.deep_shortcuts_start_drag_threshold);
- // TODO: make sure the delegate works for all items, not just shortcuts.
mAccessibilityDelegate = new ShortcutMenuAccessibilityDelegate(mLauncher);
mIsRtl = Utilities.isRtl(getResources());
}
@@ -176,7 +175,7 @@
// Add dummy views first, and populate with real info when ready.
PopupPopulator.Item[] itemsToPopulate = PopupPopulator
.getItemsToPopulate(shortcutIds, notificationKeys, systemShortcuts);
- addDummyViews(originalIcon, itemsToPopulate, notificationKeys.size() > 1);
+ addDummyViews(itemsToPopulate, notificationKeys.size() > 1);
measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
orientAboutIcon(originalIcon, arrowHeight + arrowVerticalOffset);
@@ -187,7 +186,7 @@
mNotificationItemView = null;
mShortcutsItemView = null;
itemsToPopulate = PopupPopulator.reverseItems(itemsToPopulate);
- addDummyViews(originalIcon, itemsToPopulate, notificationKeys.size() > 1);
+ addDummyViews(itemsToPopulate, notificationKeys.size() > 1);
measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
orientAboutIcon(originalIcon, arrowHeight + arrowVerticalOffset);
@@ -204,6 +203,17 @@
updateNotificationHeader();
}
+ int numShortcuts = shortcutViews.size() + systemShortcutViews.size();
+ int numNotifications = notificationKeys.size();
+ if (numNotifications == 0) {
+ setContentDescription(getContext().getString(R.string.shortcuts_menu_description,
+ numShortcuts, originalIcon.getContentDescription().toString()));
+ } else {
+ setContentDescription(getContext().getString(
+ R.string.shortcuts_menu_with_notifications_description, numShortcuts,
+ numNotifications, originalIcon.getContentDescription().toString()));
+ }
+
// Add the arrow.
final int arrowHorizontalOffset = resources.getDimensionPixelSize(isAlignedWithStart() ?
R.dimen.popup_arrow_horizontal_offset_start :
@@ -225,8 +235,8 @@
systemShortcuts, systemShortcutViews));
}
- private void addDummyViews(BubbleTextView originalIcon,
- PopupPopulator.Item[] itemTypesToPopulate, boolean notificationFooterHasIcons) {
+ private void addDummyViews(PopupPopulator.Item[] itemTypesToPopulate,
+ boolean notificationFooterHasIcons) {
final Resources res = getResources();
final int spacing = res.getDimensionPixelSize(R.dimen.popup_items_spacing);
final LayoutInflater inflater = mLauncher.getLayoutInflater();
@@ -243,12 +253,14 @@
int footerHeight = notificationFooterHasIcons ?
res.getDimensionPixelSize(R.dimen.notification_footer_height) : 0;
item.findViewById(R.id.footer).getLayoutParams().height = footerHeight;
+ mNotificationItemView.getMainView().setAccessibilityDelegate(mAccessibilityDelegate);
+ } else if (itemTypeToPopulate == PopupPopulator.Item.SHORTCUT) {
+ item.setAccessibilityDelegate(mAccessibilityDelegate);
}
boolean shouldAddBottomMargin = nextItemTypeToPopulate != null
&& itemTypeToPopulate.isShortcut ^ nextItemTypeToPopulate.isShortcut;
- item.setAccessibilityDelegate(mAccessibilityDelegate);
if (itemTypeToPopulate.isShortcut) {
if (mShortcutsItemView == null) {
mShortcutsItemView = (ShortcutsItemView) inflater.inflate(
@@ -266,9 +278,6 @@
}
}
}
- // TODO: update this, since not all items are shortcuts
- setContentDescription(getContext().getString(R.string.shortcuts_menu_description,
- numItems, originalIcon.getContentDescription().toString()));
}
protected PopupItemView getItemViewAt(int index) {
@@ -521,6 +530,7 @@
*/
public DragOptions.PreDragCondition createPreDragCondition() {
return new DragOptions.PreDragCondition() {
+
@Override
public boolean shouldStartDrag(double distanceDragged) {
return distanceDragged > mStartDragThreshold;
@@ -528,15 +538,27 @@
@Override
public void onPreDragStart(DropTarget.DragObject dragObject) {
- mOriginalIcon.setVisibility(INVISIBLE);
+ if (mIsAboveIcon) {
+ // Hide only the icon, keep the text visible.
+ mOriginalIcon.setIconVisible(false);
+ mOriginalIcon.setVisibility(VISIBLE);
+ } else {
+ // Hide both the icon and text.
+ mOriginalIcon.setVisibility(INVISIBLE);
+ }
}
@Override
public void onPreDragEnd(DropTarget.DragObject dragObject, boolean dragStarted) {
- if (!dragStarted) {
- mOriginalIcon.setVisibility(VISIBLE);
+ mOriginalIcon.setIconVisible(true);
+ if (dragStarted) {
+ // Make sure we keep the original icon hidden while it is being dragged.
+ mOriginalIcon.setVisibility(INVISIBLE);
+ } else {
mLauncher.getUserEventDispatcher().logDeepShortcutsOpen(mOriginalIcon);
if (!mIsAboveIcon) {
+ // Show the icon but keep the text hidden.
+ mOriginalIcon.setVisibility(VISIBLE);
mOriginalIcon.setTextVisibility(false);
}
}
diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java
index a52d1d4..6254d2d 100644
--- a/src/com/android/launcher3/popup/SystemShortcut.java
+++ b/src/com/android/launcher3/popup/SystemShortcut.java
@@ -13,18 +13,20 @@
import com.android.launcher3.R;
import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.util.PackageUserKey;
-import com.android.launcher3.util.Themes;
import com.android.launcher3.widget.WidgetsBottomSheet;
import java.util.List;
+import static com.android.launcher3.userevent.nano.LauncherLogProto.Action;
+import static com.android.launcher3.userevent.nano.LauncherLogProto.ControlType;
+
/**
* Represents a system shortcut for a given app. The shortcut should have a static label and
* icon, and an onClickListener that depends on the item that the shortcut services.
*
* Example system shortcuts, defined as inner classes, include Widgets and AppInfo.
*/
-public abstract class SystemShortcut {
+public abstract class SystemShortcut extends ItemInfo {
private final int mIconResId;
private final int mLabelResId;
@@ -66,6 +68,8 @@
(WidgetsBottomSheet) launcher.getLayoutInflater().inflate(
R.layout.widgets_bottom_sheet, launcher.getDragLayer(), false);
widgetsBottomSheet.populateAndShow(itemInfo);
+ launcher.getUserEventDispatcher().logActionOnControl(Action.Touch.TAP,
+ ControlType.WIDGETS_BUTTON, view);
}
};
}
@@ -85,6 +89,8 @@
Rect sourceBounds = launcher.getViewBounds(view);
Bundle opts = launcher.getActivityLaunchOptions(view);
InfoDropTarget.startDetailsActivityForInfo(itemInfo, launcher, null, sourceBounds, opts);
+ launcher.getUserEventDispatcher().logActionOnControl(Action.Touch.TAP,
+ ControlType.APPINFO_TARGET, view);
}
};
}
diff --git a/src/com/android/launcher3/util/CachedPackageTracker.java b/src/com/android/launcher3/util/CachedPackageTracker.java
deleted file mode 100644
index 314b4c0..0000000
--- a/src/com/android/launcher3/util/CachedPackageTracker.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.content.Context;
-import android.content.SharedPreferences;
-import android.content.pm.LauncherActivityInfo;
-import android.os.UserHandle;
-
-import com.android.launcher3.Utilities;
-import com.android.launcher3.compat.LauncherAppsCompat;
-import com.android.launcher3.compat.LauncherAppsCompat.OnAppsChangedCallbackCompat;
-import com.android.launcher3.compat.UserManagerCompat;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Utility class to track list of installed packages. It persists the list so that apps
- * installed/uninstalled while Launcher was dead can also be handled properly.
- */
-public abstract class CachedPackageTracker implements OnAppsChangedCallbackCompat {
-
- protected static final String INSTALLED_PACKAGES_PREFIX = "installed_packages_for_user_";
-
- protected final SharedPreferences mPrefs;
- protected final UserManagerCompat mUserManager;
- protected final LauncherAppsCompat mLauncherApps;
-
- public CachedPackageTracker(Context context, String preferenceFileName) {
- mPrefs = context.getSharedPreferences(preferenceFileName, Context.MODE_PRIVATE);
- mUserManager = UserManagerCompat.getInstance(context);
- mLauncherApps = LauncherAppsCompat.getInstance(context);
- }
-
- /**
- * Checks the list of user apps, and generates package event accordingly.
- * {@see #onLauncherAppsAdded}, {@see #onLauncherPackageRemoved}
- */
- public void processUserApps(List<LauncherActivityInfo> apps, UserHandle user) {
- String prefKey = INSTALLED_PACKAGES_PREFIX + mUserManager.getSerialNumberForUser(user);
- HashSet<String> oldPackageSet = new HashSet<>();
- final boolean userAppsExisted = getUserApps(oldPackageSet, prefKey);
-
- HashSet<String> packagesRemoved = new HashSet<>(oldPackageSet);
- HashSet<String> newPackageSet = new HashSet<>();
- ArrayList<LauncherActivityInstallInfo> packagesAdded = new ArrayList<>();
-
- for (LauncherActivityInfo info : apps) {
- String packageName = info.getComponentName().getPackageName();
- newPackageSet.add(packageName);
- packagesRemoved.remove(packageName);
-
- if (!oldPackageSet.contains(packageName)) {
- oldPackageSet.add(packageName);
- packagesAdded.add(new LauncherActivityInstallInfo(
- info, info.getFirstInstallTime()));
- }
- }
-
- if (!packagesAdded.isEmpty() || !packagesRemoved.isEmpty()) {
- mPrefs.edit().putStringSet(prefKey, newPackageSet).apply();
-
- if (!packagesAdded.isEmpty()) {
- Collections.sort(packagesAdded);
- onLauncherAppsAdded(packagesAdded, user, userAppsExisted);
- }
-
- if (!packagesRemoved.isEmpty()) {
- for (String pkg : packagesRemoved) {
- onLauncherPackageRemoved(pkg, user);
- }
- }
- }
- }
-
- /**
- * Reads the list of user apps which have already been processed.
- * @return false if the list didn't exist, true otherwise
- */
- private boolean getUserApps(HashSet<String> outExistingApps, String prefKey) {
- Set<String> userApps = mPrefs.getStringSet(prefKey, null);
- if (userApps == null) {
- return false;
- } else {
- outExistingApps.addAll(userApps);
- return true;
- }
- }
-
- @Override
- public void onPackageRemoved(String packageName, UserHandle user) {
- String prefKey = INSTALLED_PACKAGES_PREFIX + mUserManager.getSerialNumberForUser(user);
- HashSet<String> packageSet = new HashSet<>();
- if (getUserApps(packageSet, prefKey) && packageSet.remove(packageName)) {
- mPrefs.edit().putStringSet(prefKey, packageSet).apply();
- }
-
- onLauncherPackageRemoved(packageName, user);
- }
-
- @Override
- public void onPackageAdded(String packageName, UserHandle user) {
- String prefKey = INSTALLED_PACKAGES_PREFIX + mUserManager.getSerialNumberForUser(user);
- HashSet<String> packageSet = new HashSet<>();
- final boolean userAppsExisted = getUserApps(packageSet, prefKey);
- if (!packageSet.contains(packageName)) {
- List<LauncherActivityInfo> activities =
- mLauncherApps.getActivityList(packageName, user);
- if (!activities.isEmpty()) {
- LauncherActivityInfo activityInfo = activities.get(0);
-
- packageSet.add(packageName);
- mPrefs.edit().putStringSet(prefKey, packageSet).apply();
- onLauncherAppsAdded(Arrays.asList(
- new LauncherActivityInstallInfo(activityInfo, System.currentTimeMillis())),
- user, userAppsExisted);
- }
- }
- }
-
- @Override
- public void onPackageChanged(String packageName, UserHandle user) { }
-
- @Override
- public void onPackagesAvailable(
- String[] packageNames, UserHandle user, boolean replacing) { }
-
- @Override
- public void onPackagesUnavailable(
- String[] packageNames, UserHandle user, boolean replacing) { }
-
- @Override
- public void onPackagesSuspended(String[] packageNames, UserHandle user) { }
-
- @Override
- public void onPackagesUnsuspended(String[] packageNames, UserHandle user) { }
-
- /**
- * Called when new launcher apps are added.
- * @param apps list of newly added activities. Only one entry per package is sent.
- * @param user the user for this event. All activities in {@param apps} will belong to
- * the same user.
- * @param userAppsExisted false if the list was processed for the first time, like in case
- * when Launcher was newly installed or a new user was added.
- */
- protected abstract void onLauncherAppsAdded(List<LauncherActivityInstallInfo> apps,
- UserHandle user, boolean userAppsExisted);
-
- /**
- * Called when apps are removed from the system.
- */
- protected abstract void onLauncherPackageRemoved(String packageName, UserHandle user);
-
- public static class LauncherActivityInstallInfo
- implements Comparable<LauncherActivityInstallInfo> {
- public final LauncherActivityInfo info;
- public final long installTime;
-
- public LauncherActivityInstallInfo(LauncherActivityInfo info, long installTime) {
- this.info = info;
- this.installTime = installTime;
- }
-
- @Override
- public int compareTo(LauncherActivityInstallInfo another) {
- return Utilities.longCompare(installTime, another.installTime);
- }
- }
-}
diff --git a/src/com/android/launcher3/util/ManagedProfileHeuristic.java b/src/com/android/launcher3/util/ManagedProfileHeuristic.java
index ce603c4..091dd84 100644
--- a/src/com/android/launcher3/util/ManagedProfileHeuristic.java
+++ b/src/com/android/launcher3/util/ManagedProfileHeuristic.java
@@ -19,23 +19,23 @@
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.LauncherActivityInfo;
+import android.os.Handler;
import android.os.Process;
import android.os.UserHandle;
-import android.support.v4.os.BuildCompat;
-import com.android.launcher3.AppInfo;
import com.android.launcher3.FolderInfo;
-import com.android.launcher3.IconCache;
+import com.android.launcher3.InstallShortcutReceiver;
import com.android.launcher3.ItemInfo;
-import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherFiles;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.MainThreadExecutor;
import com.android.launcher3.R;
import com.android.launcher3.SessionCommitReceiver;
import com.android.launcher3.ShortcutInfo;
+import com.android.launcher3.Utilities;
import com.android.launcher3.compat.UserManagerCompat;
-import com.android.launcher3.shortcuts.ShortcutInfoCompat;
+import com.android.launcher3.model.BgDataModel;
+import com.android.launcher3.model.ModelWriter;
import java.util.ArrayList;
import java.util.HashSet;
@@ -47,11 +47,6 @@
*/
public class ManagedProfileHeuristic {
- /**
- * Maintain a set of packages installed per user.
- */
- private static final String INSTALLED_PACKAGES_PREFIX = "installed_packages_for_user_";
-
private static final String USER_FOLDER_ID_PREFIX = "user_folder_";
/**
@@ -59,165 +54,154 @@
*/
private static final long AUTO_ADD_TO_FOLDER_DURATION = 8 * 60 * 60 * 1000;
- public static ManagedProfileHeuristic get(Context context, UserHandle user) {
- if (!Process.myUserHandle().equals(user)) {
- return new ManagedProfileHeuristic(context, user);
- }
- return null;
- }
-
- private final Context mContext;
- private final LauncherModel mModel;
- private final UserHandle mUser;
- private final IconCache mIconCache;
- private final boolean mAddIconsToHomescreen;
-
- private ManagedProfileHeuristic(Context context, UserHandle user) {
- mContext = context;
- mUser = user;
- mModel = LauncherAppState.getInstance(context).getModel();
- mIconCache = LauncherAppState.getInstance(context).getIconCache();
- mAddIconsToHomescreen =
- !BuildCompat.isAtLeastO() || SessionCommitReceiver.isEnabled(context);
- }
-
- public void processPackageRemoved(String[] packages) {
- Preconditions.assertWorkerThread();
- ManagedProfilePackageHandler handler = new ManagedProfilePackageHandler();
- for (String pkg : packages) {
- handler.onPackageRemoved(pkg, mUser);
- }
- }
-
- public void processPackageAdd(String[] packages) {
- Preconditions.assertWorkerThread();
- ManagedProfilePackageHandler handler = new ManagedProfilePackageHandler();
- for (String pkg : packages) {
- handler.onPackageAdded(pkg, mUser);
- }
- }
-
- public void processUserApps(List<LauncherActivityInfo> apps) {
- Preconditions.assertWorkerThread();
- new ManagedProfilePackageHandler().processUserApps(apps, mUser);
- }
-
- private class ManagedProfilePackageHandler extends CachedPackageTracker {
-
- private ManagedProfilePackageHandler() {
- super(mContext, LauncherFiles.MANAGED_USER_PREFERENCES_KEY);
+ public static void onAllAppsLoaded(final Context context,
+ List<LauncherActivityInfo> apps, UserHandle user) {
+ if (Process.myUserHandle().equals(user)) {
+ return;
}
- protected void onLauncherAppsAdded(
- List<LauncherActivityInstallInfo> apps, UserHandle user, boolean userAppsExisted) {
- ArrayList<ShortcutInfo> workFolderApps = new ArrayList<>();
- ArrayList<ShortcutInfo> homescreenApps = new ArrayList<>();
+ UserFolderInfo ufi = new UserFolderInfo(context, user, null);
+ // We only handle folder creation once. Later icon additions are handled using package
+ // or session events.
+ if (ufi.folderAlreadyCreated) {
+ return;
+ }
- int count = apps.size();
- long folderCreationTime =
- mUserManager.getUserCreationTime(user) + AUTO_ADD_TO_FOLDER_DURATION;
+ if (Utilities.isAtLeastO() && !SessionCommitReceiver.isEnabled(context)) {
+ // Just mark the folder id preference to avoid new folder creation later.
+ ufi.prefs.edit().putLong(ufi.folderIdKey, ItemInfo.NO_ID).apply();
+ return;
+ }
- boolean quietModeEnabled = UserManagerCompat.getInstance(mContext)
- .isQuietModeEnabled(user);
- for (int i = 0; i < count; i++) {
- LauncherActivityInstallInfo info = apps.get(i);
- AppInfo appInfo = new AppInfo(info.info, user, quietModeEnabled);
- mIconCache.getTitleAndIcon(appInfo, info.info, false /* useLowResIcon */);
- ShortcutInfo si = appInfo.makeShortcut();
- ((info.installTime <= folderCreationTime) ? workFolderApps : homescreenApps).add(si);
- }
-
- finalizeWorkFolder(user, workFolderApps, homescreenApps);
-
- // Do not add shortcuts on the homescreen for the first time. This prevents the launcher
- // getting filled with the managed user apps, when it start with a fresh DB (or after
- // a very long time).
- if (userAppsExisted && !homescreenApps.isEmpty() && mAddIconsToHomescreen) {
- mModel.addAndBindAddedWorkspaceItems(new ArrayList<ItemInfo>(homescreenApps));
+ InstallShortcutReceiver.enableInstallQueue(InstallShortcutReceiver.FLAG_BULK_ADD);
+ for (LauncherActivityInfo app : apps) {
+ // Queue all items which should go in the work folder.
+ if (app.getFirstInstallTime() < ufi.addIconToFolderTime) {
+ InstallShortcutReceiver.queueActivityInfo(app, context);
}
}
+ // Post the queue update on next frame, so that the loader gets finished.
+ new Handler(LauncherModel.getWorkerLooper()).post(new Runnable() {
+ @Override
+ public void run() {
+ InstallShortcutReceiver.disableAndFlushInstallQueue(
+ InstallShortcutReceiver.FLAG_BULK_ADD, context);
+ }
+ });
+ }
- @Override
- protected void onLauncherPackageRemoved(String packageName, UserHandle user) {
+
+ /**
+ * Utility class to help workspace icon addition.
+ */
+ public static class UserFolderInfo {
+
+ final ArrayList<ShortcutInfo> pendingShortcuts = new ArrayList<>();
+
+ final UserHandle user;
+
+ final long userSerial;
+ // Time until which icons will be added to folder instead.
+ final long addIconToFolderTime;
+
+ final String folderIdKey;
+ final SharedPreferences prefs;
+
+ final boolean folderAlreadyCreated;
+ final FolderInfo folderInfo;
+
+ boolean folderPendingAddition;
+
+ public UserFolderInfo(Context context, UserHandle user, BgDataModel dataModel) {
+ this.user = user;
+
+ UserManagerCompat um = UserManagerCompat.getInstance(context);
+ userSerial = um.getSerialNumberForUser(user);
+ addIconToFolderTime = um.getUserCreationTime(user) + AUTO_ADD_TO_FOLDER_DURATION;
+
+ folderIdKey = USER_FOLDER_ID_PREFIX + userSerial;
+ prefs = prefs(context);
+
+ folderAlreadyCreated = prefs.contains(folderIdKey);
+ if (dataModel != null) {
+ if (folderAlreadyCreated) {
+ long folderId = prefs.getLong(folderIdKey, ItemInfo.NO_ID);
+ folderInfo = dataModel.folders.get(folderId);
+ } else {
+ folderInfo = new FolderInfo();
+ folderInfo.title = context.getText(R.string.work_folder_name);
+ folderInfo.setOption(FolderInfo.FLAG_WORK_FOLDER, true, null);
+ folderPendingAddition = true;
+ }
+ } else {
+ folderInfo = null;
+ }
}
/**
- * Adds and binds shortcuts marked to be added to the work folder.
+ * Returns the ItemInfo which should be added to the workspace. In case the the provided
+ * {@link ShortcutInfo} or a wrapped {@link FolderInfo} or null.
*/
- private void finalizeWorkFolder(
- UserHandle user, final ArrayList<ShortcutInfo> workFolderApps,
- ArrayList<ShortcutInfo> homescreenApps) {
- if (workFolderApps.isEmpty()) {
+ public ItemInfo convertToWorkspaceItem(
+ ShortcutInfo shortcut, LauncherActivityInfo activityInfo) {
+ if (activityInfo.getFirstInstallTime() >= addIconToFolderTime) {
+ return shortcut;
+ }
+
+ if (folderAlreadyCreated) {
+ if (folderInfo == null) {
+ // Work folder was deleted by user, add icon to home screen.
+ return shortcut;
+ } else {
+ // Add item to work folder instead. Nothing needs to be added
+ // on the homescreen.
+ pendingShortcuts.add(shortcut);
+ return null;
+ }
+ }
+
+ pendingShortcuts.add(shortcut);
+ folderInfo.add(shortcut, false);
+ if (folderPendingAddition) {
+ folderPendingAddition = false;
+ return folderInfo;
+ } else {
+ // WorkFolder already requested to be added. Nothing new needs to be added.
+ return null;
+ }
+ }
+
+ public void applyPendingState(ModelWriter writer) {
+ if (folderInfo == null) {
return;
}
- // Try to get a work folder.
- String folderIdKey = USER_FOLDER_ID_PREFIX + mUserManager.getSerialNumberForUser(user);
- if (!mAddIconsToHomescreen) {
- if (!mPrefs.contains(folderIdKey)) {
- // Just mark the folder id preference to avoid new folder creation later.
- mPrefs.edit().putLong(folderIdKey, -1).apply();
- }
- return;
+
+ int startingRank = 0;
+ if (folderAlreadyCreated) {
+ startingRank = folderInfo.contents.size();
}
- if (mPrefs.contains(folderIdKey)) {
- long folderId = mPrefs.getLong(folderIdKey, 0);
- final FolderInfo workFolder = mModel.findFolderById(folderId);
- if (workFolder == null || !workFolder.hasOption(FolderInfo.FLAG_WORK_FOLDER)) {
- // Could not get a work folder. Add all the icons to homescreen.
- homescreenApps.addAll(0, workFolderApps);
- return;
- }
- saveWorkFolderShortcuts(folderId, workFolder.contents.size(), workFolderApps);
+ for (ShortcutInfo info : pendingShortcuts) {
+ info.rank = startingRank++;
+ writer.addItemToDatabase(info, folderInfo.id, 0, 0, 0);
+ }
+ if (folderAlreadyCreated) {
// FolderInfo could already be bound. We need to add shortcuts on the UI thread.
new MainThreadExecutor().execute(new Runnable() {
@Override
public void run() {
- workFolder.prepareAutoUpdate();
- for (ShortcutInfo info : workFolderApps) {
- workFolder.add(info, false);
+ folderInfo.prepareAutoUpdate();
+ for (ShortcutInfo info : pendingShortcuts) {
+ folderInfo.add(info, false);
}
}
});
} else {
- // Create a new folder.
- final FolderInfo workFolder = new FolderInfo();
- workFolder.title = mContext.getText(R.string.work_folder_name);
- workFolder.setOption(FolderInfo.FLAG_WORK_FOLDER, true, null);
-
- // Add all shortcuts before adding it to the UI, as an empty folder might get deleted.
- for (ShortcutInfo info : workFolderApps) {
- workFolder.add(info, false);
- }
-
- // Add the item to home screen and DB. This also generates an item id synchronously.
- ArrayList<ItemInfo> itemList = new ArrayList<>(1);
- itemList.add(workFolder);
- mModel.addAndBindAddedWorkspaceItems(itemList);
- mPrefs.edit().putLong(folderIdKey, workFolder.id).apply();
-
- saveWorkFolderShortcuts(workFolder.id, 0, workFolderApps);
+ prefs.edit().putLong(folderIdKey, folderInfo.id).apply();
}
}
-
- @Override
- public void onShortcutsChanged(String packageName, List<ShortcutInfoCompat> shortcuts,
- UserHandle user) {
- // Do nothing
- }
- }
-
- /**
- * Add work folder shortcuts to the DB.
- */
- private void saveWorkFolderShortcuts(
- long workFolderId, int startingRank, ArrayList<ShortcutInfo> workFolderApps) {
- for (ItemInfo info : workFolderApps) {
- info.rank = startingRank++;
- mModel.getWriter(false).addItemToDatabase(info, workFolderId, 0, 0, 0);
- }
}
/**
@@ -225,14 +209,12 @@
*/
public static void processAllUsers(List<UserHandle> users, Context context) {
UserManagerCompat userManager = UserManagerCompat.getInstance(context);
- HashSet<String> validKeys = new HashSet<String>();
+ HashSet<String> validKeys = new HashSet<>();
for (UserHandle user : users) {
- addAllUserKeys(userManager.getSerialNumberForUser(user), validKeys);
+ validKeys.add(USER_FOLDER_ID_PREFIX + userManager.getSerialNumberForUser(user));
}
- SharedPreferences prefs = context.getSharedPreferences(
- LauncherFiles.MANAGED_USER_PREFERENCES_KEY,
- Context.MODE_PRIVATE);
+ SharedPreferences prefs = prefs(context);
SharedPreferences.Editor editor = prefs.edit();
for (String key : prefs.getAll().keySet()) {
if (!validKeys.contains(key)) {
@@ -242,11 +224,6 @@
editor.apply();
}
- private static void addAllUserKeys(long userSerial, HashSet<String> keysOut) {
- keysOut.add(INSTALLED_PACKAGES_PREFIX + userSerial);
- keysOut.add(USER_FOLDER_ID_PREFIX + userSerial);
- }
-
/**
* For each user, if a work folder has not been created, mark it such that the folder will
* never get created.
@@ -260,11 +237,8 @@
if (myUser.equals(user)) {
continue;
}
-
if (prefs == null) {
- prefs = context.getSharedPreferences(
- LauncherFiles.MANAGED_USER_PREFERENCES_KEY,
- Context.MODE_PRIVATE);
+ prefs = prefs(context);
}
String folderIdKey = USER_FOLDER_ID_PREFIX + userManager.getSerialNumberForUser(user);
if (!prefs.contains(folderIdKey)) {
@@ -272,4 +246,9 @@
}
}
}
+
+ public static SharedPreferences prefs(Context context) {
+ return context.getSharedPreferences(
+ LauncherFiles.MANAGED_USER_PREFERENCES_KEY, Context.MODE_PRIVATE);
+ }
}
diff --git a/src/com/android/launcher3/util/Themes.java b/src/com/android/launcher3/util/Themes.java
index d863339..9cf45b0 100644
--- a/src/com/android/launcher3/util/Themes.java
+++ b/src/com/android/launcher3/util/Themes.java
@@ -20,7 +20,6 @@
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.ColorMatrix;
-import android.view.ContextThemeWrapper;
/**
* Various utility methods associated with theming.
@@ -31,10 +30,6 @@
return getAttrColor(context, android.R.attr.colorAccent);
}
- public static int getColorPrimary(Context context, int theme) {
- return getAttrColor(new ContextThemeWrapper(context, theme), android.R.attr.colorPrimary);
- }
-
public static int getAttrColor(Context context, int attr) {
TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
int colorAccent = ta.getColor(0, 0);
@@ -42,6 +37,13 @@
return colorAccent;
}
+ public static boolean getAttrBoolean(Context context, int attr) {
+ TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
+ boolean value = ta.getBoolean(0, false);
+ ta.recycle();
+ return value;
+ }
+
/**
* Returns the alpha corresponding to the theme attribute {@param attr}, in the range [0, 255].
*/
diff --git a/src_flags/com/android/launcher3/config/FeatureFlags.java b/src_flags/com/android/launcher3/config/FeatureFlags.java
index c0184fa..ed169b6 100644
--- a/src_flags/com/android/launcher3/config/FeatureFlags.java
+++ b/src_flags/com/android/launcher3/config/FeatureFlags.java
@@ -39,7 +39,9 @@
// When enabled the promise icon is visible in all apps while installation an app.
public static boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = true;
// When enabled uses the AllAppsRadialGradientAndScrimDrawable for all apps
- public static boolean LAUNCHER3_GRADIENT_ALL_APPS = false;
+ public static boolean LAUNCHER3_GRADIENT_ALL_APPS = true;
+ // When enabled allows use of physics based motions in the Launcher.
+ public static boolean LAUNCHER3_PHYSICS = true;
// Feature flag to enable moving the QSB on the 0th screen of the workspace.
public static final boolean QSB_ON_FIRST_SCREEN = true;
diff --git a/tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java b/tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
index 883be5a..4c80902 100644
--- a/tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
+++ b/tests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.java
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.verify;
@@ -50,7 +51,11 @@
}
private AddWorkspaceItemsTask newTask(ItemInfo... items) {
- return new AddWorkspaceItemsTask(Provider.of(Arrays.asList(items))) {
+ List<Pair<ItemInfo, Object>> list = new ArrayList<>();
+ for (ItemInfo item : items) {
+ list.add(Pair.create(item, null));
+ }
+ return new AddWorkspaceItemsTask(Provider.of(list)) {
@Override
protected void updateScreens(Context context, ArrayList<Long> workspaceScreens) { }