Merge "Fix visibility of notification footer divider" into ub-launcher3-dorval-polish
diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index dd14466..7c040a8 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -82,7 +82,8 @@
<service android:name="com.android.launcher3.dynamicui.ColorExtractionService"
android:exported="false"
- android:process=":wallpaper_chooser">
+ android:process=":wallpaper_chooser"
+ android:permission="android.permission.BIND_JOB_SERVICE">
</service>
<service
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index fda7db1..68b8307 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Vierkant"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Sirkelvierkant"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Sirkel"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Traandruppel"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Onbekend"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 2852376..cb2634d 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"مربّع"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"رمز دائري مربّع"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"دائرة"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"رمز على شكل دمعة"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"غير معروفة"</string>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 6b99788..1f89f5a 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kənarları dairəvi kvadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Çevrə"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Gözyaşı damlası"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Naməlum"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index d96bd62..9f2855d 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Zaobljeni kvadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Krug"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Suza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Nepoznato"</string>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index 8ee1663..a0b7a69 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Квадрат"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Прамавугольнік са скругленымі вугламі"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Круг"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Сляза"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Невядома"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 61de76f..fc3ba4b 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Квадрат"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Комбинация от кръг и квадрат"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Кръг"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Сълза"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Няма информация"</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index d7bd83b..1ee4b6b 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"নতুন অ্যাপ্লিকেশানগুলির জন্যে"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"আইকনের আকৃতি পরিবর্তন করুন"</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_square" msgid="633575066111622774">"চৌকো"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"চৌকো-গোলাকার"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"গোলাকার"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"চোখের জল"</string>
<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>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index c148413..259e516 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Zaobljeni kvadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Krug"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Suza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Nepoznato"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 245c760..feee97d 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Quadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Quadrat arrodonit"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cercle"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Llàgrima"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Desconegut"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 556294b..2560de3 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Čtverec"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kruh/čtverec"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Kruh"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Slza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Neznámé"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index f811f11..521f9ea 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kvadrat med runde hjørner"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cirkel"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Dråbeform"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Ukendt"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f25b46f..03eb048 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Quadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Superkreis"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Kreis"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Träne"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Unbekannt"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index a148c51..a2b44b4 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Τετράγωνο"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Στρογγυλεμένο τετράγωνο"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Κύκλος"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Δάκρυ"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Άγνωστο"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 504bd81..08ef4f4 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Square"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Circle"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Teardrop"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Unknown"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 504bd81..08ef4f4 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Square"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Circle"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Teardrop"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Unknown"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 504bd81..08ef4f4 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Square"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Circle"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Teardrop"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Unknown"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 4999275..e4315bb 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Cuadrado"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Cuadrado con esquinas redondeadas"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Círculo"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Gota"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Desconocido"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 5e4f161..3c26910 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Cuadrado"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Cuadrado con esquinas redondeadas"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Círculo"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Lágrima"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Desconocido"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 51a3f7a..3cd9a9e 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Ruut"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Ümarate nurkadega ruut"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Ring"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Tilk"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Teadmata"</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 063ce2b..dfb969f 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Karratua"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Ertz biribilduko karratua"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Zirkulua"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Malkoa"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Ezezaguna"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f3b3a84..7da80a4 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"مربع"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"مربع با گوشههای گرد"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"دایره"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"قطره اشک"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"نامشخص"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 49d44f8..b125d45 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Neliö"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Ympyräneliö"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Ympyrä"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Pisara"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Tuntematon"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0169e5d..3b7a1ae 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Carré"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Carré aux coins ronds"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cercle"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Goutte"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Inconnu"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 944a6cb..ca4c7e7 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Carré"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cercle"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Goutte"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Inconnu"</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index fb4489c..c1d2536 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Cadrado"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Cadrado de bordos redondeados"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Círculo"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Bágoa"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Descoñecido"</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 9a316b2..31d92b0 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"નવી ઍપ્લિકેશનો માટે"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"આઇકનનો આકાર બદલો"</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_square" msgid="633575066111622774">"ચોરસ"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ચોરસ જેવું ગોળ"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"વર્તુળ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"ટિઅરડ્રોપ"</string>
<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>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index db4a52e..e5b316c 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"वर्ग"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"गोल कोनों वाला वर्ग"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"मंडली"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"आंसू की बूंद"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"अज्ञात"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 322fb3f..de5f9ae 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Zaobljeni kvadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Krug"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Suza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Nepoznato"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 938ed30..f0f597c 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Négyzet"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Kör"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Könnycsepp"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Ismeretlen"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index b00ed68..f9fa337 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Քառակուսի"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Քառանկյուն"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Օղակ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Արցունքաձև"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Անհայտ է"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 0c80fb7..3aff82b 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Persegi"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Persegi bundar"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Lingkaran"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Butiran Air"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Tidak dikenal"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 7025065..b672245 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Ferningur"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Ferhringur"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Hringur"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Dropi"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Óþekkt"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index d0749cd..9e3fd93 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Quadrato"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Supercerchio"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cerchio"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Goccia"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Sconosciuto"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index b472fab..f02d156 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"ריבוע"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ריבוע בעל פינות מעוגלות"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"מעגל"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"טיפה"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"לא ידוע"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 4a58056..dc6f9bc 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"スクエア"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"スクワークル"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"サークル"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"ティアドロップ"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"不明"</string>
@@ -128,7 +124,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="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 0bade8e..5544ee1 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"კვადრატი"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"წრეკუთხედი"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"წრე"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"წვეთი"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"უცნობი"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 9b2dab3..1507a58 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Шаршы"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Жұмыр төртбұрыш"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Шеңбер"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Тамшы"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Белгісіз"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 59c13cc..9f0e72d 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"ការ៉េ"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ការ៉េជ្រុងកោង"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"រង្វង់"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"តំណក់ទឹកភ្នែក"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"មិនស្គាល់"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 1cda087..2785ad8 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ಹೊಸ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"ಐಕಾನ್ ಆಕಾರವನ್ನು ಬದಲಿಸಿ"</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_square" msgid="633575066111622774">"ಚೌಕ"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ಚೌಕವೃತ್ತ"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"ವೃತ್ತ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"ಕಂಬನಿ"</string>
<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>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 2e8d149..f9185e8 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"정사각형"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"모서리가 둥근 정사각형"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"원"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"눈물방울"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"알 수 없음"</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 791dfcb..87d98c5 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Чарчы"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Бурчтары жумуру төрт бурчтук"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Тегерек"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Тамчы"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Белгисиз"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index cbb17d9..9530aef 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"ສີ່ຫຼ່ຽມຈັດຕຸລັດ"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ສີ່ຫຼ່ຽມຂອບມົນ"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"ວົງມົນ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"ນ້ຳຢອດ"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"ບໍ່ຮູ້ຈັກ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 9c7f2aa..517e611 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadratas"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kvadratais suapvalintais kampais"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Apskritimas"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Ašara"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Nežinoma"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index b7f426e..0c00bda 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrāts"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kvadrāts ar noapaļotiem stūriem"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Aplis"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Lāse"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Nezināma"</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 6d6473f..f994892 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Квадрат"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Заоблен квадрат"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Круг"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Солза"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Непознато"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index b909c11..5995c5c 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"പുതിയ ആപ്പുകൾക്ക്"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"ഐക്കണിന്റെ ആകാരം മാറ്റുക"</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_square" msgid="633575066111622774">"ചതുരം"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ചതുരവൃത്തം"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"വൃത്തം"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"കണ്ണുനീര് തുള്ളി"</string>
<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>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 696b42c..11e7959 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Дөрвөлжин"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Мохоо өнцөгтэй дөрвөлжин"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Дугуй"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Дусал"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Тодорхойгүй"</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 0c74b15..f9443a1 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"नवीन अॅप्ससाठी"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"चिन्हाचा आकार बदला"</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_square" msgid="633575066111622774">"चौरस"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"गोलाकार चौरस"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"वर्तुळ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"अश्रू"</string>
<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>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 20410bc..385a943 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Segi empat sama"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Segi empat berbucu bulat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Bulatan"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Titisan air mata"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Tidak diketahui"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 19e017e..0588aaa 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"လေးထောင့်"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"စတုရန်းမကျ စက်ဝိုင်းမကျပုံ"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"စက်ဝိုင်း"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"မျက်ရည်စက်ပုံ"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"မသိရ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 4d3389e..fb7eecd 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Superellipse"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Sirkel"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Dråpe"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Ukjent"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 0f0c654..524e9c6 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"नयाँ अनुप्रयोगका लागि"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"आइकनको आकार परिवर्तन गर्नुहोस्"</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_square" msgid="633575066111622774">"वर्ग"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"वर्गाकार वृत्त"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"वृत्त"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"आँसुको थोपा"</string>
<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>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 9e35568..bd99a5c 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Vierkant"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cirkel"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Traan"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Onbekend"</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 76c6bd5..97add38 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"ਨਵੀਆਂ ਐਪਾਂ ਲਈ"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"ਆਈਕਨ ਦੀ ਆਕ੍ਰਿਤੀ ਬਦਲੋ"</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_square" msgid="633575066111622774">"ਵਰਗ"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"ਵਰਗ ਰੂਪੀ ਗੋਲ-ਚੱਕਰ"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"ਗੋਲ-ਚੱਕਰ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"ਹੰਝੂ ਦੀ ਬੂੰਦ"</string>
<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>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b3eb423..0955d13 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kwadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Zaokrąglony kwadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Okrąg"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Łza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Brak informacji"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index d1b03aa..e9e56cc 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Quadrado"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Quadrado e círculo"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Círculo"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Lágrima"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Desconhecido"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index c117672..4e17807 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Quadrado"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Quadrado arredondado"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Círculo"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Lágrima"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Desconhecido"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 69b44e2..953b2c8 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Pătrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Pătrat cu colțuri rotunjite"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cerc"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Lacrimă"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Necunoscut"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6f00f2d..60296ae 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Квадрат"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Квадрат с закругленными краями"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Круг"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Капля"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Неизвестно"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index fec9ff8..ff6416f 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"සමචතුරස්රය"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"හතරැස් කවය"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"කවය"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"කඳුළු බිංදුව"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"නොදනී"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 500f14f..1a49d7d 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Štvorec"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Okrúhly štvorec"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Kruh"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Slza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Neznáme"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index bc951af..16cb58c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Zaobljen kvadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Krog"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Solza"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Neznano"</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index f4798f6..1ad19ce 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Katror"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Katror me kënde të rrumbullakëta"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Rreth"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Pikë loti"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"I panjohur"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index de24f32..f02a829 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Квадрат"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Заобљени квадрат"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Круг"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Суза"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Непознато"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 0baf97d..6778bdc 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kvirkel"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Cirkel"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Droppe"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Okänt"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 96a78db..48e8a32 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -86,14 +86,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Mraba"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Mstatili wenye pembe duara"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Mduara"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Umbo la chozi"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Yasiyojulikana"</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 15fb110..eca34ce 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"சதுரம்"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"சதுரவட்டம்"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"வட்டம்"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"கண்ணீர்துளி"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"தெரியாதது"</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 05c4788..e79512e 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"కొత్త అనువర్తనాల కోసం"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"చిహ్న ఆకారాన్ని మార్చు"</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_square" msgid="633575066111622774">"చతురస్రం"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"చతురస్రాకార వృత్తం"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"వృత్తం"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"కన్నీటి చుక్క"</string>
<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>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 1f5c7c8..2adf4b9 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"สี่เหลี่ยมจัตุรัส"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"สี่เหลี่ยมขอบมน"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"วงกลม"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"หยดน้ำตา"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"ไม่รู้จัก"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index ff92183..4390a3a 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Parisukat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Bilog"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Teardrop"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Hindi kilala"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ff28712..cb03f51 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kare"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Kare-daire"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Daire"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Gözyaşı damlası"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Bilinmiyor"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index c904d41..70a742f 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"Квадрат"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Квадрат із заокругленими кутами"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Круг"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Сльоза"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Невідомо"</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 31ac66f..0a747e6 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -83,14 +83,10 @@
<string name="auto_add_shortcuts_description" msgid="7117251166066978730">"نئی ایپس کیلئے"</string>
<string name="icon_shape_override_label" msgid="2977264953998281004">"آئیکن کی شکل تبدیل کریں"</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_square" msgid="633575066111622774">"مربع"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"اسکورکل"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"حلقہ"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"آنسو کا قطرہ"</string>
<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>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 716eedd..d11a60d 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Kvadrat"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Qirralari aylana kvadrat"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Aylana"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Tomchi"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Noma’lum"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 580a4dd..bd7fc45 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Hình vuông"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"Hình vuông cạnh bo tròn"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Hình tròn"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"Hình giọt nước"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Không xác định"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 0a43a91..3ac74fd 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"方形"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"方圆形"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"圆形"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"泪珠形"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"未知"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index ae66324..97cee97 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"正方形"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"方圓形"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"圓形"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"淚珠形"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"不明"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 02f6350..6a75cce 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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_square" msgid="633575066111622774">"正方形"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"方圓形"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"圓形"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"淚珠形"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"不明"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index bdb46a3..56d9985 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -84,14 +84,10 @@
<!-- no translation found for icon_shape_override_label (2977264953998281004) -->
<skip />
<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 />
+ <string name="icon_shape_square" msgid="633575066111622774">"Isikwele"</string>
+ <string name="icon_shape_squircle" msgid="5658049910802669495">"I-Squircle"</string>
+ <string name="icon_shape_circle" msgid="6550072265930144217">"Indingiliza"</string>
+ <string name="icon_shape_teardrop" msgid="4525869388200835463">"I-Teardrop"</string>
<!-- no translation found for icon_shape_override_progress (3461735694970239908) -->
<skip />
<string name="package_state_unknown" msgid="7592128424511031410">"Akwaziwa"</string>
diff --git a/src/com/android/launcher3/AppFilter.java b/src/com/android/launcher3/AppFilter.java
index db8f5dd..923835a 100644
--- a/src/com/android/launcher3/AppFilter.java
+++ b/src/com/android/launcher3/AppFilter.java
@@ -1,9 +1,14 @@
package com.android.launcher3;
import android.content.ComponentName;
+import android.content.Context;
public class AppFilter {
+ public static AppFilter newInstance(Context context) {
+ return Utilities.getOverrideObject(AppFilter.class, context, R.string.app_filter_class);
+ }
+
public boolean shouldShowApp(ComponentName app) {
return true;
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index ff7ca81..909853e 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -2533,8 +2533,8 @@
.putExtra(Utilities.EXTRA_WALLPAPER_OFFSET, offset);
String pickerPackage = getString(R.string.wallpaper_picker_package);
- boolean hasTargetPackage = TextUtils.isEmpty(pickerPackage);
- if (!hasTargetPackage) {
+ boolean hasTargetPackage = !TextUtils.isEmpty(pickerPackage);
+ if (hasTargetPackage) {
intent.setPackage(pickerPackage);
}
@@ -3970,7 +3970,7 @@
* refreshes the widgets and shortcuts associated with the given package/user
*/
public void refreshAndBindWidgetsForPackageUser(@Nullable PackageUserKey packageUser) {
- mModel.refreshAndBindWidgetsAndShortcuts(this, mWidgetsView.isEmpty(), packageUser);
+ mModel.refreshAndBindWidgetsAndShortcuts(packageUser);
}
public void lockScreenOrientation() {
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 27ccabe..cf20feb 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -93,9 +93,7 @@
mInvariantDeviceProfile = new InvariantDeviceProfile(mContext);
mIconCache = new IconCache(mContext, mInvariantDeviceProfile);
mWidgetCache = new WidgetPreviewLoader(mContext, mIconCache);
-
- mModel = new LauncherModel(this, mIconCache,
- Utilities.getOverrideObject(AppFilter.class, mContext, R.string.app_filter_class));
+ mModel = new LauncherModel(this, mIconCache, AppFilter.newInstance(mContext));
LauncherAppsCompat.getInstance(mContext).addOnAppsChangedCallback(mModel);
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index b5ca301..265c7e3 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -60,6 +60,7 @@
import com.android.launcher3.model.ExtendedModelTask;
import com.android.launcher3.model.GridSizeMigrationTask;
import com.android.launcher3.model.LoaderCursor;
+import com.android.launcher3.model.LoaderResults;
import com.android.launcher3.model.ModelWriter;
import com.android.launcher3.model.PackageInstallStateChangedTask;
import com.android.launcher3.model.PackageItemInfo;
@@ -68,7 +69,6 @@
import com.android.launcher3.model.ShortcutsChangedTask;
import com.android.launcher3.model.UserLockStateChangedTask;
import com.android.launcher3.model.WidgetItem;
-import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.provider.ImportDataTask;
import com.android.launcher3.provider.LauncherDbUtils;
import com.android.launcher3.shortcuts.DeepShortcutManager;
@@ -90,13 +90,11 @@
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.CancellationException;
import java.util.concurrent.Executor;
@@ -112,15 +110,11 @@
static final String TAG = "Launcher.Model";
- private static final int ITEMS_CHUNK = 6; // batch size for the workspace icons
- private static final long INVALID_SCREEN_ID = -1L;
-
private final MainThreadExecutor mUiExecutor = new MainThreadExecutor();
@Thunk final LauncherAppState mApp;
@Thunk final Object mLock = new Object();
@Thunk LoaderTask mLoaderTask;
@Thunk boolean mIsLoaderTaskRunning;
- @Thunk boolean mHasLoaderCompletedOnce;
@Thunk static final HandlerThread sWorkerThread = new HandlerThread("launcher-loader");
static {
@@ -143,23 +137,6 @@
// < only access in worker thread >
private final AllAppsList mBgAllAppsList;
- // Entire list of widgets.
- private final WidgetsModel mBgWidgetsModel;
-
- private boolean mHasShortcutHostPermission;
- // Runnable to check if the shortcuts permission has changed.
- private final Runnable mShortcutPermissionCheckRunnable = new Runnable() {
- @Override
- public void run() {
- if (mModelLoaded) {
- boolean hasShortcutHostPermission =
- DeepShortcutManager.getInstance(mApp.getContext()).hasHostPermission();
- if (hasShortcutHostPermission != mHasShortcutHostPermission) {
- forceReload();
- }
- }
- }
- };
/**
* All the static data should be accessed on the background thread, A lock should be acquired
@@ -167,12 +144,19 @@
*/
static final BgDataModel sBgDataModel = new BgDataModel();
- // </ only access in worker thread >
-
- private final IconCache mIconCache;
-
- private final LauncherAppsCompat mLauncherApps;
- private final UserManagerCompat mUserManager;
+ // Runnable to check if the shortcuts permission has changed.
+ private final Runnable mShortcutPermissionCheckRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (mModelLoaded) {
+ boolean hasShortcutHostPermission =
+ DeepShortcutManager.getInstance(mApp.getContext()).hasHostPermission();
+ if (hasShortcutHostPermission != sBgDataModel.hasShortcutHostPermission) {
+ forceReload();
+ }
+ }
+ }
+ };
public interface Callbacks {
public boolean setLoadOnResume();
@@ -208,14 +192,8 @@
}
LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) {
- Context context = app.getContext();
mApp = app;
mBgAllAppsList = new AllAppsList(iconCache, appFilter);
- mBgWidgetsModel = new WidgetsModel(iconCache, appFilter);
- mIconCache = iconCache;
-
- mLauncherApps = LauncherAppsCompat.getInstance(context);
- mUserManager = UserManagerCompat.getInstance(context);
}
/** Runs the specified runnable immediately if called from the worker thread, otherwise it is
@@ -531,13 +509,22 @@
// If there is already one running, tell it to stop.
stopLoaderLocked();
- mLoaderTask = new LoaderTask(mApp.getContext(), synchronousBindPage);
+ LoaderResults loaderResults = new LoaderResults(mApp, sBgDataModel,
+ mBgAllAppsList, synchronousBindPage, mCallbacks);
if (synchronousBindPage != PagedView.INVALID_RESTORE_PAGE
&& mModelLoaded && !mIsLoaderTaskRunning) {
- mLoaderTask.runBindSynchronousPage(synchronousBindPage);
+
+ // Divide the set of loaded items into those that we are binding synchronously,
+ // and everything else that is to be bound normally (asynchronously).
+ loaderResults.bindWorkspace();
+ // For now, continue posting the binding of AllApps as there are other
+ // issues that arise from that.
+ loaderResults.bindAllApps();
+ loaderResults.bindDeepShortcuts();
+ loaderResults.bindWidgets();
return true;
} else {
- sWorkerThread.setPriority(Thread.NORM_PRIORITY);
+ mLoaderTask = new LoaderTask(mApp, mBgAllAppsList, sBgDataModel, loaderResults);
sWorker.post(mLoaderTask);
}
}
@@ -584,6 +571,44 @@
});
}
+ public class LoaderTransaction implements AutoCloseable {
+
+ private final LoaderTask mTask;
+
+ private LoaderTransaction(LoaderTask task) throws CancellationException {
+ synchronized (mLock) {
+ if (mLoaderTask != task) {
+ throw new CancellationException("Loader already stopped");
+ }
+ mTask = task;
+ mIsLoaderTaskRunning = true;
+ mModelLoaded = false;
+ }
+ }
+
+ public void commit() {
+ synchronized (mLock) {
+ // Everything loaded bind the data.
+ mModelLoaded = true;
+ }
+ }
+
+ @Override
+ public void close() {
+ synchronized (mLock) {
+ // If we are still the last one to be scheduled, remove ourselves.
+ if (mLoaderTask == mTask) {
+ mLoaderTask = null;
+ }
+ mIsLoaderTaskRunning = false;
+ }
+ }
+ }
+
+ public LoaderTransaction beginLoader(LoaderTask task) throws CancellationException {
+ return new LoaderTransaction(task);
+ }
+
/**
* Runnable for the thread that loads the contents of the launcher:
* - workspace icons
@@ -591,82 +616,69 @@
* - all apps icons
* - deep shortcuts within apps
*/
- private class LoaderTask implements Runnable {
- private Context mContext;
- private int mPageToBindFirst;
+ private static class LoaderTask implements Runnable {
+ private final LauncherAppState mApp;
+ private final AllAppsList mBgAllAppsList;
+ private final BgDataModel mBgDataModel;
+
+ private final LoaderResults mResults;
+
+ private final LauncherAppsCompat mLauncherApps;
+ private final UserManagerCompat mUserManager;
+ private final DeepShortcutManager mShortcutManager;
+ private final PackageInstallerCompat mPackageInstaller;
+ private final AppWidgetManagerCompat mAppWidgetManager;
+ private final IconCache mIconCache;
private boolean mStopped;
- LoaderTask(Context context, int pageToBindFirst) {
- mContext = context;
- mPageToBindFirst = pageToBindFirst;
+ LoaderTask(LauncherAppState app, AllAppsList bgAllAppsList, BgDataModel dataModel,
+ LoaderResults results) {
+ mApp = app;
+ mBgAllAppsList = bgAllAppsList;
+ mBgDataModel = dataModel;
+ mResults = results;
+
+ mLauncherApps = LauncherAppsCompat.getInstance(mApp.getContext());
+ mUserManager = UserManagerCompat.getInstance(mApp.getContext());
+ mShortcutManager = DeepShortcutManager.getInstance(mApp.getContext());
+ mPackageInstaller = PackageInstallerCompat.getInstance(mApp.getContext());
+ mAppWidgetManager = AppWidgetManagerCompat.getInstance(mApp.getContext());
+ mIconCache = mApp.getIconCache();
}
- private void waitForIdle() {
+ private synchronized void waitForIdle() {
// Wait until the either we're stopped or the other threads are done.
// This way we don't start loading all apps until the workspace has settled
// down.
- synchronized (LoaderTask.this) {
- LooperIdleLock idleLock = new LooperIdleLock(this, Looper.getMainLooper());
- // Just in case mFlushingWorkerThread changes but we aren't woken up,
- // wait no longer than 1sec at a time
- while (!mStopped && idleLock.awaitLocked(1000));
- }
+ LooperIdleLock idleLock = new LooperIdleLock(this, Looper.getMainLooper());
+ // Just in case mFlushingWorkerThread changes but we aren't woken up,
+ // wait no longer than 1sec at a time
+ while (!mStopped && idleLock.awaitLocked(1000));
}
- void runBindSynchronousPage(int synchronousBindPage) {
- if (synchronousBindPage == PagedView.INVALID_RESTORE_PAGE) {
- // Ensure that we have a valid page index to load synchronously
- throw new RuntimeException("Should not call runBindSynchronousPage() without " +
- "valid page index");
- }
- if (!mModelLoaded) {
- // Ensure that we don't try and bind a specified page when the pages have not been
- // loaded already (we should load everything asynchronously in that case)
- throw new RuntimeException("Expecting AllApps and Workspace to be loaded");
- }
- synchronized (mLock) {
- if (mIsLoaderTaskRunning) {
- // Ensure that we are never running the background loading at this point since
- // we also touch the background collections
- throw new RuntimeException("Error! Background loading is already running");
- }
- }
-
- // Divide the set of loaded items into those that we are binding synchronously, and
- // everything else that is to be bound normally (asynchronously).
- bindWorkspace(synchronousBindPage);
- // XXX: For now, continue posting the binding of AllApps as there are other issues that
- // arise from that.
- onlyBindAllApps();
-
- bindDeepShortcuts();
- }
-
- private void verifyNotStopped() throws CancellationException {
- synchronized (LoaderTask.this) {
- if (mStopped) {
- throw new CancellationException("Loader stopped");
- }
+ private synchronized void verifyNotStopped() throws CancellationException {
+ if (mStopped) {
+ throw new CancellationException("Loader stopped");
}
}
public void run() {
- synchronized (mLock) {
+ synchronized (this) {
+ // Skip fast if we are already stopped.
if (mStopped) {
return;
}
- mIsLoaderTaskRunning = true;
}
- try {
+ try (LoaderTransaction transaction = mApp.getModel().beginLoader(this)) {
long now = 0;
if (DEBUG_LOADERS) Log.d(TAG, "step 1.1: loading workspace");
loadWorkspace();
verifyNotStopped();
if (DEBUG_LOADERS) Log.d(TAG, "step 1.2: bind workspace workspace");
- bindWorkspace(mPageToBindFirst);
+ mResults.bindWorkspace();
// Take a break
if (DEBUG_LOADERS) {
@@ -681,8 +693,12 @@
if (DEBUG_LOADERS) Log.d(TAG, "step 2.1: loading all apps");
loadAllApps();
+ if (DEBUG_LOADERS) Log.d(TAG, "step 2.2: Binding all apps");
verifyNotStopped();
- if (DEBUG_LOADERS) Log.d(TAG, "step 2.2: Update icon cache");
+ mResults.bindAllApps();
+
+ verifyNotStopped();
+ if (DEBUG_LOADERS) Log.d(TAG, "step 2.3: Update icon cache");
updateIconCache();
// Take a break
@@ -700,7 +716,7 @@
verifyNotStopped();
if (DEBUG_LOADERS) Log.d(TAG, "step 3.2: bind deep shortcuts");
- bindDeepShortcuts();
+ mResults.bindDeepShortcuts();
// Take a break
if (DEBUG_LOADERS) Log.d(TAG, "step 3 completed, wait for idle");
@@ -709,66 +725,21 @@
// fourth step
if (DEBUG_LOADERS) Log.d(TAG, "step 4.1: loading widgets");
- refreshAndBindWidgetsAndShortcuts(getCallback(), false /* bindFirst */,
- null /* packageUser */);
+ mBgDataModel.widgetsModel.update(mApp, null);
- synchronized (mLock) {
- // Everything loaded bind the data.
- mModelLoaded = true;
- mHasLoaderCompletedOnce = true;
- }
+ verifyNotStopped();
+ if (DEBUG_LOADERS) Log.d(TAG, "step 4.2: Binding widgets");
+ mResults.bindWidgets();
+
+ transaction.commit();
} catch (CancellationException e) {
// Loader stopped, ignore
- } finally {
- // Clear out this reference, otherwise we end up holding it until all of the
- // callback runnables are done.
- mContext = null;
-
- synchronized (mLock) {
- // If we are still the last one to be scheduled, remove ourselves.
- if (mLoaderTask == this) {
- mLoaderTask = null;
- }
- mIsLoaderTaskRunning = false;
- }
}
}
- public void stopLocked() {
- synchronized (LoaderTask.this) {
- mStopped = true;
- this.notify();
- }
- }
-
- /**
- * Gets the callbacks object. If we've been stopped, or if the launcher object
- * has somehow been garbage collected, return null instead. Pass in the Callbacks
- * object that was around when the deferred message was scheduled, and if there's
- * a new Callbacks object around then also return null. This will save us from
- * calling onto it with data that will be ignored.
- */
- Callbacks tryGetCallbacks(Callbacks oldCallbacks) {
- synchronized (mLock) {
- if (mStopped) {
- return null;
- }
-
- if (mCallbacks == null) {
- return null;
- }
-
- final Callbacks callbacks = mCallbacks.get();
- if (callbacks != oldCallbacks) {
- return null;
- }
- if (callbacks == null) {
- Log.w(TAG, "no mCallbacks");
- return null;
- }
-
- return callbacks;
- }
+ public synchronized void stopLocked() {
+ mStopped = true;
+ this.notify();
}
private void loadWorkspace() {
@@ -776,12 +747,10 @@
Trace.beginSection("Loading Workspace");
}
- final Context context = mContext;
+ final Context context = mApp.getContext();
final ContentResolver contentResolver = context.getContentResolver();
final PackageManagerHelper pmHelper = new PackageManagerHelper(context);
final boolean isSafeMode = pmHelper.isSafeMode();
- final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context);
- final DeepShortcutManager shortcutManager = DeepShortcutManager.getInstance(context);
final boolean isSdCardReady = Utilities.isBootCompleted();
final MultiHashMap<UserHandle, String> pendingPackages = new MultiHashMap<>();
@@ -794,7 +763,7 @@
}
if (!clearDb && GridSizeMigrationTask.ENABLED &&
- !GridSizeMigrationTask.migrateGridIfNeeded(mContext)) {
+ !GridSizeMigrationTask.migrateGridIfNeeded(context)) {
// Migration failed. Clear workspace.
clearDb = true;
}
@@ -809,12 +778,12 @@
LauncherSettings.Settings.call(contentResolver,
LauncherSettings.Settings.METHOD_LOAD_DEFAULT_FAVORITES);
- synchronized (sBgDataModel) {
- sBgDataModel.clear();
+ synchronized (mBgDataModel) {
+ mBgDataModel.clear();
- final HashMap<String, Integer> installingPkgs = PackageInstallerCompat
- .getInstance(mContext).updateAndGetActiveSessionCache();
- sBgDataModel.workspaceScreens.addAll(loadWorkspaceScreensDb(mContext));
+ final HashMap<String, Integer> installingPkgs =
+ mPackageInstaller.updateAndGetActiveSessionCache();
+ mBgDataModel.workspaceScreens.addAll(loadWorkspaceScreensDb(context));
Map<ShortcutKey, ShortcutInfoCompat> shortcutKeyToPinnedShortcuts = new HashMap<>();
final LoaderCursor c = new LoaderCursor(contentResolver.query(
@@ -849,8 +818,8 @@
// We can only query for shortcuts when the user is unlocked.
if (userUnlocked) {
List<ShortcutInfoCompat> pinnedShortcuts =
- shortcutManager.queryForPinnedShortcuts(null, user);
- if (shortcutManager.wasLastCallSuccess()) {
+ mShortcutManager.queryForPinnedShortcuts(null, user);
+ if (mShortcutManager.wasLastCallSuccess()) {
for (ShortcutInfoCompat shortcut : pinnedShortcuts) {
shortcutKeyToPinnedShortcuts.put(ShortcutKey.fromInfo(shortcut),
shortcut);
@@ -915,14 +884,14 @@
// If there is no target package, its an implicit intent
// (legacy shortcut) which is always valid
boolean validTarget = TextUtils.isEmpty(targetPkg) ||
- launcherApps.isPackageEnabledForProfile(targetPkg, c.user);
+ mLauncherApps.isPackageEnabledForProfile(targetPkg, c.user);
if (cn != null && validTarget) {
// If the apk is present and the shortcut points to a specific
// component.
// If the component is already present
- if (launcherApps.isActivityEnabledForProfile(cn, c.user)) {
+ if (mLauncherApps.isActivityEnabledForProfile(cn, c.user)) {
// no special handling necessary for this item
c.markRestored();
} else {
@@ -1073,14 +1042,14 @@
}
}
- c.checkAndAddItem(info, sBgDataModel);
+ c.checkAndAddItem(info, mBgDataModel);
} else {
throw new RuntimeException("Unexpected null ShortcutInfo");
}
break;
case LauncherSettings.Favorites.ITEM_TYPE_FOLDER:
- FolderInfo folderInfo = sBgDataModel.findOrMakeFolder(c.id);
+ FolderInfo folderInfo = mBgDataModel.findOrMakeFolder(c.id);
c.applyCommonProperties(folderInfo);
// Do not trim the folder label, as is was set by the user.
@@ -1092,7 +1061,7 @@
// no special handling required for restored folders
c.markRestored();
- c.checkAndAddItem(folderInfo, sBgDataModel);
+ c.checkAndAddItem(folderInfo, mBgDataModel);
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
@@ -1113,8 +1082,7 @@
LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY);
if (widgetProvidersMap == null) {
- widgetProvidersMap = AppWidgetManagerCompat
- .getInstance(mContext).getAllProvidersMap();
+ widgetProvidersMap = mAppWidgetManager.getAllProvidersMap();
}
final AppWidgetProviderInfo provider = widgetProvidersMap.get(
new ComponentKey(
@@ -1212,7 +1180,7 @@
appWidgetInfo.pendingItemInfo, false);
}
- c.checkAndAddItem(appWidgetInfo, sBgDataModel);
+ c.checkAndAddItem(appWidgetInfo, mBgDataModel);
}
break;
}
@@ -1226,7 +1194,7 @@
// Break early if we've stopped loading
if (mStopped) {
- sBgDataModel.clear();
+ mBgDataModel.clear();
return;
}
@@ -1238,9 +1206,9 @@
LauncherSettings.Settings.METHOD_DELETE_EMPTY_FOLDERS)
.getSerializable(LauncherSettings.Settings.EXTRA_VALUE);
for (long folderId : deletedFolderIds) {
- sBgDataModel.workspaceItems.remove(sBgDataModel.folders.get(folderId));
- sBgDataModel.folders.remove(folderId);
- sBgDataModel.itemsIdMap.remove(folderId);
+ mBgDataModel.workspaceItems.remove(mBgDataModel.folders.get(folderId));
+ mBgDataModel.folders.remove(folderId);
+ mBgDataModel.itemsIdMap.remove(folderId);
}
// Remove any ghost widgets
@@ -1252,18 +1220,18 @@
HashSet<ShortcutKey> pendingShortcuts =
InstallShortcutReceiver.getPendingShortcuts(context);
for (ShortcutKey key : shortcutKeyToPinnedShortcuts.keySet()) {
- MutableInt numTimesPinned = sBgDataModel.pinnedShortcutCounts.get(key);
+ MutableInt numTimesPinned = mBgDataModel.pinnedShortcutCounts.get(key);
if ((numTimesPinned == null || numTimesPinned.value == 0)
&& !pendingShortcuts.contains(key)) {
// Shortcut is pinned but doesn't exist on the workspace; unpin it.
- shortcutManager.unpinShortcut(key);
+ mShortcutManager.unpinShortcut(key);
}
}
FolderIconPreviewVerifier verifier =
new FolderIconPreviewVerifier(mApp.getInvariantDeviceProfile());
// Sort the folder items and make sure all items in the preview are high resolution.
- for (FolderInfo folder : sBgDataModel.folders) {
+ for (FolderInfo folder : mBgDataModel.folders) {
Collections.sort(folder.contents, Folder.ITEM_POS_COMPARATOR);
verifier.setFolderInfo(folder);
@@ -1285,16 +1253,15 @@
c.commitRestoredItems();
if (!isSdCardReady && !pendingPackages.isEmpty()) {
context.registerReceiver(
- new SdCardAvailableReceiver(
- LauncherModel.this, mContext, pendingPackages),
+ new SdCardAvailableReceiver(mApp, pendingPackages),
new IntentFilter(Intent.ACTION_BOOT_COMPLETED),
null,
sWorker);
}
// Remove any empty screens
- ArrayList<Long> unusedScreens = new ArrayList<>(sBgDataModel.workspaceScreens);
- for (ItemInfo item: sBgDataModel.itemsIdMap) {
+ ArrayList<Long> unusedScreens = new ArrayList<>(mBgDataModel.workspaceScreens);
+ for (ItemInfo item: mBgDataModel.itemsIdMap) {
long screenId = item.screenId;
if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP &&
unusedScreens.contains(screenId)) {
@@ -1304,8 +1271,8 @@
// If there are any empty screens remove them, and update.
if (unusedScreens.size() != 0) {
- sBgDataModel.workspaceScreens.removeAll(unusedScreens);
- updateWorkspaceScreenOrder(context, sBgDataModel.workspaceScreens);
+ mBgDataModel.workspaceScreens.removeAll(unusedScreens);
+ updateWorkspaceScreenOrder(context, mBgDataModel.workspaceScreens);
}
}
if (LauncherAppState.PROFILE_STARTUP) {
@@ -1313,296 +1280,11 @@
}
}
- /** Filters the set of items who are directly or indirectly (via another container) on the
- * specified screen. */
- private void filterCurrentWorkspaceItems(long currentScreenId,
- ArrayList<ItemInfo> allWorkspaceItems,
- ArrayList<ItemInfo> currentScreenItems,
- ArrayList<ItemInfo> otherScreenItems) {
- // Purge any null ItemInfos
- Iterator<ItemInfo> iter = allWorkspaceItems.iterator();
- while (iter.hasNext()) {
- ItemInfo i = iter.next();
- if (i == null) {
- iter.remove();
- }
- }
-
- // Order the set of items by their containers first, this allows use to walk through the
- // list sequentially, build up a list of containers that are in the specified screen,
- // as well as all items in those containers.
- Set<Long> itemsOnScreen = new HashSet<Long>();
- Collections.sort(allWorkspaceItems, new Comparator<ItemInfo>() {
- @Override
- public int compare(ItemInfo lhs, ItemInfo rhs) {
- return Utilities.longCompare(lhs.container, rhs.container);
- }
- });
- for (ItemInfo info : allWorkspaceItems) {
- if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
- if (info.screenId == currentScreenId) {
- currentScreenItems.add(info);
- itemsOnScreen.add(info.id);
- } else {
- otherScreenItems.add(info);
- }
- } else if (info.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
- currentScreenItems.add(info);
- itemsOnScreen.add(info.id);
- } else {
- if (itemsOnScreen.contains(info.container)) {
- currentScreenItems.add(info);
- itemsOnScreen.add(info.id);
- } else {
- otherScreenItems.add(info);
- }
- }
- }
- }
-
- /** Filters the set of widgets which are on the specified screen. */
- private void filterCurrentAppWidgets(long currentScreenId,
- ArrayList<LauncherAppWidgetInfo> appWidgets,
- ArrayList<LauncherAppWidgetInfo> currentScreenWidgets,
- ArrayList<LauncherAppWidgetInfo> otherScreenWidgets) {
-
- for (LauncherAppWidgetInfo widget : appWidgets) {
- if (widget == null) continue;
- if (widget.container == LauncherSettings.Favorites.CONTAINER_DESKTOP &&
- widget.screenId == currentScreenId) {
- currentScreenWidgets.add(widget);
- } else {
- otherScreenWidgets.add(widget);
- }
- }
- }
-
- /** Sorts the set of items by hotseat, workspace (spatially from top to bottom, left to
- * right) */
- private void sortWorkspaceItemsSpatially(ArrayList<ItemInfo> workspaceItems) {
- final InvariantDeviceProfile profile = mApp.getInvariantDeviceProfile();
- final int screenCols = profile.numColumns;
- final int screenCellCount = profile.numColumns * profile.numRows;
- Collections.sort(workspaceItems, new Comparator<ItemInfo>() {
- @Override
- public int compare(ItemInfo lhs, ItemInfo rhs) {
- if (lhs.container == rhs.container) {
- // Within containers, order by their spatial position in that container
- switch ((int) lhs.container) {
- case LauncherSettings.Favorites.CONTAINER_DESKTOP: {
- long lr = (lhs.screenId * screenCellCount +
- lhs.cellY * screenCols + lhs.cellX);
- long rr = (rhs.screenId * screenCellCount +
- rhs.cellY * screenCols + rhs.cellX);
- return Utilities.longCompare(lr, rr);
- }
- case LauncherSettings.Favorites.CONTAINER_HOTSEAT: {
- // We currently use the screen id as the rank
- return Utilities.longCompare(lhs.screenId, rhs.screenId);
- }
- default:
- if (FeatureFlags.IS_DOGFOOD_BUILD) {
- throw new RuntimeException("Unexpected container type when " +
- "sorting workspace items.");
- }
- return 0;
- }
- } else {
- // Between containers, order by hotseat, desktop
- return Utilities.longCompare(lhs.container, rhs.container);
- }
- }
- });
- }
-
- private void bindWorkspaceScreens(final Callbacks oldCallbacks,
- final ArrayList<Long> orderedScreens) {
- final Runnable r = new Runnable() {
- @Override
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.bindScreens(orderedScreens);
- }
- }
- };
- mUiExecutor.execute(r);
- }
-
- private void bindWorkspaceItems(final Callbacks oldCallbacks,
- final ArrayList<ItemInfo> workspaceItems,
- final ArrayList<LauncherAppWidgetInfo> appWidgets,
- final Executor executor) {
-
- // Bind the workspace items
- int N = workspaceItems.size();
- for (int i = 0; i < N; i += ITEMS_CHUNK) {
- final int start = i;
- final int chunkSize = (i+ITEMS_CHUNK <= N) ? ITEMS_CHUNK : (N-i);
- final Runnable r = new Runnable() {
- @Override
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.bindItems(workspaceItems, start, start+chunkSize,
- false);
- }
- }
- };
- executor.execute(r);
- }
-
- // Bind the widgets, one at a time
- N = appWidgets.size();
- for (int i = 0; i < N; i++) {
- final LauncherAppWidgetInfo widget = appWidgets.get(i);
- final Runnable r = new Runnable() {
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.bindAppWidget(widget);
- }
- }
- };
- executor.execute(r);
- }
- }
-
- /**
- * Binds all loaded data to actual views on the main thread.
- */
- private void bindWorkspace(int synchronizeBindPage) {
- final long t = SystemClock.uptimeMillis();
- Runnable r;
-
- // Don't use these two variables in any of the callback runnables.
- // Otherwise we hold a reference to them.
- final Callbacks oldCallbacks = mCallbacks.get();
- if (oldCallbacks == null) {
- // This launcher has exited and nobody bothered to tell us. Just bail.
- Log.w(TAG, "LoaderTask running with no launcher");
- return;
- }
-
- // Save a copy of all the bg-thread collections
- ArrayList<ItemInfo> workspaceItems = new ArrayList<>();
- ArrayList<LauncherAppWidgetInfo> appWidgets = new ArrayList<>();
- ArrayList<Long> orderedScreenIds = new ArrayList<>();
-
- synchronized (sBgDataModel) {
- workspaceItems.addAll(sBgDataModel.workspaceItems);
- appWidgets.addAll(sBgDataModel.appWidgets);
- orderedScreenIds.addAll(sBgDataModel.workspaceScreens);
- }
-
- final int currentScreen;
- {
- int currScreen = synchronizeBindPage != PagedView.INVALID_RESTORE_PAGE
- ? synchronizeBindPage : oldCallbacks.getCurrentWorkspaceScreen();
- if (currScreen >= orderedScreenIds.size()) {
- // There may be no workspace screens (just hotseat items and an empty page).
- currScreen = PagedView.INVALID_RESTORE_PAGE;
- }
- currentScreen = currScreen;
- }
- final boolean validFirstPage = currentScreen >= 0;
- final long currentScreenId =
- validFirstPage ? orderedScreenIds.get(currentScreen) : INVALID_SCREEN_ID;
-
- // Separate the items that are on the current screen, and all the other remaining items
- ArrayList<ItemInfo> currentWorkspaceItems = new ArrayList<>();
- ArrayList<ItemInfo> otherWorkspaceItems = new ArrayList<>();
- ArrayList<LauncherAppWidgetInfo> currentAppWidgets = new ArrayList<>();
- ArrayList<LauncherAppWidgetInfo> otherAppWidgets = new ArrayList<>();
-
- filterCurrentWorkspaceItems(currentScreenId, workspaceItems, currentWorkspaceItems,
- otherWorkspaceItems);
- filterCurrentAppWidgets(currentScreenId, appWidgets, currentAppWidgets,
- otherAppWidgets);
- sortWorkspaceItemsSpatially(currentWorkspaceItems);
- sortWorkspaceItemsSpatially(otherWorkspaceItems);
-
- // Tell the workspace that we're about to start binding items
- r = new Runnable() {
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.clearPendingBinds();
- callbacks.startBinding();
- }
- }
- };
- mUiExecutor.execute(r);
-
- bindWorkspaceScreens(oldCallbacks, orderedScreenIds);
-
- Executor mainExecutor = mUiExecutor;
- // Load items on the current page.
- bindWorkspaceItems(oldCallbacks, currentWorkspaceItems, currentAppWidgets, mainExecutor);
-
- // In case of validFirstPage, only bind the first screen, and defer binding the
- // remaining screens after first onDraw (and an optional the fade animation whichever
- // happens later).
- // This ensures that the first screen is immediately visible (eg. during rotation)
- // In case of !validFirstPage, bind all pages one after other.
- final Executor deferredExecutor =
- validFirstPage ? new ViewOnDrawExecutor(mUiExecutor) : mainExecutor;
-
- mainExecutor.execute(new Runnable() {
- @Override
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.finishFirstPageBind(
- validFirstPage ? (ViewOnDrawExecutor) deferredExecutor : null);
- }
- }
- });
-
- bindWorkspaceItems(oldCallbacks, otherWorkspaceItems, otherAppWidgets, deferredExecutor);
-
- // Tell the workspace that we're done binding items
- r = new Runnable() {
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.finishBindingItems();
- }
-
- // If we're profiling, ensure this is the last thing in the queue.
- if (DEBUG_LOADERS) {
- Log.d(TAG, "bound workspace in "
- + (SystemClock.uptimeMillis()-t) + "ms");
- }
-
- }
- };
- deferredExecutor.execute(r);
-
- if (validFirstPage) {
- r = new Runnable() {
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- // We are loading synchronously, which means, some of the pages will be
- // bound after first draw. Inform the callbacks that page binding is
- // not complete, and schedule the remaining pages.
- if (currentScreen != PagedView.INVALID_RESTORE_PAGE) {
- callbacks.onPageBoundSynchronously(currentScreen);
- }
- callbacks.executeOnNextDraw((ViewOnDrawExecutor) deferredExecutor);
- }
- }
- };
- mUiExecutor.execute(r);
- }
- }
-
private void updateIconCache() {
// Ignore packages which have a promise icon.
HashSet<String> packagesToIgnore = new HashSet<>();
- synchronized (sBgDataModel) {
- for (ItemInfo info : sBgDataModel.itemsIdMap) {
+ synchronized (mBgDataModel) {
+ for (ItemInfo info : mBgDataModel.itemsIdMap) {
if (info instanceof ShortcutInfo) {
ShortcutInfo si = (ShortcutInfo) info;
if (si.isPromise() && si.getTargetComponent() != null) {
@@ -1619,44 +1301,9 @@
mIconCache.updateDbIcons(packagesToIgnore);
}
- private void onlyBindAllApps() {
- final Callbacks oldCallbacks = mCallbacks.get();
- if (oldCallbacks == null) {
- // This launcher has exited and nobody bothered to tell us. Just bail.
- Log.w(TAG, "LoaderTask running with no launcher (onlyBindAllApps)");
- return;
- }
-
- // shallow copy
- @SuppressWarnings("unchecked")
- final ArrayList<AppInfo> list
- = (ArrayList<AppInfo>) mBgAllAppsList.data.clone();
- Runnable r = new Runnable() {
- public void run() {
- final long t = SystemClock.uptimeMillis();
- final Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.bindAllApplications(list);
- }
- if (DEBUG_LOADERS) {
- Log.d(TAG, "bound all " + list.size() + " apps from cache in "
- + (SystemClock.uptimeMillis() - t) + "ms");
- }
- }
- };
- mUiExecutor.execute(r);
- }
-
private void loadAllApps() {
final long loadTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;
- final Callbacks oldCallbacks = mCallbacks.get();
- if (oldCallbacks == null) {
- // This launcher has exited and nobody bothered to tell us. Just bail.
- Log.w(TAG, "LoaderTask running with no launcher (loadAllApps)");
- return;
- }
-
final List<UserHandle> profiles = mUserManager.getUserProfiles();
// Clear the list of apps
@@ -1683,77 +1330,40 @@
mBgAllAppsList.add(new AppInfo(app, user, quietMode), app);
}
- ManagedProfileHeuristic.onAllAppsLoaded(mContext, apps, user);
+ ManagedProfileHeuristic.onAllAppsLoaded(mApp.getContext(), apps, user);
}
if (FeatureFlags.LAUNCHER3_PROMISE_APPS_IN_ALL_APPS) {
// get all active sessions and add them to the all apps list
- PackageInstallerCompat installer = PackageInstallerCompat.getInstance(mContext);
- for (PackageInstaller.SessionInfo info : installer.getAllVerifiedSessions()) {
- mBgAllAppsList.addPromiseApp(mContext,
+ for (PackageInstaller.SessionInfo info :
+ mPackageInstaller.getAllVerifiedSessions()) {
+ mBgAllAppsList.addPromiseApp(mApp.getContext(),
PackageInstallInfo.fromInstallingState(info));
}
}
- // Huh? Shouldn't this be inside the Runnable below?
- final ArrayList<AppInfo> added = mBgAllAppsList.added;
- mBgAllAppsList.added = new ArrayList<AppInfo>();
-
-
- // Post callback on main thread
- mUiExecutor.execute(new Runnable() {
- public void run() {
-
- final long bindTime = SystemClock.uptimeMillis();
- final Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.bindAllApplications(added);
- if (DEBUG_LOADERS) {
- Log.d(TAG, "bound " + added.size() + " apps in "
- + (SystemClock.uptimeMillis() - bindTime) + "ms");
- }
- } else {
- Log.i(TAG, "not binding apps: no Launcher activity");
- }
- }
- });
+ mBgAllAppsList.added = new ArrayList<>();
if (DEBUG_LOADERS) {
- Log.d(TAG, "Icons processed in "
+ Log.d(TAG, "All apps loaded in in "
+ (SystemClock.uptimeMillis() - loadTime) + "ms");
}
}
private void loadDeepShortcuts() {
- sBgDataModel.deepShortcutMap.clear();
- DeepShortcutManager shortcutManager = DeepShortcutManager.getInstance(mContext);
- mHasShortcutHostPermission = shortcutManager.hasHostPermission();
- if (mHasShortcutHostPermission) {
+ mBgDataModel.deepShortcutMap.clear();
+ mBgDataModel.hasShortcutHostPermission = mShortcutManager.hasHostPermission();
+ if (mBgDataModel.hasShortcutHostPermission) {
for (UserHandle user : mUserManager.getUserProfiles()) {
if (mUserManager.isUserUnlocked(user)) {
List<ShortcutInfoCompat> shortcuts =
- shortcutManager.queryForAllShortcuts(user);
- sBgDataModel.updateDeepShortcutMap(null, user, shortcuts);
+ mShortcutManager.queryForAllShortcuts(user);
+ mBgDataModel.updateDeepShortcutMap(null, user, shortcuts);
}
}
}
}
}
- public void bindDeepShortcuts() {
- final MultiHashMap<ComponentKey, String> shortcutMapCopy =
- sBgDataModel.deepShortcutMap.clone();
- Runnable r = new Runnable() {
- @Override
- public void run() {
- Callbacks callbacks = getCallback();
- if (callbacks != null) {
- callbacks.bindDeepShortcutMap(shortcutMapCopy);
- }
- }
- };
- mUiExecutor.execute(r);
- }
-
/**
* Refreshes the cached shortcuts if the shortcut permission has changed.
* Current implementation simply reloads the workspace, but it can be optimized to
@@ -1777,12 +1387,6 @@
}
public void enqueueModelUpdateTask(BaseModelUpdateTask task) {
- if (!mModelLoaded && mLoaderTask == null) {
- if (DEBUG_LOADERS) {
- Log.d(TAG, "enqueueModelUpdateTask Ignoring task since loader is pending=" + task);
- }
- return;
- }
task.init(this);
runOnWorkerThread(task);
}
@@ -1811,8 +1415,11 @@
}
@Override
- public void run() {
- if (!mModel.mHasLoaderCompletedOnce) {
+ public final void run() {
+ if (!mModel.mModelLoaded) {
+ if (DEBUG_LOADERS) {
+ Log.d(TAG, "Ignoring model task since loader is pending=" + this);
+ }
// Loader has not yet run.
return;
}
@@ -1872,34 +1479,12 @@
});
}
- private void bindWidgetsModel(final Callbacks callbacks) {
- final MultiHashMap<PackageItemInfo, WidgetItem> widgets
- = mBgWidgetsModel.getWidgetsMap().clone();
- mUiExecutor.execute(new Runnable() {
+ public void refreshAndBindWidgetsAndShortcuts(@Nullable final PackageUserKey packageUser) {
+ enqueueModelUpdateTask(new ExtendedModelTask() {
@Override
- public void run() {
- Callbacks cb = getCallback();
- if (callbacks == cb && cb != null) {
- callbacks.bindAllWidgets(widgets);
- }
- }
- });
- }
-
- public void refreshAndBindWidgetsAndShortcuts(final Callbacks callbacks,
- final boolean bindFirst, @Nullable final PackageUserKey packageUser) {
- runOnWorkerThread(new Runnable() {
- @Override
- public void run() {
- if (bindFirst && !mBgWidgetsModel.isEmpty()) {
- bindWidgetsModel(callbacks);
- }
- ArrayList<WidgetItem> widgets = mBgWidgetsModel.update(
- mApp.getContext(), packageUser);
- bindWidgetsModel(callbacks);
-
- // update the Widget entries inside DB on the worker thread.
- mApp.getWidgetCache().removeObsoletePreviews(widgets, packageUser);
+ public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) {
+ dataModel.widgetsModel.update(app, packageUser);
+ bindUpdatedWidgets(dataModel);
}
});
}
@@ -1925,15 +1510,6 @@
}
/**
- * @return {@link FolderInfo} if its already loaded.
- */
- public FolderInfo findFolderById(Long folderId) {
- synchronized (sBgDataModel) {
- return sBgDataModel.folders.get(folderId);
- }
- }
-
- /**
* @return the looper for the worker thread which can be used to start background tasks.
*/
public static Looper getWorkerLooper() {
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 61c9707..ffda67c 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -110,6 +110,8 @@
// An intent extra to indicate the horizontal scroll of the wallpaper.
public static final String EXTRA_WALLPAPER_OFFSET = "com.android.launcher3.WALLPAPER_OFFSET";
+ public static final int COLOR_EXTRACTION_JOB_ID = 1;
+
// These values are same as that in {@link AsyncTask}.
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
diff --git a/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java b/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java
index 5a0e78b..21d5b27 100644
--- a/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java
+++ b/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java
@@ -23,6 +23,7 @@
import android.support.v4.graphics.ColorUtils;
import android.util.Log;
import android.util.Pair;
+import android.util.Range;
import android.util.SparseIntArray;
import com.android.launcher3.R;
@@ -51,16 +52,18 @@
private static final float FIT_WEIGHT_S = 1.0f;
private static final float FIT_WEIGHT_L = 10.0f;
+ // When extracting the main color, only consider colors
+ // present in at least MIN_COLOR_OCCURRENCE of the image
private static final float MIN_COLOR_OCCURRENCE = 0.1f;
- private static final float MIN_LUMINOSITY = 0.5f;
- public ColorExtractionAlgorithm() {
- }
+ // Temporary variable to avoid allocations
+ private final float[] mTmpHSL = new float[3];
public @Nullable Pair<Integer, Integer> extractInto(WallpaperColorsCompat wallpaperColors) {
if (wallpaperColors == null) {
return null;
}
+
SparseIntArray colorsArray = wallpaperColors.getColors();
if (colorsArray.size() == 0) {
return null;
@@ -71,13 +74,12 @@
// and replaces the original palette
List<Pair<Integer, Integer>> colors = new ArrayList<>(colorsArray.size());
- for (int i = colorsArray.size() - 1; i >= 0; i --) {
+ 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(colors);
-
// Calculate total
int total = 0;
for (Pair<Integer, Integer> weightedColor : colors) {
@@ -96,53 +98,80 @@
int colorValue = weightedColor.first;
ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue),
Color.blue(colorValue), hsl);
- if (hsl[2] > MIN_LUMINOSITY) {
+
+ // Stop when we find a color that meets our criteria
+ if (!isBlacklisted(hsl)) {
bestColor = weightedColor;
+ break;
}
}
- // Fallback to first color
+ // Fail if not found
if (bestColor == null) {
- bestColor = colors.get(0);
+ return null;
}
int colorValue = bestColor.first;
ColorUtils.RGBToHSL(Color.red(colorValue), Color.green(colorValue), Color.blue(colorValue),
hsl);
- hsl[0] /= 360.0f; // normalize
- // TODO, we're finding a tonal palette for a hue, not all components
+ // The Android HSL definition requires the hue to go from 0 to 360 but
+ // the Material Tonal Palette defines hues from 0 to 1.
+ hsl[0] /= 360f;
+
+ // Find the palette that contains the closest color
TonalPalette palette = findTonalPalette(hsl[0]);
- // 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 null;
}
+ // Figure out what's the main color index in the optimal palette
int fitIndex = bestFit(palette, hsl[0], hsl[1], hsl[2]);
if (fitIndex == -1) {
Log.w(TAG, "Could not find best fit!");
return null;
}
+
+ // Generate the 10 colors palette by offsetting each one of them
float[] h = fit(palette.h, hsl[0], fitIndex,
Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY);
float[] s = fit(palette.s, hsl[1], fitIndex, 0.0f, 1.0f);
float[] l = fit(palette.l, hsl[2], fitIndex, 0.0f, 1.0f);
+ final int textInversionIndex = h.length - 3;
- hsl[0] = fract(h[0]) * 360.0f;
- hsl[1] = s[0];
- hsl[2] = l[0];
- int mainColor = ColorUtils.HSLToColor(hsl);
+ // best fit + a 2 colors offset
+ int primaryIndex = fitIndex;
+ int secondaryIndex = primaryIndex + (primaryIndex >= 2 ? -2 : 2);
+ int mainColor = getColorInt(primaryIndex, h, s, l);
+ int secondaryColor = getColorInt(secondaryIndex, h, s, l);
- hsl[0] = fract(h[1]) * 360.0f;
- hsl[1] = s[1];
- hsl[2] = l[1];
- int secondaryColor = ColorUtils.HSLToColor(hsl);
return new Pair<>(mainColor, secondaryColor);
}
+ private int getColorInt(int fitIndex, float[] h, float[] s, float[] l) {
+ mTmpHSL[0] = fract(h[fitIndex]) * 360.0f;
+ mTmpHSL[1] = s[fitIndex];
+ mTmpHSL[2] = l[fitIndex];
+ return ColorUtils.HSLToColor(mTmpHSL);
+ }
+
+ /**
+ * Checks if a given color exists in the blacklist
+ * @param hsl float array with 3 components (H 0..360, S 0..1 and L 0..1)
+ * @return true if color should be avoided
+ */
+ private boolean isBlacklisted(float[] hsl) {
+ for (ColorRange badRange: BLACKLISTED_COLORS) {
+ if (badRange.containsColor(hsl[0], hsl[1], hsl[2])) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private static void populationSort(@NonNull List<Pair<Integer, Integer>> wallpaperColors) {
Collections.sort(wallpaperColors, new Comparator<Pair<Integer, Integer>>() {
@Override
@@ -160,7 +189,7 @@
* @param index which index to calculate the delta against
* @param min minimum accepted value (clamp)
* @param max maximum accepted value (clamp)
- * @return
+ * @return new shifted palette
*/
private static float[] fit(float[] data, float v, int index, float min, float max) {
float[] fitData = new float[data.length];
@@ -272,44 +301,460 @@
// Data definition of Material Design tonal palettes
// When the sort type is set to TONAL, these palettes are used to find
- // a best fist. Each palette is defined as 10 HSL colors
+ // a best fit. Each palette is defined as 22 HSL colors
private static final TonalPalette[] TONAL_PALETTES = {
- // Orange
new TonalPalette(
- new float[] { 0.028f, 0.042f, 0.053f, 0.061f, 0.078f, 0.1f, 0.111f, 0.111f, 0.111f, 0.111f },
- new float[] { 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f },
- new float[] { 0.5f, 0.53f, 0.54f, 0.55f, 0.535f, 0.52f, 0.5f, 0.63f, 0.75f, 0.85f }
+ new float[]{0.991f, 0.9833333333333333f, 0f, 0f, 0f, 0.01134380453752181f,
+ 0.015625000000000003f, 0.024193548387096798f, 0.027397260273972573f,
+ 0.017543859649122865f},
+ new float[]{1f, 1f, 1f, 1f, 0.8434782608695652f, 1f, 1f, 1f, 1f, 1f},
+ new float[]{0.2f, 0.27450980392156865f, 0.34901960784313724f,
+ 0.4235294117647059f, 0.5490196078431373f, 0.6254901960784314f,
+ 0.6862745098039216f, 0.7568627450980392f, 0.8568627450980393f,
+ 0.9254901960784314f}
),
- // Yellow
new TonalPalette(
- new float[] { 0.111f, 0.111f, 0.125f, 0.133f, 0.139f, 0.147f, 0.156f, 0.156f, 0.156f, 0.156f },
- new float[] { 1f, 0.942f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f },
- new float[] { 0.43f, 0.484f, 0.535f, 0.555f, 0.57f, 0.575f, 0.595f, 0.715f, 0.78f, 0.885f }
+ new float[]{0.6385767790262171f, 0.6301169590643275f, 0.6223958333333334f,
+ 0.6151079136690647f, 0.6065400843881856f, 0.5986964618249534f,
+ 0.5910746812386157f, 0.5833333333333334f, 0.5748031496062993f,
+ 0.5582010582010583f},
+ new float[]{1f, 1f, 0.9014084507042253f, 0.8128654970760234f,
+ 0.7979797979797981f, 0.7816593886462883f, 0.778723404255319f,
+ 1f, 1f, 1f},
+ new float[]{0.17450980392156862f, 0.2235294117647059f, 0.2784313725490196f,
+ 0.3352941176470588f, 0.388235294117647f, 0.44901960784313727f,
+ 0.5392156862745098f, 0.6509803921568628f, 0.7509803921568627f,
+ 0.8764705882352941f}
),
- // Green
new TonalPalette(
- new float[] { 0.325f, 0.336f, 0.353f, 0.353f, 0.356f, 0.356f, 0.356f, 0.356f, 0.356f, 0.356f },
- new float[] { 1f, 1f, 0.852f, 0.754f, 0.639f, 0.667f, 0.379f, 0.542f, 1f, 1f },
- new float[] { 0.06f, 0.1f, 0.151f, 0.194f, 0.25f, 0.312f, 0.486f, 0.651f, 0.825f, 0.885f }
+ new float[]{0.5669934640522876f, 0.5748031496062993f,
+ 0.5595238095238095f, 0.5473118279569893f, 0.5393258426966292f,
+ 0.5315955766192734f, 0.524031007751938f, 0.5154711673699016f,
+ 0.508080808080808f, 0.5f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 1f, 0.8847736625514403f, 1f, 1f, 1f},
+ new float[]{0.2f, 0.24901960784313726f, 0.27450980392156865f,
+ 0.30392156862745096f, 0.34901960784313724f, 0.4137254901960784f,
+ 0.47647058823529415f, 0.5352941176470588f, 0.6764705882352942f, 0.8f}
),
- // Blue
new TonalPalette(
- new float[] { 0.631f, 0.603f, 0.592f, 0.586f, 0.572f, 0.544f, 0.519f, 0.519f, 0.519f, 0.519f },
- new float[] { 0.852f, 1f, 0.887f, 0.852f, 0.871f, 0.907f, 0.949f, 0.934f, 0.903f, 0.815f },
- new float[] { 0.34f, 0.38f, 0.482f, 0.497f, 0.536f, 0.571f, 0.608f, 0.696f, 0.794f, 0.892f }
+ new float[]{0.5082304526748972f, 0.5069444444444444f, 0.5f, 0.5f,
+ 0.5f, 0.48724954462659376f, 0.4800347222222222f,
+ 0.4755134281200632f, 0.4724409448818897f, 0.4671052631578947f},
+ new float[]{1f, 0.8888888888888887f, 0.9242424242424242f, 1f, 1f,
+ 0.8133333333333332f, 0.7868852459016393f, 1f, 1f, 1f},
+ new float[]{0.1588235294117647f, 0.21176470588235297f,
+ 0.25882352941176473f, 0.3f, 0.34901960784313724f,
+ 0.44117647058823534f, 0.5215686274509804f, 0.5862745098039216f,
+ 0.7509803921568627f, 0.8509803921568627f}
),
- // Purple
new TonalPalette(
- new float[] { 0.839f, 0.831f, 0.825f, 0.819f, 0.803f, 0.803f, 0.772f, 0.772f, 0.772f, 0.772f },
- new float[] { 1f, 1f, 1f, 1f, 1f, 1f, 0.769f, 0.701f, 0.612f, 0.403f },
- new float[] { 0.125f, 0.15f, 0.2f, 0.245f, 0.31f, 0.36f, 0.567f, 0.666f, 0.743f, 0.833f }
+ new float[]{0.3333333333333333f, 0.3333333333333333f,
+ 0.34006734006734f, 0.34006734006734f, 0.34006734006734f,
+ 0.34259259259259256f, 0.3475783475783476f, 0.34767025089605735f,
+ 0.3467741935483871f, 0.3703703703703704f},
+ new float[]{0.6703296703296703f, 0.728813559322034f,
+ 0.5657142857142856f, 0.5076923076923077f, 0.3944223107569721f,
+ 0.6206896551724138f, 0.8931297709923666f, 1f, 1f, 1f},
+ new float[]{0.1784313725490196f, 0.23137254901960785f,
+ 0.3431372549019608f, 0.38235294117647056f, 0.49215686274509807f,
+ 0.6588235294117647f, 0.7431372549019608f, 0.8176470588235294f,
+ 0.8784313725490196f, 0.9294117647058824f}
),
- // Red
new TonalPalette(
- new float[] { 0.964f, 0.975f, 0.975f, 0.975f, 0.972f, 0.992f, 1.003f, 1.011f, 1.011f, 1.011f },
- new float[] { 0.869f, 0.802f, 0.739f, 0.903f, 1f, 1f, 1f, 1f, 1f, 1f },
- new float[] { 0.241f, 0.316f, 0.46f, 0.586f, 0.655f, 0.7f, 0.75f, 0.8f, 0.84f, 0.88f }
+ new float[]{0.162280701754386f, 0.15032679738562088f,
+ 0.15879265091863518f, 0.16236559139784948f, 0.17443868739205526f,
+ 0.17824074074074076f, 0.18674698795180725f,
+ 0.18692449355432778f, 0.1946778711484594f, 0.18604651162790695f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f},
+ new float[]{0.14901960784313725f, 0.2f, 0.24901960784313726f,
+ 0.30392156862745096f, 0.3784313725490196f, 0.4235294117647059f,
+ 0.48823529411764705f, 0.6450980392156863f, 0.7666666666666666f,
+ 0.8313725490196078f}
+ ),
+ new TonalPalette(
+ new float[]{0.10619469026548674f, 0.11924686192468618f,
+ 0.13046448087431692f, 0.14248366013071895f, 0.1506024096385542f,
+ 0.16220238095238093f, 0.16666666666666666f,
+ 0.16666666666666666f, 0.162280701754386f, 0.15686274509803924f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f},
+ new float[]{0.44313725490196076f, 0.46862745098039216f,
+ 0.47843137254901963f, 0.5f, 0.5117647058823529f,
+ 0.5607843137254902f, 0.6509803921568628f, 0.7509803921568627f,
+ 0.8509803921568627f, 0.9f}
+ ),
+ new TonalPalette(
+ new float[]{0.03561253561253561f, 0.05098039215686275f,
+ 0.07516339869281045f, 0.09477124183006536f, 0.1150326797385621f,
+ 0.134640522875817f, 0.14640522875816991f, 0.1582397003745319f,
+ 0.15773809523809523f, 0.15359477124183002f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f},
+ new float[]{0.4588235294117647f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
+ 0.5f, 0.6509803921568628f, 0.7803921568627451f, 0.9f}
+ ),
+ new TonalPalette(
+ new float[]{0.9596491228070175f, 0.9593837535014005f,
+ 0.9514767932489452f, 0.943859649122807f, 0.9396825396825397f,
+ 0.9395424836601307f, 0.9393939393939394f, 0.9362745098039216f,
+ 0.9754098360655739f, 0.9824561403508771f},
+ new float[]{0.84070796460177f, 0.8206896551724138f,
+ 0.7979797979797981f, 0.7661290322580644f, 0.9051724137931036f,
+ 1f, 1f, 1f, 1f, 1f},
+ new float[]{0.22156862745098038f, 0.2843137254901961f,
+ 0.388235294117647f, 0.48627450980392156f, 0.5450980392156863f,
+ 0.6f, 0.6764705882352942f, 0.8f, 0.8803921568627451f,
+ 0.9254901960784314f}
+ ),
+ new TonalPalette(
+ new float[]{0.841025641025641f, 0.8333333333333334f,
+ 0.8285256410256411f, 0.821522309711286f, 0.8083333333333333f,
+ 0.8046594982078853f, 0.8005822416302766f, 0.7842377260981912f,
+ 0.7771084337349398f, 0.7747747747747749f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 1f, 1f,
+ 0.737142857142857f, 0.6434108527131781f, 0.46835443037974644f},
+ new float[]{0.12745098039215685f, 0.15490196078431373f,
+ 0.20392156862745098f, 0.24901960784313726f, 0.3137254901960784f,
+ 0.36470588235294116f, 0.44901960784313727f,
+ 0.6568627450980392f, 0.7470588235294118f, 0.8450980392156863f}
+ ),
+ new TonalPalette(
+ new float[]{0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f},
+ new float[]{0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f},
+ new float[]{0.14901960784313725f, 0.2f, 0.2980392156862745f, 0.4f,
+ 0.4980392156862745f, 0.6196078431372549f, 0.7176470588235294f,
+ 0.8196078431372549f, 0.9176470588235294f, 0.9490196078431372f}
+ ),
+ new TonalPalette(
+ new float[]{0.955952380952381f, 0.9681069958847737f,
+ 0.9760479041916167f, 0.9873563218390804f, 0f, 0f,
+ 0.009057971014492771f, 0.026748971193415648f,
+ 0.041666666666666616f, 0.05303030303030304f},
+ new float[]{1f, 0.8350515463917526f, 0.6929460580912863f,
+ 0.6387665198237885f, 0.6914893617021276f, 0.7583892617449666f,
+ 0.8070175438596495f, 0.9310344827586209f, 1f, 1f},
+ new float[]{0.27450980392156865f, 0.3803921568627451f,
+ 0.4725490196078432f, 0.5549019607843138f, 0.6313725490196078f,
+ 0.707843137254902f, 0.7764705882352941f, 0.8294117647058823f,
+ 0.9058823529411765f, 0.9568627450980391f}
+ ),
+ new TonalPalette(
+ new float[]{0.7514619883040936f, 0.7679738562091503f,
+ 0.7802083333333333f, 0.7844311377245509f, 0.796875f,
+ 0.8165618448637316f, 0.8487179487179487f, 0.8582375478927203f,
+ 0.8562091503267975f, 0.8666666666666667f},
+ new float[]{1f, 1f, 0.8163265306122449f, 0.6653386454183268f,
+ 0.7547169811320753f, 0.929824561403509f, 0.9558823529411766f,
+ 0.9560439560439562f, 1f, 1f},
+ new float[]{0.2235294117647059f, 0.3f, 0.38431372549019605f,
+ 0.492156862745098f, 0.5843137254901961f, 0.6647058823529411f,
+ 0.7333333333333334f, 0.8215686274509804f, 0.9f,
+ 0.9411764705882353f}
+ ),
+ new TonalPalette(
+ new float[]{0.6666666666666666f, 0.6666666666666666f,
+ 0.6666666666666666f, 0.6666666666666666f, 0.6666666666666666f,
+ 0.6666666666666666f, 0.6666666666666666f, 0.6666666666666666f,
+ 0.6666666666666666f, 0.6666666666666666f},
+ new float[]{0.24590163934426232f, 0.17880794701986752f,
+ 0.14606741573033713f, 0.13761467889908252f, 0.14893617021276592f,
+ 0.16756756756756758f, 0.20312500000000017f,
+ 0.26086956521739135f, 0.29999999999999966f, 0.5000000000000004f},
+ new float[]{0.2392156862745098f, 0.296078431372549f,
+ 0.34901960784313724f, 0.4274509803921569f, 0.5392156862745098f,
+ 0.6372549019607843f, 0.7490196078431373f, 0.8196078431372549f,
+ 0.8823529411764706f, 0.9372549019607843f}
+ ),
+ new TonalPalette(
+ new float[]{0.9678571428571429f, 0.9944812362030905f, 0f, 0f,
+ 0.0047348484848484815f, 0.00316455696202532f, 0f,
+ 0.9980392156862745f, 0.9814814814814816f, 0.9722222222222221f},
+ new float[]{1f, 0.7023255813953488f, 0.6638655462184874f,
+ 0.6521739130434782f, 0.7719298245614035f, 0.8315789473684211f,
+ 0.6867469879518071f, 0.7264957264957265f, 0.8181818181818182f,
+ 0.8181818181818189f},
+ new float[]{0.27450980392156865f, 0.4215686274509804f,
+ 0.4666666666666667f, 0.503921568627451f, 0.5529411764705883f,
+ 0.6274509803921569f, 0.6745098039215687f, 0.7705882352941176f,
+ 0.892156862745098f, 0.9568627450980391f}
+ ),
+ new TonalPalette(
+ new float[]{0.9052287581699346f, 0.9112021857923498f, 0.9270152505446624f,
+ 0.9343137254901961f, 0.9391534391534391f, 0.9437984496124031f,
+ 0.943661971830986f, 0.9438943894389439f, 0.9426229508196722f,
+ 0.9444444444444444f},
+ new float[]{1f, 0.8133333333333332f, 0.7927461139896375f, 0.7798165137614679f,
+ 0.7777777777777779f, 0.8190476190476191f, 0.8255813953488372f,
+ 0.8211382113821142f, 0.8133333333333336f, 0.8000000000000006f},
+ new float[]{0.2f, 0.29411764705882354f, 0.3784313725490196f,
+ 0.42745098039215684f, 0.4764705882352941f, 0.5882352941176471f,
+ 0.6627450980392157f, 0.7588235294117647f, 0.8529411764705882f,
+ 0.9411764705882353f}
+ ),
+ new TonalPalette(
+ new float[]{0.6884057971014492f, 0.6974789915966387f, 0.7079889807162534f,
+ 0.7154471544715447f, 0.7217741935483872f, 0.7274143302180687f,
+ 0.7272727272727273f, 0.7258064516129031f, 0.7252252252252251f,
+ 0.7333333333333333f},
+ new float[]{0.8214285714285715f, 0.6878612716763006f, 0.6080402010050251f,
+ 0.5774647887323943f, 0.5391304347826086f, 0.46724890829694316f,
+ 0.4680851063829788f, 0.462686567164179f, 0.45679012345678977f,
+ 0.4545454545454551f},
+ new float[]{0.2196078431372549f, 0.33921568627450976f, 0.39019607843137255f,
+ 0.4176470588235294f, 0.45098039215686275f,
+ 0.5509803921568628f, 0.6313725490196078f, 0.7372549019607844f,
+ 0.8411764705882353f, 0.9352941176470588f}
+ ),
+ new TonalPalette(
+ new float[]{0.6470588235294118f, 0.6516666666666667f, 0.6464174454828661f,
+ 0.6441441441441442f, 0.6432748538011696f, 0.6416666666666667f,
+ 0.6402439024390243f, 0.6412429378531074f, 0.6435185185185186f,
+ 0.6428571428571429f},
+ new float[]{0.8095238095238095f, 0.6578947368421053f, 0.5721925133689839f,
+ 0.5362318840579711f, 0.5f, 0.4424778761061947f, 0.44086021505376327f,
+ 0.44360902255639095f,
+ 0.4499999999999997f, 0.4375000000000006f},
+ new float[]{0.16470588235294117f, 0.2980392156862745f, 0.36666666666666664f,
+ 0.40588235294117647f, 0.44705882352941173f,
+ 0.5568627450980392f, 0.6352941176470588f, 0.7392156862745098f,
+ 0.8431372549019608f, 0.9372549019607843f}
+ ),
+ new TonalPalette(
+ new float[]{0.46732026143790845f, 0.4718614718614719f, 0.4793650793650794f,
+ 0.48071625344352614f, 0.4829683698296837f, 0.484375f,
+ 0.4841269841269842f, 0.48444444444444457f, 0.48518518518518516f,
+ 0.4907407407407408f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 0.6274509803921569f, 0.41832669322709176f,
+ 0.41899441340782106f, 0.4128440366972478f,
+ 0.4090909090909088f},
+ new float[]{0.1f, 0.15098039215686274f, 0.20588235294117646f,
+ 0.2372549019607843f, 0.26862745098039215f, 0.4f, 0.5078431372549019f,
+ 0.6490196078431372f, 0.7862745098039216f, 0.9137254901960784f}
+ ),
+ new TonalPalette(
+ new float[]{0.5444444444444444f, 0.5555555555555556f, 0.5555555555555556f,
+ 0.553763440860215f, 0.5526315789473684f, 0.5555555555555556f,
+ 0.5555555555555555f, 0.5555555555555556f, 0.5512820512820514f,
+ 0.5666666666666667f},
+ new float[]{0.24590163934426232f, 0.19148936170212766f, 0.1791044776119403f,
+ 0.18343195266272191f, 0.18446601941747576f,
+ 0.1538461538461539f, 0.15625000000000003f, 0.15328467153284678f,
+ 0.15662650602409653f, 0.151515151515151f},
+ new float[]{0.1196078431372549f, 0.1843137254901961f, 0.2627450980392157f,
+ 0.33137254901960783f, 0.403921568627451f, 0.5411764705882354f,
+ 0.6235294117647059f, 0.7313725490196079f, 0.8372549019607843f,
+ 0.9352941176470588f}
+ ),
+ new TonalPalette(
+ new float[]{0.022222222222222223f, 0.02469135802469136f, 0.031249999999999997f,
+ 0.03947368421052631f, 0.04166666666666668f,
+ 0.043650793650793655f, 0.04411764705882352f, 0.04166666666666652f,
+ 0.04444444444444459f, 0.05555555555555529f},
+ new float[]{0.33333333333333337f, 0.2783505154639175f, 0.2580645161290323f,
+ 0.25675675675675674f, 0.2528735632183908f, 0.17500000000000002f,
+ 0.15315315315315312f, 0.15189873417721522f,
+ 0.15789473684210534f, 0.15789473684210542f},
+ new float[]{0.08823529411764705f, 0.19019607843137254f, 0.2431372549019608f,
+ 0.2901960784313725f, 0.3411764705882353f, 0.47058823529411764f,
+ 0.5647058823529412f, 0.6901960784313725f, 0.8137254901960784f,
+ 0.9254901960784314f}
+ ),
+ new TonalPalette(
+ new float[]{0.050884955752212385f, 0.07254901960784313f, 0.0934640522875817f,
+ 0.10457516339869281f, 0.11699346405228758f,
+ 0.1255813953488372f, 0.1268939393939394f, 0.12533333333333332f,
+ 0.12500000000000003f, 0.12777777777777777f},
+ new float[]{1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f},
+ new float[]{0.44313725490196076f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5784313725490196f,
+ 0.6549019607843137f, 0.7549019607843137f, 0.8509803921568627f,
+ 0.9411764705882353f}
)
};
+ @SuppressWarnings("WeakerAccess")
+ static final ColorRange[] BLACKLISTED_COLORS = new ColorRange[] {
+
+ // Red
+ new ColorRange(
+ new Range<>(0f, 20f) /* H */,
+ new Range<>(0.7f, 1f) /* S */,
+ new Range<>(0.21f, 0.79f)) /* L */,
+ new ColorRange(
+ new Range<>(0f, 20f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.355f, 0.653f)),
+
+ // Red Orange
+ new ColorRange(
+ new Range<>(20f, 40f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.28f, 0.643f)),
+ new ColorRange(
+ new Range<>(20f, 40f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.414f, 0.561f)),
+ new ColorRange(
+ new Range<>(20f, 40f),
+ new Range<>(0f, 3f),
+ new Range<>(0.343f, 0.584f)),
+
+ // Orange
+ new ColorRange(
+ new Range<>(40f, 60f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.173f, 0.349f)),
+ new ColorRange(
+ new Range<>(40f, 60f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.233f, 0.427f)),
+ new ColorRange(
+ new Range<>(40f, 60f),
+ new Range<>(0f, 0.3f),
+ new Range<>(0.231f, 0.484f)),
+
+ // Yellow 60
+ new ColorRange(
+ new Range<>(60f, 80f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.488f, 0.737f)),
+ new ColorRange(
+ new Range<>(60f, 80f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.673f, 0.837f)),
+
+ // Yellow Green 80
+ new ColorRange(
+ new Range<>(80f, 100f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.469f, 0.61f)),
+
+ // Yellow green 100
+ new ColorRange(
+ new Range<>(100f, 120f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.388f, 0.612f)),
+ new ColorRange(
+ new Range<>(100f, 120f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.424f, 0.541f)),
+
+ // Green
+ new ColorRange(
+ new Range<>(120f, 140f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.375f, 0.52f)),
+ new ColorRange(
+ new Range<>(120f, 140f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.435f, 0.524f)),
+
+ // Green Blue 140
+ new ColorRange(
+ new Range<>(140f, 160f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.496f, 0.641f)),
+
+ // Seafoam
+ new ColorRange(
+ new Range<>(160f, 180f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.496f, 0.567f)),
+
+ // Cyan
+ new ColorRange(
+ new Range<>(180f, 200f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.52f, 0.729f)),
+
+ // Blue
+ new ColorRange(
+ new Range<>(220f, 240f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.396f, 0.571f)),
+ new ColorRange(
+ new Range<>(220f, 240f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.425f, 0.551f)),
+
+ // Blue Purple 240
+ new ColorRange(
+ new Range<>(240f, 260f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.418f, 0.639f)),
+ new ColorRange(
+ new Range<>(220f, 240f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.441f, 0.576f)),
+
+ // Blue Purple 260
+ new ColorRange(
+ new Range<>(260f, 280f),
+ new Range<>(0.3f, 1f), // Bigger range
+ new Range<>(0.461f, 0.553f)),
+
+ // Fuchsia
+ new ColorRange(
+ new Range<>(300f, 320f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.484f, 0.588f)),
+ new ColorRange(
+ new Range<>(300f, 320f),
+ new Range<>(0.3f, 0.7f),
+ new Range<>(0.48f, 0.592f)),
+
+ // Pink
+ new ColorRange(
+ new Range<>(320f, 340f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.466f, 0.629f)),
+
+ // Soft red
+ new ColorRange(
+ new Range<>(340f, 360f),
+ new Range<>(0.7f, 1f),
+ new Range<>(0.437f, 0.596f))
+ };
+
+ /**
+ * Representation of an HSL color range.
+ * <ul>
+ * <li>hsl[0] is Hue [0 .. 360)</li>
+ * <li>hsl[1] is Saturation [0...1]</li>
+ * <li>hsl[2] is Lightness [0...1]</li>
+ * </ul>
+ */
+ static class ColorRange {
+ private Range<Float> mHue;
+ private Range<Float> mSaturation;
+ private Range<Float> mLightness;
+
+ ColorRange(Range<Float> hue, Range<Float> saturation, Range<Float> lightness) {
+ mHue = hue;
+ mSaturation = saturation;
+ mLightness = lightness;
+ }
+
+ boolean containsColor(float h, float s, float l) {
+ if (!mHue.contains(h)) {
+ return false;
+ } else if (!mSaturation.contains(s)) {
+ return false;
+ } else if (!mLightness.contains(l)) {
+ return false;
+ }
+ return true;
+ }
+
+ float[] getCenter() {
+ return new float[] {
+ mHue.getLower() + (mHue.getUpper() - mHue.getLower()) / 2f,
+ mSaturation.getLower() + (mSaturation.getUpper() - mSaturation.getLower()) / 2f,
+ mLightness.getLower() + (mLightness.getUpper() - mLightness.getLower()) / 2f
+ };
+ }
+
+ @Override
+ public String toString() {
+ return String.format("H: %s, S: %s, L %s", mHue, mSaturation, mLightness);
+ }
+ }
+
}
diff --git a/src/com/android/launcher3/dynamicui/ColorExtractionService.java b/src/com/android/launcher3/dynamicui/ColorExtractionService.java
index 06a4dab..b9dd3b5 100644
--- a/src/com/android/launcher3/dynamicui/ColorExtractionService.java
+++ b/src/com/android/launcher3/dynamicui/ColorExtractionService.java
@@ -17,9 +17,9 @@
package com.android.launcher3.dynamicui;
import android.annotation.TargetApi;
-import android.app.IntentService;
import android.app.WallpaperManager;
-import android.content.Intent;
+import android.app.job.JobParameters;
+import android.app.job.JobService;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapRegionDecoder;
@@ -27,6 +27,8 @@
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
import android.os.ParcelFileDescriptor;
import android.support.v7.graphics.Palette;
import android.util.Log;
@@ -42,53 +44,84 @@
/**
* Extracts colors from the wallpaper, and saves results to {@link LauncherProvider}.
*/
-public class ColorExtractionService extends IntentService {
+public class ColorExtractionService extends JobService {
private static final String TAG = "ColorExtractionService";
+ private static final boolean DEBUG = false;
/** The fraction of the wallpaper to extract colors for use on the hotseat. */
private static final float HOTSEAT_FRACTION = 1f / 4;
- public ColorExtractionService() {
- super("ColorExtractionService");
+ private HandlerThread mWorkerThread;
+ private Handler mWorkerHandler;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mWorkerThread = new HandlerThread("ColorExtractionService");
+ mWorkerThread.start();
+ mWorkerHandler = new Handler(mWorkerThread.getLooper());
}
@Override
- protected void onHandleIntent(Intent intent) {
- WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
- int wallpaperId = ExtractionUtils.getWallpaperId(wallpaperManager);
+ public void onDestroy() {
+ super.onDestroy();
+ mWorkerThread.quit();
+ }
- ExtractedColors extractedColors = new ExtractedColors();
- if (wallpaperManager.getWallpaperInfo() != null) {
- // We can't extract colors from live wallpapers, so just use the default color always.
- extractedColors.updateHotseatPalette(null);
+ @Override
+ public boolean onStartJob(final JobParameters jobParameters) {
+ if (DEBUG) Log.d(TAG, "onStartJob");
+ mWorkerHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ WallpaperManager wallpaperManager = WallpaperManager.getInstance(
+ ColorExtractionService.this);
+ int wallpaperId = ExtractionUtils.getWallpaperId(wallpaperManager);
- if (FeatureFlags.QSB_IN_HOTSEAT || FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
- extractedColors.updateWallpaperThemePalette(null);
+ ExtractedColors extractedColors = new ExtractedColors();
+ if (wallpaperManager.getWallpaperInfo() != null) {
+ // We can't extract colors from live wallpapers; always use the default color.
+ extractedColors.updateHotseatPalette(null);
+
+ if (FeatureFlags.QSB_IN_HOTSEAT || FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
+ extractedColors.updateWallpaperThemePalette(null);
+ }
+ } else {
+ // We extract colors for the hotseat and status bar separately,
+ // since they only consider part of the wallpaper.
+ extractedColors.updateHotseatPalette(getHotseatPalette());
+
+ if (FeatureFlags.LIGHT_STATUS_BAR) {
+ extractedColors.updateStatusBarPalette(getStatusBarPalette());
+ }
+
+ if (FeatureFlags.QSB_IN_HOTSEAT || FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
+ extractedColors.updateWallpaperThemePalette(getWallpaperPalette());
+ }
+ }
+
+ // Save the extracted colors and wallpaper id to LauncherProvider.
+ String colorsString = extractedColors.encodeAsString();
+ Bundle extras = new Bundle();
+ extras.putInt(LauncherSettings.Settings.EXTRA_WALLPAPER_ID, wallpaperId);
+ extras.putString(LauncherSettings.Settings.EXTRA_EXTRACTED_COLORS, colorsString);
+ getContentResolver().call(
+ LauncherSettings.Settings.CONTENT_URI,
+ LauncherSettings.Settings.METHOD_SET_EXTRACTED_COLORS_AND_WALLPAPER_ID,
+ null, extras);
+ jobFinished(jobParameters, false /* needsReschedule */);
+ if (DEBUG) Log.d(TAG, "job finished!");
}
- } else {
- // We extract colors for the hotseat and status bar separately,
- // since they only consider part of the wallpaper.
- extractedColors.updateHotseatPalette(getHotseatPalette());
+ });
+ return true;
+ }
- if (FeatureFlags.LIGHT_STATUS_BAR) {
- extractedColors.updateStatusBarPalette(getStatusBarPalette());
- }
-
- if (FeatureFlags.QSB_IN_HOTSEAT || FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
- extractedColors.updateWallpaperThemePalette(getWallpaperPalette());
- }
- }
-
- // Save the extracted colors and wallpaper id to LauncherProvider.
- String colorsString = extractedColors.encodeAsString();
- Bundle extras = new Bundle();
- extras.putInt(LauncherSettings.Settings.EXTRA_WALLPAPER_ID, wallpaperId);
- extras.putString(LauncherSettings.Settings.EXTRA_EXTRACTED_COLORS, colorsString);
- getContentResolver().call(
- LauncherSettings.Settings.CONTENT_URI,
- LauncherSettings.Settings.METHOD_SET_EXTRACTED_COLORS_AND_WALLPAPER_ID,
- null, extras);
+ @Override
+ public boolean onStopJob(JobParameters jobParameters) {
+ if (DEBUG) Log.d(TAG, "onStopJob");
+ mWorkerHandler.removeCallbacksAndMessages(null);
+ return true;
}
@TargetApi(Build.VERSION_CODES.N)
diff --git a/src/com/android/launcher3/dynamicui/ExtractionUtils.java b/src/com/android/launcher3/dynamicui/ExtractionUtils.java
index 1cf5d55..92cb5dc 100644
--- a/src/com/android/launcher3/dynamicui/ExtractionUtils.java
+++ b/src/com/android/launcher3/dynamicui/ExtractionUtils.java
@@ -18,8 +18,10 @@
import android.annotation.TargetApi;
import android.app.WallpaperManager;
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Build;
@@ -58,7 +60,11 @@
/** Starts the {@link ColorExtractionService} without checking the wallpaper id */
public static void startColorExtractionService(Context context) {
- context.startService(new Intent(context, ColorExtractionService.class));
+ JobScheduler jobScheduler = (JobScheduler) context.getSystemService(
+ Context.JOB_SCHEDULER_SERVICE);
+ jobScheduler.schedule(new JobInfo.Builder(Utilities.COLOR_EXTRACTION_JOB_ID,
+ new ComponentName(context, ColorExtractionService.class))
+ .setMinimumLatency(0).build());
}
private static boolean hasWallpaperIdChanged(Context context) {
diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java
index be93be4..d9c5143 100644
--- a/src/com/android/launcher3/model/BgDataModel.java
+++ b/src/com/android/launcher3/model/BgDataModel.java
@@ -91,11 +91,21 @@
public final Map<ShortcutKey, MutableInt> pinnedShortcutCounts = new HashMap<>();
/**
+ * True if the launcher has permission to access deep shortcuts.
+ */
+ public boolean hasShortcutHostPermission;
+
+ /**
* Maps all launcher activities to the id's of their shortcuts (if they have any).
*/
public final MultiHashMap<ComponentKey, String> deepShortcutMap = new MultiHashMap<>();
/**
+ * Entire list of widgets.
+ */
+ public final WidgetsModel widgetsModel = new WidgetsModel();
+
+ /**
* Clears all the data
*/
public synchronized void clear() {
diff --git a/src/com/android/launcher3/model/ExtendedModelTask.java b/src/com/android/launcher3/model/ExtendedModelTask.java
index 0541966..080aaf5 100644
--- a/src/com/android/launcher3/model/ExtendedModelTask.java
+++ b/src/com/android/launcher3/model/ExtendedModelTask.java
@@ -59,4 +59,15 @@
}
});
}
+
+ public void bindUpdatedWidgets(BgDataModel dataModel) {
+ final MultiHashMap<PackageItemInfo, WidgetItem> widgets
+ = dataModel.widgetsModel.getWidgetsMap();
+ scheduleCallbackTask(new CallbackTask() {
+ @Override
+ public void execute(Callbacks callbacks) {
+ callbacks.bindAllWidgets(widgets);
+ }
+ });
+ }
}
diff --git a/src/com/android/launcher3/model/LoaderResults.java b/src/com/android/launcher3/model/LoaderResults.java
new file mode 100644
index 0000000..28df64d
--- /dev/null
+++ b/src/com/android/launcher3/model/LoaderResults.java
@@ -0,0 +1,392 @@
+/*
+ * 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.model;
+
+import android.util.Log;
+
+import com.android.launcher3.AllAppsList;
+import com.android.launcher3.AppInfo;
+import com.android.launcher3.InvariantDeviceProfile;
+import com.android.launcher3.ItemInfo;
+import com.android.launcher3.LauncherAppState;
+import com.android.launcher3.LauncherAppWidgetInfo;
+import com.android.launcher3.LauncherModel;
+import com.android.launcher3.LauncherModel.Callbacks;
+import com.android.launcher3.LauncherSettings;
+import com.android.launcher3.MainThreadExecutor;
+import com.android.launcher3.PagedView;
+import com.android.launcher3.Utilities;
+import com.android.launcher3.config.FeatureFlags;
+import com.android.launcher3.util.ComponentKey;
+import com.android.launcher3.util.MultiHashMap;
+import com.android.launcher3.util.ViewOnDrawExecutor;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.concurrent.Executor;
+
+/**
+ * Helper class to handle results of {@link com.android.launcher3.LauncherModel.LoaderTask}.
+ */
+public class LoaderResults {
+
+ private static final String TAG = "LoaderResults";
+ private static final long INVALID_SCREEN_ID = -1L;
+ private static final int ITEMS_CHUNK = 6; // batch size for the workspace icons
+
+ private final Executor mUiExecutor;
+
+ private final LauncherAppState mApp;
+ private final BgDataModel mBgDataModel;
+ private final AllAppsList mBgAllAppsList;
+ private final int mPageToBindFirst;
+
+ private final WeakReference<Callbacks> mCallbacks;
+
+ public LoaderResults(LauncherAppState app, BgDataModel dataModel,
+ AllAppsList allAppsList, int pageToBindFirst, WeakReference<Callbacks> callbacks) {
+ mUiExecutor = new MainThreadExecutor();
+ mApp = app;
+ mBgDataModel = dataModel;
+ mBgAllAppsList = allAppsList;
+ mPageToBindFirst = pageToBindFirst;
+ mCallbacks = callbacks == null ? new WeakReference<Callbacks>(null) : callbacks;
+ }
+
+ /**
+ * Binds all loaded data to actual views on the main thread.
+ */
+ public void bindWorkspace() {
+ Runnable r;
+
+ Callbacks callbacks = mCallbacks.get();
+ // Don't use these two variables in any of the callback runnables.
+ // Otherwise we hold a reference to them.
+ if (callbacks == null) {
+ // This launcher has exited and nobody bothered to tell us. Just bail.
+ Log.w(TAG, "LoaderTask running with no launcher");
+ return;
+ }
+
+ // Save a copy of all the bg-thread collections
+ ArrayList<ItemInfo> workspaceItems = new ArrayList<>();
+ ArrayList<LauncherAppWidgetInfo> appWidgets = new ArrayList<>();
+ final ArrayList<Long> orderedScreenIds = new ArrayList<>();
+
+ synchronized (mBgDataModel) {
+ workspaceItems.addAll(mBgDataModel.workspaceItems);
+ appWidgets.addAll(mBgDataModel.appWidgets);
+ orderedScreenIds.addAll(mBgDataModel.workspaceScreens);
+ }
+
+ final int currentScreen;
+ {
+ int currScreen = mPageToBindFirst != PagedView.INVALID_RESTORE_PAGE
+ ? mPageToBindFirst : callbacks.getCurrentWorkspaceScreen();
+ if (currScreen >= orderedScreenIds.size()) {
+ // There may be no workspace screens (just hotseat items and an empty page).
+ currScreen = PagedView.INVALID_RESTORE_PAGE;
+ }
+ currentScreen = currScreen;
+ }
+ final boolean validFirstPage = currentScreen >= 0;
+ final long currentScreenId =
+ validFirstPage ? orderedScreenIds.get(currentScreen) : INVALID_SCREEN_ID;
+
+ // Separate the items that are on the current screen, and all the other remaining items
+ ArrayList<ItemInfo> currentWorkspaceItems = new ArrayList<>();
+ ArrayList<ItemInfo> otherWorkspaceItems = new ArrayList<>();
+ ArrayList<LauncherAppWidgetInfo> currentAppWidgets = new ArrayList<>();
+ ArrayList<LauncherAppWidgetInfo> otherAppWidgets = new ArrayList<>();
+
+ filterCurrentWorkspaceItems(currentScreenId, workspaceItems, currentWorkspaceItems,
+ otherWorkspaceItems);
+ filterCurrentAppWidgets(currentScreenId, appWidgets, currentAppWidgets,
+ otherAppWidgets);
+ sortWorkspaceItemsSpatially(currentWorkspaceItems);
+ sortWorkspaceItemsSpatially(otherWorkspaceItems);
+
+ // Tell the workspace that we're about to start binding items
+ r = new Runnable() {
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.clearPendingBinds();
+ callbacks.startBinding();
+ }
+ }
+ };
+ mUiExecutor.execute(r);
+
+ // Bind workspace screens
+ mUiExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.bindScreens(orderedScreenIds);
+ }
+ }
+ });
+
+ Executor mainExecutor = mUiExecutor;
+ // Load items on the current page.
+ bindWorkspaceItems(currentWorkspaceItems, currentAppWidgets, mainExecutor);
+
+ // In case of validFirstPage, only bind the first screen, and defer binding the
+ // remaining screens after first onDraw (and an optional the fade animation whichever
+ // happens later).
+ // This ensures that the first screen is immediately visible (eg. during rotation)
+ // In case of !validFirstPage, bind all pages one after other.
+ final Executor deferredExecutor =
+ validFirstPage ? new ViewOnDrawExecutor(mUiExecutor) : mainExecutor;
+
+ mainExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.finishFirstPageBind(
+ validFirstPage ? (ViewOnDrawExecutor) deferredExecutor : null);
+ }
+ }
+ });
+
+ bindWorkspaceItems(otherWorkspaceItems, otherAppWidgets, deferredExecutor);
+
+ // Tell the workspace that we're done binding items
+ r = new Runnable() {
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.finishBindingItems();
+ }
+ }
+ };
+ deferredExecutor.execute(r);
+
+ if (validFirstPage) {
+ r = new Runnable() {
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ // We are loading synchronously, which means, some of the pages will be
+ // bound after first draw. Inform the callbacks that page binding is
+ // not complete, and schedule the remaining pages.
+ if (currentScreen != PagedView.INVALID_RESTORE_PAGE) {
+ callbacks.onPageBoundSynchronously(currentScreen);
+ }
+ callbacks.executeOnNextDraw((ViewOnDrawExecutor) deferredExecutor);
+ }
+ }
+ };
+ mUiExecutor.execute(r);
+ }
+ }
+
+
+ /** Filters the set of items who are directly or indirectly (via another container) on the
+ * specified screen. */
+ private void filterCurrentWorkspaceItems(long currentScreenId,
+ ArrayList<ItemInfo> allWorkspaceItems,
+ ArrayList<ItemInfo> currentScreenItems,
+ ArrayList<ItemInfo> otherScreenItems) {
+ // Purge any null ItemInfos
+ Iterator<ItemInfo> iter = allWorkspaceItems.iterator();
+ while (iter.hasNext()) {
+ ItemInfo i = iter.next();
+ if (i == null) {
+ iter.remove();
+ }
+ }
+
+ // Order the set of items by their containers first, this allows use to walk through the
+ // list sequentially, build up a list of containers that are in the specified screen,
+ // as well as all items in those containers.
+ Set<Long> itemsOnScreen = new HashSet<Long>();
+ Collections.sort(allWorkspaceItems, new Comparator<ItemInfo>() {
+ @Override
+ public int compare(ItemInfo lhs, ItemInfo rhs) {
+ return Utilities.longCompare(lhs.container, rhs.container);
+ }
+ });
+ for (ItemInfo info : allWorkspaceItems) {
+ if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+ if (info.screenId == currentScreenId) {
+ currentScreenItems.add(info);
+ itemsOnScreen.add(info.id);
+ } else {
+ otherScreenItems.add(info);
+ }
+ } else if (info.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
+ currentScreenItems.add(info);
+ itemsOnScreen.add(info.id);
+ } else {
+ if (itemsOnScreen.contains(info.container)) {
+ currentScreenItems.add(info);
+ itemsOnScreen.add(info.id);
+ } else {
+ otherScreenItems.add(info);
+ }
+ }
+ }
+ }
+
+ /** Filters the set of widgets which are on the specified screen. */
+ private void filterCurrentAppWidgets(long currentScreenId,
+ ArrayList<LauncherAppWidgetInfo> appWidgets,
+ ArrayList<LauncherAppWidgetInfo> currentScreenWidgets,
+ ArrayList<LauncherAppWidgetInfo> otherScreenWidgets) {
+
+ for (LauncherAppWidgetInfo widget : appWidgets) {
+ if (widget == null) continue;
+ if (widget.container == LauncherSettings.Favorites.CONTAINER_DESKTOP &&
+ widget.screenId == currentScreenId) {
+ currentScreenWidgets.add(widget);
+ } else {
+ otherScreenWidgets.add(widget);
+ }
+ }
+ }
+
+ /** Sorts the set of items by hotseat, workspace (spatially from top to bottom, left to
+ * right) */
+ private void sortWorkspaceItemsSpatially(ArrayList<ItemInfo> workspaceItems) {
+ final InvariantDeviceProfile profile = mApp.getInvariantDeviceProfile();
+ final int screenCols = profile.numColumns;
+ final int screenCellCount = profile.numColumns * profile.numRows;
+ Collections.sort(workspaceItems, new Comparator<ItemInfo>() {
+ @Override
+ public int compare(ItemInfo lhs, ItemInfo rhs) {
+ if (lhs.container == rhs.container) {
+ // Within containers, order by their spatial position in that container
+ switch ((int) lhs.container) {
+ case LauncherSettings.Favorites.CONTAINER_DESKTOP: {
+ long lr = (lhs.screenId * screenCellCount +
+ lhs.cellY * screenCols + lhs.cellX);
+ long rr = (rhs.screenId * screenCellCount +
+ rhs.cellY * screenCols + rhs.cellX);
+ return Utilities.longCompare(lr, rr);
+ }
+ case LauncherSettings.Favorites.CONTAINER_HOTSEAT: {
+ // We currently use the screen id as the rank
+ return Utilities.longCompare(lhs.screenId, rhs.screenId);
+ }
+ default:
+ if (FeatureFlags.IS_DOGFOOD_BUILD) {
+ throw new RuntimeException("Unexpected container type when " +
+ "sorting workspace items.");
+ }
+ return 0;
+ }
+ } else {
+ // Between containers, order by hotseat, desktop
+ return Utilities.longCompare(lhs.container, rhs.container);
+ }
+ }
+ });
+ }
+
+ private void bindWorkspaceItems(final ArrayList<ItemInfo> workspaceItems,
+ final ArrayList<LauncherAppWidgetInfo> appWidgets,
+ final Executor executor) {
+
+ // Bind the workspace items
+ int N = workspaceItems.size();
+ for (int i = 0; i < N; i += ITEMS_CHUNK) {
+ final int start = i;
+ final int chunkSize = (i+ITEMS_CHUNK <= N) ? ITEMS_CHUNK : (N-i);
+ final Runnable r = new Runnable() {
+ @Override
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.bindItems(workspaceItems, start, start+chunkSize, false);
+ }
+ }
+ };
+ executor.execute(r);
+ }
+
+ // Bind the widgets, one at a time
+ N = appWidgets.size();
+ for (int i = 0; i < N; i++) {
+ final LauncherAppWidgetInfo widget = appWidgets.get(i);
+ final Runnable r = new Runnable() {
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.bindAppWidget(widget);
+ }
+ }
+ };
+ executor.execute(r);
+ }
+ }
+
+ public void bindDeepShortcuts() {
+ final MultiHashMap<ComponentKey, String> shortcutMapCopy;
+ synchronized (mBgDataModel) {
+ shortcutMapCopy = mBgDataModel.deepShortcutMap.clone();
+ }
+ Runnable r = new Runnable() {
+ @Override
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.bindDeepShortcutMap(shortcutMapCopy);
+ }
+ }
+ };
+ mUiExecutor.execute(r);
+ }
+
+ public void bindAllApps() {
+ // shallow copy
+ @SuppressWarnings("unchecked")
+ final ArrayList<AppInfo> list = (ArrayList<AppInfo>) mBgAllAppsList.data.clone();
+
+ Runnable r = new Runnable() {
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.bindAllApplications(list);
+ }
+ }
+ };
+ mUiExecutor.execute(r);
+ }
+
+ public void bindWidgets() {
+ final MultiHashMap<PackageItemInfo, WidgetItem> widgets
+ = mBgDataModel.widgetsModel.getWidgetsMap();
+ Runnable r = new Runnable() {
+ public void run() {
+ Callbacks callbacks = mCallbacks.get();
+ if (callbacks != null) {
+ callbacks.bindAllWidgets(widgets);
+ }
+ }
+ };
+ mUiExecutor.execute(r);
+ }
+}
diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java
index 8380f01..46fea21 100644
--- a/src/com/android/launcher3/model/PackageUpdatedTask.java
+++ b/src/com/android/launcher3/model/PackageUpdatedTask.java
@@ -44,6 +44,7 @@
import com.android.launcher3.graphics.LauncherIcons;
import com.android.launcher3.util.FlagOp;
import com.android.launcher3.util.ItemInfoMatcher;
+import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageUserKey;
@@ -373,11 +374,9 @@
} else if (Utilities.isAtLeastO() && mOp == OP_ADD) {
// Load widgets for the new package.
for (int i = 0; i < N; i++) {
- LauncherModel model = app.getModel();
- model.refreshAndBindWidgetsAndShortcuts(
- model.getCallback(), false /* bindFirst */,
- new PackageUserKey(packages[i], mUser) /* packageUser */);
+ dataModel.widgetsModel.update(app, new PackageUserKey(packages[i], mUser));
}
+ bindUpdatedWidgets(dataModel);
}
}
}
diff --git a/src/com/android/launcher3/model/SdCardAvailableReceiver.java b/src/com/android/launcher3/model/SdCardAvailableReceiver.java
index bae5c73..3aedae6 100644
--- a/src/com/android/launcher3/model/SdCardAvailableReceiver.java
+++ b/src/com/android/launcher3/model/SdCardAvailableReceiver.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.os.UserHandle;
+import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.util.MultiHashMap;
@@ -43,10 +44,10 @@
private final Context mContext;
private final MultiHashMap<UserHandle, String> mPackages;
- public SdCardAvailableReceiver(LauncherModel model, Context context,
+ public SdCardAvailableReceiver(LauncherAppState app,
MultiHashMap<UserHandle, String> packages) {
- mModel = model;
- mContext = context;
+ mModel = app.getModel();
+ mContext = app.getContext();
mPackages = packages;
}
diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java
index 827675a..ed900bf 100644
--- a/src/com/android/launcher3/model/WidgetsModel.java
+++ b/src/com/android/launcher3/model/WidgetsModel.java
@@ -38,36 +38,26 @@
private static final boolean DEBUG = false;
/* Map of widgets and shortcuts that are tracked per package. */
- private final MultiHashMap<PackageItemInfo, WidgetItem> mWidgetsList;
+ private final MultiHashMap<PackageItemInfo, WidgetItem> mWidgetsList = new MultiHashMap<>();
- private final IconCache mIconCache;
- private final AppFilter mAppFilter;
+ private AppFilter mAppFilter;
- public WidgetsModel(IconCache iconCache, AppFilter appFilter) {
- mIconCache = iconCache;
- mAppFilter = appFilter;
- mWidgetsList = new MultiHashMap<>();
- }
-
- public MultiHashMap<PackageItemInfo, WidgetItem> getWidgetsMap() {
- return mWidgetsList;
- }
-
- public boolean isEmpty() {
- return mWidgetsList.isEmpty();
+ public synchronized MultiHashMap<PackageItemInfo, WidgetItem> getWidgetsMap() {
+ return mWidgetsList.clone();
}
/**
* @param packageUser If null, all widgets and shortcuts are updated and returned, otherwise
* only widgets and shortcuts associated with the package/user are.
*/
- public ArrayList<WidgetItem> update(Context context, @Nullable PackageUserKey packageUser) {
+ public void update(LauncherAppState app, @Nullable PackageUserKey packageUser) {
Preconditions.assertWorkerThread();
+ Context context = app.getContext();
final ArrayList<WidgetItem> widgetsAndShortcuts = new ArrayList<>();
try {
PackageManager pm = context.getPackageManager();
- InvariantDeviceProfile idp = LauncherAppState.getIDP(context);
+ InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
// Widgets
AppWidgetManagerCompat widgetManager = AppWidgetManagerCompat.getInstance(context);
@@ -81,7 +71,7 @@
.getCustomShortcutActivityList(packageUser)) {
widgetsAndShortcuts.add(new WidgetItem(info));
}
- setWidgetsAndShortcuts(widgetsAndShortcuts, context, packageUser);
+ setWidgetsAndShortcuts(widgetsAndShortcuts, app, packageUser);
} catch (Exception e) {
if (!FeatureFlags.IS_DOGFOOD_BUILD && Utilities.isBinderSizeError(e)) {
// the returned value may be incomplete and will not be refreshed until the next
@@ -92,11 +82,12 @@
throw e;
}
}
- return widgetsAndShortcuts;
+
+ app.getWidgetCache().removeObsoletePreviews(widgetsAndShortcuts, packageUser);
}
- private void setWidgetsAndShortcuts(ArrayList<WidgetItem> rawWidgetsShortcuts,
- Context context, @Nullable PackageUserKey packageUser) {
+ private synchronized void setWidgetsAndShortcuts(ArrayList<WidgetItem> rawWidgetsShortcuts,
+ LauncherAppState app, @Nullable PackageUserKey packageUser) {
if (DEBUG) {
Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + rawWidgetsShortcuts.size());
}
@@ -133,7 +124,7 @@
}
}
- InvariantDeviceProfile idp = LauncherAppState.getIDP(context);
+ InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
UserHandle myUser = Process.myUserHandle();
// add and update.
@@ -152,6 +143,9 @@
}
}
+ if (mAppFilter == null) {
+ mAppFilter = AppFilter.newInstance(app.getContext());
+ }
if (!mAppFilter.shouldShowApp(item.componentName)) {
if (DEBUG) {
Log.d(TAG, String.format("%s is filtered and not added to the widget tray.",
@@ -174,8 +168,9 @@
}
// Update each package entry
+ IconCache iconCache = app.getIconCache();
for (PackageItemInfo p : tmpPackageItemInfos.values()) {
- mIconCache.getTitleAndIconForApp(p, true /* userLowResIcon */);
+ iconCache.getTitleAndIconForApp(p, true /* userLowResIcon */);
}
}
}
\ No newline at end of file
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
index df7f695..5ce78dc 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
@@ -65,8 +65,10 @@
}
public static boolean supportsShortcuts(ItemInfo info) {
+ boolean isItemPromise = info instanceof com.android.launcher3.ShortcutInfo
+ && ((com.android.launcher3.ShortcutInfo) info).isPromise();
return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
- && !info.isDisabled();
+ && !info.isDisabled() && !isItemPromise;
}
public boolean wasLastCallSuccess() {