diff options
97 files changed, 788 insertions, 1510 deletions
diff --git a/res/layout/folder_application.xml b/res/layout/folder_application.xml index de861a0ad..9d4af0d9c 100644 --- a/res/layout/folder_application.xml +++ b/res/layout/folder_application.xml @@ -19,4 +19,9 @@ xmlns:launcher="http://schemas.android.com/apk/res-auto" style="@style/BaseIcon" android:includeFontPadding="false" - launcher:iconDisplay="folder" /> + android:paddingLeft="@dimen/folder_cell_x_padding" + android:paddingTop="@dimen/folder_cell_y_padding" + android:paddingRight="@dimen/folder_cell_x_padding" + android:paddingBottom="@dimen/folder_cell_y_padding" + launcher:centerVertically="true" + launcher:iconDisplay="folder"/> diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 84faebe8f..9024427e8 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breed by %2$d hoog"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Raak en hou om self te plaas"</string> <string name="place_automatically" msgid="8064208734425456485">"Voeg outomaties by"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Deursoek programme"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Laai tans programme …"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Geen programme gevind wat met \"<xliff:g id="QUERY">%1$s</xliff:g>\" ooreenstem nie"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Soek meer programme"</string> <string name="notifications_header" msgid="1404149926117359025">"Kennisgewings"</string> <string name="out_of_space" msgid="4691004494942118364">"Niks meer spasie op die tuisskerm nie."</string> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 76a9734ce..88bc33f70 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ስፋት በ%2$d ከፍታ"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ራስዎ ለማስቀመጥ ነክተው ይያዙት"</string> <string name="place_automatically" msgid="8064208734425456485">"በራስ-ሰር አክል"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"መተግበሪያዎችን ይፈልጉ"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"መተግበሪያዎችን በመጫን ላይ..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"ከ«<xliff:g id="QUERY">%1$s</xliff:g>» ጋር የሚዛመዱ ምንም መተግበሪያዎች አልተገኙም"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"ተጨማሪ መተግበሪያዎች ይፈልጉ"</string> <string name="notifications_header" msgid="1404149926117359025">"ማሳወቂያዎች"</string> <string name="out_of_space" msgid="4691004494942118364">"በዚህ መነሻ ማያ ገጽ ላይ ምንም ቦታ የለም።"</string> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index e51880aa5..98106c5f0 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"العرض %1$d الطول %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"المس مع الاستمرار للإضافة يدويًا"</string> <string name="place_automatically" msgid="8064208734425456485">"إضافة تلقائيًا"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"البحث في التطبيقات"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"جارٍ تحميل التطبيقات…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"لم يتم العثور على أية تطبيقات تتطابق مع \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"البحث عن مزيد من التطبيقات"</string> <string name="notifications_header" msgid="1404149926117359025">"الإشعارات"</string> <string name="out_of_space" msgid="4691004494942118364">"ليس هناك مساحة أخرى في هذه الشاشة الرئيسية."</string> diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml index 2a6615a2d..b33d8b5e7 100644 --- a/res/values-az-rAZ/strings.xml +++ b/res/values-az-rAZ/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%2$d hündürlük %1$d enində"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Manual olaraq yerləşdirmək üçün toxunaraq basıb saxlayın"</string> <string name="place_automatically" msgid="8064208734425456485">"Avtomatik əlavə edin"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tətbiq Axtarın"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Tətbiqlər endirilir..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" sorğusuna uyğun Tətbiqlər tapılmadı"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Daha çox tətbiq üçün axtarış edin"</string> <string name="notifications_header" msgid="1404149926117359025">"Bildirişlər"</string> <string name="out_of_space" msgid="4691004494942118364">"Bu Əsas ekranda boş yer yoxdur."</string> diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index f17c5f03d..4294499ed 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"širina od %1$d i visina od %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dodirnite i zadržite da biste postavili ručno"</string> <string name="place_automatically" msgid="8064208734425456485">"Automatski dodaj"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pretražite aplikacije"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Aplikacije se učitavaju..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nije pronađena nijedna aplikacija za „<xliff:g id="QUERY">%1$s</xliff:g>“"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Pretraži još aplikacija"</string> <string name="notifications_header" msgid="1404149926117359025">"Obaveštenja"</string> <string name="out_of_space" msgid="4691004494942118364">"Nema više prostora na ovom početnom ekranu."</string> diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml index 4b14a8c96..c9bd44722 100644 --- a/res/values-be-rBY/strings.xml +++ b/res/values-be-rBY/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Шырына: %1$d, вышыня: %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Каб размясціць уручную, дакраніцеся і ўтрымлівайце"</string> <string name="place_automatically" msgid="8064208734425456485">"Дадаць аўтаматычна"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Пошук у Праграмах"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Ідзе загрузка праграм…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Праграм, якія адпавядаюць запыту \"<xliff:g id="QUERY">%1$s</xliff:g>\", не знойдзена"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Шукаць іншыя праграмы"</string> <string name="notifications_header" msgid="1404149926117359025">"Апавяшчэнні"</string> <string name="out_of_space" msgid="4691004494942118364">"На гэтым Галоўным экране больш няма месца."</string> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index c2248d85c..7883d7c92 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина %1$d и височина %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Докоснете и задръжте, за да поставите ръчно"</string> <string name="place_automatically" msgid="8064208734425456485">"Автоматично добавяне"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Търсене в приложенията"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Приложенията се зареждат…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Няма намерени приложения, съответстващи на „<xliff:g id="QUERY">%1$s</xliff:g>“"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Търсене на още приложения"</string> <string name="notifications_header" msgid="1404149926117359025">"Известия"</string> <string name="out_of_space" msgid="4691004494942118364">"На този начален екран няма повече място."</string> diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index 02a95f236..97bb90af2 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%2$d উচ্চতা অনুযায়ী %1$d প্রস্থ"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"নিজে যোগ করতে টাচ করে ধরে রাখুন"</string> <string name="place_automatically" msgid="8064208734425456485">"স্বয়ংক্রিয়ভাবে যোগ করুন"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"অ্যাপ্লিকেশানগুলি অনুসন্ধান করুন"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"অ্যাপ্লিকেশানগুলি লোড হচ্ছে..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" এর সাথে মেলে এমন কোনো অ্যাপ্লিকেশান পাওয়া যায়নি"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"আরো অ্যাপ্লিকেশানের জন্য অনুসন্ধান করুন"</string> <string name="notifications_header" msgid="1404149926117359025">"বিজ্ঞপ্তি"</string> <string name="out_of_space" msgid="4691004494942118364">"এই হোম স্ক্রীনে আর কোনো জায়গা নেই৷"</string> diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml index a8e7f2ec3..032fafb8b 100644 --- a/res/values-bs-rBA/strings.xml +++ b/res/values-bs-rBA/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Širina %1$d, visina %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dodirnite i držite da postavite ručno"</string> <string name="place_automatically" msgid="8064208734425456485">"Dodaj automatski"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pretraži aplikacije"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Aplikacije se učitavaju…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nije pronađena nijedna aplikacija koja odgovara upitu \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Pretraži više aplikacija"</string> <string name="notifications_header" msgid="1404149926117359025">"Obavještenja"</string> <string name="out_of_space" msgid="4691004494942118364">"Na ovom početnom ekranu nema više prostora."</string> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index ad6c9d107..0685c9027 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d d\'amplada per %2$d d\'alçada"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toca i mantén premut l\'element per col·locar-lo manualment"</string> <string name="place_automatically" msgid="8064208734425456485">"Afegeix automàticament"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Cerca a les aplicacions"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"S\'estan carregant les aplicacions..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"No s\'ha trobat cap aplicació que coincideixi amb <xliff:g id="QUERY">%1$s</xliff:g>"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Cerca més aplicacions"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificacions"</string> <string name="out_of_space" msgid="4691004494942118364">"Ja no queda espai en aquesta pantalla d\'inici."</string> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 715f279ca..7cef876d7 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"šířka %1$d, výška %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Chcete-li položku umístit ručně, klepněte na ni a podržte ji"</string> <string name="place_automatically" msgid="8064208734425456485">"Přidat automaticky"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Hledat aplikace"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Načítání aplikací…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Dotazu „<xliff:g id="QUERY">%1$s</xliff:g>“ neodpovídají žádné aplikace"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Vyhledat další aplikace"</string> <string name="notifications_header" msgid="1404149926117359025">"Oznámení"</string> <string name="out_of_space" msgid="4691004494942118364">"Na této ploše již není místo."</string> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 04b163131..3d22280a0 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d i bredden og %2$d i højden"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tryk, og hold fingeren nede for at placere manuelt"</string> <string name="place_automatically" msgid="8064208734425456485">"Tilføj automatisk"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Søg i Apps"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Indlæser apps…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Der blev ikke fundet nogen apps, som matcher \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Søg efter flere apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Underretninger"</string> <string name="out_of_space" msgid="4691004494942118364">"Der er ikke mere plads på denne startskærm."</string> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index ce868227e..c67fca7f3 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breit und %2$d hoch"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Zum manuellen Hinzufügen gedrückt halten"</string> <string name="place_automatically" msgid="8064208734425456485">"Automatisch hinzufügen"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"In Apps suchen"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Apps werden geladen..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Keine Apps für \"<xliff:g id="QUERY">%1$s</xliff:g>\" gefunden"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Weitere Apps suchen"</string> <string name="notifications_header" msgid="1404149926117359025">"Benachrichtigungen"</string> <string name="out_of_space" msgid="4691004494942118364">"Auf diesem Startbildschirm ist kein Platz mehr vorhanden."</string> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 2ac0ab3cc..1f27f2c6c 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Πλάτος %1$d επί ύψος %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Αγγίξτε παρατεταμένα για μη αυτόματη τοποθέτηση"</string> <string name="place_automatically" msgid="8064208734425456485">"Αυτόματη προσθήκη"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Αναζήτηση εφαρμογών"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Φόρτωση εφαρμογών…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Δεν βρέθηκαν εφαρμογές για το ερώτημα \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Αναζήτηση περισσότερων εφαρμογών"</string> <string name="notifications_header" msgid="1404149926117359025">"Ειδοποιήσεις"</string> <string name="out_of_space" msgid="4691004494942118364">"Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη."</string> diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 2c86f05c3..affa3926a 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d wide by %2$d high"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Touch & hold to place manually"</string> <string name="place_automatically" msgid="8064208734425456485">"Add automatically"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Search Apps"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Loading Apps…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"No Apps found matching \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Search for more apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifications"</string> <string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 2c86f05c3..affa3926a 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d wide by %2$d high"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Touch & hold to place manually"</string> <string name="place_automatically" msgid="8064208734425456485">"Add automatically"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Search Apps"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Loading Apps…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"No Apps found matching \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Search for more apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifications"</string> <string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 2c86f05c3..affa3926a 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d wide by %2$d high"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Touch & hold to place manually"</string> <string name="place_automatically" msgid="8064208734425456485">"Add automatically"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Search Apps"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Loading Apps…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"No Apps found matching \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Search for more apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifications"</string> <string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index f57718dfa..1725ac64b 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de ancho por %2$d de alto"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Mantén presionado para ubicarlo manualmente"</string> <string name="place_automatically" msgid="8064208734425456485">"Agregar automáticamente"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Buscar aplicaciones"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Cargando aplicaciones…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"No hay aplicaciones que coincidan con <xliff:g id="QUERY">%1$s</xliff:g>."</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Buscar más apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificaciones"</string> <string name="out_of_space" msgid="4691004494942118364">"No hay más espacio en esta pantalla principal."</string> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index a7b2ab90e..68646aa48 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de ancho por %2$d de alto"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Mantenlo pulsado para añadirlo manualmente"</string> <string name="place_automatically" msgid="8064208734425456485">"Añadir automáticamente"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Busca aplicaciones"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Cargando aplicaciones…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"No se han encontrado aplicaciones que contengan \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Buscar más aplicaciones"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificaciones"</string> <string name="out_of_space" msgid="4691004494942118364">"No queda espacio en la pantalla de inicio."</string> diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 68bf644c5..9105883c1 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lai ja %2$d kõrge"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Puudutage pikalt, et käsitsi asetada"</string> <string name="place_automatically" msgid="8064208734425456485">"Lisa automaatselt"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Otsige rakendustest"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Rakenduste laadimine ..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Päringule „<xliff:g id="QUERY">%1$s</xliff:g>” ei vastanud ükski rakendus"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Otsi rohkem rakendusi"</string> <string name="notifications_header" msgid="1404149926117359025">"Märguanded"</string> <string name="out_of_space" msgid="4691004494942118364">"Sellel avaekraanil pole enam ruumi."</string> diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index f2295863b..ae14058ac 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d zabal eta %2$d luze"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Eduki sakatuta eskuz gehitzeko"</string> <string name="place_automatically" msgid="8064208734425456485">"Gehitu automatikoki"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Bilatu aplikazioetan"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Aplikazioak kargatzen…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Ez da aurkitu \"<xliff:g id="QUERY">%1$s</xliff:g>\" bilaketarekin bat datorren aplikaziorik"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Bilatu aplikazio gehiago"</string> <string name="notifications_header" msgid="1404149926117359025">"Jakinarazpenak"</string> <string name="out_of_space" msgid="4691004494942118364">"Hasierako pantaila honetan ez dago toki gehiago."</string> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 05c8e08cb..5808a3f64 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d عرض در %2$d طول"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"برای قرار دادن بهصورت دستی لمس کنید و بکشید"</string> <string name="place_automatically" msgid="8064208734425456485">"افزودن خودکار"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"جستجوی برنامهها"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"در حال بارگیری برنامهها..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"هیچ برنامهای مطابق با «<xliff:g id="QUERY">%1$s</xliff:g>» پیدا نشد"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"جستجوی برنامههای بیشتر"</string> <string name="notifications_header" msgid="1404149926117359025">"اعلانها"</string> <string name="out_of_space" msgid="4691004494942118364">"فضای بیشتری در این صفحه اصلی موجود نیست."</string> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 8992f616f..f4ef7bfe5 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Leveys: %1$d, korkeus: %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sijoita manuaalisesti koskettamalla pitkään."</string> <string name="place_automatically" msgid="8064208734425456485">"Lisää automaattisesti"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Sovellushaku"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Ladataan sovelluksia…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"”<xliff:g id="QUERY">%1$s</xliff:g>” ei palauttanut sovelluksia."</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Hae lisää sovelluksia"</string> <string name="notifications_header" msgid="1404149926117359025">"Ilmoitukset"</string> <string name="out_of_space" msgid="4691004494942118364">"Tässä aloitusruudussa ei ole enää tilaa."</string> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 57ef4f89a..3c11d7a42 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largeur sur %2$d de hauteur"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Maintenez le doigt sur l\'élément pour le placer manuellement"</string> <string name="place_automatically" msgid="8064208734425456485">"Ajouter automatiquement"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Rechercher des applications"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Chargement des applications en cours..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Aucune application trouvée correspondant à « <xliff:g id="QUERY">%1$s</xliff:g> »"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Rechercher plus d\'applications"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifications"</string> <string name="out_of_space" msgid="4691004494942118364">"Pas d\'espace libre sur l\'écran d\'accueil."</string> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 5daab9131..4a4a40fa5 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largeur et %2$d de hauteur"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Appuyez de manière prolongée pour placer l\'élément manuellement"</string> <string name="place_automatically" msgid="8064208734425456485">"Ajouter automatiquement"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Rechercher dans les applications"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Chargement des applications en cours…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Aucune application ne correspond à la requête \"<xliff:g id="QUERY">%1$s</xliff:g>\"."</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Rechercher plus d\'applications"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifications"</string> <string name="out_of_space" msgid="4691004494942118364">"Pas d\'espace libre sur cet écran d\'accueil."</string> diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index 5df3c87a3..cb3e5c540 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largo por %2$d de alto"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Mantén premido o elemento para colocalo manualmente"</string> <string name="place_automatically" msgid="8064208734425456485">"Engadir automaticamente"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Aplicacións de busca"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Cargando aplicacións..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Non se atoparon aplicacións que coincidan con \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Buscar máis aplicacións"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificacións"</string> <string name="out_of_space" msgid="4691004494942118364">"Non hai máis espazo nesta pantalla de inicio."</string> diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml index 587d16eb4..00b958215 100644 --- a/res/values-gu-rIN/strings.xml +++ b/res/values-gu-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d પહોળાઈ X %2$d ઊંચાઈ"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"મેન્યુઅલી મૂકવા માટે ટચ કરી દબાવી રાખો"</string> <string name="place_automatically" msgid="8064208734425456485">"આપમેળે ઉમેરો"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"શોધ ઍપ્લિકેશનો"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ઍપ્લિકેશનો લોડ કરી રહ્યું છે…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" થી મેળ ખાતી કોઈ ઍપ્લિકેશનો મળી નથી"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"વધુ ઍપ્લિકેશનો શોધો"</string> <string name="notifications_header" msgid="1404149926117359025">"સૂચનાઓ"</string> <string name="out_of_space" msgid="4691004494942118364">"આ હોમ સ્ક્રીન પર વધુ જગ્યા નથી."</string> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index bb9aa5c0e..b59dd07b1 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d चौड़ाई गुणा %2$d ऊंचाई"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"मैन्युअल रूप से जोड़ने के लिए स्पर्श करके रखें"</string> <string name="place_automatically" msgid="8064208734425456485">"अपने आप जोड़ें"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ऐप्स खोजें"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ऐप्स लोड हो रहे हैं..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" से मिलान करने वाला कोई ऐप नहीं मिला"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"अधिक ऐप्लिकेशन खोजें"</string> <string name="notifications_header" msgid="1404149926117359025">"नोटिफ़िकेशन"</string> <string name="out_of_space" msgid="4691004494942118364">"इस होम स्क्रीन पर स्थान शेष नहीं है."</string> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 0e272f217..cfd32cac5 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d širine i %2$d visine"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dodirnite i zadržite stavku da biste je postavili ručno"</string> <string name="place_automatically" msgid="8064208734425456485">"Dodaj automatski"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pretraži aplikacije"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Učitavanje aplikacija…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nema aplikacija podudarnih s upitom \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Traži više aplikacija"</string> <string name="notifications_header" msgid="1404149926117359025">"Obavijesti"</string> <string name="out_of_space" msgid="4691004494942118364">"Na ovom početnom zaslonu više nema mjesta."</string> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 0f3f3b481..1c58702f9 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d széles és %2$d magas"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tartsa lenyomva a manuális hozzáadáshoz"</string> <string name="place_automatically" msgid="8064208734425456485">"Automatikus hozzáadás"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Alkalmazások keresése"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Alkalmazások betöltése…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Egy alkalmazás sem található a(z) „<xliff:g id="QUERY">%1$s</xliff:g>” lekérdezésre."</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"További alkalmazások keresése"</string> <string name="notifications_header" msgid="1404149926117359025">"Értesítések"</string> <string name="out_of_space" msgid="4691004494942118364">"Nincs több hely ezen a kezdőképernyőn."</string> diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 6d708d08d..166ba03f9 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Լայնությունը՝ %1$d, բարձրությունը՝ %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Հպեք և պահեք՝ ձեռքով տեղադրելու համար"</string> <string name="place_automatically" msgid="8064208734425456485">"Ավելացնել ավտոմատ կերպով"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Հավելվածների որոնում"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Հավելվածների բեռնում…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"«<xliff:g id="QUERY">%1$s</xliff:g>» հարցմանը համապատասխանող հավելվածներ չեն գտնվել"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Որոնել այլ հավելվածներ"</string> <string name="notifications_header" msgid="1404149926117359025">"Ծանուցումներ"</string> <string name="out_of_space" msgid="4691004494942118364">"Այլևս տեղ չկա այս հիմնական էկրանին:"</string> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 57ffa144e..8175c1c9a 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"lebar %1$d x tinggi %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sentuh & tahan untuk menempatkan secara manual"</string> <string name="place_automatically" msgid="8064208734425456485">"Tambahkan otomatis"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Telusuri Apps"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Memuat Aplikasi..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Tidak ditemukan Aplikasi yang cocok dengan \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Telusuri aplikasi lainnya"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifikasi"</string> <string name="out_of_space" msgid="4691004494942118364">"Tidak ada ruang lagi pada layar Utama ini."</string> diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 5dcfb4e6e..3af0bdd95 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d á breidd og %2$d á hæð"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Haltu inni til að staðsetja handvirkt"</string> <string name="place_automatically" msgid="8064208734425456485">"Bæta sjálfkrafa við"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Leita í forritum"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Hleður forrit…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Ekki fundust forrit sem samsvara „<xliff:g id="QUERY">%1$s</xliff:g>“"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Leita að fleiri forritum"</string> <string name="notifications_header" msgid="1404149926117359025">"Tilkynningar"</string> <string name="out_of_space" msgid="4691004494942118364">"Ekki meira pláss á þessum heimaskjá."</string> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index ac04f3197..4ae5b3327 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d di larghezza per %2$d di altezza"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tieni premuto per posizionare l\'elemento manualmente"</string> <string name="place_automatically" msgid="8064208734425456485">"Aggiungi automaticamente"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Cerca app"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Caricamento di app…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nessuna app trovata corrispondente a \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Cerca altre app"</string> <string name="notifications_header" msgid="1404149926117359025">"Notifiche"</string> <string name="out_of_space" msgid="4691004494942118364">"Spazio nella schermata Home esaurito."</string> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 83c429607..b7751fbe7 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"רוחב %1$d על גובה %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"גע והחזק כדי להוסיף ידנית"</string> <string name="place_automatically" msgid="8064208734425456485">"הוסף באופן אוטומטי"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"חפש אפליקציות"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"טוען אפליקציות…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"לא נמצאו אפליקציות התואמות ל-\"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"חפש אפליקציות נוספות"</string> <string name="notifications_header" msgid="1404149926117359025">"הודעות"</string> <string name="out_of_space" msgid="4691004494942118364">"אין עוד מקום במסך דף הבית הזה."</string> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index a11304d61..44b73a865 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"幅 %1$d、高さ %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"押し続けると、手動で追加できます"</string> <string name="place_automatically" msgid="8064208734425456485">"自動的に追加"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"アプリを検索"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"アプリを読み込んでいます…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"「<xliff:g id="QUERY">%1$s</xliff:g>」に一致するアプリは見つかりませんでした"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"他のアプリを検索"</string> <string name="notifications_header" msgid="1404149926117359025">"通知"</string> <string name="out_of_space" msgid="4691004494942118364">"このホーム画面に空きスペースがありません。"</string> diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 0f10d2be2..892fdd927 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"სიგრძე: %1$d, სიგანე: %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ხანგრძლივად შეეხეთ ხელით განსათავსებლად"</string> <string name="place_automatically" msgid="8064208734425456485">"ავტომატურად დამატება"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"აპების ძიება"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"აპები იტვირთება..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"„<xliff:g id="QUERY">%1$s</xliff:g>“-ის თანხვედრი აპები არ მოიძებნა"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"მეტი აპის პოვნა"</string> <string name="notifications_header" msgid="1404149926117359025">"შეტყობინებები"</string> <string name="out_of_space" msgid="4691004494942118364">"ამ მთავარ ეკრანზე ადგილი აღარ არის."</string> diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index 5638d8bf3..f66e0c7f2 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ені: %1$d, биіктігі: %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Қолмен қою үшін басып тұрыңыз"</string> <string name="place_automatically" msgid="8064208734425456485">"Автоматты енгізу"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Қолданбаларды іздеу"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Қолданбалар жүктелуде…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"«<xliff:g id="QUERY">%1$s</xliff:g>» сұрауына сәйкес келетін қолданбалар жоқ"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Қосымша қолданбалар іздеу"</string> <string name="notifications_header" msgid="1404149926117359025">"Хабарландырулар"</string> <string name="out_of_space" msgid="4691004494942118364">"Бұл Негізгі экранда орын қалмады."</string> diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index c60f09fa7..ba6eebd16 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"ទទឺង %1$d គុណនឹងកម្ពស់ %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ចុចឲ្យជាប់ដើម្បីបញ្ចូលវាដោយផ្ទាល់"</string> <string name="place_automatically" msgid="8064208734425456485">"បញ្ចូលដោយស្វ័យប្រវត្តិ"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ស្វែងរកកម្មវិធី"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"កំពុងដំណើរការកម្មវិធី..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"គ្មានកម្មវិធីដែលត្រូវជាមួយ \"<xliff:g id="QUERY">%1$s</xliff:g>\" ទេ"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"ស្វែងរកកម្មវិធីច្រើនទៀត"</string> <string name="notifications_header" msgid="1404149926117359025">"ការជូនដំណឹង"</string> <string name="out_of_space" msgid="4691004494942118364">"គ្មានបន្ទប់នៅលើអេក្រង់ដើមនេះទៀតទេ។"</string> diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index 7566503b0..2c6fa09c3 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ಅಗಲ ಮತ್ತು %2$d ಎತ್ತರ"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ಹಸ್ತಚಾಲಿತವಾಗಿ ಸೇರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್ ಮಾಡಿ"</string> <string name="place_automatically" msgid="8064208734425456485">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೇರಿಸಿ"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ಅಪ್ಲಿಕೇಷನ್ಗಳನ್ನು ಹುಡುಕಿ"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ಹೊಂದಿಕೆಯ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"ಮತ್ತಷ್ಟು ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಹುಡುಕಿ"</string> <string name="notifications_header" msgid="1404149926117359025">"ಅಧಿಸೂಚನೆಗಳು"</string> <string name="out_of_space" msgid="4691004494942118364">"ಈ ಮುಖಪುಟದ ಪರದೆಯಲ್ಲಿ ಹೆಚ್ಚು ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ."</string> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 24546f4ac..459e7b5fa 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"너비 %1$d, 높이 %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"길게 터치하여 직접 장소 추가"</string> <string name="place_automatically" msgid="8064208734425456485">"자동으로 추가"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"앱 검색"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"앱 로드 중..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\'<xliff:g id="QUERY">%1$s</xliff:g>\'와(과) 일치하는 앱이 없습니다."</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"더 많은 앱 검색"</string> <string name="notifications_header" msgid="1404149926117359025">"알림"</string> <string name="out_of_space" msgid="4691004494942118364">"홈 화면에 더 이상 공간이 없습니다."</string> diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index dfc869191..5c0f98fdd 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Туурасы: %1$d, бийиктиги: %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Кол менен жайгаштыруу үчүн басып туруп, таштаңыз"</string> <string name="place_automatically" msgid="8064208734425456485">"Автоматтык түрдө кошуу"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Колдонмолорду издөө"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Колдонмолор жүктөлүүдө…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" дал келген колдонмолор табылган жок"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Көбүрөөк колдонмолорду издөө"</string> <string name="notifications_header" msgid="1404149926117359025">"Эскертмелер"</string> <string name="out_of_space" msgid="4691004494942118364">"Бул Үй экранында бош орун жок."</string> diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 66a504841..990a990a9 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"ກວ້າງ %1$d ຄູນສູງ %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ແຕະຄ້າງໄວ້ເພື່ອວາງດ້ວຍຕົນເອງ"</string> <string name="place_automatically" msgid="8064208734425456485">"ເພີ່ມໂດຍອັດຕະໂນມັດ"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ຊອກຫາແອັບ"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ກຳລັງໂຫລດແອັບ..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"ບໍ່ພົບແອັບໃດທີ່ກົງກັນ \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"ຊອກຫາແອັບເພີ່ມເຕີມ"</string> <string name="notifications_header" msgid="1404149926117359025">"ການແຈ້ງເຕືອນ"</string> <string name="out_of_space" msgid="4691004494942118364">"ບໍ່ມີຫ້ອງເຫຼືອໃນໜ້າຈໍຫຼັກນີ້."</string> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index c346ed954..f8e461723 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d plotis ir %2$d aukštis"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Palieskite ir palaikykite, kad padėtumėte patys"</string> <string name="place_automatically" msgid="8064208734425456485">"Pridėti automatiškai"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Ieškoti programų"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Įkeliamos programos..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nerasta jokių užklausą „<xliff:g id="QUERY">%1$s</xliff:g>“ atitinkančių programų"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Ieškoti daugiau programų"</string> <string name="notifications_header" msgid="1404149926117359025">"Pranešimai"</string> <string name="out_of_space" msgid="4691004494942118364">"Šiame pagrindiniame ekrane vietos nebėra."</string> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 580d5b7d1..106d15279 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d plats un %2$d augsts"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Pieskarieties un turiet, lai manuāli pievienotu"</string> <string name="place_automatically" msgid="8064208734425456485">"Pievienot automātiski"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Meklēt lietotnes"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Notiek lietotņu ielāde…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Vaicājumam “<xliff:g id="QUERY">%1$s</xliff:g>” neatbilda neviena lietotne."</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Meklēt citas lietotnes"</string> <string name="notifications_header" msgid="1404149926117359025">"Paziņojumi"</string> <string name="out_of_space" msgid="4691004494942118364">"Šajā sākuma ekrānā vairs nav vietas."</string> diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index ebc1fcc83..cfe763637 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d широк на %2$d висок"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Допрете и задржете за рачно поставување"</string> <string name="place_automatically" msgid="8064208734425456485">"Додај автоматски"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Пребарување апликации"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Се вчитуваат апликации…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Не се најдени апликации што одговараат на „<xliff:g id="QUERY">%1$s</xliff:g>“"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Пребарај други апликации"</string> <string name="notifications_header" msgid="1404149926117359025">"Известувања"</string> <string name="out_of_space" msgid="4691004494942118364">"Нема повеќе простор на овој екран на почетната страница."</string> diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 62bcc8cbe..3f1b80563 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d വീതിയും %2$d ഉയരവും"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"സ്വമേധയാ സ്ഥാപിക്കുന്നതിന് സ്പർശിച്ചുപിടിക്കുക"</string> <string name="place_automatically" msgid="8064208734425456485">"സ്വയമേവ ചേർക്കുക"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ആപ്പുകളെ തിരയുക"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ആപ്പുകൾ ലോഡുചെയ്യുന്നു..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" എന്നതുമായി പൊരുത്തപ്പെടുന്ന ആപ്പ്സൊന്നും കണ്ടെത്തിയില്ല"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"കൂടുതൽ ആപ്പുകൾക്ക് തിരയുക"</string> <string name="notifications_header" msgid="1404149926117359025">"അറിയിപ്പുകൾ"</string> <string name="out_of_space" msgid="4691004494942118364">"ഈ ഹോം സ്ക്രീനിൽ ഒഴിവൊന്നുമില്ല."</string> diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index a8d4b3cf6..a4618585a 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d өргөн %2$d өндөр"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Гараар байршуулахын тулд дараад хүлээнэ үү"</string> <string name="place_automatically" msgid="8064208734425456485">"Автоматаар нэмэх"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Апп хайх"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Аппликейшныг ачаалж байна..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\"-д нийцэх апп олдсонгүй"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Бусад апп-г хайх"</string> <string name="notifications_header" msgid="1404149926117359025">"Мэдэгдэл"</string> <string name="out_of_space" msgid="4691004494942118364">"Энэ Нүүр дэлгэц зайгүй."</string> diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index 3435061b8..e048910dc 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d रूंद बाय %2$d उंच"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"स्वतः ठेवण्यासाठी स्पर्श करा आणि धरून ठेवा"</string> <string name="place_automatically" msgid="8064208734425456485">"स्वयंचलितपणे जोडा"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"अॅप्स शोधा"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"अॅप्स लोड करीत आहे..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" शी जुळणारे कोणतेही अॅप्स आढळले नाहीत"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"अधिक अॅप्स शोधा"</string> <string name="notifications_header" msgid="1404149926117359025">"सूचना"</string> <string name="out_of_space" msgid="4691004494942118364">"या मुख्य स्क्रीनवर आणखी जागा नाही."</string> diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 5346d2bbe..27ae89003 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Lebar %1$d kali tinggi %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Sentuh & tahan untuk meletakkan widget/ikon secara manual"</string> <string name="place_automatically" msgid="8064208734425456485">"Tambahkan secara automatik"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Cari Apl"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Memuatkan Apl…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Tiada Apl yang ditemui sepadan dengan \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Cari lagi apl"</string> <string name="notifications_header" msgid="1404149926117359025">"Pemberitahuan"</string> <string name="out_of_space" msgid="4691004494942118364">"Tiada lagi ruang pada skrin Laman Utama ini."</string> diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index 7dd66892c..b847b906a 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"အလျား %1$d နှင့် အမြင့် %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ကိုယ်တိုင်ထည့်ရန် ထိထားပါ"</string> <string name="place_automatically" msgid="8064208734425456485">"အလိုအလျောက် ထည့်ရန်"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ရှာဖွေမှု အက်ပ်များ"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"အက်ပ်များ ရယူနေစဉ်..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" နှင့်ကိုက်ညီသည့် အပ်ဖ်များမတွေ့ပါ"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"နောက်ထပ် အက်ပ်များကို ရှာပါ"</string> <string name="notifications_header" msgid="1404149926117359025">"အကြောင်းကြားချက်များ"</string> <string name="out_of_space" msgid="4691004494942118364">"ဤပင်မမျက်နှာစာတွင် နေရာလွတ် မကျန်တော့ပါ"</string> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 21c2036ab..d8cde1b00 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d bredde x %2$d høyde"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Trykk og hold for å plassere manuelt"</string> <string name="place_automatically" msgid="8064208734425456485">"Legg til automatisk"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Søk i apper"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Laster inn apper …"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Fant ingen apper som samsvarer med «<xliff:g id="QUERY">%1$s</xliff:g>»"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Søk etter flere apper"</string> <string name="notifications_header" msgid="1404149926117359025">"Varsler"</string> <string name="out_of_space" msgid="4691004494942118364">"Denne startsiden er full."</string> diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index b28e0e2b4..3214a94c2 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d चौडाइ गुणा %2$d उचाइ"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"म्यानुअल तरिकाले थप्न छुनुहोस् र थिची राख्नुहोस्"</string> <string name="place_automatically" msgid="8064208734425456485">"स्वतः थप्नुहोस्"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"अनुप्रयोगहरू खोज्नुहोस्"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"अनुप्रयोगहरू लोड गरिँदै..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" सँग मिल्दो कुनै अनुप्रयोगहरू फेला परेनन्"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"थप अनुप्रयोगहरू खोज्नुहोस्"</string> <string name="notifications_header" msgid="1404149926117359025">"सूचनाहरू"</string> <string name="out_of_space" msgid="4691004494942118364">"यो गृह स्क्रिनमा कुनै थप ठाउँ छैन।"</string> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 5370528d4..85bec26bb 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d breed en %2$d hoog"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Tik op een item en houd dit vast om het handmatig te plaatsen"</string> <string name="place_automatically" msgid="8064208734425456485">"Automatisch toevoegen"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Apps zoeken"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Apps laden…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Er zijn geen apps gevonden die overeenkomen met \'<xliff:g id="QUERY">%1$s</xliff:g>\'"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Zoeken naar meer apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Meldingen"</string> <string name="out_of_space" msgid="4691004494942118364">"Er is geen ruimte meer op dit startscherm."</string> diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml index aaf4c92cb..72ba3d109 100644 --- a/res/values-pa-rIN/strings.xml +++ b/res/values-pa-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ਚੌੜਾਈ ਅਤੇ %2$d ਲੰਬਾਈ"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"ਹੱਥੀਂ ਰੱਖਣ ਲਈ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾਈ ਰੱਖੋ"</string> <string name="place_automatically" msgid="8064208734425456485">"ਸਵੈਚਲਿਤ ਤਰੀਕੇ ਨਾਲ ਸ਼ਾਮਲ ਕਰੋ"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ਐਪਸ ਖੋਜੋ"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ਐਪਾਂ ਨੂੰ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ਨਾਲ ਮਿਲਦੀਆਂ ਕੋਈ ਵੀ ਐਪਾਂ ਨਹੀਂ ਮਿਲੀਆਂ"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"ਹੋਰ ਐਪਾਂ ਖੋਜੋ"</string> <string name="notifications_header" msgid="1404149926117359025">"ਸੂਚਨਾਵਾਂ"</string> <string name="out_of_space" msgid="4691004494942118364">"ਇਸ ਹੋਮ ਸਕ੍ਰੀਨ ਲਈ ਹੋਰ ਖਾਲੀ ਸਥਾਨ ਨਹੀਂ ਹੈ।"</string> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 41c6ebe6a..2725407a9 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Szerokość %1$d, wysokość %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Kliknij i przytrzymaj, by umieścić ręcznie"</string> <string name="place_automatically" msgid="8064208734425456485">"Dodaj automatycznie"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Szukaj w aplikacjach"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Wczytuję aplikacje…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nie znaleziono aplikacji pasujących do zapytania „<xliff:g id="QUERY">%1$s</xliff:g>”"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Wyszukaj więcej aplikacji"</string> <string name="notifications_header" msgid="1404149926117359025">"Powiadomienia"</string> <string name="out_of_space" msgid="4691004494942118364">"Brak miejsca na tym ekranie głównym."</string> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index e12bc540e..4fee39269 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largura por %2$d de altura"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toque sem soltar para colocar manualmente"</string> <string name="place_automatically" msgid="8064208734425456485">"Adicionar automaticamente"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pesquisar aplicações"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"A carregar aplicações..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Não foram encontradas aplic. que correspondam a \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Pesquisar mais aplicações"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificações"</string> <string name="out_of_space" msgid="4691004494942118364">"Sem espaço suficiente neste Ecrã principal."</string> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index ac439192e..c8fde040f 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d de largura por %2$d de altura"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Toque e mantenha pressionado para posicionar manualmente"</string> <string name="place_automatically" msgid="8064208734425456485">"Adicionar automaticamente"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Pesquisar apps"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Carregando apps…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nenhum app encontrado que corresponda a \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Pesquisar mais apps"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificações"</string> <string name="out_of_space" msgid="4691004494942118364">"Não há mais espaço na tela inicial."</string> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 0ce4c1f33..43a82deef 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d lățime și %2$d înălțime"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Atingeți lung pentru a plasa manual"</string> <string name="place_automatically" msgid="8064208734425456485">"Adăugați automat"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Căutați aplicații"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Se încarcă aplicațiile..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nu s-a găsit nicio aplicație pentru „<xliff:g id="QUERY">%1$s</xliff:g>”"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Căutați mai multe aplicații"</string> <string name="notifications_header" msgid="1404149926117359025">"Notificări"</string> <string name="out_of_space" msgid="4691004494942118364">"Nu mai este loc pe acest Ecran de pornire."</string> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 71d1a72b2..4bbbc46a1 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина %1$d, высота %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Нажмите и удерживайте, чтобы добавить вручную"</string> <string name="place_automatically" msgid="8064208734425456485">"Добавить автоматически"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Поиск приложений"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Загрузка…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"По запросу \"<xliff:g id="QUERY">%1$s</xliff:g>\" ничего не найдено"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Искать другие приложения"</string> <string name="notifications_header" msgid="1404149926117359025">"Уведомления"</string> <string name="out_of_space" msgid="4691004494942118364">"На этом экране все занято"</string> diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 710c76c33..5c719f8ba 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"පළල %1$d උස %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"අතින් ස්ථානගත කිරීමට ස්පර්ශ කර අල්ලාගෙන සිටින්න"</string> <string name="place_automatically" msgid="8064208734425456485">"ස්වයංක්රියව එක් කරන්න"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"යෙදුම් සෙවීම"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"යෙදුම් පූරණය වෙමින්…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" සමග ගැළපෙන යෙදුම් හමු නොවිණි"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"තව යෙදුම් සඳහා සොයන්න"</string> <string name="notifications_header" msgid="1404149926117359025">"දැනුම්දීම්"</string> <string name="out_of_space" msgid="4691004494942118364">"මෙම මුල් පිටු තිරය මත තවත් අවසර නැත."</string> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 502ac27d8..c700a3eef 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"šírka %1$d, výška %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Položku umiestnite ručne klepnutím a podržaním"</string> <string name="place_automatically" msgid="8064208734425456485">"Pridať automaticky"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Hľadať aplikácie"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Načítavajú sa aplikácie..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nenašli sa žiadne aplikácie zodpovedajúce dopytu <xliff:g id="QUERY">%1$s</xliff:g>"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Hľadať ďalšie aplikácie"</string> <string name="notifications_header" msgid="1404149926117359025">"Upozornenia"</string> <string name="out_of_space" msgid="4691004494942118364">"Na tejto ploche už nie je miesto"</string> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index a16054dd2..0f5d84c47 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Širina %1$d, višina %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Dotaknite se elementa in ga pridržite, da ga ročno dodate"</string> <string name="place_automatically" msgid="8064208734425456485">"Samodejno dodaj"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Iskanje po aplikacijah"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Nalaganje aplikacij …"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Ni aplikacij, ki bi ustrezale poizvedbi »<xliff:g id="QUERY">%1$s</xliff:g>«"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Iskanje več aplikacij"</string> <string name="notifications_header" msgid="1404149926117359025">"Obvestila"</string> <string name="out_of_space" msgid="4691004494942118364">"Na tem začetnem zaslonu ni več prostora."</string> diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml index 8480288ce..b5f573bff 100644 --- a/res/values-sq-rAL/strings.xml +++ b/res/values-sq-rAL/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d i gjerë me %2$d i lartë"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Prek dhe mbaj të shtypur për të vendosur në mënyrë manuale"</string> <string name="place_automatically" msgid="8064208734425456485">"Shto automatikisht"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Kërko për aplikacione"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Po ngarkon aplikacionet..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Nuk u gjet asnjë aplikacion që përputhet me \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Kërko për më shumë aplikacione"</string> <string name="notifications_header" msgid="1404149926117359025">"Njoftimet"</string> <string name="out_of_space" msgid="4691004494942118364">"Nuk ka më hapësirë në këtë ekran bazë."</string> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 7dd327958..f2e4c71ca 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"ширина од %1$d и висина од %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Додирните и задржите да бисте поставили ручно"</string> <string name="place_automatically" msgid="8064208734425456485">"Аутоматски додај"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Претражите апликације"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Апликације се учитавају..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Није пронађена ниједна апликација за „<xliff:g id="QUERY">%1$s</xliff:g>“"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Претражи још апликација"</string> <string name="notifications_header" msgid="1404149926117359025">"Обавештења"</string> <string name="out_of_space" msgid="4691004494942118364">"Нема више простора на овом почетном екрану."</string> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index ae50060d3..751940043 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d bred gånger %2$d hög"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Placera manuellt genom att trycka länge"</string> <string name="place_automatically" msgid="8064208734425456485">"Lägg till automatiskt"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Sök efter appar"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Läser in appar …"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Det gick inte att hitta några appar som matchar <xliff:g id="QUERY">%1$s</xliff:g>"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Sök efter fler appar"</string> <string name="notifications_header" msgid="1404149926117359025">"Aviseringar"</string> <string name="out_of_space" msgid="4691004494942118364">"Det finns inte plats för mer på den här startskärmen."</string> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 2ecd0acb3..b99037f53 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Upana wa %1$d na kimo cha %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Gusa na ushikilie ili uweke mwenyewe"</string> <string name="place_automatically" msgid="8064208734425456485">"Ongeza kiotomatiki"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tafuta Programu"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Inapakia Programu..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Haikupata programu zinazolingana na \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Tafuta programu zaidi"</string> <string name="notifications_header" msgid="1404149926117359025">"Arifa"</string> <string name="out_of_space" msgid="4691004494942118364">"Hakuna nafasi katika skrini hii ya Mwanzo."</string> diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index eeca4299c..4a87893a7 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d அகலத்திற்கு %2$d உயரம்"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"நீங்களே சேர்க்க, தொட்டுப் பிடித்திருக்கவும்"</string> <string name="place_automatically" msgid="8064208734425456485">"தானாகவே சேர்"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"பயன்பாடுகளில் தேடுக"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"பயன்பாடுகளை ஏற்றுகிறது..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" உடன் பொருந்தும் பயன்பாடுகள் இல்லை"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"கூடுதல் பயன்பாடுகளைத் தேடு"</string> <string name="notifications_header" msgid="1404149926117359025">"அறிவிப்புகள்"</string> <string name="out_of_space" msgid="4691004494942118364">"முகப்புத் திரையில் இடமில்லை."</string> diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index 94e09d866..064b71f87 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d వెడల్పు X %2$d ఎత్తు"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"మాన్యువల్గా ఉంచడానికి నొక్కి &amp పట్టుకోండి"</string> <string name="place_automatically" msgid="8064208734425456485">"స్వయంచాలకంగా జోడించు"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"అనువర్తనాలను శోధించండి"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"అనువర్తనాలను లోడ్ చేస్తోంది…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\"కి సరిపోలే అనువర్తనాలేవీ కనుగొనబడలేదు"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"మరిన్ని అనువర్తనాల కోసం శోధించు"</string> <string name="notifications_header" msgid="1404149926117359025">"నోటిఫికేషన్లు"</string> <string name="out_of_space" msgid="4691004494942118364">"ఈ హోమ్ స్క్రీన్లో ఖాళీ లేదు."</string> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 3db6db8a2..bad494590 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"กว้าง %1$d x สูง %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"แตะค้างไว้เพื่อวางด้วยตัวเอง"</string> <string name="place_automatically" msgid="8064208734425456485">"เพิ่มโดยอัตโนมัติ"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ค้นหาแอป"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"กำลังโหลดแอป…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"ไม่พบแอปที่ตรงกับ \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"ค้นหาแอปเพิ่มเติม"</string> <string name="notifications_header" msgid="1404149926117359025">"การแจ้งเตือน"</string> <string name="out_of_space" msgid="4691004494942118364">"ไม่มีที่ว่างในหน้าจอหลักนี้"</string> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index f146f9a74..184a48390 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ang lapad at %2$d ang taas"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Pindutin nang matagal upang manual na ilagay"</string> <string name="place_automatically" msgid="8064208734425456485">"Awtomatikong idagdag"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Mga App sa Paghahanap"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Nilo-load ang Mga App…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Walang nakitang Mga App na tumutugma sa \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Maghanap ng higit pang mga app"</string> <string name="notifications_header" msgid="1404149926117359025">"Mga Notification"</string> <string name="out_of_space" msgid="4691004494942118364">"Wala nang lugar sa Home screen na ito."</string> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 168d3a544..e33d71a2e 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"genişlik: %1$d, yükseklik: %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Manuel olarak yerleştirmek için dokunun ve basılı tutun"</string> <string name="place_automatically" msgid="8064208734425456485">"Otomatik olarak ekle"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Uygulamalarda Ara"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Uygulamalar Yükleniyor…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" ile eşleşen uygulama bulunamadı"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Başka uygulamalar ara"</string> <string name="notifications_header" msgid="1404149926117359025">"Bildirimler"</string> <string name="out_of_space" msgid="4691004494942118364">"Bu Ana ekranda yer kalmadı."</string> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 0d8f15c73..b18b8f975 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Ширина – %1$d, висота – %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Натисніть і утримуйте, щоб додати вручну"</string> <string name="place_automatically" msgid="8064208734425456485">"Додати автоматично"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Пошук додатків"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Завантаження додатків…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Немає додатків для запиту \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Шукати ще додатки"</string> <string name="notifications_header" msgid="1404149926117359025">"Сповіщення"</string> <string name="out_of_space" msgid="4691004494942118364">"На цьому головному екрані більше немає місця."</string> diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index f3d6d3f3c..10cfcd3e0 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d چوڑا اور %2$d اونچا"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"دستی طور پر رکھنے کیلئے & ٹچ کرکے ہولڈ کریں"</string> <string name="place_automatically" msgid="8064208734425456485">"خود کار طور پر شامل کریں"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"ایپس تلاش کریں"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"ایپس لوڈ ہو رہی ہیں…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" سے مماثل کوئی ایپس نہیں ملیں"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"مزید ایپس تلاش کریں"</string> <string name="notifications_header" msgid="1404149926117359025">"اطلاعات"</string> <string name="out_of_space" msgid="4691004494942118364">"اس ہوم اسکرین پر مزید کوئی گنجائش نہیں ہے۔"</string> diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index c3c48061d..83803f59c 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Eni %1$d, bo‘yi %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Qo‘lda joylashtirish uchun bosib turing"</string> <string name="place_automatically" msgid="8064208734425456485">"Avtomatik chiqarish"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Ilovalar ichidan qidirish"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Ilovalar yuklanmoqda…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"“<xliff:g id="QUERY">%1$s</xliff:g>” so‘rovi bo‘yicha hech narsa topilmadi"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Boshqa ilovalarni qidirish"</string> <string name="notifications_header" msgid="1404149926117359025">"Bildirishnomalar"</string> <string name="out_of_space" msgid="4691004494942118364">"Uy ekranida bitta ham xona yo‘q."</string> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index fe2cfa1bb..093cfee21 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"Rộng %1$d x cao %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Chạm và giữ để đặt theo cách thủ công"</string> <string name="place_automatically" msgid="8064208734425456485">"Tự động thêm"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tìm kiếm ứng dụng"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Đang tải ứng dụng..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Không tìm thấy ứng dụng nào phù hợp với \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Tìm kiếm thêm ứng dụng"</string> <string name="notifications_header" msgid="1404149926117359025">"Thông báo"</string> <string name="out_of_space" msgid="4691004494942118364">"Không còn chỗ trên Màn hình chính này."</string> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 15e24a100..a83b1f35d 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"宽 %1$d,高 %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"触摸并按住即可手动放置"</string> <string name="place_automatically" msgid="8064208734425456485">"自动添加"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"搜索应用"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"正在加载应用…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"未找到与“<xliff:g id="QUERY">%1$s</xliff:g>”相符的应用"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"搜索更多应用"</string> <string name="notifications_header" msgid="1404149926117359025">"通知"</string> <string name="out_of_space" msgid="4691004494942118364">"此主屏幕上已没有空间。"</string> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 408718005..520b18f40 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d 闊,%2$d 高"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"按住即可手動新增"</string> <string name="place_automatically" msgid="8064208734425456485">"自動新增"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"搜尋應用程式"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"正在載入應用程式…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"無法找到與「<xliff:g id="QUERY">%1$s</xliff:g>」相符的應用程式"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"搜尋更多應用程式"</string> <string name="notifications_header" msgid="1404149926117359025">"通知"</string> <string name="out_of_space" msgid="4691004494942118364">"主畫面已無空間。"</string> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index f123d4066..ff79d9b20 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"寬度為 %1$d,高度為 %2$d"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"按住即可手動放置"</string> <string name="place_automatically" msgid="8064208734425456485">"自動新增"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"搜尋應用程式"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"正在載入應用程式…"</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"找不到符合「<xliff:g id="QUERY">%1$s</xliff:g>」的應用程式"</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"搜尋更多應用程式"</string> <string name="notifications_header" msgid="1404149926117359025">"通知"</string> <string name="out_of_space" msgid="4691004494942118364">"這個主螢幕已無空間。"</string> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index a32093c8c..4a77c23e0 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -35,9 +35,12 @@ <string name="widget_accessible_dims_format" msgid="3640149169885301790">"%1$d ububanzi ngokungu-%2$d ukuya phezulu"</string> <string name="add_item_request_drag_hint" msgid="5899764264480397019">"Thinta futhi ubambe ukuze ubeke ngokwenza"</string> <string name="place_automatically" msgid="8064208734425456485">"Engeza ngokuzenzakalelayo"</string> - <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Sesha Izinhlelo Zokusebenza"</string> - <string name="all_apps_loading_message" msgid="7557140873644765180">"Ilayisha izinhlelo zokusebenza..."</string> - <string name="all_apps_no_search_results" msgid="6332185285860416787">"Azikho izinhlelo zokusebenza ezitholakele ezifana ne-\"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> + <!-- no translation found for all_apps_search_bar_hint (1390553134053255246) --> + <skip /> + <!-- no translation found for all_apps_loading_message (5813968043155271636) --> + <skip /> + <!-- no translation found for all_apps_no_search_results (3200346862396363786) --> + <skip /> <string name="all_apps_search_market_message" msgid="1366263386197059176">"Sesha izinhlelo zokusebenza eziningi"</string> <string name="notifications_header" msgid="1404149926117359025">"Izaziso"</string> <string name="out_of_space" msgid="4691004494942118364">"Asisekho isikhala kulesi sikrini Sasekhaya."</string> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 356de7869..0eb3982ca 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -138,10 +138,11 @@ <dimen name="folder_preview_padding">10dp</dimen> <dimen name="page_indicator_dot_size">8dp</dimen> - <dimen name="folder_cell_x_padding">9dp</dimen> - <dimen name="folder_cell_y_padding">6dp</dimen> + <dimen name="folder_cell_x_padding">8dp</dimen> + <dimen name="folder_cell_y_padding">8dp</dimen> <dimen name="folder_child_text_size">13sp</dimen> - <dimen name="folder_label_padding_top">4dp</dimen> + <dimen name="folder_child_icon_drawable_padding">8dp</dimen> + <dimen name="folder_label_padding_top">12dp</dimen> <dimen name="folder_label_padding_bottom">12dp</dimen> <dimen name="folder_label_text_size">14sp</dimen> diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 2d5f8d016..38011eaa3 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -108,6 +108,7 @@ public class DeviceProfile { public int folderChildIconSizePx; public int folderChildTextSizePx; public int folderChildDrawablePaddingPx; + public final int folderChildDrawablePaddingOriginalPx; // Hotseat public int hotseatCellHeightPx; @@ -220,6 +221,9 @@ public class DeviceProfile { hotseatLandRightNavBarGutterPx = res.getDimensionPixelSize( R.dimen.dynamic_grid_hotseat_land_right_nav_bar_gutter_width); + folderChildDrawablePaddingOriginalPx = + res.getDimensionPixelSize(R.dimen.folder_child_icon_drawable_padding); + // Determine sizes. widthPx = width; heightPx = height; @@ -390,15 +394,15 @@ public class DeviceProfile { folderChildIconSizePx = (int) (Utilities.pxFromDp(inv.iconSize, dm) * scale); folderChildTextSizePx = (int) (res.getDimensionPixelSize(R.dimen.folder_child_text_size) * scale); + folderChildDrawablePaddingPx = (int) (folderChildDrawablePaddingOriginalPx * scale); int textHeight = Utilities.calculateTextHeight(folderChildTextSizePx); int cellPaddingX = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_x_padding) * scale); int cellPaddingY = (int) (res.getDimensionPixelSize(R.dimen.folder_cell_y_padding) * scale); folderCellWidthPx = folderChildIconSizePx + 2 * cellPaddingX; - folderCellHeightPx = folderChildIconSizePx + 2 * cellPaddingY + textHeight; - folderChildDrawablePaddingPx = Math.max(0, - (folderCellHeightPx - folderChildIconSizePx - textHeight) / 3); + folderCellHeightPx = folderChildIconSizePx + 2 * cellPaddingY + textHeight + + folderChildDrawablePaddingPx; } public void updateInsets(Rect insets) { diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 185c8879d..87f3ddaf4 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -48,6 +48,7 @@ import android.view.animation.Interpolator; import com.android.launcher3.anim.PropertyListBuilder; import com.android.launcher3.pageindicators.PageIndicator; +import com.android.launcher3.touch.OverScroll; import com.android.launcher3.util.Themes; import com.android.launcher3.util.Thunk; @@ -68,10 +69,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc public static final int PAGE_SNAP_ANIMATION_DURATION = 750; protected static final int SLOW_PAGE_SNAP_ANIMATION_DURATION = 950; - // Overscroll constants + // OverScroll constants private final static int OVERSCROLL_PAGE_SNAP_ANIMATION_DURATION = 270; - private static final float OVERSCROLL_ACCELERATE_FACTOR = 2; - private static final float OVERSCROLL_DAMP_FACTOR = 0.07f; private static final float RETURN_TO_ORIGINAL_PAGE_THRESHOLD = 0.33f; // The page is moved more than halfway, automatically move to the next page on touch up. @@ -188,7 +187,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc // Convenience/caching private static final Matrix sTmpInvMatrix = new Matrix(); private static final float[] sTmpPoint = new float[2]; - private static final int[] sTmpIntPoint = new int[2]; private static final Rect sTmpRect = new Rect(); protected final Rect mInsets = new Rect(); @@ -233,8 +231,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc mMinSnapVelocity = (int) (MIN_SNAP_VELOCITY * density); setOnHierarchyChangeListener(this); setWillNotDraw(false); - - int edgeEffectColor = Themes.getAttrColor(getContext(), android.R.attr.colorEdgeEffect); } protected void setDefaultInterpolator(Interpolator interpolator) { @@ -1305,29 +1301,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } } - // This curve determines how the effect of scrolling over the limits of the page dimishes - // as the user pulls further and further from the bounds - private float overScrollInfluenceCurve(float f) { - f -= 1.0f; - return f * f * f + 1.0f; - } - - protected float acceleratedOverFactor(float amount) { - int screenSize = getViewportWidth(); - - // We want to reach the max over scroll effect when the user has - // over scrolled half the size of the screen - float f = OVERSCROLL_ACCELERATE_FACTOR * (amount / screenSize); - - if (Float.compare(f, 0f) == 0) return 0; - - // Clamp this factor, f, to -1 < f < 1 - if (Math.abs(f) >= 1) { - f /= Math.abs(f); - } - return f; - } - // While layout transitions are occurring, a child's position may stray from its baseline // position. This method returns the magnitude of this stray at any given time. public int getLayoutTransitionOffsetForPage(int index) { @@ -1348,20 +1321,9 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void dampedOverScroll(float amount) { - int screenSize = getViewportWidth(); - - float f = (amount / screenSize); - - if (Float.compare(f, 0f) == 0) return; - - f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f))); + if (Float.compare(amount, 0f) == 0) return; - // Clamp this factor, f, to -1 < f < 1 - if (Math.abs(f) >= 1) { - f /= Math.abs(f); - } - - int overScrollAmount = (int) Math.round(OVERSCROLL_DAMP_FACTOR * f * screenSize); + int overScrollAmount = OverScroll.dampedScroll(amount, getViewportWidth()); if (amount < 0) { mOverScrollX = overScrollAmount; super.scrollTo(mOverScrollX, getScrollY()); @@ -1376,14 +1338,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc dampedOverScroll(amount); } - protected float maxOverScroll() { - // Using the formula in overScroll, assuming that f = 1.0 (which it should generally not - // exceed). Used to find out how much extra wallpaper we need for the over scroll effect - float f = 1.0f; - f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f))); - return OVERSCROLL_DAMP_FACTOR * f; - } - /** * return true if freescroll has been enabled, false otherwise */ diff --git a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java index 816121995..b7c500fa6 100644 --- a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java @@ -50,8 +50,7 @@ public class ShortcutMenuAccessibilityDelegate extends LauncherAccessibilityDele if ((host.getParent() instanceof DeepShortcutView)) { info.addAction(mActions.get(ADD_TO_WORKSPACE)); } else if (host instanceof NotificationMainView) { - NotificationMainView notificationView = (NotificationMainView) host; - if (notificationView.canChildBeDismissed(notificationView)) { + if (((NotificationMainView) host).canChildBeDismissed()) { info.addAction(mActions.get(DISMISS_NOTIFICATION)); } } @@ -88,8 +87,7 @@ public class ShortcutMenuAccessibilityDelegate extends LauncherAccessibilityDele if (!(host instanceof NotificationMainView)) { return false; } - NotificationMainView notificationView = (NotificationMainView) host; - notificationView.onChildDismissed(notificationView); + ((NotificationMainView) host).onChildDismissed(); announceConfirmation(R.string.notification_dismissed); return true; } diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index 2abb766e8..ab589d83b 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -36,6 +36,7 @@ import com.android.launcher3.anim.SpringAnimationHandler; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.DrawableFactory; import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider; +import com.android.launcher3.touch.OverScroll; import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; @@ -98,8 +99,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView implements LogContaine R.dimen.all_apps_empty_search_bg_top_offset); mOverScrollHelper = new OverScrollHelper(); - mPullDetector = new SwipeDetector(getContext()); - mPullDetector.setListener(mOverScrollHelper); + mPullDetector = new SwipeDetector(getContext(), mOverScrollHelper, SwipeDetector.VERTICAL); mPullDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, true); } @@ -564,37 +564,7 @@ public class AllAppsRecyclerView extends BaseRecyclerView implements LogContaine } private float getDampedOverScroll(float y) { - return dampedOverScroll(y, getHeight()) * MAX_OVERSCROLL_PERCENTAGE; - } - - /** - * This curve determines how the effect of scrolling over the limits of the page diminishes - * as the user pulls further and further from the bounds - * - * @param f The percentage of how much the user has overscrolled. - * @return A transformed percentage based on the influence curve. - */ - private float overScrollInfluenceCurve(float f) { - f -= 1.0f; - return f * f * f + 1.0f; - } - - /** - * @param amount The original amount overscrolled. - * @param max The maximum amount that the View can overscroll. - * @return The dampened overscroll amount. - */ - private float dampedOverScroll(float amount, float max) { - float f = amount / max; - if (Float.compare(f, 0) == 0) return 0; - f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f))); - - // Clamp this factor, f, to -1 < f < 1 - if (Math.abs(f) >= 1) { - f /= Math.abs(f); - } - - return Math.round(f * max); + return OverScroll.dampedScroll(y, getHeight()); } } } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index ecb972496..a6194cc20 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -107,8 +107,7 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect public AllAppsTransitionController(Launcher l) { mLauncher = l; - mDetector = new SwipeDetector(l); - mDetector.setListener(this); + mDetector = new SwipeDetector(l, this, SwipeDetector.VERTICAL); mShiftRange = DEFAULT_SHIFT_RANGE; mProgress = 1f; @@ -137,15 +136,15 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect if (mDetector.isIdleState()) { if (mLauncher.isAllAppsVisible()) { - directionsToDetectScroll |= SwipeDetector.DIRECTION_DOWN; + directionsToDetectScroll |= SwipeDetector.DIRECTION_NEGATIVE; } else { - directionsToDetectScroll |= SwipeDetector.DIRECTION_UP; + directionsToDetectScroll |= SwipeDetector.DIRECTION_POSITIVE; } } else { if (isInDisallowRecatchBottomZone()) { - directionsToDetectScroll |= SwipeDetector.DIRECTION_UP; + directionsToDetectScroll |= SwipeDetector.DIRECTION_POSITIVE; } else if (isInDisallowRecatchTopZone()) { - directionsToDetectScroll |= SwipeDetector.DIRECTION_DOWN; + directionsToDetectScroll |= SwipeDetector.DIRECTION_NEGATIVE; } else { directionsToDetectScroll |= SwipeDetector.DIRECTION_BOTH; ignoreSlopWhenSettling = true; @@ -368,7 +367,7 @@ public class AllAppsTransitionController implements TouchController, SwipeDetect } private void calculateDuration(float velocity, float disp) { - mAnimationDuration = mDetector.calculateDuration(velocity, disp / mShiftRange); + mAnimationDuration = SwipeDetector.calculateDuration(velocity, disp / mShiftRange); } public boolean animateToAllApps(AnimatorSet animationOut, long duration) { diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java index 69705d594..d7f5c2b64 100644 --- a/src/com/android/launcher3/folder/FolderAnimationManager.java +++ b/src/com/android/launcher3/folder/FolderAnimationManager.java @@ -120,6 +120,7 @@ public class FolderAnimationManager { final DragLayer.LayoutParams lp = (DragLayer.LayoutParams) mFolder.getLayoutParams(); FolderIcon.PreviewLayoutRule rule = mFolderIcon.getLayoutRule(); final List<BubbleTextView> itemsInPreview = mFolderIcon.getPreviewItems(); + BubbleTextView btv = itemsInPreview.get(0); // Match position of the FolderIcon final Rect folderIconPos = new Rect(); @@ -131,7 +132,7 @@ public class FolderAnimationManager { // Match size/scale of icons in the preview float previewScale = rule.scaleForItem(0, itemsInPreview.size()); float previewSize = rule.getIconSize() * previewScale; - float initialScale = previewSize / itemsInPreview.get(0).getIconSize() + float initialScale = previewSize / btv.getIconSize() * scaleRelativeToDragLayer; final float finalScale = 1f; float scale = mIsOpening ? initialScale : finalScale; @@ -148,10 +149,12 @@ public class FolderAnimationManager { previewItemOffsetX = (int) (lp.width * initialScale - initialSize - previewItemOffsetX); } + // Note that we do not include btv.getPaddingLeft() in the calculation, since it is + // handled in addPreviewItemAnimators as part of iconOffsetX. final int paddingOffsetX = (int) ((mFolder.getPaddingLeft() + mContent.getPaddingLeft()) * initialScale); - final int paddingOffsetY = (int) ((mFolder.getPaddingTop() + mContent.getPaddingTop()) - * initialScale); + final int paddingOffsetY = (int) ((mFolder.getPaddingTop() + mContent.getPaddingTop() + + btv.getPaddingTop()) * initialScale); int initialX = folderIconPos.left + mPreviewBackground.getOffsetX() - paddingOffsetX - previewItemOffsetX; diff --git a/src/com/android/launcher3/graphics/ShadowGenerator.java b/src/com/android/launcher3/graphics/ShadowGenerator.java index 3c71c3acc..60eeef5df 100644 --- a/src/com/android/launcher3/graphics/ShadowGenerator.java +++ b/src/com/android/launcher3/graphics/ShadowGenerator.java @@ -53,33 +53,38 @@ public class ShadowGenerator { private final Canvas mCanvas; private final Paint mBlurPaint; private final Paint mDrawPaint; + private final BlurMaskFilter mDefaultBlurMaskFilter; private ShadowGenerator(Context context) { mIconSize = LauncherAppState.getIDP(context).iconBitmapSize; mCanvas = new Canvas(); mBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); - mBlurPaint.setMaskFilter(new BlurMaskFilter(mIconSize * BLUR_FACTOR, Blur.NORMAL)); mDrawPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + mDefaultBlurMaskFilter = new BlurMaskFilter(mIconSize * BLUR_FACTOR, Blur.NORMAL); } public synchronized Bitmap recreateIcon(Bitmap icon) { - return recreateIcon(icon, true); + return recreateIcon(icon, true, mDefaultBlurMaskFilter, AMBIENT_SHADOW_ALPHA, + KEY_SHADOW_ALPHA); } - public synchronized Bitmap recreateIcon(Bitmap icon, boolean resize) { + public synchronized Bitmap recreateIcon(Bitmap icon, boolean resize, + BlurMaskFilter blurMaskFilter, int ambientAlpha, int keyAlpha) { int width = resize ? mIconSize : icon.getWidth(); int height = resize ? mIconSize : icon.getHeight(); int[] offset = new int[2]; + + mBlurPaint.setMaskFilter(blurMaskFilter); Bitmap shadow = icon.extractAlpha(mBlurPaint, offset); Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888); mCanvas.setBitmap(result); // Draw ambient shadow - mDrawPaint.setAlpha(AMBIENT_SHADOW_ALPHA); + mDrawPaint.setAlpha(ambientAlpha); mCanvas.drawBitmap(shadow, offset[0], offset[1], mDrawPaint); // Draw key shadow - mDrawPaint.setAlpha(KEY_SHADOW_ALPHA); + mDrawPaint.setAlpha(keyAlpha); mCanvas.drawBitmap(shadow, offset[0], offset[1] + KEY_SHADOW_DISTANCE * mIconSize, mDrawPaint); // Draw the icon diff --git a/src/com/android/launcher3/notification/FlingAnimationUtils.java b/src/com/android/launcher3/notification/FlingAnimationUtils.java deleted file mode 100644 index a1f7e49c0..000000000 --- a/src/com/android/launcher3/notification/FlingAnimationUtils.java +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.notification; - -import android.animation.Animator; -import android.content.Context; -import android.view.ViewPropertyAnimator; -import android.view.animation.Interpolator; -import android.view.animation.PathInterpolator; - -/** - * Utility class to calculate general fling animation when the finger is released. - * - * This class was copied from com.android.systemui.statusbar. - */ -public class FlingAnimationUtils { - - private static final float LINEAR_OUT_SLOW_IN_X2 = 0.35f; - private static final float LINEAR_OUT_SLOW_IN_X2_MAX = 0.68f; - private static final float LINEAR_OUT_FASTER_IN_X2 = 0.5f; - private static final float LINEAR_OUT_FASTER_IN_Y2_MIN = 0.4f; - private static final float LINEAR_OUT_FASTER_IN_Y2_MAX = 0.5f; - private static final float MIN_VELOCITY_DP_PER_SECOND = 250; - private static final float HIGH_VELOCITY_DP_PER_SECOND = 3000; - - private static final float LINEAR_OUT_SLOW_IN_START_GRADIENT = 0.75f; - private final float mSpeedUpFactor; - private final float mY2; - - private float mMinVelocityPxPerSecond; - private float mMaxLengthSeconds; - private float mHighVelocityPxPerSecond; - private float mLinearOutSlowInX2; - - private AnimatorProperties mAnimatorProperties = new AnimatorProperties(); - private PathInterpolator mInterpolator; - private float mCachedStartGradient = -1; - private float mCachedVelocityFactor = -1; - - public FlingAnimationUtils(Context ctx, float maxLengthSeconds) { - this(ctx, maxLengthSeconds, 0.0f); - } - - /** - * @param maxLengthSeconds the longest duration an animation can become in seconds - * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards - * the end of the animation. 0 means it's at the beginning and no - * acceleration will take place. - */ - public FlingAnimationUtils(Context ctx, float maxLengthSeconds, float speedUpFactor) { - this(ctx, maxLengthSeconds, speedUpFactor, -1.0f, 1.0f); - } - - /** - * @param maxLengthSeconds the longest duration an animation can become in seconds - * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards - * the end of the animation. 0 means it's at the beginning and no - * acceleration will take place. - * @param x2 the x value to take for the second point of the bezier spline. If a value below 0 - * is provided, the value is automatically calculated. - * @param y2 the y value to take for the second point of the bezier spline - */ - public FlingAnimationUtils(Context ctx, float maxLengthSeconds, float speedUpFactor, float x2, - float y2) { - mMaxLengthSeconds = maxLengthSeconds; - mSpeedUpFactor = speedUpFactor; - if (x2 < 0) { - mLinearOutSlowInX2 = interpolate(LINEAR_OUT_SLOW_IN_X2, - LINEAR_OUT_SLOW_IN_X2_MAX, - mSpeedUpFactor); - } else { - mLinearOutSlowInX2 = x2; - } - mY2 = y2; - - mMinVelocityPxPerSecond - = MIN_VELOCITY_DP_PER_SECOND * ctx.getResources().getDisplayMetrics().density; - mHighVelocityPxPerSecond - = HIGH_VELOCITY_DP_PER_SECOND * ctx.getResources().getDisplayMetrics().density; - } - - private static float interpolate(float start, float end, float amount) { - return start * (1.0f - amount) + end * amount; - } - - /** - * Applies the interpolator and length to the animator, such that the fling animation is - * consistent with the finger motion. - * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion - */ - public void apply(Animator animator, float currValue, float endValue, float velocity) { - apply(animator, currValue, endValue, velocity, Math.abs(endValue - currValue)); - } - - /** - * Applies the interpolator and length to the animator, such that the fling animation is - * consistent with the finger motion. - * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion - */ - public void apply(ViewPropertyAnimator animator, float currValue, float endValue, - float velocity) { - apply(animator, currValue, endValue, velocity, Math.abs(endValue - currValue)); - } - - /** - * Applies the interpolator and length to the animator, such that the fling animation is - * consistent with the finger motion. - * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion - * @param maxDistance the maximum distance for this interaction; the maximum animation length - * gets multiplied by the ratio between the actual distance and this value - */ - public void apply(Animator animator, float currValue, float endValue, float velocity, - float maxDistance) { - AnimatorProperties properties = getProperties(currValue, endValue, velocity, - maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); - } - - /** - * Applies the interpolator and length to the animator, such that the fling animation is - * consistent with the finger motion. - * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion - * @param maxDistance the maximum distance for this interaction; the maximum animation length - * gets multiplied by the ratio between the actual distance and this value - */ - public void apply(ViewPropertyAnimator animator, float currValue, float endValue, - float velocity, float maxDistance) { - AnimatorProperties properties = getProperties(currValue, endValue, velocity, - maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); - } - - private AnimatorProperties getProperties(float currValue, - float endValue, float velocity, float maxDistance) { - float maxLengthSeconds = (float) (mMaxLengthSeconds - * Math.sqrt(Math.abs(endValue - currValue) / maxDistance)); - float diff = Math.abs(endValue - currValue); - float velAbs = Math.abs(velocity); - float velocityFactor = mSpeedUpFactor == 0.0f - ? 1.0f : Math.min(velAbs / HIGH_VELOCITY_DP_PER_SECOND, 1.0f); - float startGradient = interpolate(LINEAR_OUT_SLOW_IN_START_GRADIENT, - mY2 / mLinearOutSlowInX2, velocityFactor); - float durationSeconds = startGradient * diff / velAbs; - Interpolator slowInInterpolator = getInterpolator(startGradient, velocityFactor); - if (durationSeconds <= maxLengthSeconds) { - mAnimatorProperties.interpolator = slowInInterpolator; - } else if (velAbs >= mMinVelocityPxPerSecond) { - - // Cross fade between fast-out-slow-in and linear interpolator with current velocity. - durationSeconds = maxLengthSeconds; - VelocityInterpolator velocityInterpolator - = new VelocityInterpolator(durationSeconds, velAbs, diff); - InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator( - velocityInterpolator, slowInInterpolator, Interpolators.LINEAR_OUT_SLOW_IN); - mAnimatorProperties.interpolator = superInterpolator; - } else { - - // Just use a normal interpolator which doesn't take the velocity into account. - durationSeconds = maxLengthSeconds; - mAnimatorProperties.interpolator = Interpolators.FAST_OUT_SLOW_IN; - } - mAnimatorProperties.duration = (long) (durationSeconds * 1000); - return mAnimatorProperties; - } - - private Interpolator getInterpolator(float startGradient, float velocityFactor) { - if (startGradient != mCachedStartGradient - || velocityFactor != mCachedVelocityFactor) { - float speedup = mSpeedUpFactor * (1.0f - velocityFactor); - mInterpolator = new PathInterpolator(speedup, - speedup * startGradient, - mLinearOutSlowInX2, mY2); - mCachedStartGradient = startGradient; - mCachedVelocityFactor = velocityFactor; - } - return mInterpolator; - } - - /** - * Applies the interpolator and length to the animator, such that the fling animation is - * consistent with the finger motion for the case when the animation is making something - * disappear. - * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion - * @param maxDistance the maximum distance for this interaction; the maximum animation length - * gets multiplied by the ratio between the actual distance and this value - */ - public void applyDismissing(Animator animator, float currValue, float endValue, - float velocity, float maxDistance) { - AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity, - maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); - } - - /** - * Applies the interpolator and length to the animator, such that the fling animation is - * consistent with the finger motion for the case when the animation is making something - * disappear. - * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion - * @param maxDistance the maximum distance for this interaction; the maximum animation length - * gets multiplied by the ratio between the actual distance and this value - */ - public void applyDismissing(ViewPropertyAnimator animator, float currValue, float endValue, - float velocity, float maxDistance) { - AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity, - maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); - } - - private AnimatorProperties getDismissingProperties(float currValue, float endValue, - float velocity, float maxDistance) { - float maxLengthSeconds = (float) (mMaxLengthSeconds - * Math.pow(Math.abs(endValue - currValue) / maxDistance, 0.5f)); - float diff = Math.abs(endValue - currValue); - float velAbs = Math.abs(velocity); - float y2 = calculateLinearOutFasterInY2(velAbs); - - float startGradient = y2 / LINEAR_OUT_FASTER_IN_X2; - Interpolator mLinearOutFasterIn = new PathInterpolator(0, 0, LINEAR_OUT_FASTER_IN_X2, y2); - float durationSeconds = startGradient * diff / velAbs; - if (durationSeconds <= maxLengthSeconds) { - mAnimatorProperties.interpolator = mLinearOutFasterIn; - } else if (velAbs >= mMinVelocityPxPerSecond) { - - // Cross fade between linear-out-faster-in and linear interpolator with current - // velocity. - durationSeconds = maxLengthSeconds; - VelocityInterpolator velocityInterpolator - = new VelocityInterpolator(durationSeconds, velAbs, diff); - InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator( - velocityInterpolator, mLinearOutFasterIn, Interpolators.LINEAR_OUT_SLOW_IN); - mAnimatorProperties.interpolator = superInterpolator; - } else { - - // Just use a normal interpolator which doesn't take the velocity into account. - durationSeconds = maxLengthSeconds; - mAnimatorProperties.interpolator = Interpolators.FAST_OUT_LINEAR_IN; - } - mAnimatorProperties.duration = (long) (durationSeconds * 1000); - return mAnimatorProperties; - } - - /** - * Calculates the y2 control point for a linear-out-faster-in path interpolator depending on the - * velocity. The faster the velocity, the more "linear" the interpolator gets. - * - * @param velocity the velocity of the gesture. - * @return the y2 control point for a cubic bezier path interpolator - */ - private float calculateLinearOutFasterInY2(float velocity) { - float t = (velocity - mMinVelocityPxPerSecond) - / (mHighVelocityPxPerSecond - mMinVelocityPxPerSecond); - t = Math.max(0, Math.min(1, t)); - return (1 - t) * LINEAR_OUT_FASTER_IN_Y2_MIN + t * LINEAR_OUT_FASTER_IN_Y2_MAX; - } - - /** - * @return the minimum velocity a gesture needs to have to be considered a fling - */ - public float getMinVelocityPxPerSecond() { - return mMinVelocityPxPerSecond; - } - - /** - * An interpolator which interpolates two interpolators with an interpolator. - */ - private static final class InterpolatorInterpolator implements Interpolator { - - private Interpolator mInterpolator1; - private Interpolator mInterpolator2; - private Interpolator mCrossfader; - - InterpolatorInterpolator(Interpolator interpolator1, Interpolator interpolator2, - Interpolator crossfader) { - mInterpolator1 = interpolator1; - mInterpolator2 = interpolator2; - mCrossfader = crossfader; - } - - @Override - public float getInterpolation(float input) { - float t = mCrossfader.getInterpolation(input); - return (1 - t) * mInterpolator1.getInterpolation(input) - + t * mInterpolator2.getInterpolation(input); - } - } - - /** - * An interpolator which interpolates with a fixed velocity. - */ - private static final class VelocityInterpolator implements Interpolator { - - private float mDurationSeconds; - private float mVelocity; - private float mDiff; - - private VelocityInterpolator(float durationSeconds, float velocity, float diff) { - mDurationSeconds = durationSeconds; - mVelocity = velocity; - mDiff = diff; - } - - @Override - public float getInterpolation(float input) { - float time = input * mDurationSeconds; - return time * mVelocity / mDiff; - } - } - - private static class AnimatorProperties { - Interpolator interpolator; - long duration; - } - -} diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java index 11f6aa081..78c64d7da 100644 --- a/src/com/android/launcher3/notification/NotificationItemView.java +++ b/src/com/android/launcher3/notification/NotificationItemView.java @@ -37,6 +37,7 @@ import com.android.launcher3.anim.RoundedRectRevealOutlineProvider; import com.android.launcher3.graphics.IconPalette; import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider; import com.android.launcher3.popup.PopupItemView; +import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.util.Themes; @@ -56,7 +57,7 @@ public class NotificationItemView extends PopupItemView implements LogContainerP private TextView mHeaderCount; private NotificationMainView mMainView; private NotificationFooterLayout mFooter; - private SwipeHelper mSwipeHelper; + private SwipeDetector mSwipeDetector; private boolean mAnimatingNextIcon; private int mNotificationHeaderTextColor = Notification.COLOR_DEFAULT; @@ -75,12 +76,14 @@ public class NotificationItemView extends PopupItemView implements LogContainerP @Override protected void onFinishInflate() { super.onFinishInflate(); - mHeaderText = (TextView) findViewById(R.id.notification_text); - mHeaderCount = (TextView) findViewById(R.id.notification_count); - mMainView = (NotificationMainView) findViewById(R.id.main_view); - mFooter = (NotificationFooterLayout) findViewById(R.id.footer); - mSwipeHelper = new SwipeHelper(SwipeHelper.X, mMainView, getContext()); - mSwipeHelper.setDisableHardwareLayers(true); + mHeaderText = findViewById(R.id.notification_text); + mHeaderCount = findViewById(R.id.notification_count); + mMainView = findViewById(R.id.main_view); + mFooter = findViewById(R.id.footer); + + mSwipeDetector = new SwipeDetector(getContext(), mMainView, SwipeDetector.HORIZONTAL); + mSwipeDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, false); + mMainView.setSwipeDetector(mSwipeDetector); } public NotificationMainView getMainView() { @@ -136,7 +139,8 @@ public class NotificationItemView extends PopupItemView implements LogContainerP return false; } getParent().requestDisallowInterceptTouchEvent(true); - return mSwipeHelper.onInterceptTouchEvent(ev); + mSwipeDetector.onTouchEvent(ev); + return mSwipeDetector.isDraggingOrSettling(); } @Override @@ -145,7 +149,7 @@ public class NotificationItemView extends PopupItemView implements LogContainerP // The notification hasn't been populated yet. return false; } - return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev); + return mSwipeDetector.onTouchEvent(ev) || super.onTouchEvent(ev); } public void applyNotificationInfos(final List<NotificationInfo> notificationInfos) { diff --git a/src/com/android/launcher3/notification/NotificationMainView.java b/src/com/android/launcher3/notification/NotificationMainView.java index 9b8dd648f..5aff28db4 100644 --- a/src/com/android/launcher3/notification/NotificationMainView.java +++ b/src/com/android/launcher3/notification/NotificationMainView.java @@ -23,15 +23,17 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.RippleDrawable; import android.text.TextUtils; import android.util.AttributeSet; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; import android.widget.FrameLayout; import android.widget.TextView; import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; import com.android.launcher3.R; +import com.android.launcher3.touch.OverScroll; +import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.util.Themes; @@ -39,7 +41,7 @@ import com.android.launcher3.util.Themes; * A {@link android.widget.FrameLayout} that contains a single notification, * e.g. icon + title + text. */ -public class NotificationMainView extends FrameLayout implements SwipeHelper.Callback { +public class NotificationMainView extends FrameLayout implements SwipeDetector.Listener { private NotificationInfo mNotificationInfo; private ViewGroup mTextAndBackground; @@ -47,6 +49,8 @@ public class NotificationMainView extends FrameLayout implements SwipeHelper.Cal private TextView mTitleView; private TextView mTextView; + private SwipeDetector mSwipeDetector; + public NotificationMainView(Context context) { this(context, null, 0); } @@ -78,6 +82,10 @@ public class NotificationMainView extends FrameLayout implements SwipeHelper.Cal applyNotificationInfo(mainNotification, iconView, false); } + public void setSwipeDetector(SwipeDetector swipeDetector) { + mSwipeDetector = swipeDetector; + } + /** * Sets the content of this view, animating it after a new icon shifts up if necessary. */ @@ -113,29 +121,11 @@ public class NotificationMainView extends FrameLayout implements SwipeHelper.Cal } - // SwipeHelper.Callback's - - @Override - public View getChildAtPosition(MotionEvent ev) { - return this; - } - - @Override - public boolean canChildBeDismissed(View v) { + public boolean canChildBeDismissed() { return mNotificationInfo != null && mNotificationInfo.dismissable; } - @Override - public boolean isAntiFalsingNeeded() { - return false; - } - - @Override - public void onBeginDrag(View v) { - } - - @Override - public void onChildDismissed(View v) { + public void onChildDismissed() { Launcher launcher = Launcher.getLauncher(getContext()); launcher.getPopupDataProvider().cancelNotification( mNotificationInfo.notificationKey); @@ -145,22 +135,55 @@ public class NotificationMainView extends FrameLayout implements SwipeHelper.Cal LauncherLogProto.ItemType.NOTIFICATION); } + // SwipeDetector.Listener's @Override - public void onDragCancelled(View v) { - } + public void onDragStart(boolean start) { } - @Override - public void onChildSnappedBack(View animView, float targetLeft) { - } @Override - public boolean updateSwipeProgress(View animView, boolean dismissable, float swipeProgress) { - // Don't fade out. + public boolean onDrag(float displacement, float velocity) { + setTranslationX(canChildBeDismissed() + ? displacement : OverScroll.dampedScroll(displacement, getWidth())); + animate().cancel(); return true; } @Override - public float getFalsingThresholdFactor() { - return 1; + public void onDragEnd(float velocity, boolean fling) { + final boolean willExit; + final float endTranslation; + + if (!canChildBeDismissed()) { + willExit = false; + endTranslation = 0; + } else if (fling) { + willExit = true; + endTranslation = velocity < 0 ? - getWidth() : getWidth(); + } else if (Math.abs(getTranslationX()) > getWidth() / 2) { + willExit = true; + endTranslation = (getTranslationX() < 0 ? -getWidth() : getWidth()); + } else { + willExit = false; + endTranslation = 0; + } + + SwipeDetector.ScrollInterpolator interpolator = new SwipeDetector.ScrollInterpolator(); + interpolator.setVelocityAtZero(velocity); + + long duration = SwipeDetector.calculateDuration(velocity, + (endTranslation - getTranslationX()) / getWidth()); + animate() + .setDuration(duration) + .setInterpolator(interpolator) + .translationX(endTranslation) + .withEndAction(new Runnable() { + @Override + public void run() { + mSwipeDetector.finishedScrolling(); + if (willExit) { + onChildDismissed(); + } + } + }).start(); } } diff --git a/src/com/android/launcher3/notification/SwipeHelper.java b/src/com/android/launcher3/notification/SwipeHelper.java deleted file mode 100644 index ebbe5fc6a..000000000 --- a/src/com/android/launcher3/notification/SwipeHelper.java +++ /dev/null @@ -1,687 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.notification; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; -import android.animation.ValueAnimator.AnimatorUpdateListener; -import android.content.Context; -import android.graphics.RectF; -import android.os.Handler; -import android.util.ArrayMap; -import android.util.Log; -import android.view.MotionEvent; -import android.view.VelocityTracker; -import android.view.View; -import android.view.ViewConfiguration; -import android.view.accessibility.AccessibilityEvent; -import com.android.launcher3.R; - -/** - * This class was copied from com.android.systemui. - */ -public class SwipeHelper { - private static final String TAG = "SwipeHelper"; - private static final boolean DEBUG_INVALIDATE = false; - private static final boolean SLOW_ANIMATIONS = false; // DEBUG; - private static final boolean CONSTRAIN_SWIPE = true; - private static final boolean FADE_OUT_DURING_SWIPE = true; - private static final boolean DISMISS_IF_SWIPED_FAR_ENOUGH = true; - - public static final int X = 0; - public static final int Y = 1; - - private static final float SWIPE_ESCAPE_VELOCITY = 100f; // dp/sec - private static final int DEFAULT_ESCAPE_ANIMATION_DURATION = 200; // ms - private static final int MAX_ESCAPE_ANIMATION_DURATION = 400; // ms - private static final int MAX_DISMISS_VELOCITY = 4000; // dp/sec - private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 150; // ms - - static final float SWIPE_PROGRESS_FADE_END = 0.5f; // fraction of thumbnail width - // beyond which swipe progress->0 - private float mMinSwipeProgress = 0f; - private float mMaxSwipeProgress = 1f; - - private final FlingAnimationUtils mFlingAnimationUtils; - private float mPagingTouchSlop; - private final Callback mCallback; - private final Handler mHandler; - private final int mSwipeDirection; - private final VelocityTracker mVelocityTracker; - - private float mInitialTouchPos; - private float mPerpendicularInitialTouchPos; - private boolean mDragging; - private boolean mSnappingChild; - private View mCurrView; - private boolean mCanCurrViewBeDimissed; - private float mDensityScale; - private float mTranslation = 0; - - private boolean mLongPressSent; - private LongPressListener mLongPressListener; - private Runnable mWatchLongPress; - private final long mLongPressTimeout; - - final private int[] mTmpPos = new int[2]; - private final int mFalsingThreshold; - private boolean mTouchAboveFalsingThreshold; - private boolean mDisableHwLayers; - - private final ArrayMap<View, Animator> mDismissPendingMap = new ArrayMap<>(); - - public SwipeHelper(int swipeDirection, Callback callback, Context context) { - mCallback = callback; - mHandler = new Handler(); - mSwipeDirection = swipeDirection; - mVelocityTracker = VelocityTracker.obtain(); - mDensityScale = context.getResources().getDisplayMetrics().density; - mPagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); - - mLongPressTimeout = (long) (ViewConfiguration.getLongPressTimeout() * 1.5f); // extra long-press! - mFalsingThreshold = context.getResources().getDimensionPixelSize( - R.dimen.swipe_helper_falsing_threshold); - mFlingAnimationUtils = new FlingAnimationUtils(context, getMaxEscapeAnimDuration() / 1000f); - } - - public void setLongPressListener(LongPressListener listener) { - mLongPressListener = listener; - } - - public void setDensityScale(float densityScale) { - mDensityScale = densityScale; - } - - public void setPagingTouchSlop(float pagingTouchSlop) { - mPagingTouchSlop = pagingTouchSlop; - } - - public void setDisableHardwareLayers(boolean disableHwLayers) { - mDisableHwLayers = disableHwLayers; - } - - private float getPos(MotionEvent ev) { - return mSwipeDirection == X ? ev.getX() : ev.getY(); - } - - private float getPerpendicularPos(MotionEvent ev) { - return mSwipeDirection == X ? ev.getY() : ev.getX(); - } - - protected float getTranslation(View v) { - return mSwipeDirection == X ? v.getTranslationX() : v.getTranslationY(); - } - - private float getVelocity(VelocityTracker vt) { - return mSwipeDirection == X ? vt.getXVelocity() : - vt.getYVelocity(); - } - - protected ObjectAnimator createTranslationAnimation(View v, float newPos) { - ObjectAnimator anim = ObjectAnimator.ofFloat(v, - mSwipeDirection == X ? View.TRANSLATION_X : View.TRANSLATION_Y, newPos); - return anim; - } - - private float getPerpendicularVelocity(VelocityTracker vt) { - return mSwipeDirection == X ? vt.getYVelocity() : - vt.getXVelocity(); - } - - protected Animator getViewTranslationAnimator(View v, float target, - AnimatorUpdateListener listener) { - ObjectAnimator anim = createTranslationAnimation(v, target); - if (listener != null) { - anim.addUpdateListener(listener); - } - return anim; - } - - protected void setTranslation(View v, float translate) { - if (v == null) { - return; - } - if (mSwipeDirection == X) { - v.setTranslationX(translate); - } else { - v.setTranslationY(translate); - } - } - - protected float getSize(View v) { - return mSwipeDirection == X ? v.getMeasuredWidth() : - v.getMeasuredHeight(); - } - - public void setMinSwipeProgress(float minSwipeProgress) { - mMinSwipeProgress = minSwipeProgress; - } - - public void setMaxSwipeProgress(float maxSwipeProgress) { - mMaxSwipeProgress = maxSwipeProgress; - } - - private float getSwipeProgressForOffset(View view, float translation) { - float viewSize = getSize(view); - float result = Math.abs(translation / viewSize); - return Math.min(Math.max(mMinSwipeProgress, result), mMaxSwipeProgress); - } - - private float getSwipeAlpha(float progress) { - return Math.min(0, Math.max(1, progress / SWIPE_PROGRESS_FADE_END)); - } - - private void updateSwipeProgressFromOffset(View animView, boolean dismissable) { - updateSwipeProgressFromOffset(animView, dismissable, getTranslation(animView)); - } - - private void updateSwipeProgressFromOffset(View animView, boolean dismissable, - float translation) { - float swipeProgress = getSwipeProgressForOffset(animView, translation); - if (!mCallback.updateSwipeProgress(animView, dismissable, swipeProgress)) { - if (FADE_OUT_DURING_SWIPE && dismissable) { - float alpha = swipeProgress; - if (!mDisableHwLayers) { - if (alpha != 0f && alpha != 1f) { - animView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - } else { - animView.setLayerType(View.LAYER_TYPE_NONE, null); - } - } - animView.setAlpha(getSwipeAlpha(swipeProgress)); - } - } - invalidateGlobalRegion(animView); - } - - // invalidate the view's own bounds all the way up the view hierarchy - public static void invalidateGlobalRegion(View view) { - invalidateGlobalRegion( - view, - new RectF(view.getLeft(), view.getTop(), view.getRight(), view.getBottom())); - } - - // invalidate a rectangle relative to the view's coordinate system all the way up the view - // hierarchy - public static void invalidateGlobalRegion(View view, RectF childBounds) { - //childBounds.offset(view.getTranslationX(), view.getTranslationY()); - if (DEBUG_INVALIDATE) - Log.v(TAG, "-------------"); - while (view.getParent() != null && view.getParent() instanceof View) { - view = (View) view.getParent(); - view.getMatrix().mapRect(childBounds); - view.invalidate((int) Math.floor(childBounds.left), - (int) Math.floor(childBounds.top), - (int) Math.ceil(childBounds.right), - (int) Math.ceil(childBounds.bottom)); - if (DEBUG_INVALIDATE) { - Log.v(TAG, "INVALIDATE(" + (int) Math.floor(childBounds.left) - + "," + (int) Math.floor(childBounds.top) - + "," + (int) Math.ceil(childBounds.right) - + "," + (int) Math.ceil(childBounds.bottom)); - } - } - } - - public void removeLongPressCallback() { - if (mWatchLongPress != null) { - mHandler.removeCallbacks(mWatchLongPress); - mWatchLongPress = null; - } - } - - public boolean onInterceptTouchEvent(final MotionEvent ev) { - final int action = ev.getAction(); - - switch (action) { - case MotionEvent.ACTION_DOWN: - mTouchAboveFalsingThreshold = false; - mDragging = false; - mSnappingChild = false; - mLongPressSent = false; - mVelocityTracker.clear(); - mCurrView = mCallback.getChildAtPosition(ev); - - if (mCurrView != null) { - onDownUpdate(mCurrView); - mCanCurrViewBeDimissed = mCallback.canChildBeDismissed(mCurrView); - mVelocityTracker.addMovement(ev); - mInitialTouchPos = getPos(ev); - mPerpendicularInitialTouchPos = getPerpendicularPos(ev); - mTranslation = getTranslation(mCurrView); - if (mLongPressListener != null) { - if (mWatchLongPress == null) { - mWatchLongPress = new Runnable() { - @Override - public void run() { - if (mCurrView != null && !mLongPressSent) { - mLongPressSent = true; - mCurrView.sendAccessibilityEvent( - AccessibilityEvent.TYPE_VIEW_LONG_CLICKED); - mCurrView.getLocationOnScreen(mTmpPos); - final int x = (int) ev.getRawX() - mTmpPos[0]; - final int y = (int) ev.getRawY() - mTmpPos[1]; - mLongPressListener.onLongPress(mCurrView, x, y); - } - } - }; - } - mHandler.postDelayed(mWatchLongPress, mLongPressTimeout); - } - } - break; - - case MotionEvent.ACTION_MOVE: - if (mCurrView != null && !mLongPressSent) { - mVelocityTracker.addMovement(ev); - float pos = getPos(ev); - float perpendicularPos = getPerpendicularPos(ev); - float delta = pos - mInitialTouchPos; - float deltaPerpendicular = perpendicularPos - mPerpendicularInitialTouchPos; - if (Math.abs(delta) > mPagingTouchSlop - && Math.abs(delta) > Math.abs(deltaPerpendicular)) { - mCallback.onBeginDrag(mCurrView); - mDragging = true; - mInitialTouchPos = getPos(ev); - mTranslation = getTranslation(mCurrView); - removeLongPressCallback(); - } - } - break; - - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - final boolean captured = (mDragging || mLongPressSent); - mDragging = false; - mCurrView = null; - mLongPressSent = false; - removeLongPressCallback(); - if (captured) return true; - break; - } - return mDragging || mLongPressSent; - } - - /** - * @param view The view to be dismissed - * @param velocity The desired pixels/second speed at which the view should move - * @param useAccelerateInterpolator Should an accelerating Interpolator be used - */ - public void dismissChild(final View view, float velocity, boolean useAccelerateInterpolator) { - dismissChild(view, velocity, null /* endAction */, 0 /* delay */, - useAccelerateInterpolator, 0 /* fixedDuration */, false /* isDismissAll */); - } - - /** - * @param animView The view to be dismissed - * @param velocity The desired pixels/second speed at which the view should move - * @param endAction The action to perform at the end - * @param delay The delay after which we should start - * @param useAccelerateInterpolator Should an accelerating Interpolator be used - * @param fixedDuration If not 0, this exact duration will be taken - */ - public void dismissChild(final View animView, float velocity, final Runnable endAction, - long delay, boolean useAccelerateInterpolator, long fixedDuration, - boolean isDismissAll) { - final boolean canBeDismissed = mCallback.canChildBeDismissed(animView); - float newPos; - boolean isLayoutRtl = animView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; - - // if we use the Menu to dismiss an item in landscape, animate up - boolean animateUpForMenu = velocity == 0 && (getTranslation(animView) == 0 || isDismissAll) - && mSwipeDirection == Y; - // if the language is rtl we prefer swiping to the left - boolean animateLeftForRtl = velocity == 0 && (getTranslation(animView) == 0 || isDismissAll) - && isLayoutRtl; - boolean animateLeft = velocity < 0 - || (velocity == 0 && getTranslation(animView) < 0 && !isDismissAll); - - if (animateLeft || animateLeftForRtl || animateUpForMenu) { - newPos = -getSize(animView); - } else { - newPos = getSize(animView); - } - long duration; - if (fixedDuration == 0) { - duration = MAX_ESCAPE_ANIMATION_DURATION; - if (velocity != 0) { - duration = Math.min(duration, - (int) (Math.abs(newPos - getTranslation(animView)) * 1000f / Math - .abs(velocity)) - ); - } else { - duration = DEFAULT_ESCAPE_ANIMATION_DURATION; - } - } else { - duration = fixedDuration; - } - - if (!mDisableHwLayers) { - animView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - } - AnimatorUpdateListener updateListener = new AnimatorUpdateListener() { - public void onAnimationUpdate(ValueAnimator animation) { - onTranslationUpdate(animView, (float) animation.getAnimatedValue(), canBeDismissed); - } - }; - - Animator anim = getViewTranslationAnimator(animView, newPos, updateListener); - if (anim == null) { - return; - } - if (useAccelerateInterpolator) { - anim.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN); - anim.setDuration(duration); - } else { - mFlingAnimationUtils.applyDismissing(anim, getTranslation(animView), - newPos, velocity, getSize(animView)); - } - if (delay > 0) { - anim.setStartDelay(delay); - } - anim.addListener(new AnimatorListenerAdapter() { - private boolean mCancelled; - - public void onAnimationCancel(Animator animation) { - mCancelled = true; - } - - public void onAnimationEnd(Animator animation) { - updateSwipeProgressFromOffset(animView, canBeDismissed); - mDismissPendingMap.remove(animView); - if (!mCancelled) { - mCallback.onChildDismissed(animView); - } - if (endAction != null) { - endAction.run(); - } - if (!mDisableHwLayers) { - animView.setLayerType(View.LAYER_TYPE_NONE, null); - } - } - }); - - prepareDismissAnimation(animView, anim); - mDismissPendingMap.put(animView, anim); - anim.start(); - } - - /** - * Called to update the dismiss animation. - */ - protected void prepareDismissAnimation(View view, Animator anim) { - // Do nothing - } - - public void snapChild(final View animView, final float targetLeft, float velocity) { - final boolean canBeDismissed = mCallback.canChildBeDismissed(animView); - AnimatorUpdateListener updateListener = new AnimatorUpdateListener() { - public void onAnimationUpdate(ValueAnimator animation) { - onTranslationUpdate(animView, (float) animation.getAnimatedValue(), canBeDismissed); - } - }; - - Animator anim = getViewTranslationAnimator(animView, targetLeft, updateListener); - if (anim == null) { - return; - } - int duration = SNAP_ANIM_LEN; - anim.setDuration(duration); - anim.addListener(new AnimatorListenerAdapter() { - public void onAnimationEnd(Animator animator) { - mSnappingChild = false; - updateSwipeProgressFromOffset(animView, canBeDismissed); - mCallback.onChildSnappedBack(animView, targetLeft); - } - }); - prepareSnapBackAnimation(animView, anim); - mSnappingChild = true; - anim.start(); - } - - /** - * Called to update the snap back animation. - */ - protected void prepareSnapBackAnimation(View view, Animator anim) { - // Do nothing - } - - /** - * Called when there's a down event. - */ - public void onDownUpdate(View currView) { - // Do nothing - } - - /** - * Called on a move event. - */ - protected void onMoveUpdate(View view, float totalTranslation, float delta) { - // Do nothing - } - - /** - * Called in {@link AnimatorUpdateListener#onAnimationUpdate(ValueAnimator)} when the current - * view is being animated to dismiss or snap. - */ - public void onTranslationUpdate(View animView, float value, boolean canBeDismissed) { - updateSwipeProgressFromOffset(animView, canBeDismissed, value); - } - - private void snapChildInstantly(final View view) { - final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view); - setTranslation(view, 0); - updateSwipeProgressFromOffset(view, canAnimViewBeDismissed); - } - - /** - * Called when a view is updated to be non-dismissable, if the view was being dismissed before - * the update this will handle snapping it back into place. - * - * @param view the view to snap if necessary. - * @param animate whether to animate the snap or not. - * @param targetLeft the target to snap to. - */ - public void snapChildIfNeeded(final View view, boolean animate, float targetLeft) { - if ((mDragging && mCurrView == view) || mSnappingChild) { - return; - } - boolean needToSnap = false; - Animator dismissPendingAnim = mDismissPendingMap.get(view); - if (dismissPendingAnim != null) { - needToSnap = true; - dismissPendingAnim.cancel(); - } else if (getTranslation(view) != 0) { - needToSnap = true; - } - if (needToSnap) { - if (animate) { - snapChild(view, targetLeft, 0.0f /* velocity */); - } else { - snapChildInstantly(view); - } - } - } - - public boolean onTouchEvent(MotionEvent ev) { - if (mLongPressSent) { - return true; - } - - if (!mDragging) { - if (mCallback.getChildAtPosition(ev) != null) { - - // We are dragging directly over a card, make sure that we also catch the gesture - // even if nobody else wants the touch event. - onInterceptTouchEvent(ev); - return true; - } else { - - // We are not doing anything, make sure the long press callback - // is not still ticking like a bomb waiting to go off. - removeLongPressCallback(); - return false; - } - } - - mVelocityTracker.addMovement(ev); - final int action = ev.getAction(); - switch (action) { - case MotionEvent.ACTION_OUTSIDE: - case MotionEvent.ACTION_MOVE: - if (mCurrView != null) { - float delta = getPos(ev) - mInitialTouchPos; - float absDelta = Math.abs(delta); - if (absDelta >= getFalsingThreshold()) { - mTouchAboveFalsingThreshold = true; - } - // don't let items that can't be dismissed be dragged more than - // maxScrollDistance - if (CONSTRAIN_SWIPE && !mCallback.canChildBeDismissed(mCurrView)) { - float size = getSize(mCurrView); - float maxScrollDistance = 0.25f * size; - if (absDelta >= size) { - delta = delta > 0 ? maxScrollDistance : -maxScrollDistance; - } else { - delta = maxScrollDistance * (float) Math.sin((delta/size)*(Math.PI/2)); - } - } - - setTranslation(mCurrView, mTranslation + delta); - updateSwipeProgressFromOffset(mCurrView, mCanCurrViewBeDimissed); - onMoveUpdate(mCurrView, mTranslation + delta, delta); - } - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - if (mCurrView == null) { - break; - } - mVelocityTracker.computeCurrentVelocity(1000 /* px/sec */, getMaxVelocity()); - float velocity = getVelocity(mVelocityTracker); - - if (!handleUpEvent(ev, mCurrView, velocity, getTranslation(mCurrView))) { - if (isDismissGesture(ev)) { - // flingadingy - dismissChild(mCurrView, velocity, - !swipedFastEnough() /* useAccelerateInterpolator */); - } else { - // snappity - mCallback.onDragCancelled(mCurrView); - snapChild(mCurrView, 0 /* leftTarget */, velocity); - } - mCurrView = null; - } - mDragging = false; - break; - } - return true; - } - - private int getFalsingThreshold() { - float factor = mCallback.getFalsingThresholdFactor(); - return (int) (mFalsingThreshold * factor); - } - - private float getMaxVelocity() { - return MAX_DISMISS_VELOCITY * mDensityScale; - } - - protected float getEscapeVelocity() { - return getUnscaledEscapeVelocity() * mDensityScale; - } - - protected float getUnscaledEscapeVelocity() { - return SWIPE_ESCAPE_VELOCITY; - } - - protected long getMaxEscapeAnimDuration() { - return MAX_ESCAPE_ANIMATION_DURATION; - } - - protected boolean swipedFarEnough() { - float translation = getTranslation(mCurrView); - return DISMISS_IF_SWIPED_FAR_ENOUGH && Math.abs(translation) > 0.4 * getSize(mCurrView); - } - - protected boolean isDismissGesture(MotionEvent ev) { - boolean falsingDetected = mCallback.isAntiFalsingNeeded() && !mTouchAboveFalsingThreshold; - return !falsingDetected && (swipedFastEnough() || swipedFarEnough()) - && ev.getActionMasked() == MotionEvent.ACTION_UP - && mCallback.canChildBeDismissed(mCurrView); - } - - protected boolean swipedFastEnough() { - float velocity = getVelocity(mVelocityTracker); - float translation = getTranslation(mCurrView); - boolean ret = (Math.abs(velocity) > getEscapeVelocity()) - && (velocity > 0) == (translation > 0); - return ret; - } - - protected boolean handleUpEvent(MotionEvent ev, View animView, float velocity, - float translation) { - return false; - } - - public interface Callback { - View getChildAtPosition(MotionEvent ev); - - boolean canChildBeDismissed(View v); - - boolean isAntiFalsingNeeded(); - - void onBeginDrag(View v); - - void onChildDismissed(View v); - - void onDragCancelled(View v); - - /** - * Called when the child is snapped to a position. - * - * @param animView the view that was snapped. - * @param targetLeft the left position the view was snapped to. - */ - void onChildSnappedBack(View animView, float targetLeft); - - /** - * Updates the swipe progress on a child. - * - * @return if true, prevents the default alpha fading. - */ - boolean updateSwipeProgress(View animView, boolean dismissable, float swipeProgress); - - /** - * @return The factor the falsing threshold should be multiplied with - */ - float getFalsingThresholdFactor(); - } - - /** - * Equivalent to View.OnLongClickListener with coordinates - */ - public interface LongPressListener { - /** - * Equivalent to {@link View.OnLongClickListener#onLongClick(View)} with coordinates - * @return whether the longpress was handled - */ - boolean onLongPress(View v, int x, int y); - } -}
\ No newline at end of file diff --git a/src/com/android/launcher3/touch/OverScroll.java b/src/com/android/launcher3/touch/OverScroll.java new file mode 100644 index 000000000..dc801ec4c --- /dev/null +++ b/src/com/android/launcher3/touch/OverScroll.java @@ -0,0 +1,55 @@ +/* + * 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.touch; + +/** + * Utility methods for overscroll damping and related effect. + */ +public class OverScroll { + + private static final float OVERSCROLL_DAMP_FACTOR = 0.07f; + + /** + * This curve determines how the effect of scrolling over the limits of the page diminishes + * as the user pulls further and further from the bounds + * + * @param f The percentage of how much the user has overscrolled. + * @return A transformed percentage based on the influence curve. + */ + private static float overScrollInfluenceCurve(float f) { + f -= 1.0f; + return f * f * f + 1.0f; + } + + /** + * @param amount The original amount overscrolled. + * @param max The maximum amount that the View can overscroll. + * @return The dampened overscroll amount. + */ + public static int dampedScroll(float amount, int max) { + if (Float.compare(amount, 0) == 0) return 0; + + float f = amount / max; + f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f))); + + // Clamp this factor, f, to -1 < f < 1 + if (Math.abs(f) >= 1) { + f /= Math.abs(f); + } + + return Math.round(OVERSCROLL_DAMP_FACTOR * f * max); + } +} diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java index ec5493b6a..be4648eef 100644 --- a/src/com/android/launcher3/touch/SwipeDetector.java +++ b/src/com/android/launcher3/touch/SwipeDetector.java @@ -1,7 +1,25 @@ +/* + * 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.touch; import static android.view.MotionEvent.INVALID_POINTER_ID; import android.content.Context; +import android.graphics.PointF; +import android.support.annotation.NonNull; +import android.support.annotation.VisibleForTesting; import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; @@ -9,18 +27,20 @@ import android.view.animation.Interpolator; /** * One dimensional scroll/drag/swipe gesture detector. + * + * Definition of swipe is different from android system in that this detector handles + * 'swipe to dismiss', 'swiping up/down a container' but also keeps scrolling state before + * swipe action happens */ public class SwipeDetector { private static final boolean DBG = false; private static final String TAG = "SwipeDetector"; - private final float mTouchSlop; - private int mScrollConditions; - public static final int DIRECTION_UP = 1 << 0; - public static final int DIRECTION_DOWN = 1 << 1; - public static final int DIRECTION_BOTH = DIRECTION_DOWN | DIRECTION_UP; + public static final int DIRECTION_POSITIVE = 1 << 0; + public static final int DIRECTION_NEGATIVE = 1 << 1; + public static final int DIRECTION_BOTH = DIRECTION_NEGATIVE | DIRECTION_POSITIVE; private static final float ANIMATION_DURATION = 1200; private static final float FAST_FLING_PX_MS = 10; @@ -47,6 +67,42 @@ public class SwipeDetector { SETTLING // onDragEnd } + public static abstract class Direction { + + abstract float getDisplacement(MotionEvent ev, int pointerIndex, PointF refPoint); + + /** + * Distance in pixels a touch can wander before we think the user is scrolling. + */ + abstract float getActiveTouchSlop(MotionEvent ev, int pointerIndex, PointF downPos); + } + + public static final Direction VERTICAL = new Direction() { + + @Override + float getDisplacement(MotionEvent ev, int pointerIndex, PointF refPoint) { + return ev.getY(pointerIndex) - refPoint.y; + } + + @Override + float getActiveTouchSlop(MotionEvent ev, int pointerIndex, PointF downPos) { + return Math.abs(ev.getX(pointerIndex) - downPos.x); + } + }; + + public static final Direction HORIZONTAL = new Direction() { + + @Override + float getDisplacement(MotionEvent ev, int pointerIndex, PointF refPoint) { + return ev.getX(pointerIndex) - refPoint.x; + } + + @Override + float getActiveTouchSlop(MotionEvent ev, int pointerIndex, PointF downPos) { + return Math.abs(ev.getY(pointerIndex) - downPos.y); + } + }; + //------------------- ScrollState transition diagram ----------------------------------- // // IDLE -> (mDisplacement > mTouchSlop) -> DRAGGING @@ -93,28 +149,24 @@ public class SwipeDetector { return mState == ScrollState.DRAGGING; } - private float mDownX; - private float mDownY; + private final PointF mDownPos = new PointF(); + private final PointF mLastPos = new PointF(); + private final Direction mDir; + + private final float mTouchSlop; + + /* Client of this gesture detector can register a callback. */ + private final Listener mListener; - private float mLastY; private long mCurrentMillis; private float mVelocity; - private float mLastDisplacementX; - private float mLastDisplacementY; - private float mDisplacementY; - private float mDisplacementX; + private float mLastDisplacement; + private float mDisplacement; private float mSubtractDisplacement; private boolean mIgnoreSlopWhenSettling; - /* Client of this gesture detector can register a callback. */ - private Listener mListener; - - public void setListener(Listener l) { - mListener = l; - } - public interface Listener { void onDragStart(boolean start); @@ -123,8 +175,15 @@ public class SwipeDetector { void onDragEnd(float velocity, boolean fling); } - public SwipeDetector(Context context) { - mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + public SwipeDetector(@NonNull Context context, @NonNull Listener l, @NonNull Direction dir) { + this(ViewConfiguration.get(context).getScaledTouchSlop(), l, dir); + } + + @VisibleForTesting + protected SwipeDetector(float touchSlope, @NonNull Listener l, @NonNull Direction dir) { + mTouchSlop = touchSlope; + mListener = l; + mDir = dir; } public void setDetectableScrollConditions(int scrollDirectionFlags, boolean ignoreSlop) { @@ -132,21 +191,16 @@ public class SwipeDetector { mIgnoreSlopWhenSettling = ignoreSlop; } - private boolean shouldScrollStart() { - // reject cases where the slop condition is not met. - if (Math.abs(mDisplacementY) < mTouchSlop) { + private boolean shouldScrollStart(MotionEvent ev, int pointerIndex) { + // reject cases where the angle or slop condition is not met. + if (Math.max(mDir.getActiveTouchSlop(ev, pointerIndex, mDownPos), mTouchSlop) + > Math.abs(mDisplacement)) { return false; } - // reject cases where the angle condition is not met. - float deltaY = Math.abs(mDisplacementY); - float deltaX = Math.max(Math.abs(mDisplacementX), 1); - if (deltaX > deltaY) { - return false; - } // Check if the client is interested in scroll in current direction. - if (((mScrollConditions & DIRECTION_DOWN) > 0 && mDisplacementY > 0) || - ((mScrollConditions & DIRECTION_UP) > 0 && mDisplacementY < 0)) { + if (((mScrollConditions & DIRECTION_NEGATIVE) > 0 && mDisplacement > 0) || + ((mScrollConditions & DIRECTION_POSITIVE) > 0 && mDisplacement < 0)) { return true; } return false; @@ -155,12 +209,11 @@ public class SwipeDetector { public boolean onTouchEvent(MotionEvent ev) { switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: - mDownX = ev.getX(); - mDownY = ev.getY(); mActivePointerId = ev.getPointerId(0); - mLastDisplacementX = 0; - mLastDisplacementY = 0; - mDisplacementY = 0; + mDownPos.set(ev.getX(), ev.getY()); + mLastPos.set(mDownPos); + mLastDisplacement = 0; + mDisplacement = 0; mVelocity = 0; if (mState == ScrollState.SETTLING && mIgnoreSlopWhenSettling) { @@ -169,13 +222,14 @@ public class SwipeDetector { break; //case MotionEvent.ACTION_POINTER_DOWN: case MotionEvent.ACTION_POINTER_UP: - int ptrIdx = (ev.getActionIndex() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> - MotionEvent.ACTION_POINTER_INDEX_SHIFT; + int ptrIdx = ev.getActionIndex(); int ptrId = ev.getPointerId(ptrIdx); if (ptrId == mActivePointerId) { final int newPointerIdx = ptrIdx == 0 ? 1 : 0; - mDownX = ev.getX(newPointerIdx) - mLastDisplacementX; - mDownY = ev.getY(newPointerIdx) - mLastDisplacementY; + mDownPos.set( + ev.getX(newPointerIdx) - (mLastPos.x - mDownPos.x), + ev.getY(newPointerIdx) - (mLastPos.y - mDownPos.y)); + mLastPos.set(ev.getX(newPointerIdx), ev.getY(newPointerIdx)); mActivePointerId = ev.getPointerId(newPointerIdx); } break; @@ -184,18 +238,18 @@ public class SwipeDetector { if (pointerIndex == INVALID_POINTER_ID) { break; } - mDisplacementX = ev.getX(pointerIndex) - mDownX; - mDisplacementY = ev.getY(pointerIndex) - mDownY; - - computeVelocity(ev); + mDisplacement = mDir.getDisplacement(ev, pointerIndex, mDownPos); + computeVelocity(mDir.getDisplacement(ev, pointerIndex, mLastPos), + ev.getEventTime()); // handle state and listener calls. - if (mState != ScrollState.DRAGGING && shouldScrollStart()) { + if (mState != ScrollState.DRAGGING && shouldScrollStart(ev, pointerIndex)) { setState(ScrollState.DRAGGING); } if (mState == ScrollState.DRAGGING) { reportDragging(); } + mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex)); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: @@ -205,16 +259,8 @@ public class SwipeDetector { } break; default: - //TODO: add multi finger tracking by tracking active pointer. break; } - // Do house keeping. - mLastDisplacementX = mDisplacementX; - mLastDisplacementY = mDisplacementY; - int pointerIndex = ev.findPointerIndex(mActivePointerId); - if (pointerIndex != INVALID_POINTER_ID) { - mLastY = ev.getY(pointerIndex); - } return true; } @@ -234,7 +280,7 @@ public class SwipeDetector { if (mState == ScrollState.SETTLING && mIgnoreSlopWhenSettling) { mSubtractDisplacement = 0; } - if (mDisplacementY > 0) { + if (mDisplacement > 0) { mSubtractDisplacement = mTouchSlop; } else { mSubtractDisplacement = -mTouchSlop; @@ -242,14 +288,14 @@ public class SwipeDetector { } private boolean reportDragging() { - float delta = mDisplacementY - mLastDisplacementY; - if (delta != 0) { + if (mDisplacement != mLastDisplacement) { if (DBG) { Log.d(TAG, String.format("onDrag disp=%.1f, velocity=%.1f", - mDisplacementY, mVelocity)); + mDisplacement, mVelocity)); } - return mListener.onDrag(mDisplacementY - mSubtractDisplacement, mVelocity); + mLastDisplacement = mDisplacement; + return mListener.onDrag(mDisplacement - mSubtractDisplacement, mVelocity); } return true; } @@ -257,19 +303,15 @@ public class SwipeDetector { private void reportDragEnd() { if (DBG) { Log.d(TAG, String.format("onScrollEnd disp=%.1f, velocity=%.1f", - mDisplacementY, mVelocity)); + mDisplacement, mVelocity)); } mListener.onDragEnd(mVelocity, Math.abs(mVelocity) > RELEASE_VELOCITY_PX_MS); } /** - * Computes the damped velocity using the two motion events and the previous velocity. + * Computes the damped velocity. */ - private float computeVelocity(MotionEvent to) { - return computeVelocity(to.getY() - mLastY, to.getEventTime()); - } - public float computeVelocity(float delta, long currentMillis) { long previousMillis = mCurrentMillis; mCurrentMillis = currentMillis; @@ -299,7 +341,7 @@ public class SwipeDetector { return (1.0f - alpha) * from + alpha * to; } - public long calculateDuration(float velocity, float progressNeeded) { + public static long calculateDuration(float velocity, float progressNeeded) { // TODO: make these values constants after tuning. float velocityDivisor = Math.max(2f, Math.abs(0.5f * velocity)); float travelDistance = Math.max(0.2f, progressNeeded); diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java index 99e60564b..2f9f3485c 100644 --- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java @@ -87,8 +87,7 @@ public class WidgetsBottomSheet extends AbstractFloatingView implements Insettab AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); mScrollInterpolator = new SwipeDetector.ScrollInterpolator(); mInsets = new Rect(); - mSwipeDetector = new SwipeDetector(context); - mSwipeDetector.setListener(this); + mSwipeDetector = new SwipeDetector(context, this, SwipeDetector.VERTICAL); mGradientBackground = (GradientView) mLauncher.findViewById(R.id.gradient_bg); } @@ -283,12 +282,12 @@ public class WidgetsBottomSheet extends AbstractFloatingView implements Insettab public void onDragEnd(float velocity, boolean fling) { if ((fling && velocity > 0) || getTranslationY() > (mTranslationYRange) / 2) { mScrollInterpolator.setVelocityAtZero(velocity); - mOpenCloseAnimator.setDuration(mSwipeDetector.calculateDuration(velocity, + mOpenCloseAnimator.setDuration(SwipeDetector.calculateDuration(velocity, (mTranslationYClosed - getTranslationY()) / mTranslationYRange)); close(true); } else { mIsOpen = false; - mOpenCloseAnimator.setDuration(mSwipeDetector.calculateDuration(velocity, + mOpenCloseAnimator.setDuration(SwipeDetector.calculateDuration(velocity, (getTranslationY() - mTranslationYOpen) / mTranslationYRange)); open(true); } @@ -302,7 +301,7 @@ public class WidgetsBottomSheet extends AbstractFloatingView implements Insettab @Override public boolean onControllerInterceptTouchEvent(MotionEvent ev) { int directionsToDetectScroll = mSwipeDetector.isIdleState() ? - SwipeDetector.DIRECTION_DOWN : 0; + SwipeDetector.DIRECTION_NEGATIVE : 0; mSwipeDetector.setDetectableScrollConditions( directionsToDetectScroll, false); mSwipeDetector.onTouchEvent(ev); diff --git a/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java b/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java index 8724704ed..ff83131d1 100644 --- a/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java +++ b/tests/src/com/android/launcher3/touch/SwipeDetectorTest.java @@ -15,7 +15,6 @@ */ package com.android.launcher3.touch; -import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; @@ -33,11 +32,12 @@ import org.mockito.MockitoAnnotations; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyFloat; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @SmallTest @RunWith(AndroidJUnit4.class) -public class SwipeDetectorTest{ +public class SwipeDetectorTest { private static final String TAG = SwipeDetectorTest.class.getSimpleName(); public static void L(String s, Object... parts) { @@ -54,22 +54,22 @@ public class SwipeDetectorTest{ @Before public void setup() { MockitoAnnotations.initMocks(this); - Context context = InstrumentationRegistry.getTargetContext(); - mDetector = new SwipeDetector(context); mGenerator = new TouchEventGenerator(new TouchEventGenerator.Listener() { @Override public void onTouchEvent(MotionEvent event) { mDetector.onTouchEvent(event); } }); - mDetector.setListener(mMockListener); + + mDetector = new SwipeDetector(mTouchSlop, mMockListener, SwipeDetector.VERTICAL); mDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, false); - mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + mTouchSlop = ViewConfiguration.get(InstrumentationRegistry.getTargetContext()) + .getScaledTouchSlop(); L("mTouchSlop=", mTouchSlop); } @Test - public void testDragStart() throws Exception { + public void testDragStart_vertical() throws Exception { mGenerator.put(0, 100, 100); mGenerator.move(0, 100, 100 + mTouchSlop); // TODO: actually calculate the following parameters and do exact value checks. @@ -77,6 +77,25 @@ public class SwipeDetectorTest{ } @Test + public void testDragStart_failed() throws Exception { + mGenerator.put(0, 100, 100); + mGenerator.move(0, 100 + mTouchSlop, 100); + // TODO: actually calculate the following parameters and do exact value checks. + verify(mMockListener, never()).onDragStart(anyBoolean()); + } + + @Test + public void testDragStart_horizontal() throws Exception { + mDetector = new SwipeDetector(mTouchSlop, mMockListener, SwipeDetector.HORIZONTAL); + mDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_BOTH, false); + + mGenerator.put(0, 100, 100); + mGenerator.move(0, 100 + mTouchSlop, 100); + // TODO: actually calculate the following parameters and do exact value checks. + verify(mMockListener).onDragStart(anyBoolean()); + } + + @Test public void testDrag() throws Exception { mGenerator.put(0, 100, 100); mGenerator.move(0, 100, 100 + mTouchSlop); |