diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml
index 0fd888d171..d41edccf78 100644
--- a/quickstep/res/values-bn/strings.xml
+++ b/quickstep/res/values-bn/strings.xml
@@ -49,21 +49,15 @@
"আপনি বাঁ প্রান্ত থেকে স্ক্রিনের মাঝখান পর্যন্ত সোয়াইপ করছেন ও পরে আঙুল তুলে নিন। এটির খেয়াল রাখুন।"
"একদম ডান প্রান্ত থেকে সোয়াইপ করছেন কিনা ভাল করে দেখে নিন।"
"আপনি ডান প্রান্ত থেকে স্ক্রিনের মাঝখান পর্যন্ত সোয়াইপ করছেন ও পরে আঙুল তুলে নিন। এটি খেয়াল রাখুন।"
-
-
-
-
+ "ফিরে যেতে, কীভাবে বাঁদিক থেকে সোয়াইপ করতে হয় তা আপনি শিখেছেন।"
+ "ফিরে যেতে, কীভাবে ডান দিক থেকে সোয়াইপ করতে হয় তা আপনি শিখেছেন। এরপর, একটি অ্যাপ থেকে অন্য অ্যাপে কীভাবে যাবেন জেনে নিন।"
"আপনি ফিরে যাওয়ার জেসচার সম্পর্কে জেনেছেন।"
"স্ক্রিনের নিচের প্রান্তের খুব কাছে পর্যন্ত যাতে সোয়াইপ না করেন সেটি ভাল করে দেখে নিন।"
"ফিরে যাওয়ার জেসচারের সেন্সিটিভিটি পরিবর্তন করতে, সেটিংসে যান"
-
-
-
-
-
-
-
-
+ "ফিরে যেতে স্ক্রিনের বাঁদিক থেকে সোয়াইপ করুন"
+ "ফিরে যেতে স্ক্রিনের ডানদিক থেকে সোয়াইপ করুন"
+ "শেষের যে স্ক্রিনে ছিলেন সেখানে ফিরে যেতে, বাঁদিকের প্রান্ত থেকে স্ক্রিনের মাঝখান পর্যন্ত সোয়াইপ করুন।"
+ "ডানদিকের প্রান্ত থেকে মাঝখান অবধি সোয়াইপ করেও, শেষের যে স্ক্রিনে ছিলেন সেখানে ফিরে যেতে পারেন। এখনই করে দেখুন।"
"স্ক্রিনের নিচের প্রান্ত থেকে আপনি সোয়াইপ করেছেন কিনা ভাল করে দেখে নিন।"
"আঙুল তুলে নেওয়ার আগে আপনি যাতে পজ না করেন সেটি ভাল করে দেখে নিন।"
"আপনি উপরের দিকে সোজাসুজি সোয়াইপ করেছেন কিনা ভাল করে দেখে নিন।"
diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml
index 4b5fd276f3..1e0cd3d8a8 100644
--- a/quickstep/res/values-de/strings.xml
+++ b/quickstep/res/values-de/strings.xml
@@ -49,21 +49,15 @@
"Wische vom linken Bildschirmrand zur Bildschirmmitte und lass los."
"Wische vom äußersten rechten Bildschirmrand."
"Wische vom rechten Bildschirmrand zur Bildschirmmitte und lass los."
-
-
-
-
+ "Du kannst jetzt vom linken Bildschirmrand aus wischen, um zurückzugehen."
+ "Du kannst jetzt vom rechten Bildschirmrand aus wischen, um zurückzugehen. Gleich erfährst du, wie man zwischen Apps wechselt."
"Du hast die „Zurück“-Touch-Geste abgeschlossen."
"Wische nicht zu nah am unteren Bildschirmrand."
"Du kannst die Empfindlichkeit von „Zurück“ in den Einstellungen ändern"
-
-
-
-
-
-
-
-
+ "Wische vom linken Bildschirmrand aus, um zurückzugehen"
+ "Wische vom rechten Bildschirmrand aus, um zurückzugehen"
+ "Wenn du zum letzten Bildschirm zurückgehen möchtest, wische vom linken Bildschirmrand zur Mitte."
+ "Du kannst vom rechten Bildschirmrand zur Mitte wischen, um zum letzten Bildschirm zurückzugehen. Probier es aus."
"Wische vom unteren Bildschirmrand nach oben."
"Achte darauf, nicht innezuhalten, bevor du loslässt."
"Wische gerade nach oben."
diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml
index 7910dc1166..e9b5fed98e 100644
--- a/quickstep/res/values-fr-rCA/strings.xml
+++ b/quickstep/res/values-fr-rCA/strings.xml
@@ -49,21 +49,15 @@
"Assurez-vous de balayer l\'écran de l\'extrémité gauche jusqu\'au centre, puis de lever le doigt."
"Assurez-vous de balayer l\'écran à partir de l\'extrémité droite."
"Assurez-vous de balayer l\'écran de l\'extrémité droite jusqu\'au centre, puis de lever le doigt."
-
-
-
-
+ "Vous avez appris comment balayer l\'écran à partir de la gauche pour revenir en arrière."
+ "Vous avez appris à balayer de la droite pour revenir en arrière. Apprenez comment changer d\'appli."
"Vous avez appris le geste de retour en arrière."
"Assurez-vous de ne pas balayer trop près du bas de l\'écran."
"Modifiez la sensibilité du geste de retour dans Paramètres"
-
-
-
-
-
-
-
-
+ "Balayez l\'écran à partir de la gauche pour revenir en arrière"
+ "Balayer l\'écran à partir de la droite pour revenir en arrière"
+ "Pour revenir à l\'écran précédent, balayez l\'écran du côté gauche jusqu\'au centre."
+ "Vous pouvez revenir à l\'écran précédent en balayant l\'écran du côté droit vers le centre. Essayez-le."
"Assurez-vous de balayer l\'écran à partir de l\'extrémité inférieure vers le haut."
"Assurez-vous de ne pas interrompre le geste avant de lever le doigt."
"Assurez-vous de balayer l\'écran en ligne droite vers le haut."
diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml
index dcd0dfcb6b..c1375f9465 100644
--- a/quickstep/res/values-gu/strings.xml
+++ b/quickstep/res/values-gu/strings.xml
@@ -49,21 +49,15 @@
"ખાતરી કરો કે તમે ડાબી કિનારીએથી સ્ક્રીનના મધ્ય ભાગ સુધી સ્વાઇપ કરો છે અને આંગળી ઊંચકી લો છો."
"ખાતરી કરો કે તમે એકદમ દૂરની જમણી કિનારીએથી સ્વાઇપ કરો છો."
"ખાતરી કરો કે તમે જમણી કિનારીએથી સ્ક્રીનના મધ્ય ભાગ સુધી સ્વાઇપ કરો છે અને આંગળી ઊંચકી લો છો."
-
-
-
-
+ "પાછળ જવા ડાબેથી કેવી રીતે સ્વાઇપ કરવું એ તમે શીખી લીધું છે."
+ "પાછળ જવા જમણેથી કેવી રીતે સ્વાઇપ કરવું એ તમે શીખી લીધું છે. હવે પછી, ઍપ સ્વિચ કરવાની રીત જાણો."
"તમે પાછા જવાનો સંકેત પૂર્ણ કર્યો છે."
"ખાતરી કરો કે તમારાથી સ્ક્રીનની એકદમ નીચેની કિનારીની ખૂબ નજીક સુધી સ્વાઇપ ન થઈ જાય."
"પાછા જવાના સંકેતની સંવેદિતા બદલવા માટે, સેટિંગમાં જાઓ"
-
-
-
-
-
-
-
-
+ "પાછળ જવા ડાબેથી સ્વાઇપ કરો"
+ "પાછળ જવા માટે, જમણેથી સ્વાઇપ કરો"
+ "તમે જે છેલ્લી સ્ક્રીન પર હતા તેના પર પાછા જવા, ડાબી કિનારીએથી સ્ક્રીનના મધ્ય ભાગ સુધી સ્વાઇપ કરો."
+ "તમે જમણી કિનારીથી સ્ક્રીનની વચ્ચે સુધી સ્વાઇપ કરીને પણ છેલ્લી સ્ક્રીન પર પાછા જઈ શકો છો. અજમાવી જુઓ."
"ખાતરી કરો કે તમે સ્ક્રીનની નીચેની કિનારીએથી ઉપરની તરફ સ્વાઇપ કરો છો."
"ખાતરી કરો કે તમે આંગળી ઊંચકી લેતા પહેલાં સ્વાઇપ કરવાનું થોભાવતા નથી."
"ખાતરી કરો કે તમે સીધું ઉપરની તરફ સ્વાઇપ કરો છો."
diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml
index cb3022a3e5..b48dee948e 100644
--- a/quickstep/res/values-hi/strings.xml
+++ b/quickstep/res/values-hi/strings.xml
@@ -50,14 +50,14 @@
"देख लें कि आप स्क्रीन की दाईं तरफ़ के बिल्कुल किनारे से स्वाइप कर रहे हों."
"देख लें कि आप स्क्रीन के दाएं किनारे से बीचों-बीच तक स्वाइप कर रहे हों और फिर अपनी उंगली उठा लें."
"आपने स्क्रीन के बाएं किनारे से स्वाइप करके, पिछली स्क्रीन पर वापस जाने का तरीका सीख लिया है."
- "आपने स्क्रीन के दाएं किनारे से स्वाइप करके, पिछली स्क्रीन पर वापस जाने का तरीका सीख लिया है. अब, एक ऐप्लिकेशन से दूसरे ऐप्लिकेशन पर जाने का तरीका जानें."
+ "आपने स्क्रीन के दाएं किनारे से स्वाइप करके, पिछली स्क्रीन पर वापस जाने का तरीका सीख लिया है. अब, एक ऐप से दूसरे ऐप पर जाने का तरीका सीखें."
"आपने पेज पर पीछे ले जाने वाले हाथ के जेस्चर (हाव-भाव) के बारे में जान लिया है."
"देखे लें कि आप स्क्रीन पर बिल्कुल नीचे तक स्वाइप न कर रहे हों."
"\'सेटिंग\' में जाकर, पीछे जाने के लिए इस्तेमाल होने वाले हाथ के जेस्चर (हाव-भाव) की संवेदनशीलता बदलें"
"वापस जाने के लिए, स्क्रीन के बाएं किनारे से स्वाइप करें"
"वापस जाने के लिए, स्क्रीन के दाएं किनारे से स्वाइप करें"
- "पिछली स्क्रीन पर वापस जाने के लिए, स्क्रीन के बाएं किनारे से बीचों-बीच तक स्वाइप करें."
- "आप स्क्रीन के दाएं किनारे से बीचों-बीच तक स्वाइप करके भी पिछली स्क्रीन पर जा सकते हैं. इसे अभी आज़माएं."
+ "पिछली स्क्रीन पर वापस जाने के लिए, स्क्रीन के बाएं किनारे से बीच तक स्वाइप करें."
+ "आप स्क्रीन के दाएं किनारे से बीच तक स्वाइप करके भी पिछली स्क्रीन पर जा सकते हैं. इसे अभी आज़माएं."
"देख लें कि आप स्क्रीन के निचले किनारे से ऊपर की ओर स्वाइप कर रहे हों."
"देख लें कि आप स्क्रीन से अपनी उंगली उठाने से पहले, इसे कहीं न रोक रहे हों."
"देख लें कि आप ऊपर की ओर बिल्कुल सीधे स्वाइप कर रहे हों."
diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml
index 53de55ae7f..437fdbaae0 100644
--- a/quickstep/res/values-kn/strings.xml
+++ b/quickstep/res/values-kn/strings.xml
@@ -50,7 +50,7 @@
"ನೀವು ದೂರದ ಬಲ ಅಂಚಿನಿಂದ ಸ್ವೈಪ್ ಮಾಡುತ್ತಿದ್ದೀರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ."
"ಬಲ ಅಂಚಿನಿಂದ ಸ್ಕ್ರೀನ್ ಮಧ್ಯಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿದ್ದೀರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಹಾಗೂ ನಿಮ್ಮ ಬೆರಳನ್ನು ಮೇಲೆತ್ತಿ."
"ಹಿಂದಕ್ಕೆ ಹೋಗಲು ಎಡದಿಂದ ಸ್ವೈಪ್ ಮಾಡುವುದು ಹೇಗೆಂದು ನೀವು ಕಲಿತಿರಿ."
- "ಹಿಂದಕ್ಕೆ ಹೋಗಲು ಬಲದಿಂದ ಸ್ವೈಪ್ ಮಾಡುವುದು ಹೇಗೆಂದು ನೀವು ಕಲಿತಿರಿ. ಮುಂದೆ, ಆ್ಯಪ್ಗಳನ್ನು ಬದಲಿಸುವುದು ಹೇಗೆಂದು ತಿಳಿಯಿರಿ."
+ "ಹಿಂದೆ ಹೋಗಲು ಬಲದಿಂದ ಸ್ವೈಪ್ ಮಾಡುವುದು ಹೇಗೆಂದು ಕಲಿತಿರಿ. ಮುಂದೆ, ಆ್ಯಪ್ಗಳನ್ನು ಬದಲಿಸುವುದು ಹೇಗೆಂದು ತಿಳಿಯಿರಿ."
"ನೀವು ಗೋ ಬ್ಯಾಕ್ ಗೆಸ್ಚರ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ."
"ನೀವು ಸ್ಕ್ರೀನ್ನ ಕೆಳಭಾಗಕ್ಕೆ ಹೆಚ್ಚು ಹತ್ತಿರ ಸ್ವೈಪ್ ಮಾಡದಂತೆ ನೋಡಿಕೊಳ್ಳಿ."
"ಬ್ಯಾಕ್ ಗೆಸ್ಚರ್ನ ಸೂಕ್ಷ್ಮತೆ ಬದಲಾಯಿಸಲು, ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಹೋಗಿ"
diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml
index 4f5068b13e..3d9031770a 100644
--- a/quickstep/res/values-ml/strings.xml
+++ b/quickstep/res/values-ml/strings.xml
@@ -49,21 +49,15 @@
"ഇടത്തേ അരികിൽ നിന്ന് സ്ക്രീനിന്റെ മധ്യഭാഗത്തേക്ക് സ്വെെപ്പ് ചെയ്ത് വിടുക."
"വലത്തേയറ്റത്തെ അരികിൽ നിന്ന് സ്വെെപ്പ് ചെയ്യുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക."
"വലത്തേ അരികിൽ നിന്ന് സ്ക്രീനിന്റെ മധ്യഭാഗത്തേക്ക് സ്വെെപ്പ് ചെയ്ത് വിടുക."
-
-
-
-
+ "മടങ്ങാൻ ഇടതുഭാഗത്ത് നിന്ന് സ്വൈപ്പ് ചെയ്യുന്ന രീതി നിങ്ങൾക്ക് മനസ്സിലായി."
+ "മടങ്ങാൻ വലതുഭാഗത്ത് നിന്ന് സ്വൈപ്പ് ചെയ്യുന്ന രീതി മനസ്സിലായി. ഇനി, ആപ്പുകൾ മാറുന്ന രീതി അറിയുക."
"മടങ്ങുക ജെസ്ച്ചർ നിങ്ങൾ പൂർത്തിയാക്കി."
"സ്ക്രീനിന്റെ ഏറ്റവും അടിഭാഗത്തേക്ക് സ്വെെപ്പ് ചെയ്യുന്നില്ലെന്ന് ഉറപ്പാക്കുക."
"ബാക്ക്ജെസ്റ്ററിന്റെ സെൻസിറ്റിവിറ്റി മാറ്റാൻ ക്രമീകരണത്തിൽ പോകൂ"
-
-
-
-
-
-
-
-
+ "മടങ്ങാൻ ഇടതുഭാഗത്ത് നിന്ന് സ്വൈപ്പ് ചെയ്യുക"
+ "മടങ്ങാൻ വലതുഭാഗത്ത് നിന്ന് സ്വൈപ്പ് ചെയ്യുക"
+ "നിങ്ങളുടെ മുമ്പത്തെ സ്ക്രീനിലേക്ക് മടങ്ങാൻ, സ്ക്രീനിന്റെ ഇടത്തേ അരികിൽ നിന്ന് നടുവിലേക്ക് സ്വൈപ്പ് ചെയ്യുക."
+ "സ്ക്രീനിന്റെ വലത്തേ അരികിൽ നിന്ന് നടുവിലേക്ക് സ്വൈപ്പ് ചെയ്തും മുൻ സ്ക്രീനിലെത്താം. ഇതിന് ശ്രമിക്കൂ."
"സ്ക്രീനിന്റെ താഴത്തെ അരികിൽ നിന്ന് മുകളിലേക്ക് സ്വെെപ്പ് ചെയ്യുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക."
"വിടുന്നതിന് മുമ്പ് നിങ്ങൾ താൽക്കാലികമായി നിർത്തുന്നില്ലെന്ന് ഉറപ്പാക്കുക."
"നേരെ മുകളിലേക്ക് സ്വെെപ്പ് ചെയ്യുന്നുണ്ടെന്ന് ഉറപ്പിക്കുക."
diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml
index 0bc8e82ebf..d5bcc8a84a 100644
--- a/quickstep/res/values-mr/strings.xml
+++ b/quickstep/res/values-mr/strings.xml
@@ -49,21 +49,15 @@
"तुम्ही स्क्रीनच्या डाव्या कडेपासून मध्यावर स्वाइप करून बोट उचलत आहात याची खात्री करा."
"तुम्ही स्क्रीनच्या अगदी उजव्या कडेपासून स्वाइप करत आहात याची खात्री करा."
"तुम्ही स्क्रीनच्या उजव्या कडेपासून मध्यावर स्वाइप करून बोट उचलत आहात याची खात्री करा."
-
-
-
-
+ "तुम्ही मागे जाण्यासाठी डावीकडून कसे स्वाइप करायचे ते जाणून घेतले."
+ "मागे जाण्यासाठी उजवीकडून कसे स्वाइप करावे ते शिकलात. आता पुढे, ॲप्स कशी स्विच करायची ते जाणून घ्या."
"तुम्ही गो बॅक जेश्चर पूर्ण केले."
"तुम्ही स्क्रीनच्या तळाच्या अगदी जवळून स्वाइप करत नाही याची खात्री करा."
"बॅक जेश्चरची संवेदनशीलता बदलण्यासाठी, सेटिंग्ज वर जा"
-
-
-
-
-
-
-
-
+ "मागे जाण्यासाठी डावीकडून स्वाइप करा"
+ "मागे जाण्यासाठी उजवीकडून स्वाइप करा"
+ "तुम्ही होतात त्या मागील स्क्रीनवर परत जाण्यासाठी, स्क्रीनच्या डाव्या कडेपासून मध्याभागी स्वाइप करा."
+ "स्क्रीनच्या उजव्या कडेपासून मध्याभागी स्वाइप करून मागील स्क्रीनवर परतदेखील जाऊ शकता. आता करून पहा."
"तुम्ही स्क्रीनच्या तळाच्या कडेपासून वर स्वाइप करत आहात याची खात्री करा."
"तुम्ही स्क्रीनवरून बोट उचलण्यापूर्वी ते थांबवत नाही याची खात्री करा."
"तुम्ही सरळ वर स्वाइप करत आहात याची खात्री करा."
diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml
index c01ca5f3ef..92eb25be8b 100644
--- a/quickstep/res/values-my/strings.xml
+++ b/quickstep/res/values-my/strings.xml
@@ -23,7 +23,7 @@
"အလွတ်ပုံစံ"
"မကြာမီကဖွင့်ထားသည်များ မရှိပါ"
"အက်ပ်အသုံးပြုမှု ဆက်တင်များ"
- "အားလုံးကို ရှင်းရန်"
+ "အားလုံးထုတ်ပစ်ရန်"
"လတ်တလောသုံး အက်ပ်များ"
"%1$s၊ %2$s"
"< ၁ မိနစ်"
diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml
index f04b935a83..f1351f186d 100644
--- a/quickstep/res/values-ne/strings.xml
+++ b/quickstep/res/values-ne/strings.xml
@@ -49,21 +49,15 @@
"स्क्रिनको बायाँ किनाराबाट मध्य भागसम्म स्वाइप गर्नुहोस् अनि औँला उठाउनुहोस्।"
"स्क्रिनको सबैभन्दा दायाँ किनाराबाट स्वाइप गर्नुहोस्।"
"स्क्रिनको दायाँ किनाराबाट मध्य भागसम्म स्वाइप गर्नुहोस् अनि औँला उठाउनुहोस्।"
-
-
-
-
+ "तपाईंले स्क्रिनको बायाँ किनाराबाट स्वाइप गरेर अघिल्लो स्क्रिनमा फर्कने तरिका सिक्नुभयो।"
+ "तपाईंले स्क्रिनको दायाँ किनाराबाट स्वाइप गरेर अघिल्लो स्क्रिनमा फर्कने तरिका सिक्नुभयो। अब एउटा एपबाट अर्को एपमा जाने तरिका सिक्नुहोस्।"
"तपाईंले \'पछाडि जानुहोस्\' नामक इसारा प्रयोग गर्ने तरिका सिक्नुभयो।"
"स्क्रिनको फेदको धेरै नजिकसम्म स्वाइप नगर्नुहोस्।"
"\'पछाडि\' नामक इसाराको संवेदनशीलता बदल्न सेटिङमा जानुहोस्"
-
-
-
-
-
-
-
-
+ "पछाडि जान बायाँ किनाराबाट स्वाइप गर्नुहोस्"
+ "पछाडि जान दायाँतिरबाट स्वाइप गर्नुहोस्"
+ "यसअघिको स्क्रिनमा फर्कन स्क्रिनको बायाँ किनाराबाट मध्य भागसम्म स्वाइप गर्नुहोस्।"
+ "तपाईं स्क्रिनको दायाँ किनाराबाट मध्य भागसम्म स्वाइप गरेर पनि यसअघिको स्क्रिनमा फर्कन सक्नुहुन्छ। अहिले नै यसो गरी हेर्नुहोस्।"
"स्क्रिनको फेदबाट माथितिर स्वाइप गर्नुहोस्।"
"औँला उठाउनुअघि नरोकिनुहोस्।"
"सीधै माथितिर स्वाइप गर्नुहोस्।"
diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml
index d00e6cfb21..0dc125a1cf 100644
--- a/quickstep/res/values-pa/strings.xml
+++ b/quickstep/res/values-pa/strings.xml
@@ -49,21 +49,15 @@
"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਖੱਬੇ ਕਿਨਾਰੇ ਤੋਂ ਸਕ੍ਰੀਨ ਦੇ ਵਿਚਕਾਰ ਤੱਕ ਸਵਾਈਪ ਕਰਦੇ ਹੋ ਅਤੇ ਛੱਡ ਦਿੰਦੇ ਹੋ।"
"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਦੂਰ-ਸੱਜੇ ਕਿਨਾਰੇ ਤੋਂ ਸਵਾਈਪ ਕਰਦੇ ਹੋ।"
"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਸੱਜੇ ਕਿਨਾਰੇ ਤੋਂ ਸਕ੍ਰੀਨ ਦੇ ਵਿਚਕਾਰ ਤੱਕ ਸਵਾਈਪ ਕਰਦੇ ਹੋ ਅਤੇ ਛੱਡ ਦਿੰਦੇ ਹੋ।"
-
-
-
-
+ "ਤੁਸੀਂ ਪਿੱਛੇ ਜਾਣ ਲਈ ਖੱਬੇ ਪਾਸੇ ਤੋਂ ਸਵਾਈਪ ਕਰਨ ਦਾ ਤਰੀਕਾ ਜਾਣਿਆ।"
+ "ਤੁਸੀਂ ਪਿੱਛੇ ਜਾਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਤੋਂ ਸਵਾਈਪ ਕਰਨ ਦਾ ਤਰੀਕਾ ਜਾਣਿਆ। ਅੱਗੇ, ਐਪਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਦਾ ਤਰੀਕਾ ਜਾਣੋ।"
"ਤੁਸੀਂ \'ਵਾਪਸ ਜਾਓ\' ਦਾ ਇਸ਼ਾਰਾ ਪੂਰਾ ਕੀਤਾ।"
"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਹਿੱਸੇ ਦੇ ਬਹੁਤ ਨੇੜੇ ਸਵਾਈਪ ਨਾ ਕਰੋ।"
"ਪਿੱਛੇ ਜਾਣ ਦੇ ਸੰਕੇਤ ਦੀ ਸੰਵੇਦਨਸ਼ੀਲਤਾ ਬਦਲਣ ਲਈ, ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ"
-
-
-
-
-
-
-
-
+ "ਪਿੱਛੇ ਜਾਣ ਲਈ ਖੱਬੇ ਪਾਸੇ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"
+ "ਪਿੱਛੇ ਜਾਣ ਲਈ ਸੱਜੇ ਪਾਸੇ ਤੋਂ ਸਵਾਈਪ ਕਰੋ"
+ "ਜਿੱਥੇ ਤੁਸੀਂ ਸੀ ਉਸ ਪਿਛਲੀ ਸਕ੍ਰੀਨ \'ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ, ਖੱਬੇ ਕਿਨਾਰੇ ਤੋਂ ਸਕ੍ਰੀਨ ਦੇ ਵਿਚਕਾਰ ਤੱਕ ਸਵਾਈਪ ਕਰੋ।"
+ "ਤੁਸੀਂ ਸੱਜੇ ਕਿਨਾਰੇ ਤੋਂ ਸਕ੍ਰੀਨ ਦੇ ਵਿਚਕਾਰ ਤੱਕ ਸਵਾਈਪ ਕਰਕੇ ਪਿਛਲੀ ਸਕ੍ਰੀਨ \'ਤੇ ਵਾਪਸ ਜਾ ਸਕਦੇ ਹੋ। ਹੁਣੇ ਵਰਤ ਕੇ ਦੇਖੋ।"
"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਕਿਨਾਰੇ ਤੋਂ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਦੇ ਹੋ।"
"ਪੱਕਾ ਕਰੋ ਕਿ ਸਕ੍ਰੀਨ ਨੂੰ ਛੱਡਣ ਤੋਂ ਪਹਿਲਾਂ ਰੁਕੋ ਨਾ।"
"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਸਿੱਧੇ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਦੇ ਹੋ।"
diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml
index 14c83becba..a0351a79e3 100644
--- a/quickstep/res/values-te/strings.xml
+++ b/quickstep/res/values-te/strings.xml
@@ -49,21 +49,15 @@
"మీరు ఎడమ అంచు నుండి స్క్రీన్ మధ్యలోకి స్వైప్ చేశారని నిర్ధారించుకోని, ఆపై మీ వేలిని ఎత్తండి."
"మీరు చాలా-కుడి అంచు నుండి స్వైప్ చేశారని నిర్ధారించుకోండి."
"మీరు కుడి అంచు నుండి స్క్రీన్ మధ్యలోకి స్వైప్ చేశారని నిర్ధారించుకోని, ఆపై మీ వేలిని ఎత్తండి."
-
-
-
-
+ "వెనుకకు వెళ్లడానికి ఎడమ నుండి ఎలా స్వైప్ చేయాలో మీరు నేర్చుకున్నారు."
+ "వెనుకకు వెళ్లడానికి కుడి నుండి స్వైప్ ఎలానో మీకు తెలుసు. తర్వాత, యాప్ల మధ్య ఎలా మారాలో తెలుసుకోండి."
"మీరు తిరిగి వెనక్కు వెళ్లే సంజ్ఞను పూర్తి చేశారు."
"మీరు స్క్రీన్ దిగువకు చాలా దగ్గరగా స్వైప్ చేయలేదని నిర్ధారించుకోండి."
"వెనుక సంజ్ఞ సున్నితత్వం మార్చడానికి, సెట్టింగ్లకు వెళ్లండి"
-
-
-
-
-
-
-
-
+ "వెనుకకు వెళ్లడానికి ఎడమ వైపు నుండి స్వైప్ చేయండి"
+ "వెనుకకు వెళ్లడానికి కుడి వైపు నుండి స్వైప్ చేయండి"
+ "మీరు ఉన్న చివరి స్క్రీన్కు తిరిగి వెళ్లడానికి, ఎడమ అంచు నుండి స్క్రీన్ మధ్యలోకి స్వైప్ చేయండి."
+ "కుడి అంచు నుండి స్క్రీన్ మధ్యలోకి స్వైప్ చేయడం ద్వారా మీరు చివరి స్క్రీన్కు తిరిగి వెళ్లవచ్చు. దీన్ని ఇప్పుడే ట్రై చేయండి."
"మీరు స్క్రీన్ దిగువ అంచు నుండి పైకి స్వైప్ చేశారని నిర్ధారించుకోండి."
"బయలుదేరే ముందు మీరు పాజ్ చేయకుండా చూసుకోండి."
"మీరు నేరుగా పైకి స్వైప్ చేశారని నిర్ధారించుకోండి."
diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml
index 86f5a26d4e..9a8c467f74 100644
--- a/quickstep/res/values-tr/strings.xml
+++ b/quickstep/res/values-tr/strings.xml
@@ -77,7 +77,7 @@
"Ayarlar"
"Tekrar deneyin"
"Güzel!"
- "Eğitici %1$d/%2$d"
+ "Eğitim %1$d/%2$d"
"İşlem tamam!"
"Ana ekrana gitmek için yukarı kaydırın"
"Telefonunuzu kullanmaya hazırsınız"
@@ -85,7 +85,7 @@
"Paylaş"
"Ekran görüntüsü"
"Uygulamanız veya kuruluşunuz bu işleme izin vermiyor"
- "Gezinme eğitici içeriği atlansın mı?"
+ "Gezinme eğitimi atlansın mı?"
"Bunu daha sonra %1$s uygulamasında bulabilirsiniz"
"İptal"
"Atla"
diff --git a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java
index 46ef6982ff..5b4e5f24d5 100644
--- a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java
+++ b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java
@@ -161,7 +161,7 @@ public class DepthController implements StateHandler,
if (mSurface != surface) {
mSurface = surface;
if (surface != null) {
- setDepth(mDepth);
+ dispatchTransactionSurface(mDepth);
}
}
}
@@ -175,6 +175,8 @@ public class DepthController implements StateHandler,
float toDepth = toState.getDepth(mLauncher);
if (Float.compare(mDepth, toDepth) != 0) {
setDepth(toDepth);
+ } else if (toState == LauncherState.OVERVIEW) {
+ dispatchTransactionSurface(mDepth);
}
}
@@ -200,26 +202,35 @@ public class DepthController implements StateHandler,
if (Float.compare(mDepth, depthF) == 0) {
return;
}
+ if (dispatchTransactionSurface(depthF)) {
+ mDepth = depthF;
+ }
+ }
+ private boolean dispatchTransactionSurface(float depth) {
boolean supportsBlur = BlurUtils.supportsBlursOnWindows();
if (supportsBlur && (mSurface == null || !mSurface.isValid())) {
- return;
+ return false;
}
- mDepth = depthF;
ensureDependencies();
IBinder windowToken = mLauncher.getRootView().getWindowToken();
if (windowToken != null) {
- mWallpaperManager.setWallpaperZoomOut(windowToken, mDepth);
+ mWallpaperManager.setWallpaperZoomOut(windowToken, depth);
}
if (supportsBlur) {
- boolean isOpaque = mLauncher.getScrimView().isFullyOpaque();
- int blur = isOpaque ? 0 : (int) (mDepth * mMaxBlurRadius);
+ // We cannot mark the window as opaque in overview because there will be an app window
+ // below the launcher layer, and we need to draw it -- without blurs.
+ boolean isOverview = mLauncher.isInState(LauncherState.OVERVIEW);
+ boolean opaque = mLauncher.getScrimView().isFullyOpaque() && !isOverview;
+
+ int blur = opaque || isOverview ? 0 : (int) (depth * mMaxBlurRadius);
new SurfaceControl.Transaction()
.setBackgroundBlurRadius(mSurface, blur)
- .setOpaque(mSurface, isOpaque)
+ .setOpaque(mSurface, opaque)
.apply();
}
+ return true;
}
@Override
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java
index 1304033d08..d15113184d 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java
@@ -15,6 +15,8 @@
*/
package com.android.launcher3.uioverrides;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_APP_LAUNCH_TAP;
+
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
import android.app.PendingIntent;
@@ -26,6 +28,7 @@ import android.view.View;
import android.widget.RemoteViews;
import com.android.launcher3.Utilities;
+import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.util.ActivityOptionsWrapper;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
@@ -72,9 +75,24 @@ class QuickstepInteractionHandler implements RemoteViews.InteractionHandler {
mLauncher.addLaunchCookie((ItemInfo) itemInfo, activityOptions.options);
}
options = Pair.create(options.first, activityOptions.options);
+ if (pendingIntent.isActivity()) {
+ logAppLaunch(itemInfo);
+ }
return RemoteViews.startPendingIntent(hostView, pendingIntent, options);
}
+ /**
+ * Logs that the app was launched from the widget.
+ * @param itemInfo the widget info.
+ */
+ private void logAppLaunch(Object itemInfo) {
+ StatsLogManager.StatsLogger logger = mLauncher.getStatsLogManager().logger();
+ if (itemInfo instanceof ItemInfo) {
+ logger.withItemInfo((ItemInfo) itemInfo);
+ }
+ logger.log(LAUNCHER_APP_LAUNCH_TAP);
+ }
+
private LauncherAppWidgetHostView findHostViewAncestor(View v) {
while (v != null) {
if (v instanceof LauncherAppWidgetHostView) return (LauncherAppWidgetHostView) v;
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
index eb62110065..283743dc64 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
@@ -51,7 +51,7 @@ import com.android.quickstep.views.RecentsView;
* first home screen instead of to Overview.
*/
public class NoButtonNavbarToOverviewTouchController extends PortraitStatesTouchController {
-
+ private static final float ONE_HANDED_ACTIVATED_SLOP_MULTIPLIER = 2.5f;
// How much of the movement to use for translating overview after swipe and hold.
private static final float OVERVIEW_MOVEMENT_FACTOR = 0.25f;
@@ -260,4 +260,14 @@ public class NoButtonNavbarToOverviewTouchController extends PortraitStatesTouch
private float dpiFromPx(float pixels) {
return Utilities.dpiFromPx(pixels, mLauncher.getResources().getDisplayMetrics().densityDpi);
}
+
+ @Override
+ public void onOneHandedModeStateChanged(boolean activated) {
+ if (activated) {
+ mDetector.setTouchSlopMultiplier(ONE_HANDED_ACTIVATED_SLOP_MULTIPLIER);
+ } else {
+ // Reset touch slop multiplier to default 1.0f
+ mDetector.setTouchSlopMultiplier(1f /* default */);
+ }
+ }
}
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 306032cff2..88db2741ab 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -745,10 +745,25 @@ public abstract class AbsSwipeUpHandler,
TaskUtils.closeSystemWindowsAsync(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
if (mRecentsView != null) {
- InteractionJankMonitorWrapper.begin(mRecentsView,
- InteractionJankMonitorWrapper.CUJ_QUICK_SWITCH, 2000 /* ms timeout */);
- InteractionJankMonitorWrapper.begin(mRecentsView,
- InteractionJankMonitorWrapper.CUJ_APP_CLOSE_TO_HOME);
+ mRecentsView.getViewTreeObserver().addOnDrawListener(new OnDrawListener() {
+ boolean mHandled = false;
+
+ @Override
+ public void onDraw() {
+ if (mHandled) {
+ return;
+ }
+ mHandled = true;
+
+ InteractionJankMonitorWrapper.begin(mRecentsView,
+ InteractionJankMonitorWrapper.CUJ_QUICK_SWITCH, 2000 /* ms timeout */);
+ InteractionJankMonitorWrapper.begin(mRecentsView,
+ InteractionJankMonitorWrapper.CUJ_APP_CLOSE_TO_HOME);
+
+ mRecentsView.post(() ->
+ mRecentsView.getViewTreeObserver().removeOnDrawListener(this));
+ }
+ });
}
notifyGestureStartedAsync();
setIsLikelyToStartNewTask(isLikelyToStartNewTask, false /* animate */);
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index 4ae6fa8541..7ab371b4d9 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -114,6 +114,9 @@ public abstract class BaseActivityInterface callback);
diff --git a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
index 4ee4398d81..906599f560 100644
--- a/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/FallbackActivityInterface.java
@@ -73,6 +73,11 @@ public final class FallbackActivityInterface extends
// set to zero prior to this class becoming active.
}
+ @Override
+ public void onOneHandedModeStateChanged(boolean activated) {
+ // Do nothing for FallbackActivityInterface
+ }
+
/** 6 */
@Override
public AnimationFactory prepareRecentsUI(RecentsAnimationDeviceState deviceState,
diff --git a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
index 9014774ae7..30abfbb922 100644
--- a/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/LauncherActivityInterface.java
@@ -104,6 +104,15 @@ public final class LauncherActivityInterface extends
launcher.onAssistantVisibilityChanged(visibility);
}
+ @Override
+ public void onOneHandedModeStateChanged(boolean activated) {
+ Launcher launcher = getCreatedActivity();
+ if (launcher == null) {
+ return;
+ }
+ launcher.onOneHandedStateChanged(activated);
+ }
+
@Override
public AnimationFactory prepareRecentsUI(RecentsAnimationDeviceState deviceState,
boolean activityVisible, Consumer callback) {
diff --git a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
index fb8f9fe31d..0efe6666a8 100644
--- a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
+++ b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
@@ -111,6 +111,11 @@ public final class OverviewComponentObserver {
if (mDeviceState.isHomeDisabled() != mIsHomeDisabled) {
updateOverviewTargets();
}
+
+ // Notify ALL_APPS touch controller when one handed mode state activated or deactivated
+ if (mDeviceState.isOneHandedModeEnabled()) {
+ mActivityInterface.onOneHandedModeStateChanged(mDeviceState.isOneHandedModeActive());
+ }
}
private void updateOverviewTargets(Intent unused) {
diff --git a/res/drawable/drop_target_background.xml b/res/drawable/drop_target_background.xml
new file mode 100644
index 0000000000..7e07bf5824
--- /dev/null
+++ b/res/drawable/drop_target_background.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/widgets_list_bottom_ripple.xml b/res/drawable/widgets_list_bottom_ripple.xml
deleted file mode 100644
index c2debb1764..0000000000
--- a/res/drawable/widgets_list_bottom_ripple.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/drawable/widgets_list_middle_ripple.xml b/res/drawable/widgets_list_middle_ripple.xml
deleted file mode 100644
index 83f96a08c2..0000000000
--- a/res/drawable/widgets_list_middle_ripple.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/drawable/widgets_list_single_item_ripple.xml b/res/drawable/widgets_list_single_item_ripple.xml
deleted file mode 100644
index a4223a82c9..0000000000
--- a/res/drawable/widgets_list_single_item_ripple.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/drawable/widgets_list_top_ripple.xml b/res/drawable/widgets_list_top_ripple.xml
deleted file mode 100644
index bc0876e40c..0000000000
--- a/res/drawable/widgets_list_top_ripple.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/settings_activity.xml b/res/layout/settings_activity.xml
index c70d5bf22c..5edd2df3f5 100644
--- a/res/layout/settings_activity.xml
+++ b/res/layout/settings_activity.xml
@@ -18,7 +18,8 @@
android:id="@+id/content_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:fitsSystemWindows="true">
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index b3b0d2bb6e..ad353e11c3 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -51,6 +51,9 @@
"Persoonlik"
"Werk"
"Gesprekke"
+ "Nuttige inligting binne jou bereik"
+ "Jy kan legstukke by jou tuisskerm voeg om inligting te kry sonder om programme oop te maak"
+ "Het dit"
"Deursoek programme"
"Laai tans programme …"
"Kon geen programme kry wat by \"%1$s\" pas nie"
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 1de056de97..34cdc03f0c 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -51,6 +51,9 @@
"የግል"
"ስራ"
"ውይይቶች"
+ "በጣቶችዎ ጫፎች ላይ ጠቃሚ መረጃ"
+ "መተግበሪያዎችን ሳይከፍቱ መረጃ ለማግኘት በመነሻ ማያ ገጽዎ ላይ ምግብሮችን ማከል ይችላሉ"
+ "ገባኝ"
"መተግበሪያዎችን ፈልግ"
"መተግበሪያዎችን በመጫን ላይ…"
"ከ«%1$s» ጋር የሚዛመዱ ምንም መተግበሪያዎች አልተገኙም"
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 9ddb736247..7a5488fd4a 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -59,6 +59,9 @@
"الأدوات الشخصية"
"أدوات العمل"
"المحادثات"
+ "معلومات مفيدة في متناول يديك"
+ "للحصول على معلومات بدون فتح التطبيقات، يمكنك إضافة الأدوات إلى الشاشة الرئيسية."
+ "حسنًا"
"بحث في التطبيقات"
"جارٍ تحميل التطبيقات…"
"لم يتم العثور على أي تطبيقات تتطابق مع \"%1$s\""
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 8ff9e493b1..1b2d8a11b9 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -51,6 +51,9 @@
"ব্যক্তিগত"
"কৰ্মস্থান"
"বাৰ্তালাপ"
+ "আপোনাৰ আঙুলিৰে টিপতে উপযোগী তথ্য পাওক"
+ "এপ্ নোখোলাকৈ তথ্য পাবলৈ আপুনি নিজৰ গৃহ স্ক্ৰীনত ৱিজেট যোগ দিব পাৰে"
+ "বুজি পালোঁ"
"এপসমূহ সন্ধান কৰক"
"এপসমূহ ল’ড কৰি থকা হৈছে…"
"\"%1$s\"ৰ সৈতে মিলা কোনো এপ্ বিচাৰি পোৱা নগ\'ল"
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 4faba10935..41573d91f3 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -51,6 +51,9 @@
"Şəxsi"
"İş"
"Söhbətlər"
+ "Faydalı məlumatlar barmaqlarınızın ucunda"
+ "Tətbiqləri açmadan məlumat almaq üçün Əsas ekrana vidcet əlavə edə bilərsiniz"
+ "Anladım"
"Tətbiqləri axtarın"
"Tətbiqlər yüklənir…"
"%1$s sorğusuna uyğun tətbiq tapılmadı"
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 700565615f..1417ea66d4 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -53,6 +53,9 @@
"Lično"
"Posao"
"Konverzacije"
+ "Korisne informacije nadohvat ruke"
+ "Da biste pronašli informacije bez otvaranja aplikacija, možete da dodate vidžete na početni ekran"
+ "Važi"
"Pretražite aplikacije"
"Aplikacije se učitavaju…"
"Nije pronađena nijedna aplikacija za „%1$s“"
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index c082f9fe7d..c0047ce133 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -55,6 +55,9 @@
"Асабістыя"
"Працоўныя"
"Размовы"
+ "Карысная інфармацыя ў вас пад рукой"
+ "Каб не адкрываць праграмы для прагляду патрэбнай інфармацыі, дадайце віджэты на галоўны экран"
+ "Зразумела"
"Пошук праграм"
"Праграмы загружаюцца…"
"Праграм, якія адпавядаюць запыту \"%1$s\", не знойдзена"
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 7c1af2a7b1..69f20747b7 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -32,7 +32,7 @@
"Докоснете двукратно и задръжте за преместване на приспособление или използвайте персонал. действия."
"%1$d × %2$d"
"Ширина %1$d и височина %2$d"
- "Докоснете приспособлението и го задръжте, за да го местите на началния екран"
+ "Докоснете приспособлението и го задръжте, за да го местите по началния екран"
"Добавяне към началния екран"
- %1$d приспособления
@@ -51,6 +51,9 @@
"Лични"
"Служебни"
"Разговори"
+ "Лесен достъп до полезна информация"
+ "За да получавате информация, без да отваряте приложенията, можете да добавите приспособления към началния екран"
+ "Разбрах"
"Търсене в приложенията"
"Приложенията се зареждат…"
"Няма намерени приложения, съответстващи на „%1$s“"
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 71b00eb647..8c8292d25b 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -51,6 +51,9 @@
"ব্যক্তিগত"
"অফিস"
"কথোপকথন"
+ "সহজেই দরকারি তথ্য পান"
+ "অ্যাপ না খুলে তথ্য পাওয়ার জন্য, আপনার হোম স্ক্রিনে উইজেট যোগ করতে পারেন"
+ "বুঝেছি"
"অ্যাপ খুঁজুন"
"অ্যাপ লোড হচ্ছে…"
"\"%1$s\" এর সাথে মেলে এমন কোনো অ্যাপ পাওয়া যায়নি"
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index b7d93f6aad..bfec27d709 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -53,6 +53,9 @@
"Lično"
"Posao"
"Razgovori"
+ "Korisne informacije nadohvat ruke"
+ "Da dobijete informacije bez otvaranja aplikacija, možete dodati vidžete na početni ekran"
+ "Razumijem"
"Pretražite aplikacije"
"Aplikacije se učitavaju…"
"Nije pronađena nijedna aplikacija za upit \"%1$s\""
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 2926d563f3..d35bfc66da 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -51,6 +51,9 @@
"Personal"
"Treball"
"Converses"
+ "Informació útil a l\'abast de la mà"
+ "Per obtenir informació sense obrir les aplicacions, pots afegir widgets a la pantalla d\'inici"
+ "Entesos"
"Cerca aplicacions"
"S\'estan carregant les aplicacions…"
"No s\'ha trobat cap aplicació que coincideixi amb \"%1$s\""
@@ -152,7 +155,7 @@
"Treball"
"Perfil de treball"
"Les dades personals s\'oculten i se separen de les aplicacions de treball"
- "L\'administrador de TI pot veure les dades i les aplicacions de treball"
+ "L\'administrador de TI pot veure les teves dades i aplicacions de treball"
"Següent"
"Entesos"
"El perfil de treball està en pausa"
@@ -163,6 +166,6 @@
"Posa en pausa les aplicacions de treball"
"Activa"
"Filtra"
- "Posa en pausa les notificacions i les aplicacions de treball"
+ "Posa en pausa les aplicacions i notificacions de treball"
"Error: %1$s"
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 3198068209..c1ed2883ab 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -32,7 +32,7 @@
"Dvojitým klepnutím a podržením přesunete widget, případně použijte vlastní akce."
"%1$d × %2$d"
"šířka %1$d, výška %2$d"
- "Pokud widgetem chcete pohybovat po ploše, dotkněte se ho a podržte ho"
+ "Pokud chcete widgetem pohybovat po ploše, podržte ho"
"Přidat na plochu"
- %1$d widgety
@@ -55,6 +55,9 @@
"Osobní"
"Práce"
"Konverzace"
+ "Užitečné informace na dosah"
+ "Pokud chcete mít informace k dispozici bez otevírání aplikací, můžete si na plochu přidat widgety"
+ "Rozumím"
"Hledat v aplikacích"
"Načítání aplikací…"
"Dotazu „%1$s“ neodpovídají žádné aplikace"
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 502d5eb970..dea0183e88 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -51,6 +51,9 @@
"Personlige"
"Arbejde"
"Samtaler"
+ "Nyttige oplysninger lige ved hånden"
+ "Hvis du vil have oplysninger uden at åbne apps, kan du føje widgets til din startskærm"
+ "OK"
"Søg efter apps"
"Indlæser apps…"
"Der blev ikke fundet nogen apps, som matcher \"%1$s\""
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 63c58c7e59..3a20d1740a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -51,6 +51,9 @@
"Privat"
"Geschäftlich"
"Unterhaltungen"
+ "Praktische Informationen – immer zur Hand"
+ "Wenn du Informationen erhalten möchtest, ohne Apps zu öffnen, kannst du deinem Startbildschirm Widgets hinzufügen"
+ "OK"
"Apps finden"
"Apps werden geladen…"
"Keine Apps für \"%1$s\" gefunden"
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 0ffe2c430c..4e8ecf951f 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -51,6 +51,9 @@
"Προσωπικά"
"Εργασίας"
"Συζητήσεις"
+ "Χρήσιμες πληροφορίες στη διάθεσή σας"
+ "Για να λάβετε πληροφορίες χωρίς να ανοίξετε εφαρμογές, μπορείτε να προσθέσετε γραφικά στοιχεία στην αρχική σας οθόνη."
+ "Το κατάλαβα"
"Αναζήτηση εφαρμογών"
"Φόρτωση εφαρμογών…"
"Δεν βρέθηκαν εφαρμογές αντιστοίχισης για \"%1$s\""
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 5af3e7dcea..ecf68038be 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -32,7 +32,7 @@
"Double-tap & hold to move a widget or use custom actions."
"%1$d × %2$d"
"%1$d wide by %2$d high"
- "Touch & hold the widget to move it around the home screen"
+ "Touch and hold the widget to move it around the home screen"
"Add to home screen"
- %1$d widgets
@@ -51,6 +51,9 @@
"Personal"
"Work"
"Conversations"
+ "Useful info at your fingertips"
+ "To get info without opening apps, you can add widgets to your home screen"
+ "OK"
"Search apps"
"Loading apps…"
"No apps found matching \'%1$s\'"
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 5af3e7dcea..ecf68038be 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -32,7 +32,7 @@
"Double-tap & hold to move a widget or use custom actions."
"%1$d × %2$d"
"%1$d wide by %2$d high"
- "Touch & hold the widget to move it around the home screen"
+ "Touch and hold the widget to move it around the home screen"
"Add to home screen"
- %1$d widgets
@@ -51,6 +51,9 @@
"Personal"
"Work"
"Conversations"
+ "Useful info at your fingertips"
+ "To get info without opening apps, you can add widgets to your home screen"
+ "OK"
"Search apps"
"Loading apps…"
"No apps found matching \'%1$s\'"
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5af3e7dcea..ecf68038be 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -32,7 +32,7 @@
"Double-tap & hold to move a widget or use custom actions."
"%1$d × %2$d"
"%1$d wide by %2$d high"
- "Touch & hold the widget to move it around the home screen"
+ "Touch and hold the widget to move it around the home screen"
"Add to home screen"
- %1$d widgets
@@ -51,6 +51,9 @@
"Personal"
"Work"
"Conversations"
+ "Useful info at your fingertips"
+ "To get info without opening apps, you can add widgets to your home screen"
+ "OK"
"Search apps"
"Loading apps…"
"No apps found matching \'%1$s\'"
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 5af3e7dcea..ecf68038be 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -32,7 +32,7 @@
"Double-tap & hold to move a widget or use custom actions."
"%1$d × %2$d"
"%1$d wide by %2$d high"
- "Touch & hold the widget to move it around the home screen"
+ "Touch and hold the widget to move it around the home screen"
"Add to home screen"
- %1$d widgets
@@ -51,6 +51,9 @@
"Personal"
"Work"
"Conversations"
+ "Useful info at your fingertips"
+ "To get info without opening apps, you can add widgets to your home screen"
+ "OK"
"Search apps"
"Loading apps…"
"No apps found matching \'%1$s\'"
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index b82f0c95f2..9475db92f1 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -51,6 +51,9 @@
"Personal"
"Work"
"Conversations"
+ "Useful info at your fingertips"
+ "To get info without opening apps, you can add widgets to your Home screen"
+ "Got it"
"Search apps"
"Loading apps…"
"No apps found matching \"%1$s\""
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 56f31bf23b..1f9d5f1dbd 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -51,6 +51,9 @@
"Personal"
"Trabajo"
"Conversaciones"
+ "Información útil a tu alcance"
+ "Para recibir información de apps sin abrirlas, puedes agregar widgets a la pantalla principal"
+ "Entendido"
"Buscar apps"
"Cargando apps…"
"No hay apps que coincidan con \"%1$s\""
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 686d2240bf..45061d5882 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -51,6 +51,9 @@
"Personal"
"Trabajo"
"Conversaciones"
+ "Información útil al alcance de la mano"
+ "Para recibir información sin abrir aplicaciones, puedes añadir widgets a la pantalla de inicio."
+ "Entendido"
"Buscar aplicaciones"
"Cargando aplicaciones…"
"No se han encontrado aplicaciones que contengan \"%1$s\""
@@ -156,8 +159,8 @@
"Siguiente"
"Entendido"
"El perfil de trabajo está en pausa"
- "Las aplicaciones de trabajo no pueden enviarte notificaciones, consumir tu batería ni acceder a tu ubicación"
- "El perfil de trabajo está en pausa. Las aplicaciones de trabajo no pueden enviarte notificaciones, consumir tu batería ni acceder a tu ubicación"
+ "Las aplicaciones de trabajo no pueden enviarte notificaciones, consumir batería ni acceder a tu ubicación"
+ "El perfil de trabajo está en pausa. Las aplicaciones de trabajo no pueden enviarte notificaciones, consumir batería ni acceder a tu ubicación"
"Las aplicaciones de trabajo tienen una insignia y tu administrador de TI las puede ver"
"Entendido"
"Pausar aplicaciones de trabajo"
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 4908c4da3f..ef27c2b0a6 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -51,6 +51,9 @@
"Isiklik"
"Töö"
"Vestlused"
+ "Kasulik teave on teie käeulatuses"
+ "Teabe saamiseks rakendusi avamata võite oma avakuvale lisada vidinaid"
+ "Selge"
"Otsige rakendusi"
"Rakenduste laadimine …"
"Päringule „%1$s” ei vastanud ükski rakendus"
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index c15b18c5a5..812f007a23 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -51,6 +51,9 @@
"Pertsonalak"
"Lanekoak"
"Elkarrizketak"
+ "Informazio erabilgarria beti eskura"
+ "Aplikazioa ireki beharrik gabe informazioa zuzenean jasotzeko, gehitu widgetak hasierako pantailan"
+ "Ados"
"Bilatu aplikazioetan"
"Aplikazioak kargatzen…"
"Ez da aurkitu \"%1$s\" bilaketaren emaitzarik"
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f1ae4d50cd..29ada372e5 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -51,6 +51,9 @@
"شخصی"
"کار"
"مکالمهها"
+ "دسترسی آسان به اطلاعات سودمند"
+ "با افزودن ابزارکها به «صفحه اصلی» میتوانید اطلاعات را بدون باز کردن برنامهها دریافت کنید"
+ "متوجهام"
"جستجوی برنامهها"
"درحال بارگیری برنامهها…"
"هیچ برنامهای در مطابقت با «%1$s» پیدا نشد"
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index dcee366453..c4d0655d78 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -51,6 +51,9 @@
"Henkilökohtainen"
"Työ"
"Keskustelut"
+ "Hyödyllisiä tietoja käden ulottuvilla"
+ "Jos haluat nähdä tietoja avaamatta sovelluksia, voit lisätä aloitusnäytölle widgetejä"
+ "OK"
"Hae sovelluksia"
"Ladataan sovelluksia…"
"%1$s ei palauttanut sovelluksia."
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 4b8c690080..9522a38a67 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -51,6 +51,12 @@
"Personnels"
"Professionnels"
"Conversations"
+
+
+
+
+
+
"Rechercher dans les applications"
"Chargement des applications en cours…"
"Aucune application trouvée correspondant à « %1$s »"
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 90c98fbc6f..adc04fd0d3 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -51,6 +51,9 @@
"Personnels"
"Professionnels"
"Conversations"
+ "Infos utiles à portée de main"
+ "Pour obtenir des infos sans ouvrir d\'applis, vous pouvez ajouter des widgets à votre écran d\'accueil"
+ "OK"
"Rechercher dans les applications"
"Chargement des applications…"
"Aucune application ne correspond à la requête \"%1$s\""
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index e4a93d421c..615c644cc9 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -51,6 +51,9 @@
"Widgets persoais"
"Widgets do traballo"
"Conversas"
+ "Información útil ao teu alcance"
+ "Se queres obter información sen abrir as aplicacións, podes engadir widgets á pantalla de inicio"
+ "Entendido"
"Buscar aplicacións"
"Cargando aplicacións…"
"Non se atoparon aplicacións que coincidan con \"%1$s\""
@@ -152,7 +155,7 @@
"Traballo"
"Perfil de traballo"
"Os datos persoais sepáranse e ocúltanse das aplicacións do traballo"
- "O teu administrador de TI pode ver as aplicacións e os datos do traballo"
+ "O teu administrador de TI pode ver as túas aplicacións e datos do traballo"
"Seguinte"
"Entendido"
"O perfil de traballo está en pausa"
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 3a25705628..9c909a0c7b 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -51,6 +51,12 @@
"વ્યક્તિગત"
"ઑફિસ"
"વાતચીતો"
+
+
+
+
+
+
"શોધ ઍપ્લિકેશનો"
"ઍપ્લિકેશનો લોડ કરી રહ્યું છે…"
"\"%1$s\"થી મેળ ખાતી કોઈ ઍપ્લિકેશનો મળી નથી"
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 471e08897d..5cfb7dbf1b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -51,6 +51,9 @@
"निजी विजेट"
"ऑफ़िस"
"बातचीत"
+ "काम की जानकारी आसानी से पाएं"
+ "ऐप्लिकेशन को खोले बिना उनकी जानकारी पाने के लिए, आप होम स्क्रीन पर विजेट जोड़ सकते हैं"
+ "ठीक है"
"ऐप सर्च करें"
"ऐप्लिकेशन लोड हो रहे हैं…"
"\"%1$s\" से मिलता-जुलता कोई ऐप्लिकेशन नहीं मिला"
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 413afcece3..6c94f31b49 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -53,6 +53,9 @@
"Osobno"
"Posao"
"Razgovori"
+ "Korisne informacije nadohvat ruke"
+ "Da biste dobili informacije bez otvaranja aplikacija, možete dodati widgete na početni zaslon"
+ "Shvaćam"
"Pretraži aplikacije"
"Učitavanje aplikacija…"
"Nema aplikacija podudarnih s upitom \"%1$s\""
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 0435801250..5e1b032255 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -51,6 +51,9 @@
"Személyes"
"Munka"
"Beszélgetések"
+ "Hasznos információk egy koppintásnyira"
+ "Ha az alkalmazások megnyitása nélkül szeretne információhoz jutni, felvehet modulokat a kezdőképernyőre."
+ "Értem"
"Alkalmazások keresése"
"Alkalmazások betöltése…"
"Nem található alkalmazás a(z) „%1$s” lekérdezésre"
@@ -66,7 +69,7 @@
"Munkahelyi alkalmazások listája"
"Törlés"
"Eltávolítás"
- "Alkalmazásinformáció"
+ "Alkalmazásinfó"
"Telepítés"
"Ne javasoljon alkalmazást"
"Várható kitűzése"
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 37d0815717..bc68e3edd1 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -51,6 +51,9 @@
"Անձնական"
"Աշխատանքային"
"Զրույցներ"
+ "Օգտակար տեղեկությունները՝ միշտ հասանելի"
+ "Ավելացրեք վիջեթներ ձեր հիմնական էկրանին և ստացեք տեղեկություններ՝ առանց հավելվածները բացելու։"
+ "Եղավ"
"Որոնել հավելվածներ"
"Հավելվածների բեռնում…"
"«%1$s» հարցմանը համապատասխանող հավելվածներ չեն գտնվել"
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index abad5f0b9c..782737c31e 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -51,6 +51,9 @@
"Pribadi"
"Kantor"
"Percakapan"
+ "Info bermanfaat yang mudah diakses"
+ "Untuk mendapatkan info tanpa membuka aplikasi, Anda dapat menambahkan widget ke Layar utama"
+ "Oke"
"Telusuri aplikasi"
"Memuat aplikasi…"
"Tidak ditemukan aplikasi yang cocok dengan \"%1$s\""
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index bb4ee9bd6a..b15e86c404 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -51,6 +51,9 @@
"Persónulegt"
"Vinna"
"Samtöl"
+ "Gagnlegar upplýsingar innan seilingar"
+ "Þú getur bætt við græjum á heimaskjáinn til að fá upplýsingar án þess að opna forrit"
+ "Ég skil"
"Leita í forritum"
"Hleður forrit…"
"Ekki fundust forrit sem samsvara „%1$s“"
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2a19b739af..23297e4a4b 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -51,6 +51,9 @@
"Personali"
"Lavoro"
"Conversazioni"
+ "Informazioni utili a portata di mano"
+ "Per ricevere informazioni senza aprire app, puoi aggiungere widget alla schermata Home"
+ "OK"
"Cerca nelle app"
"Caricamento delle app…"
"Nessuna app trovata corrispondente a \"%1$s\""
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index c8793ac9ce..fb72d55595 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -55,6 +55,9 @@
"אישי"
"עבודה"
"שיחות"
+ "קבלת מידע שימושי בהקשה"
+ "רוצה לקבל מידע בלי לפתוח אפליקציות? אפשר להוסיף ווידג\'טים למסך הבית"
+ "הבנתי"
"חיפוש אפליקציות"
"טעינת אפליקציות מתבצעת…"
"לא נמצאו אפליקציות התואמות ל-\"%1$s\""
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 7f2e4a9118..60fe4532a9 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -51,6 +51,9 @@
"個人用"
"仕事用"
"会話"
+ "スワイプだけで役立つ情報をいつでも入手"
+ "ホーム画面にウィジェットを追加すると、アプリを開かずに情報を入手できます"
+ "OK"
"アプリを検索"
"アプリを読み込んでいます…"
"「%1$s」に一致するアプリは見つかりませんでした"
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index ca8f665b27..1347d1debc 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -51,6 +51,9 @@
"პირადი"
"სამსახური"
"მიმოწერები"
+ "ადვილად მისაწვდომი სასარგებლო ინფორმაცია"
+ "იმისთვის, რომ ინფორმაცია აპების გაუხსნელად მიიღოთ, შეგიძლიათ, მთავარ ეკრანზე ვიჯეტები დაამატოთ"
+ "გასაგებია"
"აპების ძიება"
"აპები იტვირთება…"
"„%1$s“-ის თანხვედრი აპები არ მოიძებნა"
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 8353c249da..2b1b89f292 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -32,7 +32,7 @@
"Виджетті жылжыту үшін екі рет түртіңіз де, ұстап тұрыңыз немесе арнаулы әрекеттерді пайдаланыңыз."
"%1$d × %2$d"
"Ені: %1$d, биіктігі: %2$d"
- "Негізгі экран бойымен қозғалту үшін виджетті басып, ұстап тұрыңыз."
+ "Негізгі экранда қозғалту үшін виджетті басып, ұстап тұрыңыз."
"Негізгі экранға қосу"
- %1$d виджет
@@ -51,6 +51,12 @@
"Жеке виджеттер"
"Жұмыс виджеттері"
"Әңгімелер"
+
+
+
+
+
+
"Қолданбаларды іздеу"
"Қолданбалар жүктелуде…"
"\"%1$s\" сұрауына сәйкес келетін қолданбалар жоқ"
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index b941b18c18..4f0964836c 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -51,6 +51,9 @@
"ផ្ទាល់ខ្លួន"
"ការងារ"
"ការសន្ទនា"
+ "ទទួលបានព័ត៌មានដែលមានប្រយោជន៍យ៉ាងងាយស្រួល"
+ "ដើម្បីទទួលបានព័ត៌មានដោយមិនចាំបាច់បើកកម្មវិធី អ្នកអាចបញ្ចូលធាតុក្រាហ្វិកទៅក្នុងអេក្រង់ដើមរបស់អ្នក"
+ "យល់ហើយ"
"ស្វែងរកកម្មវិធី"
"កំពុងផ្ទុកកម្មវិធី…"
"រកមិនឃើញកម្មវិធីដែលត្រូវគ្នាជាមួយ \"%1$s\" ទេ"
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 27f045e3ff..9a3075f54d 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -51,6 +51,9 @@
"ವೈಯಕ್ತಿಕ"
"ಕೆಲಸ"
"ಸಂವಾದಗಳು"
+ "ನಿಮ್ಮ ಬೆರಳ ತುದಿಯಲ್ಲಿ ಉಪಯುಕ್ತ ಮಾಹಿತಿ"
+ "ಆ್ಯಪ್ಗಳನ್ನು ತೆರೆಯದೆಯೇ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲು, ನಿಮ್ಮ ಹೋಮ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ನೀವು ವಿಜೆಟ್ಗಳನ್ನು ಸೇರಿಸಬಹುದು"
+ "ಅರ್ಥವಾಯಿತು"
"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಹುಡುಕಿ"
"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."
"\"%1$s\" ಹೊಂದಿಕೆಯ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ"
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index e8a19ebe77..cce4c8935b 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -51,6 +51,9 @@
"개인 위젯"
"직장 위젯"
"대화"
+ "빠르게 유용한 정보 확인"
+ "앱을 열지 않고 정보를 확인하려면 홈 화면에 위젯을 추가하세요."
+ "확인"
"앱 검색"
"앱 로드 중…"
"\'%1$s\'과(와) 일치하는 앱이 없습니다."
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 7f131771c6..ed49ff1ae2 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -51,6 +51,9 @@
"Жеке"
"Жумуш"
"Сүйлөшүүлөр"
+ "Пайдалуу маалымат манжаңыздын учунда эле турат"
+ "Колдонмолорду ачпастан керектүү маалыматты алуу үчүн Башкы экранга виджеттерди кошуңуз"
+ "Түшүндүм"
"Колдонмолорду издөө"
"Колдонмолор жүктөлүүдө…"
"\"%1$s\" сурамына дал келген колдонмолор табылган жок"
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 041e3222e7..ed367d98eb 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -51,6 +51,9 @@
"ສ່ວນຕົວ"
"ວຽກ"
"ການສົນທະນາ"
+ "ຂໍ້ມູນທີ່ເປັນປະໂຫຍດຢູ່ປາຍນິ້ວຂອງທ່ານ"
+ "ເພື່ອຮັບຂໍ້ມູນໂດຍບໍ່ຕ້ອງເປີດແອັບ, ທ່ານສາມາດເພີ່ມວິດເຈັດໃສ່ໂຮມສະກຣີນຂອງທ່ານໄດ້"
+ "ເຂົ້າໃຈແລ້ວ"
"ຊອກຫາແອັບ"
"ກໍາລັງໂຫຼດແອັບ…"
"ບໍ່ພົບແອັບທີ່ກົງກັບ \"%1$s\""
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 707cef4638..21f99fc127 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -55,6 +55,9 @@
"Asmeniniai"
"Darbas"
"Pokalbiai"
+ "Lengvai pasiekiama naudinga informacija"
+ "Jei norite gauti informacijos neatidarę programų, galite pridėti valdiklių pagrindiniame ekrane"
+ "Supratau"
"Paieškos programos"
"Įkeliamos programos…"
"Nerasta jokių užklausą „%1$s“ atitinkančių programų"
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 382784b39d..059620c314 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -53,6 +53,9 @@
"Personīgie"
"Darba"
"Sarunas"
+ "Ērta piekļuve noderīgai informācijai"
+ "Lai iegūtu informāciju, neatverot lietotnes, varat pievienot logrīkus sākuma ekrānā."
+ "Labi"
"Meklēt lietotnes"
"Notiek lietotņu ielāde…"
"Vaicājumam “%1$s” neatbilda neviena lietotne"
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index dcfd1d9d40..f4c960624e 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -51,6 +51,9 @@
"Лични"
"Работни"
"Разговори"
+ "Корисни информации на дофат на прстите"
+ "За да добивате информации без да ги отворате апликациите, може да додадете виџети на почетниот екран"
+ "Сфатив"
"Пребарувајте апликации"
"Се вчитуваат апликации…"
"Не се најдени апликации што одговараат на „%1$s“"
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 2d7c9250eb..0359220ac1 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -51,6 +51,9 @@
"വ്യക്തിപരം"
"ജോലി"
"സംഭാഷണങ്ങൾ"
+ "ഉപകാരപ്രദമായ വിവരങ്ങൾ നിങ്ങളുടെ വിരൽത്തുമ്പിൽ"
+ "ആപ്പുകൾ തുറക്കാതെ വിവരങ്ങൾ ലഭിക്കാൻ, നിങ്ങൾക്ക് ഹോം സ്ക്രീനിലേക്ക് വിജറ്റുകൾ ചേർക്കാം"
+ "മനസ്സിലായി"
"ആപ്പുകൾ തിരയുക"
"ആപ്പുകൾ ലോഡുചെയ്യുന്നു..."
"\"%1$s\" എന്നതുമായി പൊരുത്തപ്പെടുന്ന ആപ്പുകളൊന്നും കണ്ടെത്തിയില്ല"
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 5a072fea72..53d382dc85 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -51,6 +51,9 @@
"Хувийн"
"Ажил"
"Харилцан яриа"
+ "Хэрэгтэй мэдээллээ хурууныхаа үзүүрээр аваарай"
+ "Аппуудыг нээлгүйгээр мэдээлэл авахын тулд та Үндсэн нүүрэндээ жижиг хэрэгслүүд нэмэх боломжтой"
+ "Ойлголоо"
"Апп хайх"
"Аппыг ачаалж байна..."
"\"%1$s\"-д тохирох апп олдсонгүй"
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index e87e6b9fc7..b4c217434e 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -51,6 +51,9 @@
"वैयक्तिक"
"ऑफिस"
"संभाषणे"
+ "तुमच्यासाठी सहज उपलब्ध असलेली माहिती"
+ "ॲप्स न उघडता माहिती मिळवण्यासाठी, तुम्ही तुमच्या होम स्क्रीनवर विजेट जोडू शकता"
+ "समजले"
"अॅप्स शोधा"
"अॅप्स लोड करत आहे…"
"\"%1$s\" शी जुळणारे कोणतेही अॅप्स आढळले नाहीत"
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 9465be5b02..f6300ee107 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -33,7 +33,7 @@
"%1$d × %2$d"
"Lebar %1$d kali tinggi %2$d"
"Sentuh & tahan widget untuk menggerakkan widget di sekitar Skrin utama"
- "Tambah pada Skrin utama"
+ "Tambahkan pada Skrin utama"
- %1$d widget
- %1$d widget
@@ -51,6 +51,9 @@
"Peribadi"
"Tempat kerja"
"Perbualan"
+ "Maklumat berguna di hujung jari anda"
+ "Untuk mendapatkan maklumat tanpa membuka apl, anda boleh menambahkan widget pada skrin Utama anda"
+ "OK"
"Cari apl"
"Memuatkan apl…"
"Tiada apl yang ditemui sepadan dengan \"%1$s\""
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 1fb7e5644f..1a8650cc16 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -51,6 +51,9 @@
"ကိုယ်ပိုင်"
"အလုပ်"
"စကားဝိုင်းများ"
+ "အသုံးဝင်သော အချက်အလက်များကို အလွယ်တကူ ရယူလိုက်ပါ"
+ "အက်ပ်များကိုမဖွင့်ဘဲ အချက်အလက်များရယူရန် သင်၏ ပင်မစာမျက်နှာသို့ ဝိဂျက်များ ထည့်နိုင်သည်"
+ "ရပြီ"
"ရှာဖွေမှု အက်ပ်များ"
"အက်ပ်များကို ဖွင့်နေသည်…"
"\"%1$s\" နှင့်ကိုက်ညီသည့် အပ်ပ်များကို မတွေ့ပါ"
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 42d04a2231..49d29127f4 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -51,6 +51,9 @@
"Personlig"
"Jobb"
"Samtaler"
+ "Lett tilgjengelig nyttig informasjon"
+ "For å se informasjon uten å åpne apper kan du legge til moduler på startskjermen"
+ "Greit"
"Søk etter apper"
"Laster inn appene …"
"Fant ingen apper som samsvarer med «%1$s»"
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 9e26e1d9e5..474a452a0d 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -32,7 +32,7 @@
"कुनै विजेट सार्न वा आफ्नो रोजाइका कारबाही प्रयोग गर्न डबल ट्याप गरेर छोइराख्नुहोस्।"
"%1$d × %2$d"
"%1$d चौडाइ गुणा %2$d उचाइ"
- "विजेटलाई होम स्क्रिनमा यताउता सार्न त्यसमा टच एन्ड होल्ड गर्नुहोस्"
+ "यो विजेट होम स्क्रिनमा यताउता सार्न त्यसमा टच एन्ड होल्ड गर्नुहोस्"
"होम स्क्रिनमा हाल्नुहोस्"
- %1$d वटा विजेट
@@ -51,6 +51,12 @@
"व्यक्तिगत"
"कामसम्बन्धी"
"वार्तालापहरू"
+
+
+
+
+
+
"खोजसम्बन्धी एपहरू"
"एपहरू लोड गर्दै…"
"\"%1$s\" सँग मिल्दो कुनै एप भेटिएन"
@@ -121,7 +127,7 @@
"%1$s स्थापना गर्न प्रतीक्षा गर्दै"
"विजेटहरूको सूची"
"विजेटहरूको सूची बन्द गरियो"
- "गृह स्क्रिनमा थप्नुहोस्"
+ "होम स्क्रिनमा हाल्नुहोस्"
"वस्तु यहाँ सार्नुहोस्"
"वस्तु गृह स्क्रिनमा थपियो"
"वस्तु हटाइयो"
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 58d1d98787..f3c55386c7 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -51,6 +51,9 @@
"Persoonlijk"
"Werk"
"Gesprekken"
+ "Nuttige informatie binnen handbereik"
+ "Als je informatie wilt krijgen zonder apps te openen, kun je widgets toevoegen aan je startscherm"
+ "OK"
"Apps zoeken"
"Apps laden…"
"Er zijn geen apps gevonden die overeenkomen met \'%1$s\'"
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index dfcc716796..3517dabf4b 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -51,6 +51,12 @@
"ବ୍ୟକ୍ତିଗତ"
"ୱାର୍କ"
"ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ"
+
+
+
+
+
+
"ଆପ୍ ଖୋଜନ୍ତୁ"
"ଆପ୍ ଲୋଡ୍ ହେଉଛି..."
"\"%1$s\" ସହିତ ମେଳ ହେଉଥିବା କୌଣସି ଆପ୍ ମିଳିଲା ନାହିଁ"
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 495f3c4b7c..64a180a651 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -51,6 +51,12 @@
"ਨਿੱਜੀ"
"ਕਾਰਜ-ਸਥਾਨ"
"ਗੱਲਾਂਬਾਤਾਂ"
+
+
+
+
+
+
"ਐਪਾਂ ਖੋਜੋ"
"ਐਪਾਂ ਨੂੰ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
"\"%1$s\" ਨਾਲ ਮੇਲ ਖਾਂਦੀਆਂ ਕੋਈ ਐਪਾਂ ਨਹੀਂ ਮਿਲੀਆਂ"
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index acce00a01d..7b47cdea25 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -32,7 +32,7 @@
"Naciśnij dwukrotnie i przytrzymaj, aby przenieść widżet lub użyć działań niestandardowych."
"%1$d × %2$d"
"Szerokość %1$d, wysokość %2$d"
- "Kliknij i przytrzymaj widżet, by poruszać nim po ekranie głównym."
+ "Kliknij i przytrzymaj widżet, by poruszać nim po ekranie głównym"
"Dodaj do ekranu głównego"
- %1$d widżety
@@ -55,6 +55,9 @@
"Osobiste"
"Służbowe"
"Rozmowy"
+ "Użyteczne informacje w zasięgu ręki"
+ "Aby uzyskać informacje bez otwierania aplikacji, możesz dodać widżety do ekranu głównego"
+ "OK"
"Wyszukaj aplikacje"
"Ładuję aplikacje…"
"Nie znaleziono aplikacji pasujących do zapytania „%1$s”"
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index d429ebe188..84c472f642 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -51,6 +51,9 @@
"Pessoais"
"Trabalho"
"Conversas"
+ "Informações úteis à sua disposição"
+ "Para obter informações sem abrir apps, pode adicionar widgets ao seu ecrã principal"
+ "OK"
"Pesquisar aplicações"
"A carregar aplicações…"
"Nenhuma app correspondente a \"%1$s\""
@@ -163,6 +166,6 @@
"Colocar apps de trabalho em pausa"
"Ativar"
"Filtrar"
- "Coloque as apps de trabalho e as notificações em pausa."
+ "Coloque as apps de trabalho e as notificações em pausa"
"Falhou: %1$s"
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index fd793d4aa0..c44ffc8294 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -51,6 +51,9 @@
"Pessoal"
"Trabalho"
"Conversas"
+ "Informações úteis ao seu alcance"
+ "Para receber informações sem precisar abrir apps, adicione widgets à sua tela inicial"
+ "Ok"
"Pesquisar apps"
"Carregando apps…"
"Nenhum app encontrado que corresponda a \"%1$s\""
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 5ba9e8d7b5..16f0ade92f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -53,6 +53,9 @@
"Personale"
"Serviciu"
"Conversații"
+ "Informații utile la îndemâna dvs."
+ "Pentru a primi informații fără să deschideți aplicațiile, puteți adăuga widgeturi pe ecranul de pornire"
+ "OK"
"Căutați aplicații"
"Se încarcă aplicații…"
"Nu s-a găsit nicio aplicație pentru „%1$s\""
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 7da57db748..70606a9681 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -32,7 +32,7 @@
"Чтобы использовать специальные действия или перенести виджет, нажмите на него дважды и удерживайте."
"%1$d x %2$d"
"Ширина %1$d, высота %2$d"
- "Нажмите на виджет и удерживайте его, чтобы переместить в нужное место на главном экране."
+ "Чтобы переместить виджет, нажмите на него и удерживайте."
"Добавить на главный экран"
- %1$d виджет
@@ -55,6 +55,9 @@
"Личные виджеты"
"Рабочие виджеты"
"Разговоры"
+ "Вся нужная информация перед глазами"
+ "Чтобы не открывать приложения каждый раз, когда нужна информация, добавьте виджеты на главный экран."
+ "ОК"
"Поиск приложений"
"Загрузка приложений…"
"По запросу \"%1$s\" ничего не найдено"
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 3741c76483..2ba06fabff 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -51,6 +51,9 @@
"පුද්ගලික"
"කාර්යාලය"
"සංවාද"
+ "ප්රයෝජනවත් තොරතුරු ඔබගේ ඇඟිලි තුඩු අග"
+ "යෙදුම් විවෘත නොකර තොරතුරු ලබා ගැනීම සඳහා, ඔබට ඔබගේ මුල් තිරයට විජට් එක් කළ හැකිය"
+ "තේරුණා"
"යෙදුම් සොයන්න"
"යෙදුම් පූරණය වෙමින්…"
"\"%1$s\" සමග ගැළපෙන යෙදුම් හමු නොවිණි"
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index e23e7a9b5a..08e7bb643e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -32,7 +32,7 @@
"Dvojitým klepnutím a pridržaním presuňte miniaplikáciu alebo použite vlastné akcie."
"%1$d × %2$d"
"šírka %1$d, výška %2$d"
- "Po pridržaní môžete miniaplikáciu môžete posúvať po ploche"
+ "Po pridržaní môžete miniaplikáciu posúvať po ploche"
"Pridať na plochu"
- %1$d miniaplikácie
@@ -55,6 +55,9 @@
"Osobné"
"Práca"
"Konverzácie"
+ "Užitočné informácie poruke"
+ "Ak chcete získavať informácie bez otvárania aplikácií, môžete si pridať miniaplikácie na plochu"
+ "Dobre"
"Hľadať aplikácie"
"Načítavajú sa aplikácie…"
"Nenašli sa žiadne aplikácie zodpovedajúce dopytu %1$s"
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index cb7f0bc560..57461a1e89 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -55,6 +55,9 @@
"Osebno"
"Služba"
"Pogovori"
+ "Koristne informacije na dosegu prstov"
+ "Če si želite podatke ogledati brez odpiranja aplikacij, lahko na začetni zaslon dodate pripomočke."
+ "V redu"
"Iskanje programov"
"Nalaganje aplikacij …"
"Ni aplikacij, ki bi ustrezale poizvedbi »%1$s«"
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 2528aed90e..338aa8b142 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -51,6 +51,12 @@
"Personale"
"Puna"
"Bisedat"
+
+
+
+
+
+
"Kërko për aplikacione"
"Po ngarkon aplikacionet..."
"Nuk u gjet asnjë aplikacion që përputhet me \"%1$s\""
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index bcc867ca79..2e87b439bf 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -53,6 +53,9 @@
"Лично"
"Посао"
"Конверзације"
+ "Корисне информације надохват руке"
+ "Да бисте пронашли информације без отварања апликација, можете да додате виџете на почетни екран"
+ "Важи"
"Претражите апликације"
"Апликације се учитавају…"
"Није пронађена ниједна апликација за „%1$s“"
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ce973202cf..29ef67d3e2 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -51,6 +51,9 @@
"Privata widgetar"
"Arbete"
"Konversationer"
+ "Användbar information nära till hands"
+ "Om du vill ha information utan att öppna appar kan du lägga till widgetar på startskärmen"
+ "OK"
"Sök efter appar"
"Läser in appar …"
"Inga appar som matchar %1$s hittades"
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 3a46d73c90..7829bebe16 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -51,6 +51,9 @@
"Binafsi"
"Kazini"
"Mazungumzo"
+ "Maelezo muhimu mahali popote ulipo"
+ "Ili upate maelezo bila kufungua programu, unaweza kuweka wijeti kwenye Skrini yako ya kwanza"
+ "Nimeelewa"
"Tafuta programu"
"Inapakia programu..."
"Haikupata programu zozote zinazolingana na \"%1$s\""
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 3b891cb4ca..6fe5a388fa 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -51,6 +51,9 @@
"தனிப்பட்டவை"
"பணி"
"உரையாடல்கள்"
+ "விரல்நுனியில் பயனுள்ள தகவல்களைப் பெறுங்கள்"
+ "ஆப்ஸைத் திறக்காமல் தகவல்களைப் பெற, முகப்புத் திரையில் விட்ஜெட்டுகளைச் சேர்க்கலாம்"
+ "சரி"
"பயன்பாடுகளில் தேடுக"
"ஆப்ஸை ஏற்றுகிறது…"
"\"%1$s\" உடன் பொருந்தும் ஆப்ஸ் இல்லை"
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 68c8039858..a4746616e5 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -32,7 +32,7 @@
"విడ్జెట్ను తరలించడానికి లేదా అనుకూల చర్యలను ఉపయోగించడానికి రెండుసార్లు నొక్కండి & హోల్డ్ చేయి."
"%1$d × %2$d"
"%1$d వెడల్పు X %2$d ఎత్తు"
- "విడ్జెట్ను మొదటి స్క్రీన్ చుట్టూ తిప్పడానికి దాన్ని తాకి, & నొక్కి ఉంచండి"
+ "ఈ విడ్జెట్ను మొదటి స్క్రీన్లో కావాల్సిన చోట ఉంచడానికి, దాన్ని తాకి అలాగే నొక్కి పట్టుకోండి"
"మొదటి స్క్రీన్కు జోడించు"
- %1$d విడ్జెట్లు
@@ -51,6 +51,12 @@
"వ్యక్తిగతం"
"ఆఫీస్"
"సంభాషణలు"
+
+
+
+
+
+
"అప్లికేషన్లను శోధించండి"
"అప్లికేషన్లను లోడ్ చేస్తోంది…"
"\"%1$s\"కి సరిపోలే అప్లికేషన్లేవీ కనుగొనబడలేదు"
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 2dd6ccc799..0011d70c01 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -51,6 +51,9 @@
"ส่วนตัว"
"งาน"
"การสนทนา"
+ "เข้าถึงข้อมูลที่เป็นประโยชน์ได้ที่ปลายนิ้ว"
+ "หากต้องการรับข้อมูลโดยไม่เปิดแอป ให้เพิ่มวิดเจ็ตลงในหน้าจอหลัก"
+ "รับทราบ"
"ค้นหาแอป"
"กำลังโหลดแอป…"
"ไม่พบแอปที่ตรงกับ \"%1$s\""
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index cec90c4dbd..cd662e1eec 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -51,6 +51,9 @@
"Personal"
"Trabaho"
"Mga Pag-uusap"
+ "Abot-kamay na mahalagang impormasyon"
+ "Para makakuha ng impormasyon nang hindi nagbubukas ng mga app, puwede kang magdagdag ng mga widget sa iyong Home screen"
+ "OK"
"Maghanap ng mga app"
"Naglo-load ng mga app…"
"Walang nahanap na app na tumutugma sa \"%1$s\""
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index baa5ccef3f..5691fc044d 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -51,6 +51,9 @@
"Kişisel"
"İş"
"Görüşmeler"
+ "Faydalı bilgiler parmaklarınızın ucunda"
+ "Uygulamaları açmadan bilgi almak için Ana ekranınıza widget\'lar ekleyebilirsiniz"
+ "Anladım"
"Uygulamalarda ara"
"Uygulamalar yükleniyor…"
"\"%1$s\" ile eşleşen uygulama bulunamadı"
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index e266d6aca4..f0d486d108 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -32,7 +32,7 @@
"Двічі натисніть і втримуйте віджет, щоб перемістити його або виконати інші дії."
"%1$d × %2$d"
"Ширина – %1$d, висота – %2$d"
- "Натисніть і втримуйте віджет, щоб переміщувати його головним екраном"
+ "Натисніть і втримуйте віджет, щоб перемістити його в потрібне місце на головному екрані"
"Додати на головний екран"
- %1$d віджет
@@ -55,6 +55,9 @@
"Особисті"
"Робочі"
"Розмови"
+ "Корисна інформація завжди під рукою"
+ "Щоб отримувати інформацію, не відкриваючи додатки, ви можете додати на головний екран віджети"
+ "OK"
"Пошук додатків"
"Завантаження додатків…"
"Немає додатків для запиту \"%1$s\""
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 4e986b8947..1574c47e96 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -51,6 +51,9 @@
"ذاتی"
"دفتری ویجیٹس"
"گفتگوئیں"
+ "مفید معلومات کو آسانی سے حاصل کریں"
+ "ایپس کو کھولے بغیر معلومات حاصل کرنے کے لیے آپ اپنی ہوم اسکرین پر ویجیٹس شامل کر سکتے ہیں"
+ "سمجھ آ گئی"
"ایپس تلاش کریں"
"ایپس لوڈ کی جا رہی ہیں…"
"\"%1$s\" سے مماثل کوئی ایپس نہیں ملیں"
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 7328311e50..3d5db5417c 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -32,7 +32,7 @@
"Ikki marta bosib va bosib turgan holatda vidjetni tanlang yoki maxsus amaldan foydalaning."
"%1$d × %2$d"
"Eni %1$d, bo‘yi %2$d"
- "Bosh ekranda surish uchun vidjet ustiga bosib turing"
+ "Vidjetni ushlagan holda kerakli joyga siljiting"
"Bosh ekranga chiqarish"
- %1$d ta vidjet
@@ -51,6 +51,9 @@
"Shaxsiy"
"Ish"
"Suhbatlar"
+ "Barcha foydali axborot koʻz oldingizda"
+ "Ilovalarni ochmasdan axborot olish uchun vidjetlarni bosh ekranga qoʻshishingiz mumkin"
+ "OK"
"Ilovalarni qidirish"
"Ilovalar yuklanmoqda…"
"“%1$s” bilan mos hech qanday ilova topilmadi"
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 9c308e0711..9f7fea373f 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -51,6 +51,9 @@
"Cá nhân"
"Công việc"
"Cuộc trò chuyện"
+ "Thông tin hữu ích ngay trong tầm tay bạn"
+ "Để nhận thông tin mà không cần mở các ứng dụng, bạn có thể thêm tiện ích vào Màn hình chính"
+ "Tôi hiểu"
"Tìm kiếm ứng dụng"
"Đang tải ứng dụng…"
"Không tìm thấy ứng dụng nào phù hợp với \"%1$s\""
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f7aa74add6..b1fb1658da 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -51,6 +51,12 @@
"个人"
"工作"
"对话"
+
+
+
+
+
+
"搜索应用"
"正在加载应用…"
"未找到与“%1$s”相符的应用"
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 0fd5284705..c7d67af481 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -51,6 +51,9 @@
"個人"
"工作"
"對話"
+ "實用資訊,唾手可得"
+ "只要將小工具新增到主畫面,就可以直接查看資訊,無需開啟應用程式"
+ "知道了"
"搜尋應用程式"
"正在載入應用程式…"
"找不到與「%1$s」相符的應用程式"
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 99e22a2d46..6941c2ca8e 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -32,7 +32,7 @@
"輕觸兩下並按住即可移動小工具或使用自訂操作。"
"%1$d × %2$d"
"寬度為 %1$d,高度為 %2$d"
- "按住小工具即可將小工具移到主畫面的任一位置"
+ "按住小工具即可將它拖放到主畫面上的任何位置"
"新增到主畫面"
- %1$d 項小工具
@@ -51,6 +51,9 @@
"個人"
"工作"
"對話"
+ "實用資訊隨手可得"
+ "只要將小工具新增到主畫面,就可以直接查看資訊,不必開啟應用程式"
+ "我知道了"
"搜尋應用程式"
"正在載入應用程式…"
"找不到與「%1$s」相符的應用程式"
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index dbdcf1729a..1b645b2502 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -51,6 +51,9 @@
"Okomuntu siqu"
"Umsebenzi"
"Izingxoxo"
+ "Ulwazi oluwusizo phambi nje kwakho"
+ "Ukuze utholeulwazi ngaphandle kokuvula ama-app, ungakwazi ukwengeza amawijethi kusikrini sakho sasekhaya"
+ "Ngiyezwa"
"Sesha izinhlelo zokusebenza"
"Ilayisha izinhlelo zokusebenza..."
"Azikho izinhlelo zokusebenza ezitholiwe ezifana ne-\"%1$s\""
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d6a6f43803..f9d62a69de 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -131,6 +131,7 @@
28dp
4dp
+ 0dp
20dp
2dp
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 92824ad205..0c389aac0e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -271,7 +271,7 @@
- @dimen/drop_target_text_size
- true
- end
- - @drawable/drop_target_frame
+ - @drawable/drop_target_background
diff --git a/robolectric_tests/src/com/android/launcher3/settings/SettingsActivityTest.java b/robolectric_tests/src/com/android/launcher3/settings/SettingsActivityTest.java
index 85bf28e0b9..3271812b45 100644
--- a/robolectric_tests/src/com/android/launcher3/settings/SettingsActivityTest.java
+++ b/robolectric_tests/src/com/android/launcher3/settings/SettingsActivityTest.java
@@ -27,6 +27,7 @@ import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent;
import static androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra;
import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
@@ -109,6 +110,7 @@ public class SettingsActivityTest {
onView(withText("About")).check(matches(isDisplayed()));
onView(withText("Version")).check(matches(isDisplayed()));
+ onView(withContentDescription("Navigate up")).check(matches(isDisplayed()));
}
@Test
@@ -119,6 +121,7 @@ public class SettingsActivityTest {
onView(withText("Developer Options")).check(matches(isDisplayed()));
onView(withId(R.id.filter_box)).check(matches(isDisplayed()));
+ onView(withContentDescription("Navigate up")).check(matches(isDisplayed()));
}
@Test
@@ -134,4 +137,16 @@ public class SettingsActivityTest {
assertThat(e.getMessage()).contains(fragmentClass);
}
}
+
+ @Test
+ public void testSettings_backButtonFinishesActivity() {
+ Bundle fragmentArgs = new Bundle();
+ fragmentArgs.putString(ARG_PREFERENCE_ROOT, "about_screen");
+ Intent intent = new Intent(mApplicationContext, SettingsActivity.class)
+ .putExtra(EXTRA_FRAGMENT_ARGS, fragmentArgs);
+ ActivityScenario scenario = ActivityScenario.launch(intent);
+
+ onView(withContentDescription("Navigate up")).perform(click());
+ scenario.onActivity(activity -> assertThat(activity.isFinishing()).isTrue());
+ }
}
diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java
index c1f3ac5e0d..5d9797ff88 100644
--- a/src/com/android/launcher3/AppWidgetResizeFrame.java
+++ b/src/com/android/launcher3/AppWidgetResizeFrame.java
@@ -5,6 +5,8 @@ import static android.appwidget.AppWidgetHostView.getDefaultPaddingForWidget;
import static com.android.launcher3.LauncherAnimUtils.LAYOUT_HEIGHT;
import static com.android.launcher3.LauncherAnimUtils.LAYOUT_WIDTH;
import static com.android.launcher3.Utilities.ATLEAST_S;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGET_RESIZE_COMPLETED;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGET_RESIZE_STARTED;
import static com.android.launcher3.views.BaseDragLayer.LAYOUT_X;
import static com.android.launcher3.views.BaseDragLayer.LAYOUT_Y;
@@ -31,6 +33,10 @@ import android.widget.ImageView;
import com.android.launcher3.accessibility.DragViewStateAnnouncer;
import com.android.launcher3.dragndrop.DragLayer;
+import com.android.launcher3.logging.InstanceId;
+import com.android.launcher3.logging.InstanceIdSequence;
+import com.android.launcher3.model.data.ItemInfo;
+import com.android.launcher3.util.PendingRequestArgs;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
@@ -96,6 +102,8 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
private final IntRange mDeltaYRange = new IntRange();
private final IntRange mBaselineY = new IntRange();
+ private final InstanceId logInstanceId = new InstanceIdSequence().newInstanceId();
+
private boolean mLeftBorderActive;
private boolean mRightBorderActive;
private boolean mTopBorderActive;
@@ -222,12 +230,21 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
mReconfigureButton = (ImageButton) findViewById(R.id.widget_reconfigure_button);
if (info.isReconfigurable()) {
mReconfigureButton.setVisibility(VISIBLE);
- mReconfigureButton.setOnClickListener(view -> mLauncher
+ mReconfigureButton.setOnClickListener(view -> {
+ mLauncher.setWaitingForResult(
+ PendingRequestArgs.forWidgetInfo(
+ mWidgetView.getAppWidgetId(),
+ // Widget add handler is null since we're reconfiguring an existing
+ // widget.
+ /* widgetHandler= */ null,
+ (ItemInfo) mWidgetView.getTag()));
+ mLauncher
.getAppWidgetHost()
.startConfigActivity(
mLauncher,
mWidgetView.getAppWidgetId(),
- Launcher.REQUEST_RECONFIGURE_APPWIDGET));
+ Launcher.REQUEST_RECONFIGURE_APPWIDGET);
+ });
}
// When we create the resize frame, we first mark all cells as unoccupied. The appropriate
@@ -235,6 +252,12 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
// frame is dismissed.
mCellLayout.markCellsAsUnoccupiedForView(mWidgetView);
+ mLauncher.getStatsLogManager()
+ .logger()
+ .withInstanceId(logInstanceId)
+ .withItemInfo((ItemInfo) mWidgetView.getTag())
+ .log(LAUNCHER_WIDGET_RESIZE_STARTED);
+
setOnKeyListener(this);
}
@@ -482,6 +505,11 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
// We are done with resizing the widget. Save the widget size & position to LauncherModel
resizeWidgetIfNeeded(true);
+ mLauncher.getStatsLogManager()
+ .logger()
+ .withInstanceId(logInstanceId)
+ .withItemInfo((ItemInfo) mWidgetView.getTag())
+ .log(LAUNCHER_WIDGET_RESIZE_COMPLETED);
}
private void onTouchUp() {
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java
index af77bf882a..7db34a5613 100644
--- a/src/com/android/launcher3/ButtonDropTarget.java
+++ b/src/com/android/launcher3/ButtonDropTarget.java
@@ -142,11 +142,6 @@ public abstract class ButtonDropTarget extends TextView
}
}
- private void setBackgroundDrawable(int resId) {
- Drawable bd = AppCompatResources.getDrawable(getContext(), resId);
- setBackground(bd);
- }
-
@Override
public final void onDragEnter(DragObject d) {
if (!mAccessibleDrag && !mTextVisible) {
@@ -172,7 +167,7 @@ public abstract class ButtonDropTarget extends TextView
}
d.dragView.setAlpha(DRAG_VIEW_HOVER_OVER_OPACITY);
- setBackgroundDrawable(R.drawable.drop_target_frame_hover);
+ setSelected(true);
if (d.stateAnnouncer != null) {
d.stateAnnouncer.cancel();
}
@@ -190,7 +185,7 @@ public abstract class ButtonDropTarget extends TextView
if (!d.dragComplete) {
d.dragView.setAlpha(1f);
- setBackgroundDrawable(R.drawable.drop_target_frame);
+ setSelected(false);
} else {
d.dragView.setAlpha(DRAG_VIEW_HOVER_OVER_OPACITY);
}
@@ -230,6 +225,7 @@ public abstract class ButtonDropTarget extends TextView
public void onDragEnd() {
mActive = false;
setOnClickListener(null);
+ setSelected(false);
}
/**
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 8889e60688..9aa7168f4e 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -45,6 +45,7 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_EXIT;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ONRESUME;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ONSTOP;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGET_RECONFIGURED;
import static com.android.launcher3.model.ItemInstallQueue.FLAG_ACTIVITY_PAUSED;
import static com.android.launcher3.model.ItemInstallQueue.FLAG_DRAG_AND_DROP;
import static com.android.launcher3.model.ItemInstallQueue.FLAG_LOADER_RUNNING;
@@ -576,6 +577,14 @@ public class Launcher extends StatefulActivity implements Launche
mHotseat.getQsb().setAlpha(1f - visibility);
}
+ /**
+ * Called when one handed mode activated and deactivated.
+ * @param activated true if one handed mode activated, false otherwise.
+ */
+ public void onOneHandedStateChanged(boolean activated) {
+ mDragLayer.onOneHandedModeStateChanged(activated);
+ }
+
private void initDeviceProfile(InvariantDeviceProfile idp) {
// Load configuration-specific DeviceProfile
mDeviceProfile = idp.getDeviceProfile(this);
@@ -675,6 +684,7 @@ public class Launcher extends StatefulActivity implements Launche
completeAddAppWidget(appWidgetId, info, null, null);
break;
case REQUEST_RECONFIGURE_APPWIDGET:
+ mStatsLogManager.logger().withItemInfo(info).log(LAUNCHER_WIDGET_RECONFIGURED);
completeRestoreAppWidget(appWidgetId, LauncherAppWidgetInfo.RESTORE_COMPLETED);
break;
case REQUEST_BIND_PENDING_APPWIDGET: {
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index dabbdd3063..b3d096c4b8 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -99,8 +99,6 @@ public class LauncherAppState {
}
mOnTerminateCallback.add(() -> mContext.unregisterReceiver(modelChangeReceiver));
- // TODO: remove listener on terminate
- FeatureFlags.APP_SEARCH_IMPROVEMENTS.addChangeListener(context, mModel::forceReload);
CustomWidgetManager.INSTANCE.get(mContext)
.setWidgetRefreshCallback(mModel::refreshAndBindWidgetsAndShortcuts);
diff --git a/src/com/android/launcher3/SecondaryDropTarget.java b/src/com/android/launcher3/SecondaryDropTarget.java
index 6ccfa7e3b5..cd06414d3f 100644
--- a/src/com/android/launcher3/SecondaryDropTarget.java
+++ b/src/com/android/launcher3/SecondaryDropTarget.java
@@ -45,6 +45,7 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.util.PackageManagerHelper;
+import com.android.launcher3.util.PendingRequestArgs;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
import java.net.URISyntaxException;
@@ -267,6 +268,8 @@ public class SecondaryDropTarget extends ButtonDropTarget implements OnAlarmList
if (mCurrentAccessibilityAction == RECONFIGURE) {
int widgetId = getReconfigurableWidgetId(view);
if (widgetId != INVALID_APPWIDGET_ID) {
+ mLauncher.setWaitingForResult(
+ PendingRequestArgs.forWidgetInfo(widgetId, null, info));
mLauncher.getAppWidgetHost().startConfigActivity(mLauncher, widgetId,
REQUEST_RECONFIGURE_APPWIDGET);
}
diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java
index 40dcb1e66a..ab72a077a1 100644
--- a/src/com/android/launcher3/config/FeatureFlags.java
+++ b/src/com/android/launcher3/config/FeatureFlags.java
@@ -111,10 +111,6 @@ public final class FeatureFlags {
"FOLDER_NAME_MAJORITY_RANKING", true,
"Suggests folder names based on majority based ranking.");
- public static final BooleanFlag APP_SEARCH_IMPROVEMENTS = new DeviceFlag(
- "APP_SEARCH_IMPROVEMENTS", true,
- "Adds localized title and keyword search and ranking");
-
public static final BooleanFlag ENABLE_PREDICTION_DISMISS = getDebugFlag(
"ENABLE_PREDICTION_DISMISS", true, "Allow option to dimiss apps from predicted list");
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index c2f609c6a7..011325d6cf 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -48,6 +48,7 @@ import com.android.launcher3.folder.Folder;
import com.android.launcher3.graphics.Scrim;
import com.android.launcher3.keyboard.ViewGroupFocusHelper;
import com.android.launcher3.util.Thunk;
+import com.android.launcher3.util.TouchController;
import com.android.launcher3.views.BaseDragLayer;
import java.util.ArrayList;
@@ -519,4 +520,14 @@ public class DragLayer extends BaseDragLayer {
public Scrim getWorkspaceDragScrim() {
return mWorkspaceDragScrim;
}
+
+ /**
+ * Called when one handed mode state changed.
+ * @param activated true if one handed mode activated, false otherwise.
+ */
+ public void onOneHandedModeStateChanged(boolean activated) {
+ for (TouchController controller : mControllers) {
+ controller.onOneHandedModeStateChanged(activated);
+ }
+ }
}
diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java
index 8e0a388784..cd13cd0ec5 100644
--- a/src/com/android/launcher3/icons/IconCache.java
+++ b/src/com/android/launcher3/icons/IconCache.java
@@ -336,8 +336,7 @@ public class IconCache extends BaseIconCache {
@Override
protected String getIconSystemState(String packageName) {
- return mIconProvider.getSystemStateForPackage(mSystemState, packageName)
- + ",flags_asi:" + FeatureFlags.APP_SEARCH_IMPROVEMENTS.get();
+ return mIconProvider.getSystemStateForPackage(mSystemState, packageName);
}
/**
diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java
index d065469156..418e46de71 100644
--- a/src/com/android/launcher3/logging/StatsLogManager.java
+++ b/src/com/android/launcher3/logging/StatsLogManager.java
@@ -135,6 +135,12 @@ public class StatsLogManager implements ResourceBasedOverride {
@UiEvent(doc = "User tapped or long pressed on widget tray icon inside launcher settings.")
LAUNCHER_WIDGETSTRAY_BUTTON_TAP_OR_LONGPRESS(464),
+ @UiEvent(doc = "User expanded the list of widgets for a single app in the widget picker.")
+ LAUNCHER_WIDGETSTRAY_APP_EXPANDED(818),
+
+ @UiEvent(doc = "User searched for a widget in the widget picker.")
+ LAUNCHER_WIDGETSTRAY_SEARCHED(819),
+
@UiEvent(doc = "A dragged item is dropped on 'Remove' button in the target bar")
LAUNCHER_ITEM_DROPPED_ON_REMOVE(465),
@@ -458,7 +464,16 @@ public class StatsLogManager implements ResourceBasedOverride {
LAUNCHER_OVERVIEW_SHARING_TAP_MORE_TO_SHARE_URL(777),
@UiEvent(doc = "User taps the More button to share an image")
- LAUNCHER_OVERVIEW_SHARING_TAP_MORE_TO_SHARE_IMAGE(778)
+ LAUNCHER_OVERVIEW_SHARING_TAP_MORE_TO_SHARE_IMAGE(778),
+
+ @UiEvent(doc = "User started resizing a widget on their home screen.")
+ LAUNCHER_WIDGET_RESIZE_STARTED(820),
+
+ @UiEvent(doc = "User finished resizing a widget on their home screen.")
+ LAUNCHER_WIDGET_RESIZE_COMPLETED(824),
+
+ @UiEvent(doc = "User reconfigured a widget on their home screen.")
+ LAUNCHER_WIDGET_RECONFIGURED(821)
;
// ADD MORE
diff --git a/src/com/android/launcher3/settings/DeveloperOptionsFragment.java b/src/com/android/launcher3/settings/DeveloperOptionsFragment.java
index e2a69ff7a2..8fe42acf59 100644
--- a/src/com/android/launcher3/settings/DeveloperOptionsFragment.java
+++ b/src/com/android/launcher3/settings/DeveloperOptionsFragment.java
@@ -152,6 +152,17 @@ public class DeveloperOptionsFragment extends PreferenceFragmentCompat {
filterPreferences(query, mPreferenceScreen);
}
});
+
+ View listView = getListView();
+ final int bottomPadding = listView.getPaddingBottom();
+ listView.setOnApplyWindowInsetsListener((v, insets) -> {
+ v.setPadding(
+ v.getPaddingLeft(),
+ v.getPaddingTop(),
+ v.getPaddingRight(),
+ bottomPadding + insets.getSystemWindowInsetBottom());
+ return insets.consumeSystemWindowInsets();
+ });
}
@Override
diff --git a/src/com/android/launcher3/settings/SettingsActivity.java b/src/com/android/launcher3/settings/SettingsActivity.java
index 05927ef167..915e140aaf 100644
--- a/src/com/android/launcher3/settings/SettingsActivity.java
+++ b/src/com/android/launcher3/settings/SettingsActivity.java
@@ -24,9 +24,12 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
+import android.view.MenuItem;
+import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
+import androidx.core.view.WindowCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
@@ -82,9 +85,14 @@ public class SettingsActivity extends FragmentActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
setActionBar(findViewById(R.id.action_bar));
+ WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
+
+ Intent intent = getIntent();
+ if (intent.hasExtra(EXTRA_FRAGMENT) || intent.hasExtra(EXTRA_FRAGMENT_ARGS)) {
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ }
if (savedInstanceState == null) {
- Intent intent = getIntent();
Bundle args = intent.getBundleExtra(EXTRA_FRAGMENT_ARGS);
if (args == null) {
args = new Bundle();
@@ -161,6 +169,15 @@ public class SettingsActivity extends FragmentActivity
return startPreference(getString(R.string.settings_fragment_name), args, pref.getKey());
}
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ onBackPressed();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
/**
* This fragment shows the launcher preferences.
*/
@@ -198,6 +215,21 @@ public class SettingsActivity extends FragmentActivity
}
}
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ View listView = getListView();
+ final int bottomPadding = listView.getPaddingBottom();
+ listView.setOnApplyWindowInsetsListener((v, insets) -> {
+ v.setPadding(
+ v.getPaddingLeft(),
+ v.getPaddingTop(),
+ v.getPaddingRight(),
+ bottomPadding + insets.getSystemWindowInsetBottom());
+ return insets.consumeSystemWindowInsets();
+ });
+ }
+
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
diff --git a/src/com/android/launcher3/touch/SingleAxisSwipeDetector.java b/src/com/android/launcher3/touch/SingleAxisSwipeDetector.java
index 8c3c115334..f751b7d505 100644
--- a/src/com/android/launcher3/touch/SingleAxisSwipeDetector.java
+++ b/src/com/android/launcher3/touch/SingleAxisSwipeDetector.java
@@ -102,6 +102,8 @@ public class SingleAxisSwipeDetector extends BaseSwipeDetector {
private int mScrollDirections;
+ private float mTouchSlopMultiplier = 1f;
+
public SingleAxisSwipeDetector(@NonNull Context context, @NonNull Listener l,
@NonNull Direction dir) {
this(ViewConfiguration.get(context), l, dir, Utilities.isRtl(context.getResources()));
@@ -115,6 +117,19 @@ public class SingleAxisSwipeDetector extends BaseSwipeDetector {
mDir = dir;
}
+ /**
+ * Provides feasibility to adjust touch slop when visible window size changed. When visible
+ * bounds translate become smaller, multiply a larger multiplier could ensure the UX
+ * more consistent.
+ *
+ * @see #shouldScrollStart(PointF)
+ *
+ * @param touchSlopMultiplier the value to multiply original touch slop.
+ */
+ public void setTouchSlopMultiplier(float touchSlopMultiplier) {
+ mTouchSlopMultiplier = touchSlopMultiplier;
+ }
+
public void setDetectableScrollConditions(int scrollDirectionFlags, boolean ignoreSlop) {
mScrollDirections = scrollDirectionFlags;
mIgnoreSlopWhenSettling = ignoreSlop;
@@ -133,7 +148,7 @@ public class SingleAxisSwipeDetector extends BaseSwipeDetector {
@Override
protected boolean shouldScrollStart(PointF displacement) {
// Reject cases where the angle or slop condition is not met.
- float minDisplacement = Math.max(mTouchSlop,
+ float minDisplacement = Math.max(mTouchSlop * mTouchSlopMultiplier,
Math.abs(mDir.extractOrthogonalDirection(displacement)));
if (Math.abs(mDir.extractDirection(displacement)) < minDisplacement) {
return false;
diff --git a/src/com/android/launcher3/util/TouchController.java b/src/com/android/launcher3/util/TouchController.java
index fc1d819f78..9c397c0f74 100644
--- a/src/com/android/launcher3/util/TouchController.java
+++ b/src/com/android/launcher3/util/TouchController.java
@@ -32,5 +32,10 @@ public interface TouchController {
*/
boolean onControllerInterceptTouchEvent(MotionEvent ev);
+ /**
+ * Called when one handed mode state changed
+ */
+ default void onOneHandedModeStateChanged(boolean activated) { }
+
default void dump(String prefix, PrintWriter writer) { }
}
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index 7d04d7b404..e1999c9c3a 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -21,6 +21,7 @@ import static com.android.launcher3.Utilities.ATLEAST_S;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.CancellationSignal;
@@ -213,12 +214,8 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
return false;
}
};
- mAppWidgetHostViewPreview.setAppWidget(/* appWidgetId= */ -1, item.widgetInfo);
- Rect padding = new Rect();
- mAppWidgetHostViewPreview.getWidgetInset(mActivity.getDeviceProfile(), padding);
- mAppWidgetHostViewPreview.setPadding(padding.left, padding.top, padding.right,
- padding.bottom);
- mAppWidgetHostViewPreview.updateAppWidget(/* remoteViews= */ mRemoteViewsPreview);
+ setAppWidgetHostViewPreview(mAppWidgetHostViewPreview, item.widgetInfo,
+ mRemoteViewsPreview);
return;
}
@@ -234,16 +231,31 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
// rendering a preview layout for work profile apps yet. For non-work profile layout, a
// proper solution is to use RemoteViews(PackageName, LayoutId).
launcherAppWidgetProviderInfo.initialLayout = item.widgetInfo.previewLayout;
- mAppWidgetHostViewPreview.setAppWidget(/* appWidgetId= */ -1,
- launcherAppWidgetProviderInfo);
- Rect padding = new Rect();
- mAppWidgetHostViewPreview.getWidgetInset(mActivity.getDeviceProfile(), padding);
- mAppWidgetHostViewPreview.setPadding(padding.left, padding.top, padding.right,
- padding.bottom);
- mAppWidgetHostViewPreview.updateAppWidget(/* remoteViews= */ null);
+ setAppWidgetHostViewPreview(mAppWidgetHostViewPreview,
+ launcherAppWidgetProviderInfo, /* remoteViews= */ null);
}
}
+ private void setAppWidgetHostViewPreview(
+ NavigableAppWidgetHostView appWidgetHostViewPreview,
+ LauncherAppWidgetProviderInfo providerInfo,
+ @Nullable RemoteViews remoteViews) {
+ appWidgetHostViewPreview.setAppWidget(/* appWidgetId= */ -1, providerInfo);
+ Rect padding;
+ DeviceProfile deviceProfile = mActivity.getDeviceProfile();
+ if (deviceProfile.shouldInsetWidgets()) {
+ padding = new Rect();
+ appWidgetHostViewPreview.getWidgetInset(deviceProfile, padding);
+ } else {
+ padding = deviceProfile.inv.defaultWidgetPadding;
+ }
+ appWidgetHostViewPreview.setPadding(padding.left, padding.top, padding.right,
+ padding.bottom);
+ mPreviewWidth += padding.left + padding.right;
+ mPreviewHeight += padding.top + padding.bottom;
+ appWidgetHostViewPreview.updateAppWidget(remoteViews);
+ }
+
public WidgetImageView getWidgetView() {
return mWidgetImage;
}
@@ -343,8 +355,11 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener {
/** Sets the widget preview image size, in number of cells, and preview scale. */
public void setPreviewSize(int spanX, int spanY, float previewScale) {
DeviceProfile deviceProfile = mActivity.getDeviceProfile();
- mPreviewWidth = deviceProfile.cellWidthPx * spanX + mPreviewPadding;
- mPreviewHeight = deviceProfile.cellHeightPx * spanY + mPreviewPadding;
+ Point cellSize = deviceProfile.getCellSize();
+ mPreviewWidth = cellSize.x * spanX + mPreviewPadding
+ + deviceProfile.cellLayoutBorderSpacingPx * (spanX - 1);
+ mPreviewHeight = cellSize.y * spanY + mPreviewPadding
+ + deviceProfile.cellLayoutBorderSpacingPx * (spanY - 1);
mPreviewScale = previewScale;
}
diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
index 92f84da311..1a58bb066d 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
@@ -16,6 +16,7 @@
package com.android.launcher3.widget.picker;
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGETSTRAY_SEARCHED;
import static com.android.launcher3.testing.TestProtocol.NORMAL_STATE_ORDINAL;
import android.animation.Animator;
@@ -448,6 +449,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet
if (mIsInSearchMode) return;
setViewVisibilityBasedOnSearch(/*isInSearchMode= */ true);
attachScrollbarToRecyclerView(mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView);
+ mActivityContext.getStatsLogManager().logger().log(LAUNCHER_WIDGETSTRAY_SEARCHED);
}
@Override
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java
index 3936ec8e80..826c244a92 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java
@@ -15,11 +15,14 @@
*/
package com.android.launcher3.widget.picker;
+import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGETSTRAY_APP_EXPANDED;
+
import android.content.Context;
import android.os.Process;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
@@ -27,10 +30,12 @@ import android.widget.TableRow;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
+import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.WidgetPreviewLoader;
import com.android.launcher3.icons.IconCache;
@@ -74,6 +79,7 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC
private static final int VIEW_TYPE_WIDGETS_HEADER = R.id.view_type_widgets_header;
private static final int VIEW_TYPE_WIDGETS_SEARCH_HEADER = R.id.view_type_widgets_search_header;
+ private final Launcher mLauncher;
private final WidgetsDiffReporter mDiffReporter;
private final SparseArray mViewHolderBinders = new SparseArray<>();
private final WidgetsListTableViewHolderBinder mWidgetsListTableViewHolderBinder;
@@ -95,6 +101,7 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC
public WidgetsListAdapter(Context context, LayoutInflater layoutInflater,
WidgetPreviewLoader widgetPreviewLoader, IconCache iconCache,
OnClickListener iconClickListener, OnLongClickListener iconLongClickListener) {
+ mLauncher = Launcher.getLauncher(context);
mDiffReporter = new WidgetsDiffReporter(iconCache, this);
mWidgetsListTableViewHolderBinder = new WidgetsListTableViewHolderBinder(context,
layoutInflater, iconClickListener, iconLongClickListener,
@@ -268,36 +275,54 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC
updateVisibleEntries();
// Scroll the layout manager to the header position to keep it anchored to the same
// position.
- scrollToSelectedHeaderPosition();
+ scrollToPositionAndMaintainOffset(getSelectedHeaderPosition());
+ mLauncher.getStatsLogManager().logger().log(LAUNCHER_WIDGETSTRAY_APP_EXPANDED);
} else if (packageUserKey.equals(mWidgetsContentVisiblePackageUserKey)) {
+ OptionalInt previouslySelectedPosition = getSelectedHeaderPosition();
+
mWidgetsContentVisiblePackageUserKey = null;
updateVisibleEntries();
+
+ // Scroll to the header that was just collapsed so it maintains its scroll offset.
+ scrollToPositionAndMaintainOffset(previouslySelectedPosition);
}
}
- private void scrollToSelectedHeaderPosition() {
- OptionalInt selectedHeaderPosition =
- IntStream.range(0, mVisibleEntries.size())
- .filter(index -> isHeaderForVisibleContent(mVisibleEntries.get(index)))
- .findFirst();
- RecyclerView.LayoutManager layoutManager =
- mRecyclerView == null ? null : mRecyclerView.getLayoutManager();
- if (!selectedHeaderPosition.isPresent() || layoutManager == null) {
+ private OptionalInt getSelectedHeaderPosition() {
+ return IntStream.range(0, mVisibleEntries.size())
+ .filter(index -> isHeaderForVisibleContent(mVisibleEntries.get(index)))
+ .findFirst();
+ }
+
+ /**
+ * Scrolls to the selected header position. LinearLayoutManager scrolls the minimum distance
+ * necessary, so this will keep the selected header in place during clicks, without interrupting
+ * the animation.
+ */
+ private void scrollToPositionAndMaintainOffset(OptionalInt positionOptional) {
+ if (!positionOptional.isPresent() || mRecyclerView == null) return;
+ int position = positionOptional.getAsInt();
+
+ LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
+ if (layoutManager == null) return;
+
+ if (position == mVisibleEntries.size() - 2
+ && mVisibleEntries.get(mVisibleEntries.size() - 1)
+ instanceof WidgetsListContentEntry) {
+ // If the selected header is in the last position and its content is showing, then
+ // scroll to the final position so the last list of widgets will show.
+ layoutManager.scrollToPosition(mVisibleEntries.size() - 1);
return;
}
- // Scroll to the selected header position. LinearLayoutManager scrolls the minimum distance
- // necessary, so this will keep the selected header in place during clicks, without
- // interrupting the animation.
- int position = selectedHeaderPosition.getAsInt();
- if (position == mVisibleEntries.size() - 2) {
- // If the selected header is in the last position (-1 for the content), then scroll to
- // the final position so the last list of widgets will show.
- layoutManager.scrollToPosition(mVisibleEntries.size() - 1);
- } else {
- // Otherwise, scroll to the position of the selected header.
- layoutManager.scrollToPosition(position);
- }
+ // Scroll to the header view's current offset, accounting for the recycler view's padding.
+ // If the header view couldn't be found, then it will appear at the top of the list.
+ View headerView = layoutManager.findViewByPosition(position);
+ int targetHeaderViewTop =
+ headerView == null ? 0 : layoutManager.getDecoratedTop(headerView);
+ layoutManager.scrollToPositionWithOffset(
+ position,
+ targetHeaderViewTop - mRecyclerView.getPaddingTop());
}
/**
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListDrawables.java b/src/com/android/launcher3/widget/picker/WidgetsListDrawables.java
new file mode 100644
index 0000000000..b3bb544cd7
--- /dev/null
+++ b/src/com/android/launcher3/widget/picker/WidgetsListDrawables.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.launcher3.widget.picker;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.RippleDrawable;
+
+import com.android.launcher3.R;
+import com.android.launcher3.util.Themes;
+
+/** Helper class for creating drawables to use as background for list elements. */
+final class WidgetsListDrawables {
+
+ private WidgetsListDrawables() {}
+
+ /** Creates a list background drawable with the specified radii. */
+ static Drawable createListBackgroundDrawable(
+ Context context,
+ float topRadius,
+ float bottomRadius) {
+ GradientDrawable backgroundMask = new GradientDrawable();
+ backgroundMask.setColor(context.getColorStateList(R.color.surface));
+ backgroundMask.setShape(GradientDrawable.RECTANGLE);
+
+ backgroundMask.setCornerRadii(
+ new float[]{
+ topRadius,
+ topRadius,
+ topRadius,
+ topRadius,
+ bottomRadius,
+ bottomRadius,
+ bottomRadius,
+ bottomRadius
+ });
+
+ return new RippleDrawable(
+ /* color= */ ColorStateList.valueOf(
+ Themes.getAttrColor(context, android.R.attr.colorControlHighlight)),
+ /* content= */ backgroundMask,
+ /* mask= */ backgroundMask);
+ }
+
+}
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
index 41aa4378f0..fece359607 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java
@@ -60,6 +60,9 @@ public final class WidgetsListHeader extends LinearLayout implements ItemInfoUpd
@Nullable private Drawable mIconDrawable;
private final int mIconSize;
private final int mBottomMarginSize;
+ private final float mTopBottomCornerRadius;
+ private final float mMiddleCornerRadius;
+ private final float mJoinedCornerRadius;
private ImageView mAppIcon;
private TextView mTitle;
@@ -87,6 +90,12 @@ public final class WidgetsListHeader extends LinearLayout implements ItemInfoUpd
grid.iconSizePx);
mBottomMarginSize =
getResources().getDimensionPixelSize(R.dimen.widget_list_entry_bottom_margin);
+ mTopBottomCornerRadius =
+ getResources().getDimension(R.dimen.widget_list_top_bottom_corner_radius);
+ mMiddleCornerRadius =
+ getResources().getDimension(R.dimen.widget_list_content_corner_radius);
+ mJoinedCornerRadius =
+ getResources().getDimension(R.dimen.widget_list_content_joined_corner_radius);
}
@Override
@@ -254,6 +263,20 @@ public final class WidgetsListHeader extends LinearLayout implements ItemInfoUpd
verifyHighRes();
}
+ /** Updates the list to have a background drawable with the appropriate corner radii. */
+ @UiThread
+ public void updateListBackground(boolean isFirst, boolean isLast, boolean isExpanded) {
+ float topRadius = isFirst ? mTopBottomCornerRadius : mMiddleCornerRadius;
+ float bottomRadius = isLast
+ ? mTopBottomCornerRadius
+ : isExpanded
+ ? mJoinedCornerRadius
+ : mMiddleCornerRadius;
+ setBackground(
+ WidgetsListDrawables.createListBackgroundDrawable(
+ getContext(), topRadius, bottomRadius));
+ }
+
private void setTitles(WidgetsListSearchHeaderEntry entry) {
mTitle.setText(entry.mPkgItem.title);
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
index e57f4d8811..22d6d227c4 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinder.java
@@ -52,15 +52,10 @@ public final class WidgetsListHeaderViewHolderBinder implements
public void bindViewHolder(WidgetsListHeaderHolder viewHolder, WidgetsListHeaderEntry data,
int position) {
WidgetsListHeader widgetsListHeader = viewHolder.mWidgetsListHeader;
- if (mWidgetsListAdapter.getItemCount() == 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_single_item_ripple);
- } else if (position == 0) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_top_ripple);
- } else if (position == mWidgetsListAdapter.getItemCount() - 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
- } else {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_middle_ripple);
- }
+ widgetsListHeader.updateListBackground(
+ /* isFirst= */ position == 0,
+ /* isLast= */ position == mWidgetsListAdapter.getItemCount() - 1,
+ /* isExpanded= */ data.isWidgetListShown());
widgetsListHeader.applyFromItemInfoWithIcon(data);
widgetsListHeader.setExpanded(data.isWidgetListShown());
widgetsListHeader.setOnExpandChangeListener(isExpanded ->
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
index b98f5e18eb..d5e03a4fe0 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinder.java
@@ -53,15 +53,10 @@ public final class WidgetsListSearchHeaderViewHolderBinder implements
public void bindViewHolder(WidgetsListSearchHeaderHolder viewHolder,
WidgetsListSearchHeaderEntry data, int position) {
WidgetsListHeader widgetsListHeader = viewHolder.mWidgetsListHeader;
- if (mWidgetsListAdapter.getItemCount() == 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_single_item_ripple);
- } else if (position == 0) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_top_ripple);
- } else if (position == mWidgetsListAdapter.getItemCount() - 1) {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
- } else {
- widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_middle_ripple);
- }
+ widgetsListHeader.updateListBackground(
+ /* isFirst= */ position == 0,
+ /* isLast= */ position == mWidgetsListAdapter.getItemCount() - 1,
+ /* isExpanded= */ data.isWidgetListShown());
widgetsListHeader.applyFromItemInfoWithIcon(data);
widgetsListHeader.setExpanded(data.isWidgetListShown());
widgetsListHeader.setOnExpandChangeListener(isExpanded ->
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
index c3eda13c3f..8e310c5d83 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
@@ -16,6 +16,7 @@
package com.android.launcher3.widget.picker;
import android.content.Context;
+import android.content.res.Resources;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -51,6 +52,9 @@ public final class WidgetsListTableViewHolderBinder
private final OnLongClickListener mIconLongClickListener;
private final WidgetPreviewLoader mWidgetPreviewLoader;
private final WidgetsListAdapter mWidgetsListAdapter;
+ private final float mTopBottomCornerRadius;
+ private final float mMiddleCornerRadius;
+ private final float mJoinedCornerRadius;
private boolean mApplyBitmapDeferred = false;
public WidgetsListTableViewHolderBinder(
@@ -65,6 +69,13 @@ public final class WidgetsListTableViewHolderBinder
mIconLongClickListener = iconLongClickListener;
mWidgetPreviewLoader = widgetPreviewLoader;
mWidgetsListAdapter = listAdapter;
+ Resources resources = context.getResources();
+ mTopBottomCornerRadius =
+ resources.getDimension(R.dimen.widget_list_top_bottom_corner_radius);
+ mMiddleCornerRadius =
+ resources.getDimension(R.dimen.widget_list_content_corner_radius);
+ mJoinedCornerRadius =
+ resources.getDimension(R.dimen.widget_list_content_joined_corner_radius);
}
/**
@@ -100,13 +111,14 @@ public final class WidgetsListTableViewHolderBinder
entry.mWidgets.size(), table.getChildCount()));
}
- if (position == mWidgetsListAdapter.getItemCount() - 1) {
- table.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
- } else {
- // WidgetsListContentEntry is never shown in position 0. There must be a header above
- // it.
- table.setBackgroundResource(R.drawable.widgets_list_middle_ripple);
- }
+ // The content is always joined to an expanded header above.
+ float topRadius = mJoinedCornerRadius;
+ float bottomRadius = position == mWidgetsListAdapter.getItemCount() - 1
+ ? mTopBottomCornerRadius
+ : mMiddleCornerRadius;
+ table.setBackgroundDrawable(
+ WidgetsListDrawables.createListBackgroundDrawable(
+ holder.itemView.getContext(), topRadius, bottomRadius));
List> widgetItemsTable =
WidgetsTableUtils.groupWidgetItemsIntoTable(entry.mWidgets, mMaxSpansPerRow);
diff --git a/tests/src/com/android/launcher3/util/TestUtil.java b/tests/src/com/android/launcher3/util/TestUtil.java
index 55e57440c8..67f3902095 100644
--- a/tests/src/com/android/launcher3/util/TestUtil.java
+++ b/tests/src/com/android/launcher3/util/TestUtil.java
@@ -22,6 +22,8 @@ import android.content.res.Resources;
import androidx.test.uiautomator.UiDevice;
+import org.junit.Assert;
+
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -48,7 +50,10 @@ public class TestUtil {
in.close();
out.close();
- UiDevice.getInstance(getInstrumentation()).executeShellCommand("pm install " + apkFilename);
+ final String result = UiDevice.getInstance(getInstrumentation())
+ .executeShellCommand("pm install " + apkFilename);
+ Assert.assertTrue("Failed to install wellbeing test apk; make sure the device is rooted",
+ "Success".equals(result.replaceAll("\\s+", "")));
}
public static void uninstallDummyApp() throws IOException {