diff --git a/go/src/com/android/launcher3/model/WidgetsModel.java b/go/src/com/android/launcher3/model/WidgetsModel.java index cc5e1cbb46..f8448daf3d 100644 --- a/go/src/com/android/launcher3/model/WidgetsModel.java +++ b/go/src/com/android/launcher3/model/WidgetsModel.java @@ -24,6 +24,7 @@ import androidx.annotation.Nullable; import com.android.launcher3.LauncherAppState; import com.android.launcher3.icons.ComponentWithLabelAndIcon; +import com.android.launcher3.model.data.PackageItemInfo; import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.widget.model.WidgetsListBaseEntry; @@ -81,4 +82,9 @@ public class WidgetsModel { ComponentName providerName) { return null; } + + /** Returns {@link PackageItemInfo} of a pending widget. */ + public static PackageItemInfo newPendingItemInfo(ComponentName provider) { + return new PackageItemInfo(provider.getPackageName()); + } } \ No newline at end of file diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 0bfeaac4b9..726ba58ca1 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -983,6 +983,9 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener backgroundRadiusAnim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { + // Reset depth at the end of the launch animation, so the wallpaper won't be + // zoomed out if an app crashes. + DEPTH.setValue(depthController, 0f); depthController.setSurface(null); if (dimLayer != null) { new SurfaceControl.Transaction() diff --git a/res/drawable/full_rounded_transparent_ripple.xml b/res/drawable/full_rounded_transparent_ripple.xml new file mode 100644 index 0000000000..a1e79437a8 --- /dev/null +++ b/res/drawable/full_rounded_transparent_ripple.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/widgets_search_bar.xml b/res/layout/widgets_search_bar.xml index 0b354e8aee..cb27f4fb6f 100644 --- a/res/layout/widgets_search_bar.xml +++ b/res/layout/widgets_search_bar.xml @@ -31,11 +31,9 @@ android:id="@+id/widgets_search_cancel_button" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:paddingVertical="12dp" - android:paddingStart="8dp" - android:paddingEnd="12dp" + android:padding="12dp" android:src="@drawable/ic_gm_close_24" - android:background="?android:selectableItemBackground" + android:background="@drawable/full_rounded_transparent_ripple" android:layout_gravity="center" android:contentDescription="@string/widgets_full_sheet_cancel_button_description" android:visibility="gone"/> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 2f56a882c7..2eb69fb257 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -64,8 +64,7 @@ "ማሳወቂያዎች" "አቋራጭን ለማንቀሳቀስ ይንኩ እና ይያዙ" "አቋራጭን ለማንቀሳቀስ ወይም ብጁ እርምጃዎችን ለመጠቀም ሁለቴ መታ ያድርጉ እና ይያዙ።" - - + "በዚህ የመነሻ ማያ ገጽ ላይ ምንም ክፍል የለም" "በተወዳጆች መሣቢያ ውስጥ ተጨማሪ ቦታ የለም" "የመተግበሪያዎች ዝርዝር" "የግል መተግበሪያዎች ዝርዝር" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 63c1e30d7b..efe361ef84 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -72,8 +72,7 @@ "الإشعارات" "انقر مرتين مع تثبيت إصبعك لنقل اختصار." "انقر مرتين مع تثبيت إصبعك لنقل اختصار أو استخدام الإجراءات المخصّصة." - - + "ما مِن مساحة على هذه الشاشة الرئيسية." "لا يوجد المزيد من الحقول في علبة المفضلة" "قائمة التطبيقات" "قائمة التطبيقات الشخصية" diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 7ecc9da037..f615a246a4 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -64,8 +64,7 @@ "জাননীসমূহ" "শ্বৰ্টকাট স্থানান্তৰ কৰিবলৈ দুবাৰ টিপি ধৰি ৰাখক।" "কোনো শ্বৰ্টকাট স্থানান্তৰ কৰিবলৈ দুবাৰ টিপি ধৰি ৰাখক অথবা কাষ্টম কাৰ্য ব্যৱহাৰ কৰক।" - - + "এই গৃহ স্ক্ৰীনত খালী ঠাই নাই" "পছন্দৰ ট্ৰে\'ত আৰু বেছি ঠাই নাই" "এপৰ সূচী" "ব্যক্তিগত এপৰ তালিকা" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 50d052ab30..6ee49d9cd9 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -66,8 +66,7 @@ "Obaveštenja" "Dvaput dodirnite i zadržite radi pomeranja prečice." "Dvaput dodirnite i zadržite da biste pomerali prečicu ili koristite prilagođene radnje." - - + "Nema prostora na ovom početnom ekranu" "Nema više prostora na traci Omiljeno" "Lista aplikacija" "Lista ličnih aplikacija" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index bdc2f196ba..93bdfa043a 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -68,8 +68,7 @@ "Апавяшчэнні" "Націсніце і ўтрымлівайце ярлык для перамяшчэння." "Дакраніцеся двойчы і ўтрымлівайце, каб перамясціць ярлык або выкарыстоўваць спецыяльныя дзеянні." - - + "На гэтым Галоўным экране няма месца" "У латку \"Абранае\" больш няма месца" "Спіс праграм" "Спіс персанальных праграм" @@ -80,7 +79,7 @@ "Усталяваць" "Не прапаноўваць праграму" "Замацаваць прапанаваную праграму" - "усталёўваць ярлыкі" + "Стварэнне ярлыкоў" "Дазваляе праграмам дадаваць ярлыкі без умяшання карыстальніка." "счытваць налады і ярлыкі на Галоўнай старонцы" "Дазваляе праграме счытваць налады і ярлыкі на Галоўнай старонцы." diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index f0c86c679d..575ec221f2 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -64,8 +64,7 @@ "Известия" "Докоснете и задръжте за преместване на пряк път." "Докоснете двукратно и задръжте за преместване на пряк път или използвайте персонализирани действия." - - + "Няма място на този начален екран" "Няма повече място в областта с любимите" "Списък с приложения" "Списък с лични приложения" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index dc43c40cdf..3541cebc90 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -66,8 +66,7 @@ "Obavještenja" "Dodirnite i zadržite da pomjerite prečicu." "Dvaput dodirnite i zadržite da pomjerite prečicu ili da koristite prilagođene radnje." - - + "Nema prostora na početnom ekranu" "Nema više prostora u ladici Omiljeno" "Lista aplikacija" "Lista ličnih aplikacija" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index f1860d40f3..b1f8843281 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -64,8 +64,7 @@ "Notificacions" "Fes doble toc i mantén premut per moure una drecera." "Fes doble toc i mantén premut per moure una drecera o per utilitzar accions personalitzades." - - + "No queda espai en aquesta pantalla d\'inici" "No hi ha més espai a la safata Preferits." "Llista d\'aplicacions" "Llista d\'aplicacions personals" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 9b60c192f7..6b8f4f53f4 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -68,8 +68,7 @@ "Oznámení" "Klepnutím a podržením přesunete zkratku." "Dvojitým klepnutím a podržením přesunete zkratku, případně použijte vlastní akce." - - + "Na této ploše není místo" "Na panelu Oblíbené položky již není místo." "Seznam aplikací" "Seznam osobních aplikací" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 96ac1d14e5..7b34c032fb 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -64,8 +64,7 @@ "Notifikationer" "Hold en genvej nede for at flytte den." "Tryk to gange, og hold en genvej nede for at flytte den eller bruge tilpassede handlinger." - - + "Der er ikke ledig plads på startskærmen" "Der er ikke mere plads i bakken Favoritter" "Liste med apps" "Liste over personlige apps" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 14ff86040d..ffdc63c64c 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -64,8 +64,7 @@ "Ειδοποιήσεις" "Πατήστε παρατεταμένα για μετακίνηση συντόμευσης." "Πατήστε δύο φορές παρατεταμένα για μετακίνηση συντόμευσης ή χρήση προσαρμοσμένων ενεργειών." - - + "Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη" "Δεν υπάρχει επιπλέον χώρος στην περιοχή Αγαπημένα" "Λίστα εφαρμογών" "Λίστα προσωπικών εφαρμογών" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index b8567155cb..15ab568eaf 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -64,8 +64,7 @@ "Notificaciones" "Mantén presionado para mover un acceso directo." "Presiona dos veces y mantén presionado para mover un acceso directo o usar acciones personalizadas." - - + "No hay más espacio en esta pantalla principal" "La bandeja de favoritos está llena." "Lista de apps" "Lista de apps personales" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 83e49848ed..0619b39fb4 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -64,8 +64,7 @@ "Notificaciones" "Mantén pulsado un acceso directo para moverlo." "Toca dos veces y mantén pulsado un acceso directo para moverlo o usar acciones personalizadas." - - + "No queda espacio en la pantalla de inicio" "La bandeja de favoritos está completa" "Lista de aplicaciones" "Lista de aplicaciones personales" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 84100d4bde..7a91de258b 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -64,8 +64,7 @@ "Märguanded" "Otsetee teisaldamiseks puudutage ja hoidke all." "Otsetee teisaldamiseks või kohandatud toimingute kasutamiseks topeltpuudutage ja hoidke all." - - + "Sellel avakuval pole ruumi" "Salves Lemmikud pole rohkem ruumi" "Rakenduste loend" "Isiklike rakenduste loend" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index c4fda9b10a..48e3c2c41a 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -64,8 +64,7 @@ "اعلان‌ها" "برای جابه‌جا کردن میان‌بر، لمس کنید و نگه دارید." "برای جابه‌جا کردن میان‌بر یا استفاده از کنش‌های سفارشی، دوضربه بزنید و نگه دارید." - - + "فضای خالی در این صفحه اصلی وجود ندارد" "فضای بیشتری در سینی موارد دلخواه وجود ندارد" "فهرست برنامه‌ها" "فهرست برنامه‌های شخصی" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 7d6e7a40fd..0e42836393 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -64,8 +64,7 @@ "Ilmoitukset" "Kosketa pitkään, niin voit siirtää pikakuvaketta." "Kaksoisnapauta ja paina pitkään, niin voit siirtää pikakuvaketta tai käyttää muokattuja toimintoja." - - + "Tällä aloitusnäytöllä ei ole tilaa" "Suosikit-valikossa ei ole enää tilaa" "Sovellusluettelo" "Omat sovellukset ‑luettelo" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index d21389a97d..1391b43a9f 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -64,8 +64,7 @@ "Notifications" "Appuyez de manière prolongée pour déplacer raccourci." "Appuyez deux fois et maintenez la pression pour déplacer un raccourci ou utiliser les actions personnalisées." - - + "Pas d\'espace libre sur cet écran d\'accueil" "Plus d\'espace disponible dans la zone de favoris." "Liste d\'applications" "Liste des applications personnelles" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 6608c2492d..4605e2f96a 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -64,8 +64,7 @@ "Notificacións" "Mantén premido un atallo para movelo." "Toca dúas veces un atallo e manteno premido para movelo ou utiliza accións personalizadas." - - + "Non queda espazo nesta pantalla de inicio" "Non hai máis espazo na bandexa de favoritos" "Lista de aplicacións" "Lista de aplicacións persoais" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 33070a7061..1eca0c89a5 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -46,10 +46,8 @@ "વિજેટ્સ" "શોધ" "શોધ બૉક્સમાંથી ટેક્સ્ટ સાફ કરો" - - - - + "વિજેટ અને શૉર્ટકટ ઉપલબ્ધ નથી" + "કોઈ વિજેટ અથવા શૉર્ટકટ મળ્યા નથી" "વ્યક્તિગત" "ઑફિસ" "વાતચીતો" @@ -66,8 +64,7 @@ "નોટિફિકેશન" "શૉર્ટકટ ખસેડવા ટચ કરીને થોડી વાર દબાવી રાખો." "શૉર્ટકટ ખસેડવા બે વાર ટૅપ કરીને દબાવી રાખો અથવા કસ્ટમ ક્રિયાઓનો ઉપયોગ કરો." - - + "આ હોમ સ્ક્રીન પર વધુ જગ્યા નથી" "મનપસંદ ટ્રે પર વધુ જગ્યા નથી" "ઍપ્લિકેશનોની સૂચિ" "વ્યક્તિગત ઍપની સૂચિ" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 1c7bbd816f..c5a62f0e58 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -64,8 +64,7 @@ "सूचनाएं" "किसी शॉर्टकट को एक से दूसरी जगह ले जाने के लिए, उसे दबाकर रखें." "किसी शॉर्टकट को एक से दूसरी जगह ले जाने के लिए, उस पर दो बार टैप करके दबाकर रखें या पसंद के मुताबिक कार्रवाइयां इस्तेमाल करें." - - + "इस होम स्क्रीन पर जगह खाली नहीं है" "पसंदीदा ट्रे में और जगह नहीं है" "ऐप्लिकेशन सूची" "निजी ऐप्लिकेशन की सूची" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 7f2732481a..1d0566f13a 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -66,8 +66,7 @@ "Obavijesti" "Dodirnite i zadržite da biste premjestili prečac." "Dvaput dodirnite i zadržite pritisak da biste premjestili prečac ili upotrijebite prilagođene radnje." - - + "Na ovom početnom zaslonu više nema mjesta" "Nema više prostora na traci Favoriti" "Popis aplikacija" "Popis osobnih aplikacija" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 6f9b8c4edc..0042ab93ae 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -64,8 +64,7 @@ "Értesítések" "Tartsa lenyomva a parancsikont az áthelyezéshez." "Parancsikon áthelyezéséhez koppintson duplán, és tartsa nyomva az ujját, vagy használjon egyéni műveleteket." - - + "Nincs több hely ezen a kezdőképernyőn" "Nincs több hely a Kedvencek tálcán" "Alkalmazások listája" "Személyes alkalmazások listája" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 5bccfa4da1..239e186e01 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -64,8 +64,7 @@ "Ծանուցումներ" "Հպեք և պահեք՝ դյուրանցում տեղափոխելու համար։" "Կրկնակի հպեք և պահեք՝ դյուրանցում տեղափոխելու համար, կամ օգտվեք հատուկ գործողություններից։" - - + "Հիմնական էկրանին ազատ տեղ չկա" "Ընտրյալների ցուցակում այլևս ազատ տեղ չկա" "Հավելվածների ցանկ" "Անձնական հավելվածների ցանկ" @@ -76,7 +75,7 @@ "Տեղադրել" "Թաքցնել առաջարկը" "Ամրացնել առաջարկվող հավելվածը" - "տեղադրել դյուրանցումներ" + "Դյուրանցումների տեղադրում" "Ծրագրին թույլ է տալիս ավելացնել դյուրանցումներ՝ առանց օգտագործողի միջամտության:" "կարդալ հիմնաէջի կարգավորումներն ու դյուրանցումները" "Ծրագրին թույլ է տալիս կարդալ հիմնաէջի կարգավորումներն ու դյուրանցումները:" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index a87e68a5f5..8125112434 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -64,8 +64,7 @@ "Notifikasi" "Sentuh lama untuk memindahkan pintasan." "Ketuk dua kali & tahan untuk memindahkan pintasan atau gunakan tindakan khusus." - - + "Tidak ada ruang di Layar utama ini" "Tidak ada ruang tersisa di baki Favorit" "Daftar aplikasi" "Daftar aplikasi pribadi" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 96a0f550cc..ac0184616b 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -64,8 +64,7 @@ "Tilkynningar" "Haltu fingri á flýtileið til að færa hana." "Ýttu tvisvar og haltu fingri á flýtileið til að færa hana eða notaðu sérsniðnar aðgerðir." - - + "Ekkert pláss á þessum heimaskjá" "Ekki meira pláss í bakka fyrir uppáhald" "Forritalisti" "Listi yfir eigin forrit" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 4ae23d870c..7bdaff0a37 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -64,8 +64,7 @@ "Notifiche" "Tocca e tieni premuto per spostare una scorciatoia." "Tocca due volte e tieni premuto per spostare una scorciatoia o per usare le azioni personalizzate." - - + "Non c\'è più spazio nella schermata Home" "Spazio esaurito nella barra dei Preferiti" "Elenco di app" "Elenco di app personali" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 4ba2599847..bc8656ab84 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -68,8 +68,7 @@ "התראות" "כדי להעביר קיצור דרך למקום אחר יש לגעת ולא להרפות." "כדי להעביר קיצור דרך למקום אחר או להשתמש בפעולות מותאמות אישית\' יש ללחוץ פעמיים ולא להרפות." - - + "אין מקום במסך הבית הזה" "אין עוד מקום במגש המועדפים" "רשימת אפליקציות" "רשימת אפליקציות אישיות" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 700fc44377..cac513a473 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -64,8 +64,7 @@ "通知" "長押ししてショートカットを移動してください。" "ショートカットをダブルタップして長押ししながら移動するか、カスタム操作を使用してください。" - - + "このホーム画面には空きスペースがありません" "お気に入りトレイに空きスペースがありません" "アプリのリスト" "個人用アプリのリスト" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 64771de1b8..543f241f30 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -64,8 +64,7 @@ "Хабарландырулар" "Таңбашаны жылжыту үшін басып тұрыңыз." "Таңбашаны жылжыту үшін екі рет түртіңіз де, ұстап тұрыңыз немесе арнаулы әрекеттерді пайдаланыңыз." - - + "Негізгі экранда бос орын қалмады." "Қалаулылар науасында орын қалмады" "Қолданбалар тізімі" "Жеке қолданбалар тізімі" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 48f968b8e7..cb886c1ee2 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -64,8 +64,7 @@ "ការ​ជូនដំណឹង" "ចុចឱ្យជាប់​ដើម្បីផ្លាស់ទី​ផ្លូវកាត់​។" "ចុចពីរដង រួចសង្កត់ឱ្យជាប់ ដើម្បីផ្លាស់ទី​ផ្លូវកាត់ ឬប្រើ​សកម្មភាព​តាមបំណង​។" - - + "គ្មានកន្លែង​នៅលើ​អេក្រង់ដើមនេះទេ" "គ្មាន​បន្ទប់​​ក្នុង​ថាស​និយម​ប្រើ" "បញ្ជីកម្មវិធី" "បញ្ជី​កម្មវិធី​ផ្ទាល់ខ្លួន" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index a40b5685b4..40aa013024 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -64,8 +64,7 @@ "ಅಧಿಸೂಚನೆಗಳು" "ಶಾರ್ಟ್‌ಕಟ್ ಸರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ." "ಶಾರ್ಟ್‌ಕಟ್ ಸರಿಸಲು ಅಥವಾ ಕಸ್ಟಮ್ ಕ್ರಿಯೆಗಳನ್ನು ಬಳಸಲು ಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ." - - + "ಈ ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಸ್ಥಳಾವಾಕಾಶವಿಲ್ಲ" "ಮೆಚ್ಚಿನವುಗಳ ಟ್ರೇನಲ್ಲಿ ಹೆಚ್ಚಿನ ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ" "ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಪಟ್ಟಿ" "ವೈಯಕ್ತಿಕ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಪಟ್ಟಿ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index aba3f3dc54..4de5c2c74a 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -64,8 +64,7 @@ "알림" "길게 터치하여 바로가기를 이동하세요." "두 번 탭한 다음 길게 터치하여 바로가기를 이동하거나 맞춤 작업을 사용하세요." - - + "홈 화면에 더 이상 공간이 없습니다." "즐겨찾기 트레이에 더 이상 공간이 없습니다." "앱 목록" "개인 앱 목록" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 9973fa513d..a38a07bbf9 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -64,8 +64,7 @@ "ການແຈ້ງເຕືອນ" "ແຕະຄ້າງໄວ້ເພື່ອຍ້າຍທາງລັດ." "ແຕະສອງເທື່ອຄ້າງໄວ້ເພື່ອຍ້າຍທາງລັດ ຫຼື ໃຊ້ຄຳສັ່ງກຳນົດເອງ." - - + "ບໍ່ມີບ່ອນຫວ່າງໃນໜ້າໂຮມສະກຣີນນີ້" "ບໍ່ມີບ່ອນຫວ່າງໃນຖາດສຳລັບເກັບສິ່ງທີ່ໃຊ້ເປັນປະຈຳ" "ລາຍຊື່ແອັບ" "ລາຍຊື່ແອັບສ່ວນຕົວ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 314fcf4492..0984056807 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -68,8 +68,7 @@ "Pranešimai" "Dukart pal. ir palaik., kad perk. spart. klavišą." "Dukart palieskite ir palaikykite, kad perkeltumėte spartųjį klavišą ar naudotumėte tinkintus veiksmus." - - + "Šiame pagrindiniame ekrane nebėra vietos" "Mėgstamiausių dėkle nebėra vietos" "Programų sąrašas" "Asmeninių programų sąrašas" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 916893f579..eb1eba053d 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -66,8 +66,7 @@ "Paziņojumi" "Lai pārvietotu saīsni, pieskarieties un turiet." "Lai pārvietotu saīsni, uz tās veiciet dubultskārienu un turiet. Varat arī veikt pielāgotas darbības." - - + "Šajā sākuma ekrānā nav vietas" "Izlases joslā vairs nav vietas." "Lietotņu saraksts" "Personīgo lietotņu saraksts" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 7ce9796205..4987cd5df9 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -64,8 +64,7 @@ "Известувања" "Допрете и задржете за да преместите кратенка." "Допрете двапати и задржете за да преместите кратенка или користете приспособени дејства." - - + "Нема простор на почетниов екран" "Нема повеќе простор на лентата „Омилени“" "Список со апликации" "Список со лични апликации" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index faffb00022..c41d02e5f0 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -64,8 +64,7 @@ "അറിയിപ്പുകൾ" "കുറുക്കുവഴി നീക്കാൻ സ്‌പർശിച്ച് പിടിക്കുക." "കുറുക്കുവഴി നീക്കാൻ ഡബിൾ ടാപ്പ് ചെയ്യൂ, ഹോൾഡ് ചെയ്യൂ അല്ലെങ്കിൽ ഇഷ്‌ടാനുസൃത പ്രവർത്തനങ്ങൾ ഉപയോഗിക്കൂ." - - + "ഈ ഹോം സ്ക്രീനിലിൽ ഇടമില്ല" "പ്രിയപ്പെട്ടവയുടെ ട്രേയിൽ ഒഴിവൊന്നുമില്ല" "അപ്ലിക്കേഷനുകളുടെ ലിസ്‌റ്റ്" "വ്യക്തിഗത ആപ്പുകളുടെ ലിസ്റ്റ്" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 0216ae574d..35675d1d9c 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -64,8 +64,7 @@ "Мэдэгдэл" "Товчлолыг зөөхийн тулд хүрээд, удаан дарна уу." "Товчлолыг зөөх эсвэл захиалгат үйлдлийг ашиглахын тулд хоёр товшоод, удаан дарна уу." - - + "Энэ үндсэн нүүрэнд зай байхгүй байна" "\"Дуртай\" трей дээр өөр зай байхгүй байна" "Апп-н жагсаалт" "Хувийн аппын жагсаалт" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index e4634dd801..b973547dd9 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -159,7 +159,7 @@ "कामाशी संबंधित ॲप्स ही बॅज केलेली असून तुमच्या IT ॲडमिनला दृश्यमान आहेत" "समजले" "कार्य ॲप्स थांबवली आहेत" - "तुमचे कामाशी संबंधित ॲप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अ‍ॅक्सेस करू शकत नाहीत" + "तुमची कामाशी संबंधित ॲप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अ‍ॅक्सेस करू शकत नाहीत" "कामाशी संबंधित ॲप्स बंद आहेत. तुमचे कामाशी संबंधित ॲप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अ‍ॅक्सेस करू शकत नाहीत" "Work apps ही बॅज केलेली असून तुमच्या IT ॲडमिनला दृश्यमान आहेत" "समजले" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 3b200fda73..b1e0244f87 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -64,8 +64,7 @@ "Pemberitahuan" "Sentuh & tahan untuk menggerakkan pintasan." "Ketik dua kali & tahan untuk menggerakkan pintasan atau menggunakan tindakan tersuai." - - + "Tiada ruang di skrin Utama ini" "Tiada ruang dalam dulang Kegemaran lagi" "Senarai apl" "Senarai apl peribadi" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 4077871d53..11e4fead98 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -64,8 +64,7 @@ "အကြောင်းကြားချက်များ" "ဖြတ်လမ်းလင့်ခ်ကို ရွှေ့ရန် နှစ်ချက်တို့ပြီး ဖိထားပါ။" "ဖြတ်လမ်းလင့်ခ်ကို ရွှေ့ရန် (သို့) စိတ်ကြိုက်လုပ်ဆောင်ချက်များကို သုံးရန် နှစ်ချက်တို့ပြီး ဖိထားပါ။" - - + "ဤပင်မစာမျက်နှာတွင် နေရာလွတ် မရှိတော့ပါ" "အနှစ်သက်ဆုံးများ ထားရာတွင် နေရာလွတ် မကျန်တော့ပါ" "အက်ပ်စာရင်း" "တစ်ကိုယ်ရေသုံး အက်ပ်စာရင်း" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 4be9caa2a8..a7931d0338 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -64,8 +64,7 @@ "Varsler" "Trykk og hold for å flytte en snarvei." "Dobbelttrykk og hold for å flytte en snarvei eller bruke tilpassede handlinger." - - + "Ingen ledig plass på denne startskjermen" "Favoritter-skuffen er full" "App-liste" "Personlige apper-liste" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 3c21701b08..b36d400f1c 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -64,8 +64,7 @@ "सूचनाहरू" "कुनै सर्टकट सार्न डबल ट्याप गरेर छोइराख्नुहोस्।" "कुनै सर्टकट सार्न वा आफ्नो रोजाइका कारबाही प्रयोग गर्न डबल ट्याप गरेर छोइराख्नुहोस्।" - - + "यो होम स्क्रिनमा ठाउँ छैन" "मन पर्ने ट्रे अब कुनै ठाँउ छैन" "एपको सूची" "व्यक्तिगत अनुप्रयोगहरूको सूची" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 5f8878b730..7b3d5953c6 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -64,8 +64,7 @@ "Meldingen" "Tik en houd vast om een snelkoppeling te verplaatsen." "Dubbeltik en houd vast om een snelkoppeling te verplaatsen of aangepaste acties te gebruiken." - - + "Er is geen ruimte op dit startscherm" "Geen ruimte meer in het vak \'Favorieten\'" "Lijst met apps" "Lijst met persoonlijke apps" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 3289e1ad25..73848e0906 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -46,10 +46,8 @@ "ୱିଜେଟ୍‌" "ସନ୍ଧାନ କରନ୍ତୁ" "ସନ୍ଧାନ ବାକ୍ସରୁ ଟେକ୍ସଟ୍ ଖାଲି କରନ୍ତୁ" - - - - + "ୱିଜେଟ୍ ଏବଂ ସର୍ଟକଟଗୁଡ଼ିକ ଉପଲବ୍ଧ ନାହିଁ" + "କୌଣସି ୱିଜେଟ୍ କିମ୍ବା ସର୍ଟକଟ୍ ମିଳିଲା ନାହିଁ" "ବ୍ୟକ୍ତିଗତ" "ୱାର୍କ" "ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ" @@ -66,8 +64,7 @@ "ବିଜ୍ଞପ୍ତି" "ଏକ ସର୍ଟକଟକୁ ମୁଭ୍ କରିବା ପାଇଁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ।" "ଏକ ସର୍ଟକଟକୁ ମୁଭ୍ କରିବା ପାଇଁ ଦୁଇଥର-ଟାପ୍ କରି ଧରି ରଖନ୍ତୁ କିମ୍ବା କଷ୍ଟମ୍ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ ବ୍ୟବହାର କରନ୍ତୁ।" - - + "ଏହି ମୂଳସ୍କ୍ରିନରେ ଆଉ ଜାଗା ନାହିଁ" "ମନପସନ୍ଦ ଟ୍ରେରେ ଆଉ କୋଠରୀ ନାହିଁ" "ଆପ୍‌ ତାଲିକା" "ବ୍ୟକ୍ତିଗତ ଆପ୍ ତାଲିକା" @@ -78,7 +75,7 @@ "ଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" "ଆପ୍ ପରାମର୍ଶ ଦିଅନ୍ତୁ ନାହିଁ" "ପୂର୍ବାନୁମାନକୁ ପିନ୍ କରନ୍ତୁ" - "ଶର୍ଟକଟ୍‍ ଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" + "ସର୍ଟକଟ୍‍ ଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" "ୟୁଜରଙ୍କ ବିନା ହସ୍ତକ୍ଷେପରେ ଶର୍ଟକଟ୍‌ ଯୋଡ଼ିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" "ହୋମ୍‌ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍‌ ପଢ଼ନ୍ତୁ" "ହୋମରେ ସେଟିଙ୍ଗ ପଢ଼ିବାକୁ ଆପ ଏବଂ ଶର୍ଟକଟକୁ ଅନୁମତି ଦିଏ।" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 3cfb569fe3..5ec64900ff 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -68,8 +68,7 @@ "Powiadomienia" "Naciśnij i przytrzymaj, aby wybrać skrót." "Naciśnij dwukrotnie i przytrzymaj, aby przenieść skrót lub użyć działań niestandardowych." - - + "Brak miejsca na tym ekranie głównym" "Brak miejsca w Ulubionych" "Lista aplikacji" "Lista aplikacji osobistych" @@ -80,7 +79,7 @@ "Zainstaluj" "Nie proponuj aplikacji" "Przypnij podpowiedź" - "instalowanie skrótów" + "Instalowanie skrótów" "Pozwala aplikacji dodawać skróty bez interwencji użytkownika." "odczytywanie ustawień i skrótów na ekranie głównym" "Pozwala aplikacji na odczytywanie ustawień i skrótów na ekranie głównym." diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 9aeecdc383..3141df6d95 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -64,8 +64,7 @@ "Notificações" "Toque sem soltar para mover um atalho." "Toque duas vezes sem soltar para mover um atalho ou utilizar ações personalizadas." - - + "Sem espaço neste ecrã principal." "Não existe mais espaço no tabuleiro de Favoritos" "Lista de aplicações" "Lista de aplicações pessoais" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 3dbf460762..c1c0e17d8e 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -64,8 +64,7 @@ "Notificações" "Toque e mantenha a tela pressionada para mover um atalho." "Toque duas vezes e mantenha a tela pressionada para mover um atalho ou usar ações personalizadas." - - + "Não há espaço nesta tela inicial" "Sem espaço na bandeja de favoritos" "Lista de apps" "Lista de apps pessoais" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index b9b3726644..3d8d46e7f9 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -66,8 +66,7 @@ "Notificări" "Atingeți și țineți apăsat pentru a muta comanda rapidă." "Atingeți de două ori și țineți apăsat pentru a muta o comandă rapidă sau folosiți acțiuni personalizate." - - + "Nu este disponibilă nicio sală pe acest ecran de pornire" "Spațiu epuizat în bara Preferate" "Lista de aplicații" "Lista de aplicații personale" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index d5c0159762..c220cad80c 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -68,8 +68,7 @@ "Уведомления" "Нажмите и удерживайте для переноса ярлыка." "Чтобы использовать специальные действия или перенести ярлык, нажмите на него дважды и удерживайте." - - + "На главном экране нет свободного места." "В разделе \"Избранное\" больше нет места" "Список приложений" "Открыть список личных приложений" diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index e32f16848a..90c9035b0f 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -64,8 +64,7 @@ "දැනුම්දීම්" "කෙටි මගක් ගෙන යාමට ස්පර්ශ කර අල්ලාගෙන සිටින්න." "කෙටි මගක් ගෙන යාමට හෝ අභිරුචි ක්‍රියා භාවිත කිරීමට දෙවරක් තට්ටු කර අල්ලා ගෙන සිටින්න." - - + "මෙම මුල් තිරයේ ඉඩ නැත" "ප්‍රියතම දෑ ඇති තැටියේ තවත් ඉඩ නොමැත" "යෙදුම් ලැයිස්තුව" "පෞද්ගලික යෙදුම් ලැයිස්තුව" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index eb8ad30ff2..0830065e9a 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -68,8 +68,7 @@ "Upozornenia" "Pridržaním presuňte skratku." "Dvojitým klepnutím a pridržaním presuňte odkaz alebo použite vlastné akcie." - - + "Na tejto ploche nie je miesto" "Na paneli Obľúbené položky už nie je miesto" "Zoznam aplikácií" "Zoznam osobných aplikácií" @@ -80,7 +79,7 @@ "Inštalovať" "Nenavrhovať aplikáciu" "Pripnúť predpoveď" - "inštalovať odkazy" + "inštalácia odkazov" "Povoľuje aplikácii pridať odkazy bez zásahu používateľa." "čítanie nastavení a odkazov plochy" "Povoľuje aplikácii čítať nastavenia a odkazy na ploche." diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 7f440f81af..86a85653fe 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -68,8 +68,7 @@ "Obvestila" "Pridržite bližnjico, da jo premaknete." "Dvakrat se dotaknite bližnjice in jo pridržite, da jo premaknete, ali pa uporabite dejanja po meri." - - + "Na tem začetnem zaslonu ni prostora." "V vrstici za priljubljene ni več prostora" "Seznam aplikacij" "Seznam osebnih aplikacij" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 797a2a0167..d701a114f5 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -66,8 +66,7 @@ "Обавештења" "Двапут додирните и задржите ради померања пречице." "Двапут додирните и задржите да бисте померали пречицу или користите прилагођене радње." - - + "Нема простора на овом почетном екрану" "Нема више простора на траци Омиљено" "Листа апликација" "Листа личних апликација" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 8fa1e0e287..681ddd06ba 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -64,8 +64,7 @@ "Aviseringar" "Tryck länge för att flytta en genväg." "Tryck snabbt två gånger och håll kvar för att flytta en genväg eller använda anpassade åtgärder." - - + "Det finns inte plats på den här startskärmen." "Favoritfältet är fullt" "Applista" "Listan Personliga appar" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 1e7bf0747f..77106eb20d 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -64,8 +64,7 @@ "Arifa" "Gusa na ushikilie ili usogeze njia ya mkato." "Gusa mara mbili na ushikilie ili usogeze njia ya mkato au utumie vitendo maalum." - - + "Hakuna nafasi kwenye Skrini hii ya kwanza" "Hakuna nafasi zaidi katika treya ya Vipendeleo" "Orodha ya programu" "Orodha ya programu za binafsi" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index b68ee1e6ee..168982c79d 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -64,8 +64,7 @@ "அறிவிப்புகள்" "ஷார்ட்கட்டை நகர்த்தத் தொட்டுப் பிடிக்கவும்." "ஷார்ட்கட்டை நகர்த்த இருமுறை தட்டிப் பிடிக்கவும் அல்லது பிரத்தியேகச் செயல்களைப் பயன்படுத்தவும்." - - + "இந்த முகப்புத் திரையில் இடமில்லை" "பிடித்தவை ட்ரேயில் இடமில்லை" "ஆப்ஸின் பட்டியல்" "தனிப்பட்ட ஆப்ஸ் பட்டியல்" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 7191c6c704..7012b3ca6e 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -46,10 +46,8 @@ "విడ్జెట్‌లు" "సెర్చ్ చేయండి" "సెర్చ్ బాక్స్ నుండి టెక్స్ట్‌ను క్లియర్ చేయి" - - - - + "విడ్జెట్‌లు, షార్ట్‌కట్‌లు అందుబాటులో లేవు" + "విడ్జెట్‌లు లేదా షార్ట్‌కట్‌లు కనుగొనబడలేదు" "వ్యక్తిగత గ్యాడ్జెట్స్" "ఆఫీస్" "సంభాషణలు" @@ -66,8 +64,7 @@ "నోటిఫికేషన్‌లు" "షార్ట్‌కట్‌ను తరలించడానికి తాకి & నొక్కి ఉంచు." "షార్ట్‌కట్‌ను తరలించడానికి లేదా అనుకూల చర్యలను ఉపయోగించడానికి రెండుసార్లు నొక్కండి & హోల్డ్ చేయండి." - - + "ఈ మొదటి స్క్రీన్‌లో స్థలం లేదు" "ఇష్టమైనవి ట్రేలో ఖాళీ లేదు" "అనువర్తనాల జాబితా" "వ్యక్తిగత యాప్‌ల జాబితా" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index f42766cb68..f5d9fdc055 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -64,8 +64,7 @@ "การแจ้งเตือน" "แตะค้างไว้เพื่อย้ายทางลัด" "แตะสองครั้งค้างไว้เพื่อย้ายทางลัดหรือใช้การดำเนินการที่กำหนดเอง" - - + "ไม่มีที่ว่างในหน้าจอหลักนี้" "ไม่มีพื้นที่เหลือในถาดรายการโปรด" "รายชื่อแอป" "รายการแอปส่วนตัว" @@ -159,7 +158,7 @@ "โปรไฟล์งาน" "แอปงานจะติดป้ายไว้และผู้ดูแลระบบไอทีจะมองเห็น" "รับทราบ" - "หยุดแอปงานไว้ชั่วคราว" + "แอปงานปิดอยู่" "แอปงานจะส่งการแจ้งเตือน ใช้แบตเตอรี่ หรือเข้าถึงตำแหน่งของคุณไม่ได้" "แอปงานปิดอยู่ แอปงานจะส่งการแจ้งเตือน ใช้แบตเตอรี่ หรือเข้าถึงตำแหน่งของคุณไม่ได้" "แอปงานจะติดป้ายไว้และผู้ดูแลระบบไอทีจะมองเห็น" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 99b554c496..40d2f815e8 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -64,8 +64,7 @@ "Mga Notification" "Pindutin nang matagal para ilipat ang shortcut." "I-double tap at pindutin nang matagal para ilipat ang shortcut o gumamit ng mga custom na pagkilos." - - + "Walang espasyo sa Home screen na ito" "Wala nang lugar sa tray ng Mga Paborito" "Listahan ng mga app" "Listahan ng mga personal na app" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index a81a9cbc0a..6f6c47bad5 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -64,8 +64,7 @@ "Bildirimler" "Kısayolu taşımak için dokunup basılı tutun." "Kısayolu taşımak veya özel işlemleri kullanmak için iki kez dokunup basılı tutun." - - + "Bu Ana ekranda yer yok" "Favoriler tepsisinde başka yer kalmadı" "Uygulamalar listesi" "Kişisel uygulamalar listesi" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index b60b50fb9f..b171a7647e 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -68,8 +68,7 @@ "Сповіщення" "Натисніть і втримуйте, щоб перемістити ярлик." "Двічі натисніть і втримуйте ярлик, щоб перемістити його або виконати інші дії." - - + "На головному екрані немає місця" "В області \"Вибране\" немає місця" "Список додатків" "Список особистих додатків" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 3353539b7d..07086b0aa5 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -64,8 +64,7 @@ "اطلاعات" "شارٹ کٹ منتقل کرنے کیلیے ٹچ کریں اور پکڑ کر رکھیں۔" "شارٹ کٹ کو منتقل کرنے یا حسب ضرورت کارروائیاں استعمال کرنے کے لیے دوبار تھپتھپائیں اور پکڑ کر رکھیں۔" - - + "اس ہوم اسکرین پر کوئی گنجائش نہیں ہے" "پسندیدہ ٹرے میں مزید کوئی گنجائش نہیں ہے" "ایپس کی فہرست" "ذاتی ایپس کی فہرست" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 635c83d243..cbdfae1aa1 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -64,8 +64,7 @@ "Bildirishnomalar" "Yorliqni bosib turgan holatda suring." "Ikki marta bosing va yorliqni bosib turgan holatda suring yoki maxsus amaldan foydalaning." - - + "Bosh ekranda joy qolmadi." "Ajratilganlarda birorta ham xona yo‘q" "Ilovalar ro‘yxati" "Shaxsiy ilovalar ro‘yxati" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index c3e6ffd5e4..1b80cc7afc 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -64,8 +64,7 @@ "Thông báo" "Chạm và giữ để di chuyển một lối tắt." "Nhấn đúp và giữ để di chuyển một lối tắt hoặc sử dụng các thao tác tùy chỉnh." - - + "Không còn khoảng trống 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" "Danh sách ứng dụng cá nhân" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index ac1955721b..477d1d59a2 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -64,8 +64,7 @@ "通知" "轻触并按住快捷方式即可移动该快捷方式。" "点按两次并按住快捷方式即可移动该快捷方式或使用自定义操作。" - - + "此主屏幕上已没有空间" "收藏栏已满" "应用列表" "个人应用列表" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index b4287bb795..6b77042840 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -64,8 +64,7 @@ "通知" "輕觸並按住即可移動捷徑。" "㩒兩下之後㩒住,就可以郁捷徑或者用自訂操作。" - - + "這個主畫面已無空間" "我的收藏寄存區沒有足夠空間" "應用程式清單" "個人應用程式清單" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 248a20c272..6a85bcc151 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -64,8 +64,7 @@ "通知" "按住即可移動捷徑。" "輕觸兩下並按住即可移動捷徑或使用自訂操作。" - - + "這個主畫面已無空間" "「我的最愛」匣已無可用空間" "應用程式清單" "個人應用程式清單" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index eccd5564ad..ed5ce8bb93 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -64,8 +64,7 @@ "Izaziso" "Thinta uphinde ubambe ukuze uhambise isinqamuleli." "Thepha kabili uphinde ubambe ukuze uhambise isinqamuleli noma usebenzise izenzo ezingokwezifiso." - - + "Asikho isikhala kulesi sikrini sasekhaya" "Asisekho isikhala kwitreyi lezintandokazi" "Uhlu lwezinhlelo zokusebenza" "Uhlu lwezinhlelo zokusebenza zomuntu siqu" diff --git a/res/values/strings.xml b/res/values/strings.xml index 4f4a38907a..ddd838dbf9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -55,6 +55,9 @@ %1$d \u00d7 %2$d %1$d wide by %2$d high + + %1$s widget Touch & hold the widget to move it around the Home screen diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index 9e21e1a0f1..ee711463d9 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -108,7 +108,8 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O private boolean mTopBorderActive; private boolean mBottomBorderActive; - private int mResizeMode; + private boolean mHorizontalResizeActive; + private boolean mVerticalResizeActive; private int mRunningHInc; private int mRunningVInc; @@ -207,7 +208,6 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O mWidgetView.addOnAttachStateChangeListener(mWidgetViewAttachStateChangeListener); LauncherAppWidgetProviderInfo info = (LauncherAppWidgetProviderInfo) widgetView.getAppWidgetInfo(); - mResizeMode = info.resizeMode; mDragLayer = dragLayer; mMinHSpan = info.minSpanX; @@ -218,10 +218,17 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O mWidgetPadding = getDefaultPaddingForWidget(getContext(), widgetView.getAppWidgetInfo().provider, null); - if (mResizeMode == AppWidgetProviderInfo.RESIZE_HORIZONTAL) { + // Only show resize handles for the directions in which resizing is possible. + InvariantDeviceProfile idp = LauncherAppState.getIDP(cellLayout.getContext()); + mVerticalResizeActive = (info.resizeMode & AppWidgetProviderInfo.RESIZE_VERTICAL) != 0 + && mMinVSpan < idp.numRows && mMaxVSpan > 1; + if (!mVerticalResizeActive) { mDragHandles[INDEX_TOP].setVisibility(GONE); mDragHandles[INDEX_BOTTOM].setVisibility(GONE); - } else if (mResizeMode == AppWidgetProviderInfo.RESIZE_VERTICAL) { + } + mHorizontalResizeActive = (info.resizeMode & AppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0 + && mMinHSpan < idp.numColumns && mMaxHSpan > 1; + if (!mHorizontalResizeActive) { mDragHandles[INDEX_LEFT].setVisibility(GONE); mDragHandles[INDEX_RIGHT].setVisibility(GONE); } @@ -255,6 +262,14 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O } } + CellLayout.LayoutParams lp = (CellLayout.LayoutParams) mWidgetView.getLayoutParams(); + ItemInfo widgetInfo = (ItemInfo) mWidgetView.getTag(); + lp.cellX = lp.tmpCellX = widgetInfo.cellX; + lp.cellY = lp.tmpCellY = widgetInfo.cellY; + lp.cellHSpan = widgetInfo.spanX; + lp.cellVSpan = widgetInfo.spanY; + lp.isLockedToGrid = true; + // When we create the resize frame, we first mark all cells as unoccupied. The appropriate // cells (same if not resized, or different) will be marked as occupied when the resize // frame is dismissed. @@ -263,21 +278,19 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O mLauncher.getStatsLogManager() .logger() .withInstanceId(logInstanceId) - .withItemInfo((ItemInfo) mWidgetView.getTag()) + .withItemInfo(widgetInfo) .log(LAUNCHER_WIDGET_RESIZE_STARTED); setOnKeyListener(this); } public boolean beginResizeIfPointInRegion(int x, int y) { - boolean horizontalActive = (mResizeMode & AppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0; - boolean verticalActive = (mResizeMode & AppWidgetProviderInfo.RESIZE_VERTICAL) != 0; - - mLeftBorderActive = (x < mTouchTargetWidth) && horizontalActive; - mRightBorderActive = (x > getWidth() - mTouchTargetWidth) && horizontalActive; - mTopBorderActive = (y < mTouchTargetWidth + mTopTouchRegionAdjustment) && verticalActive; + mLeftBorderActive = (x < mTouchTargetWidth) && mHorizontalResizeActive; + mRightBorderActive = (x > getWidth() - mTouchTargetWidth) && mHorizontalResizeActive; + mTopBorderActive = (y < mTouchTargetWidth + mTopTouchRegionAdjustment) + && mVerticalResizeActive; mBottomBorderActive = (y > getHeight() - mTouchTargetWidth + mBottomTouchRegionAdjustment) - && verticalActive; + && mVerticalResizeActive; boolean anyBordersActive = mLeftBorderActive || mRightBorderActive || mTopBorderActive || mBottomBorderActive; diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 2eba4ed6cf..624862d5d3 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -123,6 +123,7 @@ public class DeviceProfile { public int iconDrawablePaddingPx; public int iconDrawablePaddingOriginalPx; + public float cellScaleToFit; public int cellWidthPx; public int cellHeightPx; public int workspaceCellPaddingXPx; @@ -359,20 +360,20 @@ public class DeviceProfile { // Now that we have all of the variables calculated, we can tune certain sizes. if (isScalableGrid && inv.devicePaddings != null) { // Paddings were created assuming no scaling, so we first unscale the extra space. - int unscaledExtraSpace = (int) (extraSpace / iconScale); + int unscaledExtraSpace = (int) (extraSpace / cellScaleToFit); DevicePadding padding = inv.devicePaddings.getDevicePadding(unscaledExtraSpace); int paddingWorkspaceTop = padding.getWorkspaceTopPadding(unscaledExtraSpace); int paddingWorkspaceBottom = padding.getWorkspaceBottomPadding(unscaledExtraSpace); int paddingHotseatBottom = padding.getHotseatBottomPadding(unscaledExtraSpace); - workspaceTopPadding = Math.round(paddingWorkspaceTop * iconScale); - workspaceBottomPadding = Math.round(paddingWorkspaceBottom * iconScale); - extraHotseatBottomPadding = Math.round(paddingHotseatBottom * iconScale); + workspaceTopPadding = Math.round(paddingWorkspaceTop * cellScaleToFit); + workspaceBottomPadding = Math.round(paddingWorkspaceBottom * cellScaleToFit); + extraHotseatBottomPadding = Math.round(paddingHotseatBottom * cellScaleToFit); hotseatBarSizePx += extraHotseatBottomPadding; - qsbBottomMarginPx = Math.round(qsbBottomMarginOriginalPx * iconScale); + qsbBottomMarginPx = Math.round(qsbBottomMarginOriginalPx * cellScaleToFit); } else if (!isVerticalBarLayout() && isPhone && isTallDevice) { // We increase the hotseat size when there is extra space. // ie. For a display with a large aspect ratio, we can keep the icons on the workspace @@ -540,15 +541,18 @@ public class DeviceProfile { * hotseat sizes, workspaceSpringLoadedShrinkFactor, folderIconSizePx, and folderIconOffsetYPx. */ public void updateIconSize(float scale, Resources res) { - iconScale = scale; + // Icon scale should never exceed 1, otherwise pixellation may occur. + iconScale = Math.min(1f, scale); + cellScaleToFit = scale; + // Workspace final boolean isVerticalLayout = isVerticalBarLayout(); float invIconSizeDp = isLandscape ? inv.landscapeIconSize : inv.iconSize; - iconSizePx = Math.max(1, pxFromDp(invIconSizeDp, mMetrics, scale)); + iconSizePx = Math.max(1, pxFromDp(invIconSizeDp, mMetrics, iconScale)); float invIconTextSizeSp = isLandscape ? inv.landscapeIconTextSize : inv.iconTextSize; - iconTextSizePx = (int) (pxFromSp(invIconTextSizeSp, mMetrics) * scale); - iconDrawablePaddingPx = (int) (iconDrawablePaddingOriginalPx * scale); + iconTextSizePx = (int) (pxFromSp(invIconTextSizeSp, mMetrics) * iconScale); + iconDrawablePaddingPx = (int) (iconDrawablePaddingOriginalPx * iconScale); setCellLayoutBorderSpacing((int) (cellLayoutBorderSpacingOriginalPx * scale)); @@ -942,6 +946,9 @@ public class DeviceProfile { writer.println(prefix + "\tinv.minCellWidth:" + inv.minCellWidth + "dp"); writer.println(prefix + "\tinv.minCellHeight:" + inv.minCellHeight + "dp"); + writer.println(prefix + "\tinv.numColumns:" + inv.numColumns); + writer.println(prefix + "\tinv.numRows:" + inv.numRows); + writer.println(prefix + pxToDpStr("cellWidthPx", cellWidthPx)); writer.println(prefix + pxToDpStr("cellHeightPx", cellHeightPx)); @@ -995,7 +1002,8 @@ public class DeviceProfile { writer.println(prefix + pxToDpStr("workspacePadding.right", workspacePadding.right)); writer.println(prefix + pxToDpStr("workspacePadding.bottom", workspacePadding.bottom)); - writer.println(prefix + pxToDpStr("scaleToFit", iconScale)); + writer.println(prefix + pxToDpStr("iconScale", iconScale)); + writer.println(prefix + pxToDpStr("cellScaleToFit ", cellScaleToFit)); writer.println(prefix + pxToDpStr("extraSpace", extraSpace)); if (inv.devicePaddings != null) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 554f9e0cc7..bd20f1e2b6 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1350,6 +1350,40 @@ public class Launcher extends StatefulActivity implements Launche prepareAppWidget(hostView, launcherInfo); mWorkspace.addInScreen(hostView, launcherInfo); announceForAccessibility(R.string.item_added_to_workspace); + + // Show the widget resize frame. + if (hostView instanceof LauncherAppWidgetHostView) { + final LauncherAppWidgetHostView launcherHostView = (LauncherAppWidgetHostView) hostView; + CellLayout cellLayout = getCellLayout(launcherInfo.container, launcherInfo.screenId); + if (mStateManager.getState() == NORMAL) { + // Show resize frame once the widget layout is drawn. + View.OnLayoutChangeListener onLayoutChangeListener = + new View.OnLayoutChangeListener() { + @Override + public void onLayoutChange(View view, int left, int top, int right, + int bottom, int oldLeft, int oldTop, int oldRight, + int oldBottom) { + AppWidgetResizeFrame.showForWidget(launcherHostView, cellLayout); + launcherHostView.removeOnLayoutChangeListener(this); + } + }; + launcherHostView.addOnLayoutChangeListener(onLayoutChangeListener); + // There is a small chance that the layout was already drawn before the layout + // change listener was registered, which means that the resize frame wouldn't be + // shown. Directly call requestLayout to force a layout change. + launcherHostView.requestLayout(); + } else { + mStateManager.addStateListener(new StateManager.StateListener() { + @Override + public void onStateTransitionComplete(LauncherState finalState) { + if (mPrevLauncherState == SPRING_LOADED && finalState == NORMAL) { + AppWidgetResizeFrame.showForWidget(launcherHostView, cellLayout); + mStateManager.removeStateListener(this); + } + } + }); + } + } } private void prepareAppWidget(AppWidgetHostView hostView, LauncherAppWidgetInfo item) { diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java index 365cab1a4e..01b3e6e3ba 100644 --- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java +++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java @@ -32,13 +32,11 @@ import com.android.launcher3.model.BgDataModel.Callbacks; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.ItemInfo; -import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.pm.InstallSessionHelper; import com.android.launcher3.pm.PackageInstallInfo; import com.android.launcher3.util.GridOccupancy; -import com.android.launcher3.util.IOUtils; import com.android.launcher3.util.IntArray; import com.android.launcher3.util.PackageManagerHelper; @@ -182,13 +180,6 @@ public class AddWorkspaceItemsTask extends BaseModelUpdateTask { // log bitmap and label FileLog.d(LOG, "Adding item info to workspace: " + itemInfo); - if (itemInfo instanceof ItemInfoWithIcon) { - ItemInfoWithIcon infoWithIcon = (ItemInfoWithIcon) itemInfo; - - FileLog.d(LOG, "Item info icon base 64 string: " - + infoWithIcon.bitmap.icon == null - ? "null" : IOUtils.toBase64String(infoWithIcon.bitmap.icon)); - } } } diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index d373cf438e..ff18297c06 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -75,7 +75,6 @@ import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.LauncherAppWidgetInfo; -import com.android.launcher3.model.data.PackageItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.pm.InstallSessionHelper; import com.android.launcher3.pm.PackageInstallInfo; @@ -793,8 +792,8 @@ public class LoaderTask implements Runnable { if (appWidgetInfo.restoreStatus != LauncherAppWidgetInfo.RESTORE_COMPLETED) { - String pkg = appWidgetInfo.providerName.getPackageName(); - appWidgetInfo.pendingItemInfo = new PackageItemInfo(pkg); + appWidgetInfo.pendingItemInfo = WidgetsModel.newPendingItemInfo( + appWidgetInfo.providerName); appWidgetInfo.pendingItemInfo.user = appWidgetInfo.user; mIconCache.getTitleAndIconForApp( appWidgetInfo.pendingItemInfo, false); diff --git a/src/com/android/launcher3/model/data/SearchActionItemInfo.java b/src/com/android/launcher3/model/data/SearchActionItemInfo.java index b3057d5bd2..7ca283ee0c 100644 --- a/src/com/android/launcher3/model/data/SearchActionItemInfo.java +++ b/src/com/android/launcher3/model/data/SearchActionItemInfo.java @@ -25,6 +25,7 @@ import android.os.UserHandle; import androidx.annotation.Nullable; +import com.android.launcher3.Utilities; import com.android.launcher3.logger.LauncherAtom.ItemInfo; import com.android.launcher3.logger.LauncherAtom.SearchActionItem; @@ -34,6 +35,7 @@ import com.android.launcher3.logger.LauncherAtom.SearchActionItem; public class SearchActionItemInfo extends ItemInfoWithIcon { public static final int FLAG_SHOULD_START = 1 << 1; + @Deprecated public static final int FLAG_SHOULD_START_FOR_RESULT = FLAG_SHOULD_START | 1 << 2; public static final int FLAG_BADGE_WITH_PACKAGE = 1 << 3; public static final int FLAG_PRIMARY_ICON_FROM_TITLE = 1 << 4; @@ -89,10 +91,13 @@ public class SearchActionItemInfo extends ItemInfoWithIcon { * Setter for mIntent with assertion for null value mPendingIntent */ public void setIntent(Intent intent) { - if (mPendingIntent != null && intent != null) { + if (mPendingIntent != null && intent != null && Utilities.IS_DEBUG_DEVICE) { throw new RuntimeException( "SearchActionItemInfo can only have either an Intent or a PendingIntent"); } + if (intent != null) { + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + } mIntent = intent; } @@ -104,7 +109,7 @@ public class SearchActionItemInfo extends ItemInfoWithIcon { * Setter of mPendingIntent with assertion for null value mIntent */ public void setPendingIntent(PendingIntent pendingIntent) { - if (mIntent != null && pendingIntent != null) { + if (mIntent != null && pendingIntent != null && Utilities.IS_DEBUG_DEVICE) { throw new RuntimeException( "SearchActionItemInfo can only have either an Intent or a PendingIntent"); } diff --git a/src/com/android/launcher3/pm/InstallSessionHelper.java b/src/com/android/launcher3/pm/InstallSessionHelper.java index 2bd9ba0037..ab35bd6175 100644 --- a/src/com/android/launcher3/pm/InstallSessionHelper.java +++ b/src/com/android/launcher3/pm/InstallSessionHelper.java @@ -25,7 +25,6 @@ import android.content.pm.LauncherApps; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionInfo; import android.content.pm.PackageManager; -import android.graphics.Bitmap; import android.os.Build; import android.os.Process; import android.os.UserHandle; @@ -41,7 +40,6 @@ import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.logging.FileLog; import com.android.launcher3.model.ItemInstallQueue; -import com.android.launcher3.util.IOUtils; import com.android.launcher3.util.IntArray; import com.android.launcher3.util.IntSet; import com.android.launcher3.util.MainThreadInitializedObject; @@ -231,37 +229,12 @@ public class InstallSessionHelper { } public boolean verifySessionInfo(PackageInstaller.SessionInfo sessionInfo) { - boolean validSessionInfo = verify(sessionInfo) != null + return verify(sessionInfo) != null && sessionInfo.getInstallReason() == PackageManager.INSTALL_REASON_USER && sessionInfo.getAppIcon() != null && !TextUtils.isEmpty(sessionInfo.getAppLabel()) && !new PackageManagerHelper(mAppContext).isAppInstalled( sessionInfo.getAppPackageName(), getUserHandle(sessionInfo)); - - if (sessionInfo != null) { - Bitmap appIcon = sessionInfo.getAppIcon(); - - if (Utilities.IS_DEBUG_DEVICE) { - FileLog.d(LOG, String.format( - "Verifying session info. Valid: %b," - + " Session verified: %b," - + " Install reason valid: %b," - + " App icon: %s," - + " App label: %s," - + " App installed: %b.", - validSessionInfo, - verify(sessionInfo) != null, - sessionInfo.getInstallReason() == PackageManager.INSTALL_REASON_USER, - appIcon == null ? "null" : IOUtils.toBase64String(appIcon), - sessionInfo.getAppLabel(), - new PackageManagerHelper(mAppContext).isAppInstalled( - sessionInfo.getAppPackageName(), getUserHandle(sessionInfo)))); - } - } else { - FileLog.d(LOG, "Verifying session info failed: session info null."); - } - - return validSessionInfo; } public InstallSessionTracker registerInstallTracker(InstallSessionTracker.Callback callback) { diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java index b53f96eea3..408ba28e0a 100644 --- a/src/com/android/launcher3/touch/ItemClickHandler.java +++ b/src/com/android/launcher3/touch/ItemClickHandler.java @@ -262,19 +262,12 @@ public class ItemClickHandler { */ public static void onClickSearchAction(Launcher launcher, SearchActionItemInfo itemInfo) { if (itemInfo.getIntent() != null) { - if (itemInfo.hasFlags(SearchActionItemInfo.FLAG_SHOULD_START_FOR_RESULT)) { - launcher.startActivityForResult(itemInfo.getIntent(), 0); - } else { - launcher.startActivity(itemInfo.getIntent()); - } + launcher.startActivity(itemInfo.getIntent()); } else if (itemInfo.getPendingIntent() != null) { try { PendingIntent pendingIntent = itemInfo.getPendingIntent(); if (!itemInfo.hasFlags(SearchActionItemInfo.FLAG_SHOULD_START)) { pendingIntent.send(); - } else if (itemInfo.hasFlags(SearchActionItemInfo.FLAG_SHOULD_START_FOR_RESULT)) { - launcher.startIntentSenderForResult(pendingIntent.getIntentSender(), 0, null, 0, - 0, 0); } else { launcher.startIntentSender(pendingIntent.getIntentSender(), null, 0, 0, 0); } diff --git a/src/com/android/launcher3/util/IOUtils.java b/src/com/android/launcher3/util/IOUtils.java index d7fa9050f2..1cec0ecc10 100644 --- a/src/com/android/launcher3/util/IOUtils.java +++ b/src/com/android/launcher3/util/IOUtils.java @@ -16,9 +16,7 @@ package com.android.launcher3.util; -import android.graphics.Bitmap; import android.os.FileUtils; -import android.util.Base64; import android.util.Log; import com.android.launcher3.Utilities; @@ -52,12 +50,6 @@ public class IOUtils { return out.toByteArray(); } - public static String toBase64String(Bitmap bitmap) { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); - return Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT); - } - public static long copy(InputStream from, OutputStream to) throws IOException { if (Utilities.ATLEAST_Q) { return FileUtils.copy(from, to); diff --git a/src/com/android/launcher3/util/OnboardingPrefs.java b/src/com/android/launcher3/util/OnboardingPrefs.java index c395d6ced3..40bc9c3abc 100644 --- a/src/com/android/launcher3/util/OnboardingPrefs.java +++ b/src/com/android/launcher3/util/OnboardingPrefs.java @@ -36,7 +36,7 @@ public class OnboardingPrefs { public static final String HOME_BOUNCE_COUNT = "launcher.home_bounce_count"; public static final String HOTSEAT_DISCOVERY_TIP_COUNT = "launcher.hotseat_discovery_tip_count"; public static final String HOTSEAT_LONGPRESS_TIP_SEEN = "launcher.hotseat_longpress_tip_seen"; - public static final String SEARCH_EDU_SEEN = "launcher.search_edu"; + public static final String SEARCH_EDU_SEEN = "launcher.search_edu_seen"; public static final String SEARCH_SNACKBAR_COUNT = "launcher.keyboard_snackbar_count"; /** diff --git a/src/com/android/launcher3/views/RecyclerViewFastScroller.java b/src/com/android/launcher3/views/RecyclerViewFastScroller.java index 78916acd16..a88b8b7776 100644 --- a/src/com/android/launcher3/views/RecyclerViewFastScroller.java +++ b/src/com/android/launcher3/views/RecyclerViewFastScroller.java @@ -18,6 +18,8 @@ package com.android.launcher3.views; import static android.view.HapticFeedbackConstants.CLOCK_TICK; +import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE; + import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.Resources; @@ -30,6 +32,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.os.Build; import android.util.AttributeSet; +import android.util.Log; import android.util.Property; import android.view.MotionEvent; import android.view.View; @@ -54,9 +57,14 @@ import java.util.List; * The track and scrollbar that shows when you scroll the list. */ public class RecyclerViewFastScroller extends View { - - private static final int FASTSCROLL_THRESHOLD_MILLIS = 200; + private static final String TAG = "RecyclerViewFastScroller"; + private static final boolean DEBUG = false; + private static final int FASTSCROLL_THRESHOLD_MILLIS = 40; private static final int SCROLL_DELTA_THRESHOLD_DP = 4; + + // Track is very narrow to target and correctly. This is especially the case if a user is + // using a hardware case. Even if x is offset by following amount, we consider it to be valid. + private static final int SCROLLBAR_LEFT_OFFSET_TOUCH_DELEGATE_DP = 5; private static final Rect sTempRect = new Rect(); private static final Property TRACK_WIDTH = @@ -86,6 +94,7 @@ public class RecyclerViewFastScroller extends View { /** Keeps the last known scrolling delta/velocity along y-axis. */ private int mDy = 0; private final float mDeltaThreshold; + private final float mScrollbarLeftOffsetTouchDelegate; private final ViewConfiguration mConfig; @@ -157,6 +166,8 @@ public class RecyclerViewFastScroller extends View { mConfig = ViewConfiguration.get(context); mDeltaThreshold = res.getDisplayMetrics().density * SCROLL_DELTA_THRESHOLD_DP; + mScrollbarLeftOffsetTouchDelegate = res.getDisplayMetrics().density + * SCROLLBAR_LEFT_OFFSET_TOUCH_DELEGATE_DP; TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.RecyclerViewFastScroller, defStyleAttr, 0); @@ -239,6 +250,7 @@ public class RecyclerViewFastScroller extends View { public boolean handleTouchEvent(MotionEvent ev, Point offset) { int x = (int) ev.getX() - offset.x; int y = (int) ev.getY() - offset.y; + switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // Keep track of the down positions @@ -247,7 +259,7 @@ public class RecyclerViewFastScroller extends View { mDownTimeStampMillis = ev.getDownTime(); if ((Math.abs(mDy) < mDeltaThreshold && - mRv.getScrollState() != RecyclerView.SCROLL_STATE_IDLE)) { + mRv.getScrollState() != SCROLL_STATE_IDLE)) { // now the touch events are being passed to the {@link WidgetCell} until the // touch sequence goes over the touch slop. mRv.stopScroll(); @@ -293,6 +305,13 @@ public class RecyclerViewFastScroller extends View { } break; } + if (DEBUG) { + Log.d(TAG, (ev.getAction() == MotionEvent.ACTION_DOWN ? "\n" : "") + + "handleTouchEvent " + MotionEvent.actionToString(ev.getAction()) + + " (" + x + "," + y + ")" + " isDragging=" + mIsDragging + + " mIgnoreDragGesture=" + mIgnoreDragGesture); + + } return mIsDragging; } @@ -401,7 +420,8 @@ public class RecyclerViewFastScroller extends View { * Returns whether the specified x position is near the scroll bar. */ public boolean isNearScrollBar(int x) { - return x >= (getWidth() - mMaxWidth) / 2 && x <= (getWidth() + mMaxWidth) / 2; + return x >= (getWidth() - mMaxWidth) / 2 - mScrollbarLeftOffsetTouchDelegate + && x <= (getWidth() + mMaxWidth) / 2; } private void animatePopupVisibility(boolean visible) { diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java index fb1485b480..1eb79ad550 100644 --- a/src/com/android/launcher3/views/ScrimView.java +++ b/src/com/android/launcher3/views/ScrimView.java @@ -97,8 +97,10 @@ public class ScrimView extends View implements Insettable { private void updateSysUiColors() { // Use a light system UI (dark icons) if all apps is behind at least half of the // status bar. - boolean forceChange = - getVisibility() == VISIBLE && getAlpha() > STATUS_BAR_COLOR_FORCE_UPDATE_THRESHOLD; + final float threshold = STATUS_BAR_COLOR_FORCE_UPDATE_THRESHOLD; + boolean forceChange = getVisibility() == VISIBLE + && getAlpha() > threshold + && (Color.alpha(mBackgroundColor) / 255f) > threshold; if (forceChange) { getSystemUiController().updateUiState(UI_STATE_SCRIM_VIEW, !isScrimDark()); } else { diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java index 3bf993e199..a5c142db66 100644 --- a/src/com/android/launcher3/widget/BaseWidgetSheet.java +++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java @@ -24,11 +24,14 @@ import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.Toast; +import androidx.annotation.GuardedBy; import androidx.annotation.Nullable; import androidx.core.view.ViewCompat; +import com.android.launcher3.DeviceProfile; import com.android.launcher3.DragSource; import com.android.launcher3.DropTarget.DragObject; +import com.android.launcher3.Insettable; import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; @@ -47,10 +50,16 @@ import com.android.launcher3.views.ArrowTipView; */ public abstract class BaseWidgetSheet extends AbstractSlideInView implements OnClickListener, OnLongClickListener, DragSource, - PopupDataProvider.PopupDataChangeListener { + PopupDataProvider.PopupDataChangeListener, Insettable { + /** + * The maximum scale, [0, 1], of the device screen width that the widgets picker can consume + * on large screen devices. + */ + protected static final float MAX_WIDTH_SCALE_FOR_LARGER_SCREEN = 0.8f; protected static final String KEY_WIDGETS_EDUCATION_TIP_SEEN = "launcher.widgets_education_tip_seen"; + protected final Rect mInsets = new Rect(); /* Touch handling related member variables. */ private Toast mWidgetInstructionToast; @@ -105,6 +114,44 @@ public abstract class BaseWidgetSheet extends AbstractSlideInView return true; } + @Override + public void setInsets(Rect insets) { + mInsets.set(insets); + } + + + /** + * Measures the dimension of this view and its children by taking system insets, navigation bar, + * status bar, into account. + */ + @GuardedBy("MainThread") + protected void doMeasure(int widthMeasureSpec, int heightMeasureSpec) { + DeviceProfile deviceProfile = mActivityContext.getDeviceProfile(); + int widthUsed; + if (mInsets.bottom > 0) { + widthUsed = mInsets.left + mInsets.right; + } else { + Rect padding = deviceProfile.workspacePadding; + widthUsed = Math.max(padding.left + padding.right, + 2 * (mInsets.left + mInsets.right)); + } + + if (deviceProfile.isTablet || deviceProfile.isTwoPanels) { + // In large screen devices, we restrict the width of the widgets picker to show part of + // the home screen. Let's ensure the minimum width used is at least the minimum width + // that isn't taken by the widgets picker. + int minUsedWidth = (int) (deviceProfile.availableWidthPx + * (1 - MAX_WIDTH_SCALE_FOR_LARGER_SCREEN)); + widthUsed = Math.max(widthUsed, minUsedWidth); + } + + int heightUsed = mInsets.top + deviceProfile.edgeMarginPx; + measureChildWithMargins(mContent, widthMeasureSpec, + widthUsed, heightMeasureSpec, heightUsed); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), + MeasureSpec.getSize(heightMeasureSpec)); + } + private boolean beginDraggingWidget(WidgetCell v) { // Get the widget preview as the drag representation WidgetImageView image = v.getWidgetView(); diff --git a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java index 47a8914d2a..47f30be04f 100644 --- a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java @@ -17,6 +17,7 @@ package com.android.launcher3.widget; import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon; +import static com.android.launcher3.model.data.PackageItemInfo.CONVERSATIONS; import android.content.Context; import android.graphics.Canvas; @@ -35,6 +36,8 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.RemoteViews; +import androidx.annotation.Nullable; + import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.icons.FastBitmapDrawable; @@ -146,21 +149,32 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView mCenterDrawable = null; } if (info.bitmap.icon != null) { + Drawable widgetCategoryIcon = getWidgetCategoryIcon(); // The view displays three modes, // 1) App icon in the center // 2) Preload icon in the center // 3) App icon in the center with a setup icon on the top left corner. if (mDisabledForSafeMode) { - FastBitmapDrawable disabledIcon = info.newIcon(getContext()); - disabledIcon.setIsDisabled(true); - mCenterDrawable = disabledIcon; + if (widgetCategoryIcon == null) { + FastBitmapDrawable disabledIcon = info.newIcon(getContext()); + disabledIcon.setIsDisabled(true); + mCenterDrawable = disabledIcon; + } else { + widgetCategoryIcon.setColorFilter( + FastBitmapDrawable.getDisabledFColorFilter(/* disabledAlpha= */ 1f)); + mCenterDrawable = widgetCategoryIcon; + } mSettingIconDrawable = null; } else if (isReadyForClickSetup()) { - mCenterDrawable = info.newIcon(getContext()); + mCenterDrawable = widgetCategoryIcon == null + ? info.newIcon(getContext()) + : widgetCategoryIcon; mSettingIconDrawable = getResources().getDrawable(R.drawable.ic_setting).mutate(); updateSettingColor(info.bitmap.color); } else { - mCenterDrawable = newPendingIcon(getContext(), info); + mCenterDrawable = widgetCategoryIcon == null + ? newPendingIcon(getContext(), info) + : widgetCategoryIcon; mSettingIconDrawable = null; applyState(); } @@ -316,4 +330,19 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView } } + + /** + * Returns the widget category icon for {@link #mInfo}. + * + *

If {@link #mInfo}'s category is {@code PackageItemInfo#NO_CATEGORY} or unknown, returns + * {@code null}. + */ + @Nullable + private Drawable getWidgetCategoryIcon() { + switch (mInfo.pendingItemInfo.category) { + case CONVERSATIONS: + return getContext().getDrawable(R.drawable.ic_conversations_widget_category); + } + return null; + } } diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java index 91529be30b..a52adf673d 100644 --- a/src/com/android/launcher3/widget/WidgetCell.java +++ b/src/com/android/launcher3/widget/WidgetCell.java @@ -180,14 +180,17 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener { public void applyFromCellItem(WidgetItem item, WidgetPreviewLoader loader) { applyPreviewOnAppWidgetHostView(item); + Context context = getContext(); mItem = item; mWidgetName.setText(mItem.label); - mWidgetDims.setText(getContext().getString(R.string.widget_dims_format, + mWidgetName.setContentDescription( + context.getString(R.string.widget_preview_context_description, mItem.label)); + mWidgetDims.setText(context.getString(R.string.widget_dims_format, mItem.spanX, mItem.spanY)); - mWidgetDims.setContentDescription(getContext().getString( + mWidgetDims.setContentDescription(context.getString( R.string.widget_accessible_dims_format, mItem.spanX, mItem.spanY)); if (ATLEAST_S && mItem.widgetInfo != null) { - CharSequence description = mItem.widgetInfo.loadDescription(getContext()); + CharSequence description = mItem.widgetInfo.loadDescription(context); if (description != null && description.length() > 0) { mWidgetDescription.setText(description); mWidgetDescription.setVisibility(VISIBLE); @@ -238,6 +241,7 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener { NavigableAppWidgetHostView appWidgetHostViewPreview, LauncherAppWidgetProviderInfo providerInfo, @Nullable RemoteViews remoteViews) { + appWidgetHostViewPreview.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); appWidgetHostViewPreview.setAppWidget(/* appWidgetId= */ -1, providerInfo); Rect padding; DeviceProfile deviceProfile = mActivity.getDeviceProfile(); diff --git a/src/com/android/launcher3/widget/WidgetsBottomSheet.java b/src/com/android/launcher3/widget/WidgetsBottomSheet.java index 37b950d502..d7928c77b9 100644 --- a/src/com/android/launcher3/widget/WidgetsBottomSheet.java +++ b/src/com/android/launcher3/widget/WidgetsBottomSheet.java @@ -23,7 +23,6 @@ import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.util.IntProperty; -import android.util.Log; import android.util.Pair; import android.view.Gravity; import android.view.LayoutInflater; @@ -36,10 +35,7 @@ import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; -import androidx.annotation.GuardedBy; - import com.android.launcher3.DeviceProfile; -import com.android.launcher3.Insettable; import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; import com.android.launcher3.anim.PendingAnimation; @@ -53,7 +49,7 @@ import java.util.List; /** * Bottom sheet for the "Widgets" system shortcut in the long-press popup. */ -public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { +public class WidgetsBottomSheet extends BaseWidgetSheet { private static final String TAG = "WidgetsBottomSheet"; private static final IntProperty PADDING_BOTTOM = @@ -74,7 +70,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { private static final long EDUCATION_TIP_DELAY_MS = 300; private ItemInfo mOriginalItemInfo; - private final Rect mInsets; private final int mMaxTableHeight; private int mMaxHorizontalSpan = 4; @@ -114,7 +109,6 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { public WidgetsBottomSheet(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setWillNotDraw(false); - mInsets = new Rect(); DeviceProfile deviceProfile = mActivityContext.getDeviceProfile(); // Set the max table height to 2 / 3 of the grid height so that the bottom picker won't // take over the entire view vertically. @@ -132,53 +126,20 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (doMeasure(widthMeasureSpec, heightMeasureSpec)) { - boolean hasUpdated = doMeasure(widthMeasureSpec, heightMeasureSpec); - if (hasUpdated) { - Log.w(TAG, "WidgetsBottomSheet dimension has been updated after a 2nd" - + " measurement."); - } + doMeasure(widthMeasureSpec, heightMeasureSpec); + if (updateMaxSpansPerRow()) { + doMeasure(widthMeasureSpec, heightMeasureSpec); } } - /** - * Measures the dimension of this view and its children. - * - *

This function takes account of the following during measurement: - *

    - *
  1. status bar and system navigation bar insets
  2. - *
  3. - * number of spans that can fit in a row. This affects the number of widgets that can - * fit in a row. - *
  4. - *
- * - * @return {@code true} if the width or height of this view or its children have changed after - * the measurement. Otherwise, returns {@code false}. - */ - @GuardedBy("MainThread") - private boolean doMeasure(int widthMeasureSpec, int heightMeasureSpec) { - DeviceProfile deviceProfile = mActivityContext.getDeviceProfile(); - int widthUsed; - if (mInsets.bottom > 0) { - widthUsed = mInsets.left + mInsets.right; - } else { - Rect padding = deviceProfile.workspacePadding; - widthUsed = Math.max(padding.left + padding.right, - 2 * (mInsets.left + mInsets.right)); - } - - int heightUsed = mInsets.top + deviceProfile.edgeMarginPx; - measureChildWithMargins(mContent, widthMeasureSpec, - widthUsed, heightMeasureSpec, heightUsed); - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), - MeasureSpec.getSize(heightMeasureSpec)); + /** Returns {@code true} if the max spans have been updated. */ + private boolean updateMaxSpansPerRow() { + if (getMeasuredWidth() == 0) return false; int paddingPx = 2 * getResources().getDimensionPixelOffset( R.dimen.widget_cell_horizontal_padding); int maxHorizontalSpan = findViewById(R.id.widgets_table).getMeasuredWidth() / (mActivityContext.getDeviceProfile().cellWidthPx + paddingPx); - if (mMaxHorizontalSpan != maxHorizontalSpan) { // Ensure the table layout is showing widgets in the right column after measure. mMaxHorizontalSpan = maxHorizontalSpan; @@ -297,7 +258,8 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable { @Override public void setInsets(Rect insets) { - mInsets.set(insets); + super.setInsets(insets); + mContent.setPadding(mContent.getPaddingStart(), mContent.getPaddingTop(), mContent.getPaddingEnd(), insets.bottom); if (insets.bottom > 0) { diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index 0106ef5d5f..6c2cca6024 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -45,8 +45,6 @@ import androidx.annotation.VisibleForTesting; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; -import com.android.launcher3.DeviceProfile; -import com.android.launcher3.Insettable; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; @@ -76,7 +74,7 @@ import java.util.stream.IntStream; * Popup for showing the full list of available widgets */ public class WidgetsFullSheet extends BaseWidgetSheet - implements Insettable, ProviderChangedListener, OnActivePageChangedListener, + implements ProviderChangedListener, OnActivePageChangedListener, WidgetsRecyclerView.HeaderViewDimensionsProvider, SearchModeListener { private static final String TAG = WidgetsFullSheet.class.getSimpleName(); @@ -131,6 +129,22 @@ public class WidgetsFullSheet extends BaseWidgetSheet } }; + private final OnAttachStateChangeListener mBindScrollbarInSearchMode = + new OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(View view) { + WidgetsRecyclerView searchRecyclerView = + mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView; + if (mIsInSearchMode && searchRecyclerView != null) { + searchRecyclerView.bindFastScrollbar(); + } + } + + @Override + public void onViewDetachedFromWindow(View view) { + } + }; + private final int mTabsHeight; private final int mViewPagerTopPadding; private final int mSearchAndRecommendationContainerBottomMargin; @@ -305,11 +319,17 @@ public class WidgetsFullSheet extends BaseWidgetSheet protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mActivityContext.getAppWidgetHost().removeProviderChangeListener(this); + mAdapters.get(AdapterHolder.PRIMARY).mWidgetsRecyclerView + .removeOnAttachStateChangeListener(mBindScrollbarInSearchMode); + if (mHasWorkProfile) { + mAdapters.get(AdapterHolder.WORK).mWidgetsRecyclerView + .removeOnAttachStateChangeListener(mBindScrollbarInSearchMode); + } } @Override public void setInsets(Rect insets) { - mInsets.set(insets); + super.setInsets(insets); setBottomPadding(mAdapters.get(AdapterHolder.PRIMARY).mWidgetsRecyclerView, insets.bottom); setBottomPadding(mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView, insets.bottom); @@ -351,24 +371,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet } } - private void doMeasure(int widthMeasureSpec, int heightMeasureSpec) { - DeviceProfile deviceProfile = mActivityContext.getDeviceProfile(); - int widthUsed; - if (mInsets.bottom > 0) { - widthUsed = mInsets.left + mInsets.right; - } else { - Rect padding = deviceProfile.workspacePadding; - widthUsed = Math.max(padding.left + padding.right, - 2 * (mInsets.left + mInsets.right)); - } - - int heightUsed = mInsets.top + deviceProfile.edgeMarginPx; - measureChildWithMargins(mContent, widthMeasureSpec, - widthUsed, heightMeasureSpec, heightUsed); - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), - MeasureSpec.getSize(heightMeasureSpec)); - } - /** Returns {@code true} if the max spans have been updated. */ private boolean updateMaxSpansPerRow() { if (getMeasuredWidth() == 0) return false; @@ -772,6 +774,12 @@ public class WidgetsFullSheet extends BaseWidgetSheet mWidgetsRecyclerView.setHeaderViewDimensionsProvider(WidgetsFullSheet.this); mWidgetsRecyclerView.setEdgeEffectFactory( ((TopRoundedCornerView) mContent).createEdgeEffectFactory()); + // Recycler view binds to fast scroller when it is attached to screen. Make sure + // search recycler view is bound to fast scroller if user is in search mode at the time + // of attachment. + if (mAdapterType == PRIMARY || mAdapterType == WORK) { + mWidgetsRecyclerView.addOnAttachStateChangeListener(mBindScrollbarInSearchMode); + } mWidgetsListAdapter.setApplyBitmapDeferred(false, mWidgetsRecyclerView); mWidgetsListAdapter.setMaxHorizontalSpansPerRow(mMaxSpansPerRow); } diff --git a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java index a66b031719..631067b929 100644 --- a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java +++ b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java @@ -225,6 +225,14 @@ public class WidgetsModel { return null; } + /** Returns {@link PackageItemInfo} of a pending widget. */ + public static PackageItemInfo newPendingItemInfo(ComponentName provider) { + if (CONVERSATION_WIDGET.equals(provider)) { + return new PackageItemInfo(provider.getPackageName(), PackageItemInfo.CONVERSATIONS); + } + return new PackageItemInfo(provider.getPackageName()); + } + private WidgetPackageOrCategoryKey getWidgetPackageOrCategoryKey(WidgetItem item) { if (CONVERSATION_WIDGET.equals(item.componentName)) { return new WidgetPackageOrCategoryKey(PackageItemInfo.CONVERSATIONS, item.user); diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index b421b0e876..0c9c4630a4 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -102,6 +102,8 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { setResult(acceptConfig); if (acceptConfig) { + // Dismiss widget resize frame. + mDevice.pressHome(); Wait.atMost("", new WidgetSearchCondition(), DEFAULT_ACTIVITY_TIMEOUT, mLauncher); assertNotNull(mAppWidgetManager.getAppWidgetInfo(mWidgetId)); } else { diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java index 714b11b18e..dad4f2b045 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java @@ -58,6 +58,8 @@ public class AddWidgetTest extends AbstractLauncherUiTest { openAllWidgets(). getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager())). dragToWorkspace(false, false); + // Dismiss widget resize frame. + mDevice.pressHome(); assertTrue(mActivityMonitor.itemExists( (info, view) -> info instanceof LauncherAppWidgetInfo &&