From: TreeHugger Robot Date: Tue, 25 Apr 2017 20:02:37 +0000 (+0000) Subject: Merge "Update icon badges to match spec" into ub-launcher3-dorval X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0fa96ea2f6c8a48917e619b3120beaa90698cb43;hp=1237df0a7cb89570b90b30fa30a3c76417ce3b64;p=android-x86%2Fpackages-apps-Launcher3.git Merge "Update icon badges to match spec" into ub-launcher3-dorval --- diff --git a/res/drawable-v26/adaptive_icon_drawable_wrapper.xml b/res/drawable-v26/adaptive_icon_drawable_wrapper.xml index 7ad8e2c64..2d78b699f 100644 --- a/res/drawable-v26/adaptive_icon_drawable_wrapper.xml +++ b/res/drawable-v26/adaptive_icon_drawable_wrapper.xml @@ -15,7 +15,7 @@ limitations under the License. --> - + diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 92b49eb6a..cfc27877c 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -39,8 +39,7 @@ "Laai tans programme …" "Geen programme gevind wat met \"%1$s\" ooreenstem nie" "Soek meer programme" - - + "Kennisgewings" "Niks meer spasie op die tuisskerm nie." "Geen plek meer in die Gunstelinge-laai nie" "Programmelys" @@ -92,6 +91,7 @@ "Die program vir hierdie ikoon is nie geïnstalleer nie. Jy kan dit verwyder of die program soek en dit self installeer." "%1$s laai tans af, %2$s voltooid" "%1$s wag tans om te installeer" + "%1$s-legstukke" "Voeg by tuisskerm" "Skuif item hierheen" "Item is by tuisskerm gevoeg" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index f41d58922..3ae966625 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -39,8 +39,7 @@ "መተግበሪያዎችን በመጫን ላይ..." "ከ«%1$s» ጋር የሚዛመዱ ምንም መተግበሪያዎች አልተገኙም" "ተጨማሪ መተግበሪያዎች ይፈልጉ" - - + "ማሳወቂያዎች" "በዚህ መነሻ ማያ ገጽ ላይ ምንም ቦታ የለም።" "በተወዳጆች መሣቢያ ውስጥ ተጨማሪ ቦታ የለም" "የመተግበሪያዎች ዝርዝር" @@ -92,6 +91,7 @@ "የዚህ አዶ መተግበሪያ አልተጫነም። ማስወገድ ወይም መተግበሪያውን መፈለግና ራስዎ መጫን ይችላሉ።" "%1$s በመውረድ ላይ፣ %2$s ተጠናቋል" "%1$s ለመጫን በመጠበቅ ላይ" + "%1$s ንዑስ ፕሮግራሞች" "ወደ መነሻ ማያ ገጽ ያክሉ" "ንጥልን ወደዚህ ውሰድ" "ወደ መነሻ ማያ ገጽ ንጥል ታክሏል" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index bf8a7b666..9c2167abe 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -39,8 +39,7 @@ "جارٍ تحميل التطبيقات…" "لم يتم العثور على أية تطبيقات تتطابق مع \"%1$s\"" "البحث عن مزيد من التطبيقات" - - + "الإشعارات" "ليس هناك مساحة أخرى في هذه الشاشة الرئيسية." "لا يوجد المزيد من الحقول في علبة المفضلة" "قائمة التطبيقات" @@ -92,6 +91,7 @@ "لم يتم تثبيت تطبيق لهذا الرمز. يمكنك إزالته أو البحث عن التطبيق وتثبيته يدويًا." "جارٍ تنزيل %1$s، اكتمل %2$s" "%1$s في انتظار التثبيت" + "أدوات %1$s" "إضافة إلى الشاشة الرئيسية" "نقل العنصر إلى هنا" "تمت إضافة العنصر إلى الشاشة الرئيسية" diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml index 39a6947e6..5cbe40852 100644 --- a/res/values-az-rAZ/strings.xml +++ b/res/values-az-rAZ/strings.xml @@ -39,8 +39,7 @@ "Tətbiqlər endirilir..." "\"%1$s\" sorğusuna uyğun Tətbiqlər tapılmadı" "Daha çox tətbiq üçün axtarış edin" - - + "Bildirişlər" "Bu Əsas ekranda boş yer yoxdur." "Favoritlər-də yer yoxdur" "Tətbiq siyahısı" @@ -92,6 +91,7 @@ "Bu ikona üçün tətbiq quraşdırılmayıb. Onu silə bilərsiniz, və ya tətbiqi taparaq manual yol ilə quraşdıra bilərsiniz." "%1$s endirilir, %2$s tamamlandı" "%1$s yüklənmək üçün gözləyir" + "%1$s vidcetləri" "Əsas ekrana əlavə edin" "Elementi bura köçürün" "Element əsas ekrana əlavə edildi" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index abe529d34..1a9ad2a07 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -39,8 +39,7 @@ "Aplikacije se učitavaju..." "Nije pronađena nijedna aplikacija za „%1$s“" "Pretraži još aplikacija" - - + "Obaveštenja" "Nema više prostora na ovom početnom ekranu." "Nema više prostora na traci Omiljeno" "Lista aplikacija" @@ -92,6 +91,7 @@ "Aplikacija za ovu ikonu nije instalirana. Možete da je uklonite ili da potražite aplikaciju i instalirate je ručno." "%1$s se preuzima, završeno je %2$s" "%1$s čeka na instaliranje" + "Vidžeti za %1$s" "Dodaj na početni ekran" "Premesti stavku ovde" "Stavka je dodata na početni ekran" diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml index 7ec3f92d0..8eb7e8423 100644 --- a/res/values-be-rBY/strings.xml +++ b/res/values-be-rBY/strings.xml @@ -39,8 +39,7 @@ "Ідзе загрузка праграм…" "Праграм, якія адпавядаюць запыту \"%1$s\", не знойдзена" "Шукаць іншыя праграмы" - - + "Апавяшчэнні" "На гэтым Галоўным экране больш няма месца." "У латку \"Абранае\" больш няма месца" "Спіс праграм" @@ -92,6 +91,7 @@ "Праграма для гэтага значка не ўсталявана. Вы можаце выдаліць яе або выканаць пошук і ўсталяваць яе ўручную." "Ідзе спампоўка %1$s, %2$s завершана" "%1$s чакае ўсталёўкі" + "Віджэты %1$s" "Дадаць на Галоўны экран" "Перамясціць элемент сюды" "Элемент дададзены на галоўны экран" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 8c5b82db7..8dc1e1092 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -39,8 +39,7 @@ "Приложенията се зареждат…" "Няма намерени приложения, съответстващи на „%1$s“" "Търсене на още приложения" - - + "Известия" "На този начален екран няма повече място." "Няма повече място в областта с любимите" "Списък с приложения" @@ -92,6 +91,7 @@ "Приложението за тази икона не е инсталирано. Можете да я премахнете или да потърсите приложението и да го инсталирате ръчно." "%1$s се изтегля. Завършено: %2$s" "%1$s изчаква инсталиране" + "Приспособления за %1$s" "Добавяне към началния екран" "Преместване на елемента тук" "Елементът е добавен към началния екран" diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index e3801c0d1..065019a29 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -39,8 +39,7 @@ "অ্যাপ্লিকেশানগুলি লোড হচ্ছে..." "\"%1$s\" এর সাথে মেলে এমন কোনো অ্যাপ্লিকেশান পাওয়া যায়নি" "আরো অ্যাপ্লিকেশানের জন্য অনুসন্ধান করুন" - - + "বিজ্ঞপ্তি" "এই হোম স্ক্রীনে আর কোনো জায়গা নেই৷" "পছন্দসই ট্রে-তে আর কোনো জায়গা নেই" "অ্যাপ্লিকেশানগুলির তালিকা" @@ -89,6 +88,7 @@ "এই আইকনের অ্যাপ্লিকেশানটি ইন্সটল করা নাই। আপনি এটি সরাতে পারেন বা অ্যাপ্লিকেশানটি অনুসন্ধান করে এটি নিজে ইন্সটল করতে পারেন।" "%1$s ডাউনলোড হচ্ছে %2$s সম্পন্ন হয়েছে" "%1$s ইনস্টলের অপেক্ষায় রয়েছে" + "%1$s উইজেট" "হোম স্ক্রীনে যোগ করুন" "এখানে আইটেম সরান" "হোম স্ক্রীনে আইটেম যোগ করা হয়েছে" diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml index d4aa504d5..8e1234edc 100644 --- a/res/values-bs-rBA/strings.xml +++ b/res/values-bs-rBA/strings.xml @@ -39,8 +39,7 @@ "Aplikacije se učitavaju…" "Nije pronađena nijedna aplikacija koja odgovara upitu \"%1$s\"" "Pretraži više aplikacija" - - + "Obavještenja" "Na ovom početnom ekranu nema više prostora." "Nema više prostora u ladici Favoriti" "Spisak aplikacija" @@ -92,6 +91,7 @@ "Aplikacija za ovu ikonu nije instalirana. Možete je ukloniti ili potražiti aplikaciju i ručno je instalirati." "%1$s se preuzima, završeno %2$s" "%1$s čeka da se instalira" + "Vidžeti za aplikaciju %1$s" "Dodaj na početni ekran" "Premjesti stavku ovdje" "Stavka je dodana na Početni ekran." diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 78969a4ce..bfbd31ebd 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -39,8 +39,7 @@ "S\'estan carregant les aplicacions..." "No s\'ha trobat cap aplicació que coincideixi amb %1$s" "Cerca més aplicacions" - - + "Notificacions" "Ja no queda espai en aquesta pantalla d\'inici." "No hi ha més espai a la safata Preferits." "Llista d\'aplicacions" @@ -92,6 +91,7 @@ "L\'aplicació d\'aquesta icona no està instal·lada. Pots suprimir-la o cercar l\'aplicació i instal·lar-la manualment." "S\'està baixant %1$s, %2$s completat" "S\'està esperant per instal·lar %1$s" + "Widgets de: %1$s" "Afegeix a la pantalla d\'inici" "Mou l\'element aquí" "S\'ha afegit l\'element a la pantalla d\'inici" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 5cd432dad..7c6102306 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -39,8 +39,7 @@ "Načítání aplikací…" "Dotazu „%1$s“ neodpovídají žádné aplikace" "Vyhledat další aplikace" - - + "Oznámení" "Na této ploše již není místo." "Na panelu Oblíbené položky již není místo." "Seznam aplikací" @@ -92,6 +91,7 @@ "Aplikace pro tuto ikonu není nainstalována. Můžete ikonu odstranit nebo zkusit aplikaci vyhledat a nainstalovat ručně." "Stahování aplikace %1$s (dokončeno %2$s)" "Instalace aplikace %1$s čeká na zahájení" + "Widgety %1$s" "Přidat na plochu" "Přesunout položku sem" "Položka byla přidána na plochu" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index f3f6b2b0c..65e513451 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -39,8 +39,7 @@ "Indlæser apps…" "Der blev ikke fundet nogen apps, som matcher \"%1$s\"" "Søg efter flere apps" - - + "Underretninger" "Der er ikke mere plads på denne startskærm." "Der er ikke mere plads i bakken Foretrukne" "Liste med apps" @@ -92,6 +91,7 @@ "Appen, der hører til dette ikon, er ikke installeret. Du kan fjerne den eller prøve at søge efter appen og installere den manuelt." "%1$s downloades. %2$s er gennemført" "%1$s venter på at installere" + "%1$s-widgets" "Føj til startskærm" "Flyt elementet hertil" "Elementet er føjet til startskærmen" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 67b6138b1..59ce70c9c 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -39,8 +39,7 @@ "Apps werden geladen..." "Keine Apps für \"%1$s\" gefunden" "Weitere Apps suchen" - - + "Benachrichtigungen" "Auf diesem Startbildschirm ist kein Platz mehr vorhanden." "Ablage \"Favoriten\" ist voll." "Liste der Apps" @@ -92,6 +91,7 @@ "Die App für dieses Symbol ist nicht installiert. Du kannst das Symbol entfernen oder die App lokalisieren und dann manuell installieren." "%1$s wird heruntergeladen, %2$s abgeschlossen" "Warten auf Installation von %1$s" + "%1$s-Widgets" "Zum Startbildschirm hinzufügen" "Element hierhin verschieben" "Element zum Startbildschirm hinzugefügt" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 3740eaf0e..d8da34b40 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -39,8 +39,7 @@ "Φόρτωση εφαρμογών…" "Δεν βρέθηκαν εφαρμογές για το ερώτημα \"%1$s\"" "Αναζήτηση περισσότερων εφαρμογών" - - + "Ειδοποιήσεις" "Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη." "Δεν υπάρχει επιπλέον χώρος στην περιοχή Αγαπημένα" "Λίστα εφαρμογών" @@ -92,6 +91,7 @@ "Η εφαρμογή γι\' αυτό το εικονίδιο δεν είναι εγκατεστημένη. Μπορείτε να το καταργήσετε ή να αναζητήσετε την εφαρμογή και να την εγκαταστήσετε με μη αυτόματο τρόπο." "Λήψη %1$s, ολοκληρώθηκε %2$s" "%1$s σε αναμονή για εγκατάσταση" + "Γραφικά στοιχεία %1$s" "Προσθήκη στην αρχική οθόνη" "Μετακίνηση στοιχείου εδώ" "Το στοιχείο προστέθηκε στην αρχική οθόνη" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 97149bcb4..ecfb0f547 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -39,8 +39,7 @@ "Loading Apps…" "No Apps found matching \"%1$s\"" "Search for more apps" - - + "Notifications" "No more room on this Home screen." "No more room in the Favourites tray" "Apps list" @@ -92,6 +91,7 @@ "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." "%1$s downloading, %2$s complete" "%1$s waiting to install" + "%1$s widgets" "Add to Home screen" "Move item here" "Item added to home screen" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 97149bcb4..ecfb0f547 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -39,8 +39,7 @@ "Loading Apps…" "No Apps found matching \"%1$s\"" "Search for more apps" - - + "Notifications" "No more room on this Home screen." "No more room in the Favourites tray" "Apps list" @@ -92,6 +91,7 @@ "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." "%1$s downloading, %2$s complete" "%1$s waiting to install" + "%1$s widgets" "Add to Home screen" "Move item here" "Item added to home screen" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 97149bcb4..ecfb0f547 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -39,8 +39,7 @@ "Loading Apps…" "No Apps found matching \"%1$s\"" "Search for more apps" - - + "Notifications" "No more room on this Home screen." "No more room in the Favourites tray" "Apps list" @@ -92,6 +91,7 @@ "The app for this icon isn\'t installed. You can remove it, or search for the app and install it manually." "%1$s downloading, %2$s complete" "%1$s waiting to install" + "%1$s widgets" "Add to Home screen" "Move item here" "Item added to home screen" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index a5f49035a..4a5739616 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -39,8 +39,7 @@ "Cargando aplicaciones…" "No hay aplicaciones que coincidan con %1$s." "Buscar más apps" - - + "Notificaciones" "No hay más espacio en esta pantalla principal." "La bandeja de favoritos está llena." "Lista de apps" @@ -92,6 +91,7 @@ "La aplicación para este ícono no está instalada. Puedes eliminar el ícono o buscar la aplicación e instarla manualmente." "Se completó el %2$s de la descarga de %1$s" "Instalación de %1$s en espera" + "Widgets de %1$s" "Agregar a la pantalla principal" "Mover elemento aquí" "Se agregó el elemento a la pantalla principal." diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index a93d484ba..05502cf0f 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -39,8 +39,7 @@ "Cargando aplicaciones…" "No se han encontrado aplicaciones que contengan \"%1$s\"" "Buscar más aplicaciones" - - + "Notificaciones" "No queda espacio en la pantalla de inicio." "La bandeja de favoritos está completa" "Lista de aplicaciones" @@ -92,6 +91,7 @@ "La aplicación de este icono no está instalada. Puedes quitar el icono o buscar la aplicación e instalarla manualmente." "Descargando %1$s (%2$s completado)" "Esperando para instalar %1$s" + "Widgets de %1$s" "Añadir a la pantalla de inicio" "Mover elemento aquí" "Elemento añadido a la pantalla de inicio" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 5d13059e4..91a733318 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -39,8 +39,7 @@ "Rakenduste laadimine ..." "Päringule „%1$s” ei vastanud ükski rakendus" "Otsi rohkem rakendusi" - - + "Märguanded" "Sellel avaekraanil pole enam ruumi." "Salves Lemmikud pole rohkem ruumi" "Rakenduste loend" @@ -92,6 +91,7 @@ "Selle ikooni rakendust pole installitud. Saate selle eemaldada või rakendust otsida ja käsitsi installida." "Rakenduse %1$s allalaadimine, %2$s on valmis" "%1$s on installimise ootel" + "Teenuse %1$s vidinad" "Lisa avaekraanile" "Teisalda üksus siia" "Üksus lisati avaekraanile" diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml index 31ff81b1a..1a4d80943 100644 --- a/res/values-eu-rES/strings.xml +++ b/res/values-eu-rES/strings.xml @@ -39,8 +39,7 @@ "Aplikazioak kargatzen…" "Ez da aurkitu \"%1$s\" bilaketarekin bat datorren aplikaziorik" "Bilatu aplikazio gehiago" - - + "Jakinarazpenak" "Hasierako pantaila honetan ez dago toki gehiago." "Ez dago toki gehiago Gogokoak erretiluan" "Aplikazioen zerrenda" @@ -92,6 +91,7 @@ "Ikono honen aplikazioa ez dago instalatuta. Ikonoa ken dezakezu, edo aplikazioa bilatu eta eskuz instalatu." "%1$s deskargatzen, %2$s osatuta" "%1$s instalatzeko zain" + "%1$s widgetak" "Gehitu hasierako pantailan" "Ekarri elementua hona" "Gehitu da elementua hasierako pantailan" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 215c46890..3a9a85af7 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -39,8 +39,7 @@ "در حال بارگیری برنامه‌ها..." "هیچ برنامه‌ای مطابق با «%1$s» پیدا نشد" "جستجوی برنامه‌های بیشتر" - - + "اعلان‌ها" "فضای بیشتری در این صفحه اصلی موجود نیست." "فضای بیشتری در سینی موارد دلخواه وجود ندارد" "فهرست برنامه‌ها" @@ -92,6 +91,7 @@ "برنامه برای این نماد نصب نشده است. می‌توانید آن را حذف کنید یا سعی کنید برنامه را جستجو کنید و آن را به صورت دستی نصب کنید." "درحال بارگیری %1$s، %2$s کامل شد" "%1$s درانتظار نصب" + "ابزارک‌های %1$s" "افزودن به صفحه اصلی" "انتقال مورد به اینجا" "مورد به صفحه اصلی اضافه شد" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 408cc81ef..6e4bc934e 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -39,8 +39,7 @@ "Ladataan sovelluksia…" "”%1$s” ei palauttanut sovelluksia." "Hae lisää sovelluksia" - - + "Ilmoitukset" "Tässä aloitusruudussa ei ole enää tilaa." "Suosikit-valikossa ei ole enää tilaa" "Sovellusluettelo" @@ -92,6 +91,7 @@ "Kuvakkeen sovellusta ei ole asennettu. Voit poistaa kuvakkeen tai etsiä sovelluksen ja asentaa sen manuaalisesti." "%1$s latautuu, valmiina %2$s" "%1$s odottaa asennusta" + "Widgetit: %1$s" "Lisää aloitusnäytölle" "Siirrä kohde tänne" "Kohde lisättiin aloitusnäytölle." diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 9ec0c62ac..a9f294726 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -39,8 +39,7 @@ "Chargement des applications en cours..." "Aucune application trouvée correspondant à « %1$s »" "Rechercher plus d\'applications" - - + "Notifications" "Pas d\'espace libre sur l\'écran d\'accueil." "Il n\'y a plus d\'espace dans la zone des favoris" "Liste des applications" @@ -92,6 +91,7 @@ "L\'application liée à cette icône n\'est pas installée. Vous pouvez la supprimer ou rechercher l\'application et l\'installer manuellement." "Téléchargement de %1$s : %2$s" "%1$s en attente d\'installation" + "Widgets pour %1$s" "Ajouter à l\'écran d\'accueil" "Déplacer l\'élément ici" "Élément ajouté à l\'écran d\'accueil" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 78c3d39bf..2d7a38c03 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -39,8 +39,7 @@ "Chargement des applications en cours…" "Aucune application ne correspond à la requête \"%1$s\"." "Rechercher plus d\'applications" - - + "Notifications" "Pas d\'espace libre sur cet écran d\'accueil." "Plus d\'espace disponible dans la zone de favoris." "Liste d\'applications" @@ -92,6 +91,7 @@ "L\'application correspondant à cette icône n\'est pas installée. Vous pouvez supprimer cette dernière, ou essayer de rechercher l\'application et de l\'installer manuellement." "%1$s en cours de téléchargement, %2$s effectué(s)" "%1$s en attente d\'installation" + "Widgets %1$s" "Ajouter à l\'écran d\'accueil" "Déplacer l\'élément ici" "L\'élément a bien été ajouté à l\'écran d\'accueil." diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml index de27d3195..e8213b51d 100644 --- a/res/values-gl-rES/strings.xml +++ b/res/values-gl-rES/strings.xml @@ -39,8 +39,7 @@ "Cargando aplicacións..." "Non se atoparon aplicacións que coincidan con \"%1$s\"" "Buscar máis aplicacións" - - + "Notificacións" "Non hai máis espazo nesta pantalla de inicio." "Non hai máis espazo na bandexa de favoritos" "Lista de aplicacións" @@ -92,6 +91,7 @@ "A aplicación para esta icona non está instalada. Podes eliminala ou buscar a aplicación e instalala manualmente." "Descargando %1$s (%2$s completado)" "Esperando para instalar %1$s" + "Widgets de: %1$s" "Engadir á pantalla de inicio" "Mover elemento aquí" "Engadiuse o elemento á pantalla de inicio" diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml index 216cd5044..aa4992db7 100644 --- a/res/values-gu-rIN/strings.xml +++ b/res/values-gu-rIN/strings.xml @@ -39,8 +39,7 @@ "ઍપ્લિકેશનો લોડ કરી રહ્યું છે…" "\"%1$s\" થી મેળ ખાતી કોઈ ઍપ્લિકેશનો મળી નથી" "વધુ ઍપ્લિકેશનો શોધો" - - + "સૂચનાઓ" "આ હોમ સ્ક્રીન પર વધુ જગ્યા નથી." "મનપસંદ ટ્રે પર વધુ જગ્યા નથી" "ઍપ્લિકેશનોની સૂચિ" @@ -89,6 +88,7 @@ "આ આયકન માટેની ઍપ્લિકેશન ઇન્સ્ટોલ થયેલ નથી. તમે તેને દૂર કરી શકો છો અથવા ઍપ્લિકેશન માટે શોધ કરી અને તેને મેન્યુઅલી ઇન્સ્ટોલ કરી શકો છો." "%1$s ડાઉનલોડ કરી રહ્યાં છે, %2$s પૂર્ણ" "%1$s, ઇન્સ્ટૉલ થવાની રાહ જોઈ રહ્યું છે" + "%1$s વિજેટ" "હોમ સ્ક્રીન પર ઉમેરો" "આઇટમ અહીં ખસેડો" "હોમ સ્ક્રીનમાં આઇટમ ઉમેરી" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index f28cb4e33..ba03a9267 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -39,8 +39,7 @@ "ऐप्स लोड हो रहे हैं..." "\"%1$s\" से मिलान करने वाला कोई ऐप नहीं मिला" "अधिक ऐप्लिकेशन खोजें" - - + "नोटिफ़िकेशन" "इस होम स्‍क्रीन पर स्थान शेष नहीं है." "पसंदीदा ट्रे में और स्थान नहीं है" "ऐप्लिकेशन सूची" @@ -92,6 +91,7 @@ "इस आइकन का ऐप्स इंस्टॉल नहीं है. आप उसे निकाल सकते हैं या ऐप्स की खोज करके उसे मैन्युअल रूप से इंस्टॉल कर सकते हैं." "%1$s डाउनलोड हो रहा है, %2$s पूर्ण" "%1$s के इंस्टॉल होने की प्रतीक्षा की जा रही है" + "%1$s विजेट" "होम स्‍क्रीन में जोड़ें" "आइटम यहां ले जाएं" "होम स्क्रीन में आइटम जोड़ा गया" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 631b63b0f..b6448f1e7 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -39,8 +39,7 @@ "Učitavanje aplikacija…" "Nema aplikacija podudarnih s upitom \"%1$s\"" "Traži više aplikacija" - - + "Obavijesti" "Na ovom početnom zaslonu više nema mjesta." "Nema više prostora na traci Favoriti" "Popis aplikacija" @@ -92,6 +91,7 @@ "Aplikacija ove ikone nije instalirana. Možete je ukloniti ili potražiti aplikaciju i instalirati je ručno." "Preuzimanje aplikacije %1$s, dovršeno %2$s" "Čekanje na instaliranje aplikacije %1$s" + "%1$s widgeti" "Dodavanje na početni zaslon" "Premjesti stavku ovdje" "Stavka je dodana na početni zaslon" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index c027dc2fc..45a50544c 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -39,8 +39,7 @@ "Alkalmazások betöltése…" "Egy alkalmazás sem található a(z) „%1$s” lekérdezésre." "További alkalmazások keresése" - - + "Értesítések" "Nincs több hely ezen a kezdőképernyőn." "Nincs több hely a Kedvencek tálcán" "Alkalmazások listája" @@ -92,6 +91,7 @@ "Az ikonhoz tartozó alkalmazás nincs telepítve. Törölheti az ikont, vagy az alkalmazás megkeresése után manuálisan telepítheti azt." "A(z) %1$s letöltése, %2$s kész" "A(z) %1$s telepítésre vár" + "%1$s-modulok" "Hozzáadás a kezdőképernyőhöz" "Elem áthelyezése ide" "Elem hozzáadva a kezdőképernyőhöz" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 12d5fc22a..7c39a3f18 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -39,8 +39,7 @@ "Հավելվածների բեռնում…" "«%1$s» հարցմանը համապատասխանող հավելվածներ չեն գտնվել" "Որոնել այլ հավելվածներ" - - + "Ծանուցումներ" "Այլևս տեղ չկա այս հիմնական էկրանին:" "Ընտրյալների ցուցակում այլևս ազատ տեղ չկա" "Հավելվածների ցանկ" @@ -92,6 +91,7 @@ "Այս պատկերակի ծրագիրը տեղադրված չէ: Դուք կարող եք հեռացնել այն կամ գտնել ծրագիրը և տեղադրել այն ձեռքով:" "%1$s–ի ներբեռնում (%2$s)" "%1$s-ի տեղադրման սպասում" + "%1$s վիջեթներ" "Ավելացնել Հիմնական էկրանին" "Տեղափոխել տարրն այստեղ" "Տարրն ավելացվեց հիմնական էկրանին" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 8afcd4a9e..4d26ab36b 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -39,8 +39,7 @@ "Memuat Aplikasi..." "Tidak ditemukan Aplikasi yang cocok dengan \"%1$s\"" "Telusuri aplikasi lainnya" - - + "Notifikasi" "Tidak ada ruang lagi pada layar Utama ini." "Tidak ada ruang tersisa di baki Favorit" "Daftar aplikasi" @@ -92,6 +91,7 @@ "Aplikasi untuk ikon ini belum dipasang. Anda dapat membuangnya, atau menelusuri aplikasi dan memasangnya secara manual." "%1$s sedang didownload, %2$s selesai" "%1$s menunggu dipasang" + "Widget %1$s" "Tambahkan ke Layar Utama" "Pindahkan item ke sini" "Item ditambahkan ke layar utama" diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml index 70b597213..3694a10e4 100644 --- a/res/values-is-rIS/strings.xml +++ b/res/values-is-rIS/strings.xml @@ -39,8 +39,7 @@ "Hleður forrit…" "Ekki fundust forrit sem samsvara „%1$s“" "Leita að fleiri forritum" - - + "Tilkynningar" "Ekki meira pláss á þessum heimaskjá." "Ekki meira pláss í bakka fyrir uppáhald" "Forritalisti" @@ -92,6 +91,7 @@ "Forritið fyrir þetta tákn er ekki uppsett. Þú getur fjarlægt það eða leitað að forritinu og sett það upp handvirkt." "%1$s í niðurhali, %2$s lokið" "%1$s bíður uppsetningar" + "%1$s-græjur" "Bæta á heimaskjá" "Færa atriði hingað" "Atriði bætt á heimaskjáinn" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 2ac980e05..12088740d 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -39,8 +39,7 @@ "Caricamento di app…" "Nessuna app trovata corrispondente a \"%1$s\"" "Cerca altre app" - - + "Notifiche" "Spazio nella schermata Home esaurito." "Spazio esaurito nella barra dei Preferiti" "Elenco di app" @@ -92,6 +91,7 @@ "L\'app per questa icona non è installata. Puoi rimuoverla o cercare l\'app e installarla manualmente." "Download di %1$s in corso, %2$s completato" "%1$s in attesa di installazione" + "Widget di %1$s" "Aggiungi a schermata Home" "Sposta elemento qui" "Elemento aggiunto alla schermata Home" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index e7f3f90fd..85b971220 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -39,8 +39,7 @@ "טוען אפליקציות…" "לא נמצאו אפליקציות התואמות ל-\"%1$s\"" "חפש אפליקציות נוספות" - - + "הודעות" "אין עוד מקום במסך דף הבית הזה." "אין עוד מקום במגש המועדפים" "רשימת אפליקציות" @@ -92,6 +91,7 @@ "האפליקציה של סמל זה אינה מותקנת. ניתן להסיר אותו, או לחפש את האפליקציה ולהתקין אותה ידנית." "מוריד את %1$s, %2$s הושלמו" "מחכה להתקנה של %1$s" + "ווידג\'טים של %1$s" "הוסף למסך דף הבית" "העבר את הפריט לכאן" "הפריט הועבר אל מסך דף הבית" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index e4c809257..846b884a6 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -39,8 +39,7 @@ "アプリを読み込んでいます…" "「%1$s」に一致するアプリは見つかりませんでした" "他のアプリを検索" - - + "通知" "このホーム画面に空きスペースがありません。" "お気に入りトレイに空きスペースがありません" "アプリのリスト" @@ -92,6 +91,7 @@ "このアイコンのアプリはインストールされていません。このアイコンは削除できます。または、手動でアプリを検索してインストールしください。" "%1$sをダウンロード中、%2$s完了" "%1$sのインストール待ち" + "%1$sのウィジェット" "ホーム画面に追加" "アイテムをここに移動" "アイテムをホーム画面に追加しました" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 8c359bf4d..197944936 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -39,8 +39,7 @@ "აპები იტვირთება..." "„%1$s“-ის თანხვედრი აპები არ მოიძებნა" "მეტი აპის პოვნა" - - + "შეტყობინებები" "ამ მთავარ ეკრანზე ადგილი აღარ არის." "რჩეულების თაროზე ადგილი არ არის" "აპების სია" @@ -92,6 +91,7 @@ "ამ ხატულის აპი დაყენებული არ არის. შეგიძლიათ ამოშალოთ, ან მოიძიოთ აპი და ხელით მოახდინოთ მისი ინსტალაცია." "მიმდინარეობს %1$s-ის ჩამოტვირთვა, %2$s დასრულდა" "%1$s ელოდება ინსტალაციას" + "%1$s-ის ვიჯეტები" "მთავარ ეკრანზე დამატება" "ერთეულის გადაადგილება აქ" "ერთეული დაემატა მთავარ ეკრანს" diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml index ef704e02c..5df503a10 100644 --- a/res/values-kk-rKZ/strings.xml +++ b/res/values-kk-rKZ/strings.xml @@ -39,8 +39,7 @@ "Қолданбалар жүктелуде…" "«%1$s» сұрауына сәйкес келетін қолданбалар жоқ" "Қосымша қолданбалар іздеу" - - + "Хабарландырулар" "Бұл Негізгі экранда орын қалмады." "Қалаулылар науасында орын қалмады" "Қолданбалар тізімі" @@ -92,6 +91,7 @@ "Осы белгіше үшін қолданба орнатылмаған. Оны жоюға болады немесе қолданбаны іздеп, қолмен орнатуға болады." "%1$s жүктелуде, %2$s аяқталды" "%1$s орнату күтілуде" + "%1$s виджеті" "Негізгі экранға қосу" "Элементті мұнда жылжыту" "Элемент негізгі экранға қосылды" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 6a47dfa52..a64b604cb 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -39,8 +39,7 @@ "កំពុងដំណើរការកម្មវិធី..." "គ្មានកម្មវិធីដែលត្រូវជាមួយ \"%1$s\" ទេ" "ស្វែងរកកម្មវិធីច្រើនទៀត" - - + "ការ​ជូនដំណឹង" "គ្មាន​បន្ទប់​នៅ​លើ​អេក្រង់​ដើម​នេះ​ទៀត​ទេ។" "គ្មាន​បន្ទប់​​ក្នុង​ថាស​និយម​ប្រើ" "បញ្ជីកម្មវិធី" @@ -92,6 +91,7 @@ "មិន​បាន​ដំឡើង​កម្មវិធី​សម្រាប់​រូបតំណាង​នេះ។ អ្នក​អាច​លុប​វា ឬ​ស្វែងរក​កម្មវិធី និង​ដំឡើង​វា​ដោយ​ដៃ។" "កំពុងដោនឡូត %1$s បានបញ្ចប់ %2$s" "%1$s កំពុងរង់ចាំការដំឡើង" + "ធាតុ​ក្រាហ្វិក %1$s" "បន្ថែមទៅអេក្រង់ដើម" "ផ្លាស់ធាតុមកទីនេះ" "ធាតុដែលត្រូវបានបន្ថែមទៅអេក្រង់ដើម" diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml index c5fb7fd9c..b22af0de8 100644 --- a/res/values-kn-rIN/strings.xml +++ b/res/values-kn-rIN/strings.xml @@ -39,8 +39,7 @@ "ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..." "\"%1$s\" ಹೊಂದಿಕೆಯ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ" "ಮತ್ತಷ್ಟು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಹುಡುಕಿ" - - + "ಅಧಿಸೂಚನೆಗಳು" "ಈ ಮುಖಪುಟದ ಪರದೆಯಲ್ಲಿ ಹೆಚ್ಚು ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ." "ಮೆಚ್ಚಿನವುಗಳ ಟ್ರೇನಲ್ಲಿ ಹೆಚ್ಚಿನ ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ" "ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಪಟ್ಟಿ" @@ -89,6 +88,7 @@ "ಈ ಐಕಾನ್ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪನೆಗೊಂಡಿಲ್ಲ. ನೀವು ಅದನ್ನು ತೆಗೆದುಹಾಕಬಹುದು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ ಹುಡುಕಬಹುದು ಮತ್ತು ಹಸ್ತಚಾಲಿತವಾಗಿ ಅದನ್ನು ಸ್ಥಾಪಿಸಬಹುದು." "%1$s ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ, %2$s ಪೂರ್ಣಗೊಂಡಿದೆ" "%1$s ಸ್ಥಾಪಿಸಲು ಕಾಯಲಾಗುತ್ತಿದೆ" + "%1$s ವಿಜೆಟ್‌ಗಳು" "ಮುಖಪುಟಕ್ಕೆ ಸೇರಿಸು" "ಐಟಂ ಇಲ್ಲಿಗೆ ಸರಿಸಿ" "ಮುಖಪುಟ ಪರದೆಗೆ ಐಟಂ ಸೇರಿಸಲಾಗಿದೆ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index b7aeaead8..9e1eba4c0 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -39,8 +39,7 @@ "앱 로드 중..." "\'%1$s\'와(과) 일치하는 앱이 없습니다." "더 많은 앱 검색" - - + "알림" "홈 화면에 더 이상 공간이 없습니다." "즐겨찾기 트레이에 더 이상 공간이 없습니다." "앱 목록" @@ -92,6 +91,7 @@ "이 아이콘의 앱이 설치되어 있지 않습니다. 아이콘을 삭제하거나 앱을 검색하여 수동으로 설치하세요." "%1$s 다운로드 중, %2$s 완료" "%1$s 설치 대기 중" + "%1$s 위젯" "홈 화면에 추가" "여기에 항목을 이동" "홈 화면에 항목 추가됨" diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml index 4833d9142..21622924d 100644 --- a/res/values-ky-rKG/strings.xml +++ b/res/values-ky-rKG/strings.xml @@ -39,8 +39,7 @@ "Колдонмолор жүктөлүүдө…" "\"%1$s\" дал келген колдонмолор табылган жок" "Көбүрөөк колдонмолорду издөө" - - + "Эскертмелер" "Бул Үй экранында бош орун жок." "Тандамалдар тайпасында орун калган жок" "Колдонмолор тизмеси" @@ -92,6 +91,7 @@ "Бул сүрөтчөнүн колдонмосу орнотулган эмес. Аны алып салсаңыз же колдонмону издеп, кол менен орнотсоңуз болот." "%1$s жүктөлүп алынууда, %2$s аяктады" "%1$s орнотулушу күтүлүүдө" + "%1$s виджеттери" "Башкы экранга кошуу" "Бул нерсени бул жерге жылдыруу" "Башкы экранга кошулду" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index d5df37425..334305afe 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -39,8 +39,7 @@ "​ກຳ​ລັງ​ໂຫລດ​ແອັບ..." "ບໍ່​ພົບ​ແອັບ​ໃດ​ທີ່​ກົງ​ກັນ \"%1$s\"" "ຊອກຫາແອັບເພີ່ມເຕີມ" - - + "ການແຈ້ງເຕືອນ" "ບໍ່ມີຫ້ອງເຫຼືອໃນໜ້າຈໍຫຼັກນີ້." "ບໍ່ມີບ່ອນຫວ່າງໃນຖາດສຳລັບເກັບສິ່ງທີ່ໃຊ້ເປັນປະຈຳ" "ລາຍຊື່ແອັບ" @@ -92,6 +91,7 @@ "​ແອັບຯ​ສຳ​ລັບ​ໄອ​ຄອນ​ນີ້​ຍັງ​ບໍ່ໄດ້​ຕິດ​ຕັ້ງ​ເທື່ອ. ທ່ານ​ສາ​ມາດ​ລຶບ​ມັນ​ອອກ ຫຼື​ຊອກ​ຫາ​ແອັບຯ ແລ້ວ​ຕິດ​ຕັ້ງ​ມັນ​ໄດ້​ດ້ວຍ​ຕົນ​ເອງ." "%1$s ກຳ​ລັງ​ດາວ​ໂຫຼດ, %2$s ສຳ​ເລັດ" "%1$s ກຳ​ລັງ​ລໍ​ຖ້າ​ຕິດ​ຕັ້ງ" + "ວິດເຈັດ %1$s" "ເພີ່ມໃສ່ໜ້າຈໍຫຼັກ" "Move item here" "ເພີ່ມ​ລາຍ​ການ​ໃສ່​ໜ້າ​ຈໍ​ຫຼັກ​ແລ້ວ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 3ffe6473a..558e1a949 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -39,8 +39,7 @@ "Įkeliamos programos..." "Nerasta jokių užklausą „%1$s“ atitinkančių programų" "Ieškoti daugiau programų" - - + "Pranešimai" "Šiame pagrindiniame ekrane vietos nebėra." "Mėgstamiausių dėkle nebėra vietos" "Programų sąrašas" @@ -92,6 +91,7 @@ "Šios piktogramos programa neįdiegta. Galite ją pašalinti arba bandyti ieškoti programos ir ją įdiegti patys." "Atsisiunčiama programa „%1$s“, %2$s baigta" "Laukiama, kol bus įdiegta programa „%1$s“" + "„%1$s“ valdikliai" "Pridėti prie pagrind. ekrano" "Perkelti elementą čia" "Elementas pridėtas prie pagrindinio ekrano" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index f81b59bea..733d64760 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -39,8 +39,7 @@ "Notiek lietotņu ielāde…" "Vaicājumam “%1$s” neatbilda neviena lietotne." "Meklēt citas lietotnes" - - + "Paziņojumi" "Šajā sākuma ekrānā vairs nav vietas." "Izlases joslā vairs nav vietas." "Lietotņu saraksts" @@ -92,6 +91,7 @@ "Šai ikonai paredzētā lietotne nav instalēta. Varat noņemt ikonu vai meklēt lietotni un instalēt to manuāli." "Lietotnes %1$s lejupielāde (%2$s pabeigti)" "Notiek %1$s instalēšana" + "%1$s logrīki" "Pievienot sākuma ekrānam" "Pārvietot vienumu šeit" "Vienums pievienots sākuma ekrānam" diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml index 91273e89a..267e75b98 100644 --- a/res/values-mk-rMK/strings.xml +++ b/res/values-mk-rMK/strings.xml @@ -39,8 +39,7 @@ "Се вчитуваат апликации…" "Не се најдени апликации што одговараат на „%1$s“" "Пребарај други апликации" - - + "Известувања" "Нема повеќе простор на овој екран на почетната страница." "Нема повеќе простор на лентата „Омилени“" "Список со апликации" @@ -92,6 +91,7 @@ "Апликацијата за оваа икона не е инсталирана. Може да ја отстраните или да се обидете да ја најдете апликацијата и да ја инсталирате рачно." "Се презема %1$s, %2$s завршено" "%1$s чека да се инсталира" + "Виџети за %1$s" "Додај на Почетен екран" "Премести ја ставката овде" "Ставката е додадена на почетниот екран" diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml index 93303f88c..a92fc0356 100644 --- a/res/values-ml-rIN/strings.xml +++ b/res/values-ml-rIN/strings.xml @@ -39,8 +39,7 @@ "ആപ്പ്‌സ് ലോഡുചെയ്യുന്നു..." "\"%1$s\" എന്നതുമായി പൊരുത്തപ്പെടുന്ന ആപ്പ്‌സൊന്നും കണ്ടെത്തിയില്ല" "കൂടുതൽ ആപ്പുകൾക്ക് തിരയുക" - - + "അറിയിപ്പുകൾ" "ഈ ഹോം സ്‌ക്രീനിൽ ഒഴിവൊന്നുമില്ല." "പ്രിയപ്പെട്ടവയുടെ ട്രേയിൽ ഒഴിവൊന്നുമില്ല" "അപ്ലിക്കേഷനുകളുടെ ലിസ്‌റ്റ്" @@ -89,6 +88,7 @@ "ഈ ഐക്കണുവേണ്ടി അപ്ലിക്കേഷൻ ഇൻസ്റ്റാളുചെയ്‌തിട്ടില്ല. നിങ്ങൾക്കത് നീക്കംചെയ്യാനാകും അല്ലെങ്കിൽ അപ്ലിക്കേഷനുവേണ്ടി തിരഞ്ഞുകൊണ്ട് അത് സ്വമേധയാ ഇൻസ്റ്റാളുചെയ്യുക." "%1$s ഡൗൺലോഡ് ചെയ്യുന്നു, %2$s പൂർത്തിയായി" "ഇൻസ്റ്റാൾ ചെയ്യാൻ %1$s കാക്കുന്നു" + "%1$s വിജറ്റുകൾ" "ഹോം സ്ക്രീനിൽ ചേർക്കുക" "ഇനം ഇവിടേക്ക് നീക്കുക" "ഹോം സ്‌ക്രീനിൽ ഇനം ചേർത്തു" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 4c54ba52a..5b74fd204 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -39,8 +39,7 @@ "Аппликейшныг ачаалж байна..." "\"%1$s\"-д нийцэх апп олдсонгүй" "Бусад апп-г хайх" - - + "Мэдэгдэл" "Энэ Нүүр дэлгэц зайгүй." "\"Дуртай\" трей дээр өөр зай байхгүй байна" "Апп-н жагсаалт" @@ -92,6 +91,7 @@ "Энэ дүрсний апп-г суулгаагүй байна. Та үүнийг устгах буюу апп-г хайж суулгах боломжтой." "%1$s-г татаж байна, %2$s татсан" "%1$s нь суулгахыг хүлээж байна" + "%1$s жижиг хэрэгсэл" "Нүүр дэлгэц нэмэх" "Энд байршуулах" "Нүүр дэлгэцэнд нэмсэн зүйл" diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml index e54f0aa5f..1a10e4b57 100644 --- a/res/values-mr-rIN/strings.xml +++ b/res/values-mr-rIN/strings.xml @@ -39,8 +39,7 @@ "अॅप्स लोड करीत आहे..." "\"%1$s\" शी जुळणारे कोणतेही अॅप्स आढळले नाहीत" "अधिक अॅप्स शोधा" - - + "सूचना" "या मुख्य स्क्रीनवर आणखी जागा नाही." "आवडीच्या ट्रे मध्ये आणखी जागा नाही" "अॅप्स सूची" @@ -89,6 +88,7 @@ "या चिन्हासाठी अॅप स्थापित केलेला नाही. आपण ते काढू शकता किंवा अॅपचा शोध घेऊ शकता आणि त्यास व्यक्तिचलितपणे स्थापित करू शकता." "%1$s डाउनलोड होत आहे , %2$s पूर्ण झाले" "%1$s स्थापित करण्याची प्रतिक्षा करीत आहे" + "%1$s विजेट" "मुख्य स्क्रीनवर जोडा" "आयटम येथे हलवा" "आयटम मुख्य स्क्रीनवर जोडला" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 1ee14e316..756a2cf2f 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -39,8 +39,7 @@ "Memuatkan Apl…" "Tiada Apl yang ditemui sepadan dengan \"%1$s\"" "Cari lagi apl" - - + "Pemberitahuan" "Tiada lagi ruang pada skrin Laman Utama ini." "Tiada ruang dalam dulang Kegemaran lagi" "Senarai apl" @@ -92,6 +91,7 @@ "Apl untuk ikon ini tidak dipasang. Anda boleh mengalih keluar atau mencari dan memasang apl itu secara manual." "%1$s memuat turun, %2$s selesai" "%1$s menunggu untuk dipasang" + "Widget %1$s" "Tambahkan pada Skrin Utama" "Alihkan item ke sini" "Item ditambahkan pada skrin utama" diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml index f70f5f03f..449aae8e0 100644 --- a/res/values-my-rMM/strings.xml +++ b/res/values-my-rMM/strings.xml @@ -39,8 +39,7 @@ "အက်ပ်များ ရယူနေစဉ်..." "\"%1$s\" နှင့်ကိုက်ညီသည့် အပ်ဖ်များမတွေ့ပါ" "နောက်ထပ် အက်ပ်များကို ရှာပါ" - - + "အကြောင်းကြားချက်များ" "ဤပင်မမျက်နှာစာတွင် နေရာလွတ် မကျန်တော့ပါ" "အနှစ်သက်ဆုံးများ ထားရာတွင် နေရာလွတ် မကျန်တော့ပါ" "အက်ပ်စာရင်း" @@ -92,6 +91,7 @@ "ဤအိုင်ကွန်အတွက် အက်ပ်အားမထည့်သွင်းထားပါ။ You can remove it, or search for the အက်ပ်and install it manually." "%1$s ဒေါင်းလုဒ်လုပ်နေသည်၊ %2$s ပြီးပါပြီ" "%1$s ကိုထည့်သွင်းရန်စောင့်နေသည်" + "%1$s ဝိဂျက်များ" "ပင်မမျက်နှာစာသို့ ထည့်ပါ" "၎င်းအား ဤသို့ ရွှေ့ပါ" "ပင်မ ဖန်မျက်နှာပြင်သို့ ထည့်ပြီး၏" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 321fe950a..6c70038bb 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -39,8 +39,7 @@ "Laster inn apper …" "Fant ingen apper som samsvarer med «%1$s»" "Søk etter flere apper" - - + "Varsler" "Denne startsiden er full." "Favoritter-skuffen er full" "App-liste" @@ -92,6 +91,7 @@ "Appen for dette ikonet er ikke installert. Du kan fjerne det, eller prøve å søke etter appen og installere den manuelt." "Laster ned %1$s, %2$s er fullført" "Venter på å installere %1$s" + "%1$s-moduler" "Legg til på startskjermen" "Flytt elementet hit" "Elementet er lagt til på startskjermen" diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml index 1cff6245b..46c8f9cea 100644 --- a/res/values-ne-rNP/strings.xml +++ b/res/values-ne-rNP/strings.xml @@ -39,8 +39,7 @@ "अनुप्रयोगहरू लोड गरिँदै..." "\"%1$s\" सँग मिल्दो कुनै अनुप्रयोगहरू फेला परेनन्" "थप अनुप्रयोगहरू खोज्नुहोस्" - - + "सूचनाहरू" "यो गृह स्क्रिनमा कुनै थप ठाउँ छैन।" "मनपर्ने ट्रे अब कुनै ठाँउ छैन" "अनुप्रयोगको सूची" @@ -89,6 +88,7 @@ "यो प्रतिमाका लागि अनुप्रयोगलाई स्थापना गरिएको छैन। तपाईं यसलाई हटाउन, वा अनुप्रयोग खोजी र स्वयं यो स्थापित गर्न सक्नुहुन्छ।" "%1$s डाउनलोड गर्दै, %2$s सम्पन्‍न" "%1$s स्थापना गर्न प्रतीक्षा गर्दै" + "%1$s विजेटहरू" "गृह स्क्रिनमा थप्नुहोस्" "वस्तु यहाँ सार्नुहोस्" "वस्तु गृह स्क्रिनमा थपियो" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 9b831d9d9..e8caeb448 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -39,8 +39,7 @@ "Apps laden…" "Er zijn geen apps gevonden die overeenkomen met \'%1$s\'" "Zoeken naar meer apps" - - + "Meldingen" "Er is geen ruimte meer op dit startscherm." "Geen ruimte meer in het vak \'Favorieten\'" "Lijst met apps" @@ -92,6 +91,7 @@ "De app voor dit pictogram is niet geïnstalleerd. Je kunt het pictogram verwijderen of de app zoeken en handmatig installeren." "%1$s wordt gedownload, %2$s voltooid" "%1$s wacht op installatie" + "%1$s-widgets" "Toevoegen aan homepage" "Item hier naartoe verplaatsen" "Item toegevoegd aan startscherm" diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml index a1c736671..c4c11ce04 100644 --- a/res/values-pa-rIN/strings.xml +++ b/res/values-pa-rIN/strings.xml @@ -39,8 +39,7 @@ "ਐਪਾਂ ਨੂੰ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." "\"%1$s\" ਨਾਲ ਮਿਲਦੀਆਂ ਕੋਈ ਵੀ ਐਪਾਂ ਨਹੀਂ ਮਿਲੀਆਂ" "ਹੋਰ ਐਪਾਂ ਖੋਜੋ" - - + "ਸੂਚਨਾਵਾਂ" "ਇਸ ਹੋਮ ਸਕ੍ਰੀਨ ਲਈ ਹੋਰ ਖਾਲੀ ਸਥਾਨ ਨਹੀਂ ਹੈ।" "ਮਨਪਸੰਦ ਟ੍ਰੇ ਵਿੱਚ ਹੋਰ ਖਾਲੀ ਸਥਾਨ ਨਹੀਂ।" "ਐਪ ਸੂਚੀ" @@ -89,6 +88,7 @@ "ਇਸ ਆਈਕਨ ਲਈ ਐਪ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ ਹੈ। ਤੁਸੀਂ ਇਸਨੂੰ ਹਟਾ ਸਕਦੇ ਹੋ ਜਾਂ ਐਪ ਖੋਜ ਸਕਦੇ ਹੋ ਅਤੇ ਇਸਨੂੰ ਮੈਨੂਅਲੀ ਇੰਸਟੌਲ ਕਰ ਸਕਦੇ ਹੋ।" "%1$s ਡਾਉਨਲੋਡ ਹੋਰ ਰਿਹਾ ਹੈ, %2$s ਸੰਪੂਰਣ" "%1$s ਸਥਾਪਿਤ ਕਰਨ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" + "%1$s ਵਿਜਿਟ" "ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਜੋੜੋ" "ਆਈਟਮ ਨੂੰ ਇੱਥੇ ਮੂਵ ਕਰੋ" "ਆਈਟਮ ਨੂੰ ਮੁੱਖ ਸਕ੍ਰੀਨ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 0a458035d..e611fcd9a 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -39,8 +39,7 @@ "Wczytuję aplikacje…" "Nie znaleziono aplikacji pasujących do zapytania „%1$s”" "Wyszukaj więcej aplikacji" - - + "Powiadomienia" "Brak miejsca na tym ekranie głównym." "Brak miejsca w Ulubionych" "Lista aplikacji" @@ -92,6 +91,7 @@ "Aplikacja, której odpowiada ta ikona, nie jest zainstalowana. Możesz usunąć ikonę lub wyszukać aplikację i zainstalować ją ręcznie." "Pobieranie elementu %1$s, ukończono: %2$s" "%1$s oczekuje na instalację" + "%1$s – widżety" "Dodaj do strony głównej" "Przenieś element tutaj" "Element został dodany do ekranu głównego" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index d1b5bac46..0aa987bda 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -39,8 +39,7 @@ "A carregar aplicações..." "Não foram encontradas aplic. que correspondam a \"%1$s\"" "Pesquisar mais aplicações" - - + "Notificações" "Sem espaço suficiente neste Ecrã principal." "Não existe mais espaço no tabuleiro de Favoritos" "Lista de aplicações" @@ -92,6 +91,7 @@ "A aplicação deste ícone não está instalada. Pode removê-lo ou pesquisar a aplicação e instalá-la manualmente." "A transferir o %1$s, %2$s concluído" "A aguardar a instalação do %1$s" + "Widgets de %1$s" "Adicionar ao Ecrã principal" "Mover o item para aqui" "Item adicionado ao ecrã principal" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 05cc0a662..39a16515f 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -39,8 +39,7 @@ "Carregando apps…" "Nenhum app encontrado que corresponda a \"%1$s\"" "Pesquisar mais apps" - - + "Notificações" "Não há mais espaço na tela inicial." "Sem espaço na bandeja de favoritos" "Lista de apps" @@ -92,6 +91,7 @@ "O app deste ícone não está instalado. Você pode remover o ícone, ou procurar o app e instalá-lo manualmente." "Fazendo download de %1$s, %2$s concluído" "Aguardando instalação de %1$s" + "Widgets do %1$s" "Adicionar à tela inicial" "Mover item para cá" "Item adicionado à tela inicial" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index aaf4d934b..c7c0994a3 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -39,8 +39,7 @@ "Se încarcă aplicațiile..." "Nu s-a găsit nicio aplicație pentru „%1$s”" "Căutați mai multe aplicații" - - + "Notificări" "Nu mai este loc pe acest Ecran de pornire." "Spațiu epuizat în bara Preferate" "Lista de aplicații" @@ -92,6 +91,7 @@ "Aplicația pentru această pictogramă nu este instalată. Puteți să ștergeți pictograma sau să căutați aplicația și s-o instalați manual." "%1$s se descarcă (finalizat %2$s)" "%1$s așteaptă instalarea" + "Widgeturi %1$s" "Adăugați pe ecranul de pornire" "Mutați elementul aici" "Element adăugat pe ecranul de pornire" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 7123b6889..acb49d598 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -39,8 +39,7 @@ "Загрузка…" "По запросу \"%1$s\" ничего не найдено" "Искать другие приложения" - - + "Уведомления" "На этом экране все занято" "В разделе \"Избранное\" больше нет места" "Список приложений" @@ -92,6 +91,7 @@ "Приложение не установлено. Вы можете удалить значок или найти приложение и установить его вручную." "Скачивается \"%1$s\" (%2$s)" "Ожидание установки \"%1$s\"" + "%1$s: виджеты" "Добавить на главный экран" "Переместить элемент сюда" "Элемент добавлен на главный экран" diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 5b575a827..569a77f00 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -39,8 +39,7 @@ "යෙදුම් පූරණය වෙමින්…" "\"%1$s\" සමග ගැළපෙන යෙදුම් හමු නොවිණි" "තව යෙදුම් සඳහා සොයන්න" - - + "දැනුම්දීම්" "මෙම මුල් පිටු තිරය මත තවත් අවසර නැත." "ප්‍රියතම දෑ ඇති තැටියේ තවත් ඉඩ නොමැත" "යෙදුම් ලැයිස්තුව" @@ -92,6 +91,7 @@ "මෙම නිරුපකයට යෙදුම ස්ථාපනය කර නොමැත. ඔබට එය ඉවත් කළ හැක, හෝ යෙදුම් සඳහා සොයන්න සහ අතින් ස්ථාපනය කරන්න." "%1$s බාගත කරමින්, %2$s සම්පූර්ණයි" "%1$s ස්ථාපනය කිරීමට බලා සිටිමින්" + "%1$s විජට්" "මුල් තිරය වෙත එක් කරන්න" "මෙතනට අයිතමය ගෙන එන්න" "අයිතමය මුල් තිරය වෙත එකතු කරන ලදි" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 31e024575..dd03fd6f3 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -39,8 +39,7 @@ "Načítavajú sa aplikácie..." "Nenašli sa žiadne aplikácie zodpovedajúce dopytu %1$s" "Hľadať ďalšie aplikácie" - - + "Upozornenia" "Na tejto ploche už nie je miesto" "Na paneli Obľúbené položky už nie je miesto" "Zoznam aplikácií" @@ -92,6 +91,7 @@ "Aplikácia, ktorú zastupuje táto ikona, nie je nainštalovaná. Ikonu môžete odstrániť alebo vyhľadajte aplikáciu a ručne ju nainštalujte." "Sťahuje sa aplikácia %1$s. Stiahnuté: %2$s" "Aplikácia %1$s čaká na inštaláciu" + "Miniaplikácie %1$s" "Pridať na plochu" "Presunúť položku sem" "Položka bola pridaná na plochu" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 4175bf540..f8761d2af 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -39,8 +39,7 @@ "Nalaganje aplikacij …" "Ni aplikacij, ki bi ustrezale poizvedbi »%1$s«" "Iskanje več aplikacij" - - + "Obvestila" "Na tem začetnem zaslonu ni več prostora." "V vrstici za priljubljene ni več prostora" "Seznam aplikacij" @@ -92,6 +91,7 @@ "Aplikacija za to ikono ni nameščena. Lahko jo odstranite ali poiščete aplikacijo in to namestite ročno." "Prenašanje aplikacije %1$s; preneseno %2$s" "Aplikacija %1$s čaka na namestitev" + "Pripomočki za %1$s" "Dodajanje na začetni zaslon" "Premik elementa sem" "Element je bil dodan na začetni zaslon" diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml index d24f6ca3c..2b656840d 100644 --- a/res/values-sq-rAL/strings.xml +++ b/res/values-sq-rAL/strings.xml @@ -39,8 +39,7 @@ "Po ngarkon aplikacionet..." "Nuk u gjet asnjë aplikacion që përputhet me \"%1$s\"" "Kërko për më shumë aplikacione" - - + "Njoftimet" "Nuk ka më hapësirë në këtë ekran bazë." "Nuk ka më hapësirë në tabakanë \"Të preferuarat\"" "Lista e aplikacioneve" @@ -92,6 +91,7 @@ "Aplikacioni për këtë ikonë nuk është i instaluar. Mund ta heqësh ose të kërkosh aplikacionin dhe ta instalosh atë në mënyrë manuale." "%1$s po shkarkohet, %2$s të përfunduara" "%1$s po pret të instalohet" + "Miniaplikacionet e %1$s" "Shto në Ekranin bazë" "Zhvendose artikullin këtu" "Artikulli u shtua tek ekrani bazë" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index df6aa429b..ac2114266 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -39,8 +39,7 @@ "Апликације се учитавају..." "Није пронађена ниједна апликација за „%1$s“" "Претражи још апликација" - - + "Обавештења" "Нема више простора на овом почетном екрану." "Нема више простора на траци Омиљено" "Листа апликација" @@ -92,6 +91,7 @@ "Апликација за ову икону није инсталирана. Можете да је уклоните или да потражите апликацију и инсталирате је ручно." "%1$s се преузима, завршено је %2$s" "%1$s чека на инсталирање" + "Виџети за %1$s" "Додај на почетни екран" "Премести ставку овде" "Ставка је додата на почетни екран" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index f7cde8301..7d6e05369 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -39,8 +39,7 @@ "Läser in appar …" "Det gick inte att hitta några appar som matchar %1$s" "Sök efter fler appar" - - + "Aviseringar" "Det finns inte plats för mer på den här startskärmen." "Favoritfältet är fullt" "Applista" @@ -92,6 +91,7 @@ "Appen för den här ikonen har inte installerats. Du kan ta bort den eller söka efter appen och installera den manuellt." "%1$s laddas ned, %2$s klart" "%1$s väntar på installation" + "%1$s widgetar" "Lägg till på startskärmen" "Flytta objekt hit" "Objektet har lagts till på startskärmen" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index dc8fb76a6..62e338534 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -39,8 +39,7 @@ "Inapakia Programu..." "Haikupata programu zinazolingana na \"%1$s\"" "Tafuta programu zaidi" - - + "Arifa" "Hakuna nafasi katika skrini hii ya Mwanzo." "Hakuna nafasi zaidi katika treya ya Vipendeleo" "Orodha ya programu" @@ -94,6 +93,7 @@ "Programu ya ikoni hii haijasakinishwa. Unaweza kuiondoa, au utafute programu na uisakinishe wewe mwenyewe." "%1$s inapakuliwa, %2$s imekamilika" "%1$s inasubiri kusakinisha" + "Wijeti za %1$s" "Ongeza kwenye skrini ya Kwanza" "Hamishia kipengee hapa" "Kipengee kimeongezwa kwenye skrini ya kwanza" diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml index 43716ae86..a1e00a11d 100644 --- a/res/values-ta-rIN/strings.xml +++ b/res/values-ta-rIN/strings.xml @@ -39,8 +39,7 @@ "பயன்பாடுகளை ஏற்றுகிறது..." "\"%1$s\" உடன் பொருந்தும் பயன்பாடுகள் இல்லை" "கூடுதல் பயன்பாடுகளைத் தேடு" - - + "அறிவிப்புகள்" "முகப்புத் திரையில் இடமில்லை." "பிடித்தவை ட்ரேயில் இடமில்லை" "பயன்பாடுகளின் பட்டியல்" @@ -92,6 +91,7 @@ "ஐகானுக்கான பயன்பாடு நிறுவப்படவில்லை. இதை அகற்றலாம் அல்லது பயன்பாட்டைத் தேடி கைமுறையாக நிறுவலாம்." "%1$sஐப் பதிவிறக்குகிறது, %2$s முடிந்தது" "%1$sஐ நிறுவுவதற்காகக் காத்திருக்கிறது" + "%1$s விட்ஜெட்டுகள்" "முகப்புத் திரையில் சேர்" "இங்கு நகர்த்து" "முகப்புத் திரையில் சேர்க்கப்பட்டது" diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml index 0fb731a8f..65ca92775 100644 --- a/res/values-te-rIN/strings.xml +++ b/res/values-te-rIN/strings.xml @@ -39,8 +39,7 @@ "అనువర్తనాలను లోడ్ చేస్తోంది…" "\"%1$s\"కి సరిపోలే అనువర్తనాలేవీ కనుగొనబడలేదు" "మరిన్ని అనువర్తనాల కోసం శోధించు" - - + "నోటిఫికేషన్‌లు" "ఈ హోమ్ స్క్రీన్‌లో ఖాళీ లేదు." "ఇష్టమైనవి ట్రేలో ఖాళీ లేదు" "అనువర్తనాల జాబితా" @@ -89,6 +88,7 @@ "ఈ చిహ్నం యొక్క అనువర్తనం ఇన్‌స్టాల్ చేయబడలేదు. మీరు దీన్ని తీసివేయవచ్చు లేదా ఆ అనువర్తనం కోసం శోధించి దాన్ని మాన్యువల్‌గా ఇన్‌స్టాల్ చేయవచ్చు." "%1$s డౌన్‌లోడ్ అవుతోంది, %2$s పూర్తయింది" "%1$s ఇన్‌స్టాల్ కావడానికి వేచి ఉంది" + "%1$s విడ్జెట్‌లు" "హోమ్ స్క్రీన్‌కు జోడించు" "అంశాన్ని ఇక్కడికి తరలించు" "అంశం హోమ్‌స్క్రీన్‌కి జోడించబడింది" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index fc38f5a45..fb7b58715 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -39,8 +39,7 @@ "กำลังโหลดแอป…" "ไม่พบแอปที่ตรงกับ \"%1$s\"" "ค้นหาแอปเพิ่มเติม" - - + "การแจ้งเตือน" "ไม่มีที่ว่างในหน้าจอหลักนี้" "ไม่มีพื้นที่เหลือในถาดรายการโปรด" "รายชื่อแอป" @@ -92,6 +91,7 @@ "ยังไม่ได้ติดตั้งแอปสำหรับไอคอนนี้ คุณสามารถนำไอคอนออก หรือค้นหาแอปดังกล่าวแล้วติดตั้งด้วยตนเอง" "กำลังดาวน์โหลด %1$s เสร็จแล้ว %2$s" "%1$s กำลังรอติดตั้ง" + "วิดเจ็ตของ %1$s" "เพิ่มลงในหน้าแรก" "ย้ายรายการมาที่นี่" "เพิ่มรายการไปยังหน้าจอหลักแล้ว" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 6e6e5eec0..d18bd1e97 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -39,8 +39,7 @@ "Nilo-load ang Mga App…" "Walang nakitang Mga App na tumutugma sa \"%1$s\"" "Maghanap ng higit pang mga app" - - + "Mga Notification" "Wala nang lugar sa Home screen na ito." "Wala nang lugar sa tray ng Mga Paborito" "Listahan ng mga app" @@ -92,6 +91,7 @@ "Hindi naka-install ang app para sa icon na ito. Maaari mo itong alisin, o maaari mong hanapin ang app at i-install ito nang manu-mano." "Dina-download na ang %1$s, tapos na ang %2$s" "Hinihintay nang mag-install ang %1$s" + "Mga widget ng %1$s" "Idagdag sa Home screen" "Ilipat ang item dito" "Naidagdag sa home screen ang item" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index c478d4ad1..eb36a18e9 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -39,8 +39,7 @@ "Uygulamalar Yükleniyor…" "\"%1$s\" ile eşleşen uygulama bulunamadı" "Başka uygulamalar ara" - - + "Bildirimler" "Bu Ana ekranda yer kalmadı." "Favoriler tepsisinde başka yer kalmadı" "Uygulamalar listesi" @@ -92,6 +91,7 @@ "Bu simgenin uygulaması yüklü değil. Uygulamayı kaldırabilir veya arayıp manuel olarak yükleyebilirsiniz." "%1$s indiriliyor, %2$s tamamlandı" "%1$s uygulaması yüklenmek için bekliyor" + "%1$s widget\'ları" "Ana ekrana ekle" "Öğeyi buraya taşı" "Öğe ana ekrana eklendi" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 11b6c31d2..8679628c2 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -39,8 +39,7 @@ "Завантаження додатків…" "Немає додатків для запиту \"%1$s\"" "Шукати ще додатки" - - + "Сповіщення" "На цьому головному екрані більше немає місця." "В області \"Вибране\" немає місця" "Список додатків" @@ -92,6 +91,7 @@ "Додаток для цього значка не встановлено. Можна видалити значок або знайти додаток і встановити його вручну." "%1$s завантажується, %2$s" "%1$s очікує на завантаження" + "Віджети додатка %1$s" "Додати на головний екран" "Перемістити елемент сюди" "Елемент додано на головний екран" diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index a394f7f8a..29d1cd53c 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -39,8 +39,7 @@ "ایپس لوڈ ہو رہی ہیں…" "\"%1$s\" سے مماثل کوئی ایپس نہیں ملیں" "مزید ایپس تلاش کریں" - - + "اطلاعات" "اس ہوم اسکرین پر مزید کوئی گنجائش نہیں ہے۔" "پسندیدہ ٹرے میں مزید کوئی گنجائش نہیں ہے" "ایپس کی فہرست" @@ -89,6 +88,7 @@ "اس آئیکن کیلئے ایپ انسٹال کردہ نہیں ہے۔ آپ اسے ہٹا سکتے ہیں یا ایپ کو تلاش کر سکتے اور دستی طور پر اسے انسٹال کر سکتے ہیں۔" "%1$s ڈاؤن لوڈ ہو رہا ہے، %2$s مکمل ہو گیا" "%1$s انسٹال ہونے کا انتظار کر رہی ہے" + "%1$s ویجیٹس" "ہوم اسکرین میں شامل کریں" "آئٹم یہاں منتقل کریں" "آئٹم کو ہوم اسکرین میں شامل کر دیا گیا" diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml index 97dd25a50..81be979cc 100644 --- a/res/values-uz-rUZ/strings.xml +++ b/res/values-uz-rUZ/strings.xml @@ -39,8 +39,7 @@ "Ilovalar yuklanmoqda…" "“%1$s” so‘rovi bo‘yicha hech narsa topilmadi" "Boshqa ilovalarni qidirish" - - + "Bildirishnomalar" "Uy ekranida bitta ham xona yo‘q." "Ajratilganlarda birorta ham xona yo‘q" "Ilovalar ro‘yxati" @@ -92,6 +91,7 @@ "Ilova o‘rnatilmagan. Belgini o‘chirib tashlashingiz yoki ilovani topib, uni qo‘lda o‘rnatishingiz mumkin." "%1$s yuklab olinmoqda, %2$s bajarildi" "%1$s ilovasi o‘rnatilishi kutilmoqda" + "%1$s vidjetlari" "Bosh ekranga qo‘shish" "Obyektni bu yerga ko‘chirish" "Obyekt bosh ekranga qo‘shildi" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index df479cb34..5fc9542d1 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -39,8 +39,7 @@ "Đang tải ứng dụng..." "Không tìm thấy ứng dụng nào phù hợp với \"%1$s\"" "Tìm kiếm thêm ứng dụng" - - + "Thông báo" "Không còn chỗ trên Màn hình chính này." "Không còn chỗ trong khay Mục yêu thích" "Danh sách ứng dụng" @@ -92,6 +91,7 @@ "Ứng dụng cho biểu tượng này chưa được cài đặt. Bạn có thể xóa ứng dụng hoặc tìm kiếm và cài đặt ứng dụng theo cách thủ công." "Đang tải xuống %1$s, %2$s hoàn tất" "Đang chờ cài đặt %1$s" + "Tiện ích của %1$s" "Thêm vào màn hình chính" "Di chuyển mục vào đây" "Đã thêm mục vào màn hình chính" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 0210f045c..31fae4fa0 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -39,8 +39,7 @@ "正在加载应用…" "未找到与“%1$s”相符的应用" "搜索更多应用" - - + "通知" "此主屏幕上已没有空间。" "收藏栏已满" "应用列表" @@ -92,6 +91,7 @@ "未安装此图标对应的应用。您可以移除此图标,也可以尝试搜索相应的应用并手动安装。" "正在下载%1$s,已完成 %2$s" "%1$s正在等待安装" + "%1$s微件" "添加到主屏幕" "将项目移至此处" "已将项目添加到主屏幕" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 28b9c40f1..867c350eb 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -39,8 +39,7 @@ "正在載入應用程式…" "無法找到與「%1$s」相符的應用程式" "搜尋更多應用程式" - - + "通知" "主畫面已無空間。" "我的收藏寄存區沒有足夠空間" "應用程式清單" @@ -92,6 +91,7 @@ "您尚未安裝這個圖示代表的應用程式。您可以移除這個圖示,也可以搜尋該應用程式並手動安裝。" "正在下載 %1$s,已完成 %2$s" "正在等待安裝 %1$s" + "%1$s小工具" "新增至主畫面" "移動項目至這裡" "已將項目加入至主畫面" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 4231cda41..83c58dae1 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -39,8 +39,7 @@ "正在載入應用程式…" "找不到符合「%1$s」的應用程式" "搜尋更多應用程式" - - + "通知" "這個主螢幕已無空間。" "「我的最愛」匣已無可用空間" "應用程式清單" @@ -92,6 +91,7 @@ "您尚未安裝這個圖示代表的應用程式。您可以移除這個圖示,也可以搜尋該應用程式並手動安裝。" "正在下載「%1$s」,已完成 %2$s" "正在等待安裝「%1$s」" + "「%1$s」小工具" "新增至主畫面" "將項目移至這裡" "已將項目新增到主畫面" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index f69229634..aa918b3f2 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -39,8 +39,7 @@ "Ilayisha izinhlelo zokusebenza..." "Azikho izinhlelo zokusebenza ezitholakele ezifana ne-\"%1$s\"" "Sesha izinhlelo zokusebenza eziningi" - - + "Izaziso" "Asisekho isikhala kulesi sikrini Sasekhaya." "Asisekho isikhala kwitreyi lezintandokazi" "Uhlu lwezinhlelo zokusebenza" @@ -92,6 +91,7 @@ "Uhlelo lokusebenza lalesi sithonjana alufakiwe. Ungalisusa, noma sesha uhlelo lokusebenza bese uzifakela lona ngokuzenzela." "I-%1$s iyalandwa, %2$s kuqediwe" "%1$s ilinde ukufakwa" + "%1$s amawijethi" "Faka kusikrini sasekhaya" "Hambisa into lapha" "Into ingezwe kusikrini sasekhaya" diff --git a/res/values/colors.xml b/res/values/colors.xml index 3ce7baae2..f148cf2a5 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -45,5 +45,6 @@ @android:color/tertiary_text_light + #FFFFFF #E0E0E0 diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java index 924b79be0..2a8397c49 100644 --- a/src/com/android/launcher3/IconCache.java +++ b/src/com/android/launcher3/IconCache.java @@ -767,7 +767,7 @@ public class IconCache { } private static final class IconDB extends SQLiteCacheHelper { - private final static int DB_VERSION = 11; + private final static int DB_VERSION = 12; private final static int RELEASE_VERSION = DB_VERSION + (FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION ? 0 : 1); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index f8c591c13..5bde8393d 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -732,6 +732,16 @@ public class LauncherModel extends BroadcastReceiver if (DEBUG_LOADERS) Log.d(TAG, "step 3.2: bind deep shortcuts"); bindDeepShortcuts(); + // Take a break + if (DEBUG_LOADERS) Log.d(TAG, "step 3 completed, wait for idle"); + waitForIdle(); + verifyNotStopped(); + + // fourth step + if (DEBUG_LOADERS) Log.d(TAG, "step 4.1: loading widgets"); + refreshAndBindWidgetsAndShortcuts(getCallback(), false /* bindFirst */, + null /* packageUser */); + synchronized (mLock) { // Everything loaded bind the data. mModelLoaded = true; @@ -1249,6 +1259,10 @@ public class LauncherModel extends BroadcastReceiver sBgDataModel.folders.remove(folderId); sBgDataModel.itemsIdMap.remove(folderId); } + + // Remove any ghost widgets + LauncherSettings.Settings.call(contentResolver, + LauncherSettings.Settings.METHOD_REMOVE_GHOST_WIDGETS); } // Unpin shortcuts that don't exist on the workspace. diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 630274469..7d85ac1f9 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -47,7 +47,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import android.util.Log; -import android.view.ViewGroup; import com.android.launcher3.AutoInstallsLayout.LayoutParserCallback; import com.android.launcher3.LauncherSettings.Favorites; @@ -67,10 +66,11 @@ import com.android.launcher3.util.Thunk; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.lang.reflect.Method; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; -import java.util.Locale; +import java.util.HashSet; public class LauncherProvider extends ContentProvider { private static final String TAG = "LauncherProvider"; @@ -85,7 +85,7 @@ public class LauncherProvider extends ContentProvider { * overtime. These must be backwards compatible, else we risk breaking old devices during * restore or binary version downgrade. */ - private static final int DATA_VERSION = 2; + private static final int DATA_VERSION = 3; private static final String PREF_KEY_DATA_VERISON = "provider_data_version"; @@ -262,10 +262,11 @@ public class LauncherProvider extends ContentProvider { if (cn != null) { try { - int appWidgetId = new AppWidgetHost(getContext(), Launcher.APPWIDGET_HOST_ID) - .allocateAppWidgetId(); + AppWidgetHost widgetHost = mOpenHelper.newLauncherWidgetHost(); + int appWidgetId = widgetHost.allocateAppWidgetId(); values.put(LauncherSettings.Favorites.APPWIDGET_ID, appWidgetId); if (!appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId,cn)) { + widgetHost.deleteAppWidgetId(appWidgetId); return false; } } catch (RuntimeException e) { @@ -347,23 +348,7 @@ public class LauncherProvider extends ContentProvider { if (Binder.getCallingPid() != Process.myPid() && Favorites.TABLE_NAME.equalsIgnoreCase(args.table)) { - String widgetSelection = TextUtils.isEmpty(args.where) ? "1=1" : args.where; - widgetSelection = String.format(Locale.ENGLISH, "%1$s = %2$d AND ( %3$s )", - Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_APPWIDGET, widgetSelection); - try (Cursor c = db.query(Favorites.TABLE_NAME, new String[] { Favorites.APPWIDGET_ID }, - widgetSelection, args.args, null, null, null)) { - AppWidgetHost host = new AppWidgetHost(getContext(), Launcher.APPWIDGET_HOST_ID); - while (c.moveToNext()) { - int widgetId = c.getInt(0); - if (widgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { - try { - host.deleteAppWidgetId(widgetId); - } catch (RuntimeException e) { - Log.e(TAG, "Error deleting widget id " + widgetId, e); - } - } - } - } + mOpenHelper.removeGhostWidgets(mOpenHelper.getWritableDatabase()); } int count = db.delete(args.table, args.where, args.args); if (count > 0) { @@ -441,6 +426,10 @@ public class LauncherProvider extends ContentProvider { loadDefaultFavoritesIfNecessary(); return null; } + case LauncherSettings.Settings.METHOD_REMOVE_GHOST_WIDGETS: { + mOpenHelper.removeGhostWidgets(mOpenHelper.getWritableDatabase()); + return null; + } } return null; } @@ -509,7 +498,7 @@ public class LauncherProvider extends ContentProvider { if (sp.getBoolean(EMPTY_DATABASE_CREATED, false)) { Log.d(TAG, "loading default workspace"); - AppWidgetHost widgetHost = new AppWidgetHost(getContext(), Launcher.APPWIDGET_HOST_ID); + AppWidgetHost widgetHost = mOpenHelper.newLauncherWidgetHost(); AutoInstallsLayout loader = createWorkspaceLoaderFromAppRestriction(widgetHost); if (loader == null) { loader = AutoInstallsLayout.get(getContext(),widgetHost, mOpenHelper); @@ -659,7 +648,7 @@ public class LauncherProvider extends ContentProvider { protected void onEmptyDbCreated() { // Database was just created, so wipe any previous widgets if (mWidgetHostResetHandler != null) { - new AppWidgetHost(mContext, Launcher.APPWIDGET_HOST_ID).deleteHost(); + newLauncherWidgetHost().deleteHost(); mWidgetHostResetHandler.sendEmptyMessage( ChangeListenerWrapper.MSG_APP_WIDGET_HOST_RESET); } @@ -765,6 +754,8 @@ public class LauncherProvider extends ContentProvider { } } case 2: + removeGhostWidgets(db); + case 3: // data updated return; } @@ -906,6 +897,47 @@ public class LauncherProvider extends ContentProvider { } /** + * Removes widgets which are registered to the Launcher's host, but are not present + * in our model. + */ + public void removeGhostWidgets(SQLiteDatabase db) { + // Get all existing widget ids. + final AppWidgetHost host = newLauncherWidgetHost(); + final int[] allWidgets; + try { + Method getter = AppWidgetHost.class.getDeclaredMethod("getAppWidgetIds"); + getter.setAccessible(true); + allWidgets = (int[]) getter.invoke(host); + } catch (Exception e) { + Log.e(TAG, "getAppWidgetIds not supported", e); + return; + } + try { + Cursor c = db.query(Favorites.TABLE_NAME, + new String[] {Favorites.APPWIDGET_ID }, + "itemType=" + Favorites.ITEM_TYPE_APPWIDGET, null, null, null, null); + HashSet validWidgets = new HashSet<>(); + while (c.moveToNext()) { + validWidgets.add(c.getInt(0)); + } + c.close(); + + for (int widgetId : allWidgets) { + if (!validWidgets.contains(widgetId)) { + try { + FileLog.d(TAG, "Deleting invalid widget " + widgetId); + host.deleteAppWidgetId(widgetId); + } catch (RuntimeException e) { + // Ignore + } + } + } + } catch (SQLException ex) { + Log.w(TAG, "Error getting widgets list", ex); + } + } + + /** * Replaces all shortcuts of type {@link Favorites#ITEM_TYPE_SHORTCUT} which have a valid * launcher activity target with {@link Favorites#ITEM_TYPE_APPLICATION}. */ @@ -1074,6 +1106,10 @@ public class LauncherProvider extends ContentProvider { return mMaxItemId; } + public AppWidgetHost newLauncherWidgetHost() { + return new AppWidgetHost(mContext, Launcher.APPWIDGET_HOST_ID); + } + @Override public long insertAndCheck(SQLiteDatabase db, ContentValues values) { return dbInsertAndCheck(this, db, Favorites.TABLE_NAME, null, values); diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index af2c10275..b25b256af 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -299,6 +299,8 @@ public class LauncherSettings { public static final String EXTRA_EXTRACTED_COLORS = "extra_extractedColors"; public static final String EXTRA_WALLPAPER_ID = "extra_wallpaperId"; + public static final String METHOD_REMOVE_GHOST_WIDGETS = "remove_ghost_widgets"; + public static final String EXTRA_VALUE = "value"; public static Bundle call(ContentResolver cr, String method) { diff --git a/src/com/android/launcher3/dragndrop/PinItemDragListener.java b/src/com/android/launcher3/dragndrop/PinItemDragListener.java index 4b402f4ac..df0c47cc4 100644 --- a/src/com/android/launcher3/dragndrop/PinItemDragListener.java +++ b/src/com/android/launcher3/dragndrop/PinItemDragListener.java @@ -236,6 +236,10 @@ public class PinItemDragListener mLauncher.exitSpringLoadedDragModeDelayed(true, Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT, null); } + + if (!success) { + d.deferDragViewCleanupPostAnimation = false; + } postCleanup(); } diff --git a/src/com/android/launcher3/graphics/FixedScaleDrawable.java b/src/com/android/launcher3/graphics/FixedScaleDrawable.java index 4be4bd552..7ee3d8002 100644 --- a/src/com/android/launcher3/graphics/FixedScaleDrawable.java +++ b/src/com/android/launcher3/graphics/FixedScaleDrawable.java @@ -19,15 +19,17 @@ public class FixedScaleDrawable extends DrawableWrapper { // TODO b/33553066 use the constant defined in MaskableIconDrawable private static final float LEGACY_ICON_SCALE = .7f * .6667f; + private float mScale; public FixedScaleDrawable() { super(new ColorDrawable()); + mScale = LEGACY_ICON_SCALE; } @Override public void draw(Canvas canvas) { int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG); - canvas.scale(LEGACY_ICON_SCALE, LEGACY_ICON_SCALE, + canvas.scale(mScale, mScale, getBounds().exactCenterX(), getBounds().exactCenterY()); super.draw(canvas); canvas.restoreToCount(saveCount); @@ -38,4 +40,8 @@ public class FixedScaleDrawable extends DrawableWrapper { @Override public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme) { } + + public void setScale(float scale) { + mScale = scale * LEGACY_ICON_SCALE; + } } diff --git a/src/com/android/launcher3/graphics/IconNormalizer.java b/src/com/android/launcher3/graphics/IconNormalizer.java index 70b3dd6c9..34d0b727c 100644 --- a/src/com/android/launcher3/graphics/IconNormalizer.java +++ b/src/com/android/launcher3/graphics/IconNormalizer.java @@ -20,15 +20,31 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; import android.graphics.RectF; +import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.Log; import com.android.launcher3.LauncherAppState; +import com.android.launcher3.Utilities; +import java.io.File; +import java.io.FileOutputStream; import java.nio.ByteBuffer; +import java.util.Random; public class IconNormalizer { + private static final String TAG = "IconNormalizer"; + private static final boolean DEBUG = false; // Ratio of icon visible area to full icon size for a square shaped icon private static final float MAX_SQUARE_AREA_FACTOR = 375.0f / 576; // Ratio of icon visible area to full icon size for a circular shaped icon @@ -42,17 +58,38 @@ public class IconNormalizer { private static final int MIN_VISIBLE_ALPHA = 40; + // Shape detection related constants + private static final float BOUND_RATIO_MARGIN = .05f; + private static final float PIXEL_DIFF_PERCENTAGE_THRESHOLD = 0.005f; + private static final float SCALE_NOT_INITIALIZED = 0; + private static final Object LOCK = new Object(); private static IconNormalizer sIconNormalizer; private final int mMaxSize; private final Bitmap mBitmap; + private final Bitmap mBitmapARGB; private final Canvas mCanvas; + private final Paint mPaintMaskShape; + private final Paint mPaintMaskShapeOutline; private final byte[] mPixels; + private final int[] mPixelsARGB; + + private final Rect mAdaptiveIconBounds; + private float mAdaptiveIconScale; // for each y, stores the position of the leftmost x and the rightmost x private final float[] mLeftBorder; private final float[] mRightBorder; + private final Rect mBounds; + private final Matrix mMatrix; + + private Paint mPaintIcon; + private Canvas mCanvasARGB; + + private File mDir; + private int mFileId; + private Random mRandom; private IconNormalizer(Context context) { // Use twice the icon size as maximum size to avoid scaling down twice. @@ -60,9 +97,122 @@ public class IconNormalizer { mBitmap = Bitmap.createBitmap(mMaxSize, mMaxSize, Bitmap.Config.ALPHA_8); mCanvas = new Canvas(mBitmap); mPixels = new byte[mMaxSize * mMaxSize]; - + mPixelsARGB = new int[mMaxSize * mMaxSize]; mLeftBorder = new float[mMaxSize]; mRightBorder = new float[mMaxSize]; + mBounds = new Rect(); + mAdaptiveIconBounds = new Rect(); + + // Needed for isShape() method + mBitmapARGB = Bitmap.createBitmap(mMaxSize, mMaxSize, Bitmap.Config.ARGB_8888); + mCanvasARGB = new Canvas(mBitmapARGB); + + mPaintIcon = new Paint(); + mPaintIcon.setColor(Color.WHITE); + + mPaintMaskShape = new Paint(); + mPaintMaskShape.setColor(Color.RED); + mPaintMaskShape.setStyle(Paint.Style.FILL); + mPaintMaskShape.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)); + + mPaintMaskShapeOutline = new Paint(); + mPaintMaskShapeOutline.setStrokeWidth(2 * context.getResources().getDisplayMetrics().density); + mPaintMaskShapeOutline.setStyle(Paint.Style.STROKE); + mPaintMaskShapeOutline.setColor(Color.BLACK); + mPaintMaskShapeOutline.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); + + mMatrix = new Matrix(); + int[] mPixels = new int[mMaxSize * mMaxSize]; + mAdaptiveIconScale = SCALE_NOT_INITIALIZED; + + mDir = context.getExternalFilesDir(null); + mRandom = new Random(); + } + + /** + * Returns if the shape of the icon is same as the path. + * For this method to work, the shape path bounds should be in [0,1]x[0,1] bounds. + */ + private boolean isShape(Path maskPath) { + // Condition1: + // If width and height of the path not close to a square, then the icon shape is + // not same as the mask shape. + float iconRatio = ((float) mBounds.width()) / mBounds.height(); + if (Math.abs(iconRatio - 1) > BOUND_RATIO_MARGIN) { + if (DEBUG) { + Log.d(TAG, "Not same as mask shape because width != height. " + iconRatio); + } + return false; + } + + // Condition 2: + // Actual icon (white) and the fitted shape (e.g., circle)(red) XOR operation + // should generate transparent image, if the actual icon is equivalent to the shape. + mFileId = mRandom.nextInt(); + mBitmapARGB.eraseColor(Color.TRANSPARENT); + mCanvasARGB.drawBitmap(mBitmap, 0, 0, mPaintIcon); + + if (DEBUG) { + final File beforeFile = new File(mDir, "isShape" + mFileId + "_before.png"); + try { + mBitmapARGB.compress(Bitmap.CompressFormat.PNG, 100, + new FileOutputStream(beforeFile)); + } catch (Exception e) {} + } + + // Fit the shape within the icon's bounding box + mMatrix.reset(); + mMatrix.setScale(mBounds.width(), mBounds.height()); + mMatrix.postTranslate(mBounds.left, mBounds.top); + maskPath.transform(mMatrix); + + // XOR operation + mCanvasARGB.drawPath(maskPath, mPaintMaskShape); + + // DST_OUT operation around the mask path outline + mCanvasARGB.drawPath(maskPath, mPaintMaskShapeOutline); + + boolean isTrans = isTransparentBitmap(mBitmapARGB); + if (DEBUG) { + final File afterFile = new File(mDir, "isShape" + mFileId + "_after_" + isTrans + ".png"); + try { + mBitmapARGB.compress(Bitmap.CompressFormat.PNG, 100, + new FileOutputStream(afterFile)); + } catch (Exception e) {} + } + + // Check if the result is almost transparent + if (!isTrans) { + if (DEBUG) { + Log.d(TAG, "Not same as mask shape"); + } + return false; + } + return true; + } + + /** + * Used to determine if certain the bitmap is transparent. + */ + private boolean isTransparentBitmap(Bitmap bitmap) { + int w = mBounds.width(); + int h = mBounds.height(); + bitmap.getPixels(mPixelsARGB, 0 /* the first index to write into the array */, + w /* stride */, + mBounds.left, mBounds.top, + w, h); + int sum = 0; + for (int i = 0; i < w * h; i++) { + if(Color.alpha(mPixelsARGB[i]) > MIN_VISIBLE_ALPHA) { + sum++; + } + } + float percentageDiffPixels = ((float) sum) / (mBounds.width() * mBounds.height()); + boolean transparentImage = percentageDiffPixels < PIXEL_DIFF_PERCENTAGE_THRESHOLD; + if (DEBUG) { + Log.d(TAG, "Total # pixel that is different (id="+ mFileId + "):" + percentageDiffPixels + "="+ sum + "/" + mBounds.width() * mBounds.height()); + } + return transparentImage; } /** @@ -79,7 +229,15 @@ public class IconNormalizer { * * @param outBounds optional rect to receive the fraction distance from each edge. */ - public synchronized float getScale(Drawable d, RectF outBounds) { + public synchronized float getScale(@NonNull Drawable d, @Nullable RectF outBounds, + @Nullable Path path, @Nullable boolean[] outMaskShape) { + if (Utilities.isAtLeastO() && d instanceof AdaptiveIconDrawable && + mAdaptiveIconScale != SCALE_NOT_INITIALIZED) { + if (outBounds != null) { + outBounds.set(mAdaptiveIconBounds); + } + return mAdaptiveIconScale; + } int width = d.getIntrinsicWidth(); int height = d.getIntrinsicHeight(); if (width <= 0 || height <= 0) { @@ -169,20 +327,31 @@ public class IconNormalizer { if (hullByRect < CIRCLE_AREA_BY_RECT) { scaleRequired = MAX_CIRCLE_AREA_FACTOR; } else { - scaleRequired = MAX_SQUARE_AREA_FACTOR + LINEAR_SCALE_SLOPE * (1 - hullByRect); + scaleRequired = MAX_SQUARE_AREA_FACTOR + LINEAR_SCALE_SLOPE * (1 - hullByRect); } + mBounds.left = leftX; + mBounds.right = rightX; - if (outBounds != null) { - outBounds.left = ((float) leftX) / width; - outBounds.right = 1 - ((float) rightX) / width; + mBounds.top = topY; + mBounds.bottom = bottomY; - outBounds.top = ((float) topY) / height; - outBounds.bottom = 1 - ((float) bottomY) / height; + if (outBounds != null) { + outBounds.set(((float) mBounds.left) / width, ((float) mBounds.top), + 1 - ((float) mBounds.right) / width, + 1 - ((float) mBounds.bottom) / height); } + if (outMaskShape != null && outMaskShape.length > 0) { + outMaskShape[0] = isShape(path); + } float areaScale = area / (width * height); // Use sqrt of the final ratio as the images is scaled across both width and height. float scale = areaScale > scaleRequired ? (float) Math.sqrt(scaleRequired / areaScale) : 1; + if (Utilities.isAtLeastO() && d instanceof AdaptiveIconDrawable && + mAdaptiveIconScale == SCALE_NOT_INITIALIZED) { + mAdaptiveIconScale = scale; + mAdaptiveIconBounds.set(mBounds); + } return scale; } diff --git a/src/com/android/launcher3/graphics/LauncherIcons.java b/src/com/android/launcher3/graphics/LauncherIcons.java index 2d987cc4a..f652a5c15 100644 --- a/src/com/android/launcher3/graphics/LauncherIcons.java +++ b/src/com/android/launcher3/graphics/LauncherIcons.java @@ -95,8 +95,29 @@ public class LauncherIcons { */ public static Bitmap createBadgedIconBitmap( Drawable icon, UserHandle user, Context context) { - float scale = FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION ? - 1 : IconNormalizer.getInstance(context).getScale(icon, null); + + IconNormalizer normalizer; + float scale = 1f; + if (!FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION) { + normalizer = IconNormalizer.getInstance(context); + if (Utilities.isAtLeastO()) { + boolean[] outShape = new boolean[1]; + AdaptiveIconDrawable dr = (AdaptiveIconDrawable) + context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate(); + dr.setBounds(0, 0, 1, 1); + scale = normalizer.getScale(icon, null, dr.getIconMask(), outShape); + if (FeatureFlags.LEGACY_ICON_TREATMENT && + !outShape[0]){ + Drawable wrappedIcon = wrapToAdaptiveIconDrawable(context, icon, scale); + if (wrappedIcon != icon) { + icon = wrappedIcon; + scale = normalizer.getScale(icon, null, null, null); + } + } + } else { + scale = normalizer.getScale(icon, null, null, null); + } + } Bitmap bitmap = createIconBitmap(icon, context, scale); if (FeatureFlags.ADAPTIVE_ICON_SHADOW && Utilities.isAtLeastO() && icon instanceof AdaptiveIconDrawable) { @@ -129,8 +150,29 @@ public class LauncherIcons { */ public static Bitmap createScaledBitmapWithoutShadow(Drawable icon, Context context) { RectF iconBounds = new RectF(); - float scale = FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION ? - 1 : IconNormalizer.getInstance(context).getScale(icon, iconBounds); + IconNormalizer normalizer; + float scale = 1f; + if (!FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION) { + normalizer = IconNormalizer.getInstance(context); + if (Utilities.isAtLeastO()) { + boolean[] outShape = new boolean[1]; + AdaptiveIconDrawable dr = (AdaptiveIconDrawable) + context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate(); + dr.setBounds(0, 0, 1, 1); + scale = normalizer.getScale(icon, iconBounds, dr.getIconMask(), outShape); + if (Utilities.isAtLeastO() && FeatureFlags.LEGACY_ICON_TREATMENT && + !outShape[0]) { + Drawable wrappedIcon = wrapToAdaptiveIconDrawable(context, icon, scale); + if (wrappedIcon != icon) { + icon = wrappedIcon; + scale = normalizer.getScale(icon, iconBounds, null, null); + } + } + } else { + scale = normalizer.getScale(icon, iconBounds, null, null); + } + + } scale = Math.min(scale, ShadowGenerator.getScaleForBounds(iconBounds)); return createIconBitmap(icon, context, scale); } @@ -180,10 +222,8 @@ public class LauncherIcons { * @param scale the scale to apply before drawing {@param icon} on the canvas */ public static Bitmap createIconBitmap(Drawable icon, Context context, float scale) { - icon = wrapToAdaptiveIconDrawable(context, icon); synchronized (sCanvas) { final int iconBitmapSize = LauncherAppState.getIDP(context).iconBitmapSize; - int width = iconBitmapSize; int height = iconBitmapSize; @@ -242,7 +282,7 @@ public class LauncherIcons { * shrink the legacy icon and set it as foreground. Use color drawable as background to * create AdaptiveIconDrawable. */ - static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable) { + static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable, float scale) { if (!(FeatureFlags.LEGACY_ICON_TREATMENT && Utilities.isAtLeastO())) { return drawable; } @@ -252,8 +292,10 @@ public class LauncherIcons { if (!clazz.isAssignableFrom(drawable.getClass())) { Drawable iconWrapper = context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate(); - ((FixedScaleDrawable) clazz.getMethod("getForeground").invoke(iconWrapper)) - .setDrawable(drawable); + FixedScaleDrawable fsd = ((FixedScaleDrawable) clazz.getMethod("getForeground") + .invoke(iconWrapper)); + fsd.setDrawable(drawable); + fsd.setScale(scale); return iconWrapper; } diff --git a/src/com/android/launcher3/logging/DumpTargetWrapper.java b/src/com/android/launcher3/logging/DumpTargetWrapper.java index 2646a2242..365e8f21e 100644 --- a/src/com/android/launcher3/logging/DumpTargetWrapper.java +++ b/src/com/android/launcher3/logging/DumpTargetWrapper.java @@ -19,6 +19,7 @@ import android.os.Process; import android.text.TextUtils; import com.android.launcher3.ItemInfo; +import com.android.launcher3.LauncherAppWidgetInfo; import com.android.launcher3.LauncherSettings; import com.android.launcher3.model.nano.LauncherDumpProto; import com.android.launcher3.model.nano.LauncherDumpProto.ContainerType; @@ -40,11 +41,6 @@ public class DumpTargetWrapper { children = new ArrayList<>(); } - public DumpTargetWrapper(DumpTarget t) { - this(); - node = t; - } - public DumpTargetWrapper(int containerType, int id) { this(); node = newContainerTarget(containerType, id); @@ -138,7 +134,13 @@ public class DumpTargetWrapper { public DumpTarget writeToDumpTarget(ItemInfo info) { node.component = info.getTargetComponent() == null? "": info.getTargetComponent().flattenToString(); - node.packageName = info.getIntent() == null? "": info.getIntent().getPackage(); + node.packageName = info.getTargetComponent() == null? "": + info.getTargetComponent().getPackageName(); + if (info instanceof LauncherAppWidgetInfo) { + node.component = ((LauncherAppWidgetInfo) info).providerName.flattenToString(); + node.packageName = ((LauncherAppWidgetInfo) info).providerName.getPackageName(); + } + node.gridX = info.cellX; node.gridY = info.cellY; node.spanX = info.spanX; diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index ee7186aa4..f03c9c77c 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -44,6 +44,7 @@ import com.android.launcher3.graphics.LauncherIcons; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.ItemInfoMatcher; import com.android.launcher3.util.ManagedProfileHeuristic; +import com.android.launcher3.util.PackageUserKey; import java.util.ArrayList; import java.util.Arrays; @@ -370,6 +371,14 @@ public class PackageUpdatedTask extends ExtendedModelTask { callbacks.notifyWidgetProvidersChanged(); } }); + } else if (Utilities.isAtLeastO() && mOp == OP_ADD) { + // Load widgets for the new package. + for (int i = 0; i < N; i++) { + LauncherModel model = app.getModel(); + model.refreshAndBindWidgetsAndShortcuts( + model.getCallback(), false /* bindFirst */, + new PackageUserKey(packages[i], mUser) /* packageUser */); + } } } } diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index 50597054a..ee64ef9e1 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -146,21 +146,24 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra return null; } - List shortcutIds = launcher.getPopupDataProvider().getShortcutIdsForItem(itemInfo); - List notificationKeys = launcher.getPopupDataProvider() + PopupDataProvider popupDataProvider = launcher.getPopupDataProvider(); + List shortcutIds = popupDataProvider.getShortcutIdsForItem(itemInfo); + List notificationKeys = popupDataProvider .getNotificationKeysForItem(itemInfo); + List systemShortcuts = popupDataProvider + .getEnabledSystemShortcutsForItem(itemInfo); final PopupContainerWithArrow container = (PopupContainerWithArrow) launcher.getLayoutInflater().inflate( R.layout.popup_container, launcher.getDragLayer(), false); container.setVisibility(View.INVISIBLE); launcher.getDragLayer().addView(container); - container.populateAndShow(icon, shortcutIds, notificationKeys); + container.populateAndShow(icon, shortcutIds, notificationKeys, systemShortcuts); return container; } public void populateAndShow(final BubbleTextView originalIcon, final List shortcutIds, - final List notificationKeys) { + final List notificationKeys, List systemShortcuts) { final Resources resources = getResources(); final int arrowWidth = resources.getDimensionPixelSize(R.dimen.popup_arrow_width); final int arrowHeight = resources.getDimensionPixelSize(R.dimen.popup_arrow_height); @@ -171,7 +174,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra // Add dummy views first, and populate with real info when ready. PopupPopulator.Item[] itemsToPopulate = PopupPopulator - .getItemsToPopulate(shortcutIds, notificationKeys); + .getItemsToPopulate(shortcutIds, notificationKeys, systemShortcuts); addDummyViews(originalIcon, itemsToPopulate, notificationKeys.size() > 1); measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); @@ -218,7 +221,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra new Handler(workerLooper).postAtFrontOfQueue(PopupPopulator.createUpdateRunnable( mLauncher, originalItemInfo, new Handler(Looper.getMainLooper()), this, shortcutIds, shortcutViews, notificationKeys, mNotificationItemView, - systemShortcutViews)); + systemShortcuts, systemShortcutViews)); } private void addDummyViews(BubbleTextView originalIcon, @@ -624,12 +627,9 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra @Override protected void onWidgetsBound() { - enableWidgets(); - } - - public boolean enableWidgets() { - return mShortcutsItemView != null && mShortcutsItemView.enableWidgets( - (ItemInfo) mOriginalIcon.getTag()); + if (mShortcutsItemView != null) { + mShortcutsItemView.enableWidgetsIfExist(mOriginalIcon); + } } private ObjectAnimator createArrowScaleAnim(float scale) { diff --git a/src/com/android/launcher3/popup/PopupDataProvider.java b/src/com/android/launcher3/popup/PopupDataProvider.java index c1a9ba1bc..eaceaa959 100644 --- a/src/com/android/launcher3/popup/PopupDataProvider.java +++ b/src/com/android/launcher3/popup/PopupDataProvider.java @@ -33,6 +33,7 @@ import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.PackageUserKey; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -49,7 +50,7 @@ public class PopupDataProvider implements NotificationListener.NotificationsChan private static final String TAG = "PopupDataProvider"; /** Note that these are in order of priority. */ - public static final SystemShortcut[] SYSTEM_SHORTCUTS = new SystemShortcut[] { + private static final SystemShortcut[] SYSTEM_SHORTCUTS = new SystemShortcut[] { new SystemShortcut.AppInfo(), new SystemShortcut.Widgets(), }; @@ -240,6 +241,16 @@ public class PopupDataProvider implements NotificationListener.NotificationsChan : notificationListener.getNotificationsForKeys(notificationKeys); } + public @NonNull List getEnabledSystemShortcutsForItem(ItemInfo info) { + List systemShortcuts = new ArrayList<>(); + for (SystemShortcut systemShortcut : SYSTEM_SHORTCUTS) { + if (systemShortcut.getOnClickListener(mLauncher, info) != null) { + systemShortcuts.add(systemShortcut); + } + } + return systemShortcuts; + } + public void cancelNotification(String notificationKey) { NotificationListener notificationListener = NotificationListener.getInstanceIfConnected(); if (notificationListener == null) { diff --git a/src/com/android/launcher3/popup/PopupPopulator.java b/src/com/android/launcher3/popup/PopupPopulator.java index 112889474..c62d8771a 100644 --- a/src/com/android/launcher3/popup/PopupPopulator.java +++ b/src/com/android/launcher3/popup/PopupPopulator.java @@ -72,7 +72,8 @@ public class PopupPopulator { } public static @NonNull Item[] getItemsToPopulate(@NonNull List shortcutIds, - @NonNull List notificationKeys) { + @NonNull List notificationKeys, + @NonNull List systemShortcuts) { boolean hasNotifications = notificationKeys.size() > 0; int numNotificationItems = hasNotifications ? 1 : 0; int numShortcuts = shortcutIds.size(); @@ -80,7 +81,7 @@ public class PopupPopulator { numShortcuts = MAX_SHORTCUTS_IF_NOTIFICATIONS; } int numItems = Math.min(MAX_ITEMS, numShortcuts + numNotificationItems) - + PopupDataProvider.SYSTEM_SHORTCUTS.length; + + systemShortcuts.size(); Item[] items = new Item[numItems]; for (int i = 0; i < numItems; i++) { items[i] = Item.SHORTCUT; @@ -91,7 +92,7 @@ public class PopupPopulator { } // The system shortcuts are always last. boolean iconsOnly = !shortcutIds.isEmpty(); - for (int i = 0; i < PopupDataProvider.SYSTEM_SHORTCUTS.length; i++) { + for (int i = 0; i < systemShortcuts.size(); i++) { items[numItems - 1 - i] = iconsOnly ? Item.SYSTEM_SHORTCUT_ICON : Item.SYSTEM_SHORTCUT; } return items; @@ -182,7 +183,8 @@ public class PopupPopulator { final Handler uiHandler, final PopupContainerWithArrow container, final List shortcutIds, final List shortcutViews, final List notificationKeys, - final NotificationItemView notificationView, final List systemShortcutViews) { + final NotificationItemView notificationView, final List systemShortcuts, + final List systemShortcutViews) { final ComponentName activity = originalInfo.getTargetComponent(); final UserHandle user = originalInfo.user; return new Runnable() { @@ -217,8 +219,8 @@ public class PopupPopulator { // This ensures that mLauncher.getWidgetsForPackageUser() // doesn't return null (it puts all the widgets in memory). - for (int i = 0; i < PopupDataProvider.SYSTEM_SHORTCUTS.length; i++) { - final SystemShortcut systemShortcut = PopupDataProvider.SYSTEM_SHORTCUTS[i]; + for (int i = 0; i < systemShortcuts.size(); i++) { + final SystemShortcut systemShortcut = systemShortcuts.get(i); uiHandler.post(new UpdateSystemShortcutChild(container, systemShortcutViews.get(i), systemShortcut, launcher, originalInfo)); } @@ -274,7 +276,6 @@ public class PopupPopulator { /** Updates the system shortcut child based on the given shortcut info. */ private static class UpdateSystemShortcutChild implements Runnable { - private static final float DISABLED_ALPHA = 0.38f; private final PopupContainerWithArrow mContainer; private final View mSystemShortcutChild; @@ -294,31 +295,26 @@ public class PopupPopulator { @Override public void run() { final Context context = mSystemShortcutChild.getContext(); - if (mSystemShortcutChild instanceof DeepShortcutView) { - // Expanded system shortcut, with both icon and text shown on white background. - final DeepShortcutView shortcutView = (DeepShortcutView) mSystemShortcutChild; - shortcutView.getIconView().setBackground(mSystemShortcutInfo.getIcon(context, - android.R.attr.textColorTertiary)); - shortcutView.getBubbleText().setText(mSystemShortcutInfo.getLabel(context)); - } else if (mSystemShortcutChild instanceof ImageView) { - // Only the system shortcut icon shows on a gray background header. - final ImageView shortcutIcon = (ImageView) mSystemShortcutChild; - shortcutIcon.setImageDrawable(mSystemShortcutInfo.getIcon(context, - android.R.attr.textColorHint)); - shortcutIcon.setContentDescription(mSystemShortcutInfo.getLabel(context)); - } - if (!(mSystemShortcutInfo instanceof SystemShortcut.Widgets)) { - mSystemShortcutChild.setOnClickListener(mSystemShortcutInfo - .getOnClickListener(mLauncher, mItemInfo)); - } else { - mSystemShortcutChild.setTag(mSystemShortcutInfo); - // Widgets might not be enabled right away. - if (mContainer.enableWidgets()) { - return; - } - // Disable Widgets (we might be able to re-enable when widgets are bound). - mSystemShortcutChild.setAlpha(DISABLED_ALPHA); - } + initializeSystemShortcut(context, mSystemShortcutChild, mSystemShortcutInfo); + mSystemShortcutChild.setOnClickListener(mSystemShortcutInfo + .getOnClickListener(mLauncher, mItemInfo)); + } + } + + public static void initializeSystemShortcut(Context context, View view, SystemShortcut info) { + if (view instanceof DeepShortcutView) { + // Expanded system shortcut, with both icon and text shown on white background. + final DeepShortcutView shortcutView = (DeepShortcutView) view; + shortcutView.getIconView().setBackground(info.getIcon(context, + android.R.attr.textColorTertiary)); + shortcutView.getBubbleText().setText(info.getLabel(context)); + } else if (view instanceof ImageView) { + // Only the system shortcut icon shows on a gray background header. + final ImageView shortcutIcon = (ImageView) view; + shortcutIcon.setImageDrawable(info.getIcon(context, + android.R.attr.textColorHint)); + shortcutIcon.setContentDescription(info.getLabel(context)); } + view.setTag(info); } } diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java index de884996b..e48e349a6 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -31,7 +31,7 @@ public abstract class SystemShortcut { } public Drawable getIcon(Context context, int colorAttr) { - Drawable icon = context.getResources().getDrawable(mIconResId); + Drawable icon = context.getResources().getDrawable(mIconResId, context.getTheme()).mutate(); icon.setTint(Themes.getAttrColor(context, colorAttr)); return icon; } @@ -43,7 +43,6 @@ public abstract class SystemShortcut { public abstract View.OnClickListener getOnClickListener(final Launcher launcher, final ItemInfo itemInfo); - public static class Widgets extends SystemShortcut { public Widgets() { diff --git a/src/com/android/launcher3/shortcuts/ShortcutsItemView.java b/src/com/android/launcher3/shortcuts/ShortcutsItemView.java index 1f90bb023..ee64b984a 100644 --- a/src/com/android/launcher3/shortcuts/ShortcutsItemView.java +++ b/src/com/android/launcher3/shortcuts/ShortcutsItemView.java @@ -26,6 +26,7 @@ import android.view.View; import android.widget.LinearLayout; import com.android.launcher3.AbstractFloatingView; +import com.android.launcher3.BubbleTextView; import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAnimUtils; @@ -119,6 +120,10 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick } public void addShortcutView(View shortcutView, PopupPopulator.Item shortcutType) { + addShortcutView(shortcutView, shortcutType, -1); + } + + private void addShortcutView(View shortcutView, PopupPopulator.Item shortcutType, int index) { if (shortcutType == PopupPopulator.Item.SHORTCUT) { mDeepShortcutViews.add((DeepShortcutView) shortcutView); } else { @@ -131,7 +136,7 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick R.layout.system_shortcut_icons, mShortcutsLayout, false); mShortcutsLayout.addView(mSystemShortcutIcons, 0); } - mSystemShortcutIcons.addView(shortcutView); + mSystemShortcutIcons.addView(shortcutView, index); } else { if (mShortcutsLayout.getChildCount() > 0) { View prevChild = mShortcutsLayout.getChildAt(mShortcutsLayout.getChildCount() - 1); @@ -139,7 +144,7 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick prevChild.findViewById(R.id.divider).setVisibility(VISIBLE); } } - mShortcutsLayout.addView(shortcutView); + mShortcutsLayout.addView(shortcutView, index); } } @@ -160,24 +165,47 @@ public class ShortcutsItemView extends PopupItemView implements View.OnLongClick } /** - * Sets the onClickListener on widgets system shortcut child, and updates alpha to 1. - * @return whether widgets is enabled, i.e. the onClickListener is not null. + * Adds a {@link SystemShortcut.Widgets} item if there are widgets for the given ItemInfo. */ - public boolean enableWidgets(ItemInfo itemInfo) { - for (View systemShortcut : mSystemShortcutViews) { - if (systemShortcut.getTag() instanceof SystemShortcut.Widgets) { - View.OnClickListener onClickListener = - ((SystemShortcut.Widgets) systemShortcut.getTag()).getOnClickListener( - mLauncher, itemInfo); - if (onClickListener != null) { - systemShortcut.setAlpha(1f); - systemShortcut.setOnClickListener(onClickListener); - return true; - } - return false; + public void enableWidgetsIfExist(final BubbleTextView originalIcon) { + ItemInfo itemInfo = (ItemInfo) originalIcon.getTag(); + SystemShortcut widgetInfo = new SystemShortcut.Widgets(); + View.OnClickListener onClickListener = widgetInfo.getOnClickListener(mLauncher, itemInfo); + View widgetsView = null; + for (View systemShortcutView : mSystemShortcutViews) { + if (systemShortcutView.getTag() instanceof SystemShortcut.Widgets) { + widgetsView = systemShortcutView; + break; + } + } + final PopupPopulator.Item widgetsItem = mSystemShortcutIcons == null + ? PopupPopulator.Item.SYSTEM_SHORTCUT + : PopupPopulator.Item.SYSTEM_SHORTCUT_ICON; + if (onClickListener != null && widgetsView == null) { + // We didn't have any widgets cached but now there are some, so enable the shortcut. + widgetsView = mLauncher.getLayoutInflater().inflate(widgetsItem.layoutId, this, false); + PopupPopulator.initializeSystemShortcut(getContext(), widgetsView, widgetInfo); + widgetsView.setOnClickListener(onClickListener); + if (widgetsItem == PopupPopulator.Item.SYSTEM_SHORTCUT_ICON) { + addShortcutView(widgetsView, widgetsItem, 0); + } else { + // If using the expanded system shortcut (as opposed to just the icon), we need to + // reopen the container to ensure measurements etc. all work out. While this could + // be quite janky, in practice the user would typically see a small flicker as the + // animation restarts partway through, and this is a very rare edge case anyway. + ((PopupContainerWithArrow) getParent()).close(false); + PopupContainerWithArrow.showForIcon(originalIcon); + } + } else if (onClickListener == null && widgetsView != null) { + // No widgets exist, but we previously added the shortcut so remove it. + if (widgetsItem == PopupPopulator.Item.SYSTEM_SHORTCUT_ICON) { + mSystemShortcutViews.remove(widgetsView); + mSystemShortcutIcons.removeView(widgetsView); + } else { + ((PopupContainerWithArrow) getParent()).close(false); + PopupContainerWithArrow.showForIcon(originalIcon); } } - return false; } @Override diff --git a/src_config/com/android/launcher3/config/FeatureFlags.java b/src_config/com/android/launcher3/config/FeatureFlags.java index 80eebece2..4e337a2b8 100644 --- a/src_config/com/android/launcher3/config/FeatureFlags.java +++ b/src_config/com/android/launcher3/config/FeatureFlags.java @@ -45,8 +45,8 @@ public final class FeatureFlags { public static final boolean LIGHT_STATUS_BAR = false; // When enabled icons are badged with the number of notifications associated with that app. public static final boolean BADGE_ICONS = true; - // When enabled, icons not supporting {@link MaskableIconDrawable} will be wrapped in this class. - public static final boolean LEGACY_ICON_TREATMENT = false; + // When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in this class. + public static final boolean LEGACY_ICON_TREATMENT = true; // When enabled, adaptive icons would have shadows baked when being stored to icon cache. public static final boolean ADAPTIVE_ICON_SHADOW = true; // When enabled, app discovery will be enabled if service is implemented