From 2185f6f4204b87387a950da8af4542f17cbaaf78 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 5 May 2023 10:31:17 -0700 Subject: [PATCH] Loading widget description on the background thread Bug: 281074741 Test: Varified on device Flag: N/A Change-Id: I6b9b13e712534bdc582b98dbfb7bdfcc40d2f19d --- .../launcher3/dragndrop/AddItemActivity.java | 3 ++- .../android/launcher3/model/WidgetItem.java | 6 ++++- .../android/launcher3/widget/WidgetCell.java | 15 +++++------ .../android/launcher3/model/WidgetsModel.java | 5 ++-- ...WidgetsListHeaderViewHolderBinderTest.java | 2 +- .../WidgetsListTableViewHolderBinderTest.java | 2 +- .../model/WidgetsListContentEntryTest.java | 6 +++-- .../SimpleWidgetsSearchAlgorithmTest.java | 2 +- .../picker/util/WidgetsTableUtilsTest.java | 25 +++++++++---------- 9 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/com/android/launcher3/dragndrop/AddItemActivity.java b/src/com/android/launcher3/dragndrop/AddItemActivity.java index 4906c1dc31..00f428502c 100644 --- a/src/com/android/launcher3/dragndrop/AddItemActivity.java +++ b/src/com/android/launcher3/dragndrop/AddItemActivity.java @@ -304,7 +304,8 @@ public class AddItemActivity extends BaseActivity mWidgetOptions = pendingInfo.getDefaultSizeOptions(this); mWidgetCell.getWidgetView().setTag(pendingInfo); - applyWidgetItemAsync(() -> new WidgetItem(widgetInfo, mIdp, mApp.getIconCache())); + applyWidgetItemAsync(() -> new WidgetItem( + widgetInfo, mIdp, mApp.getIconCache(), mApp.getContext())); return WidgetsModel.newPendingItemInfo(this, widgetInfo.getComponent(), widgetInfo.getUser()); } diff --git a/src/com/android/launcher3/model/WidgetItem.java b/src/com/android/launcher3/model/WidgetItem.java index 7198d54611..c99b8891c8 100644 --- a/src/com/android/launcher3/model/WidgetItem.java +++ b/src/com/android/launcher3/model/WidgetItem.java @@ -3,6 +3,7 @@ package com.android.launcher3.model; import static com.android.launcher3.Utilities.ATLEAST_S; import android.annotation.SuppressLint; +import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Resources; @@ -25,13 +26,15 @@ public class WidgetItem extends ComponentKey { public final ShortcutConfigActivityInfo activityInfo; public final String label; + public final CharSequence description; public final int spanX, spanY; public WidgetItem(LauncherAppWidgetProviderInfo info, - InvariantDeviceProfile idp, IconCache iconCache) { + InvariantDeviceProfile idp, IconCache iconCache, Context context) { super(info.provider, info.getProfile()); label = iconCache.getTitleNoCache(info); + description = ATLEAST_S ? info.loadDescription(context) : null; widgetInfo = info; activityInfo = null; @@ -43,6 +46,7 @@ public class WidgetItem extends ComponentKey { super(info.getComponent(), info.getUser()); label = info.isPersistable() ? iconCache.getTitleNoCache(info) : Utilities.trim(info.getLabel(pm)); + description = null; widgetInfo = null; activityInfo = info; spanX = spanY = 1; diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java index 43218a1f84..c30342ad4b 100644 --- a/src/com/android/launcher3/widget/WidgetCell.java +++ b/src/com/android/launcher3/widget/WidgetCell.java @@ -17,7 +17,6 @@ package com.android.launcher3.widget; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_WIDGETS_TRAY; -import static com.android.launcher3.Utilities.ATLEAST_S; import static com.android.launcher3.widget.LauncherAppWidgetProviderInfo.fromProviderInfo; import static com.android.launcher3.widget.util.WidgetSizes.getWidgetItemSizePx; @@ -25,6 +24,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Process; +import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.util.Size; @@ -219,14 +219,11 @@ public class WidgetCell extends LinearLayout { mItem.spanX, mItem.spanY)); 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(context); - if (description != null && description.length() > 0) { - mWidgetDescription.setText(description); - mWidgetDescription.setVisibility(VISIBLE); - } else { - mWidgetDescription.setVisibility(GONE); - } + if (!TextUtils.isEmpty(mItem.description)) { + mWidgetDescription.setText(mItem.description); + mWidgetDescription.setVisibility(VISIBLE); + } else { + mWidgetDescription.setVisibility(GONE); } if (item.activityInfo != null) { diff --git a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java index 1b743e8bdc..2f16065f37 100644 --- a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java +++ b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java @@ -129,7 +129,7 @@ public class WidgetsModel { LauncherAppWidgetProviderInfo.fromProviderInfo(context, widgetInfo); widgetsAndShortcuts.add(new WidgetItem( - launcherWidgetInfo, idp, app.getIconCache())); + launcherWidgetInfo, idp, app.getIconCache(), app.getContext())); updatedItems.add(launcherWidgetInfo); } @@ -200,7 +200,8 @@ public class WidgetsModel { app.getContext().getPackageManager())); } else { items.set(i, new WidgetItem(item.widgetInfo, - app.getInvariantDeviceProfile(), app.getIconCache())); + app.getInvariantDeviceProfile(), app.getIconCache(), + app.getContext())); } } } diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java index 76492ba00f..8fc4481095 100644 --- a/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java +++ b/tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java @@ -147,7 +147,7 @@ public final class WidgetsListHeaderViewHolderBinderTest { widgetItems.add(new WidgetItem( LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, widgetInfo), - mTestProfile, mIconCache)); + mTestProfile, mIconCache, mContext)); } return widgetItems; } diff --git a/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java b/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java index e0101f5844..60590e75e3 100644 --- a/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java +++ b/tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java @@ -144,7 +144,7 @@ public final class WidgetsListTableViewHolderBinderTest { widgetItems.add(new WidgetItem( LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, widgetInfo), - mTestProfile, mIconCache)); + mTestProfile, mIconCache, mContext)); } return widgetItems; } diff --git a/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java b/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java index d8f1f14de6..755261915d 100644 --- a/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java +++ b/tests/src/com/android/launcher3/widget/picker/model/WidgetsListContentEntryTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.doAnswer; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; +import android.content.Context; import android.os.UserHandle; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -249,12 +250,13 @@ public final class WidgetsListContentEntryTest { String label = mWidgetsToLabels.get(componentName); AppWidgetProviderInfo widgetInfo = createAppWidgetProviderInfo(componentName); + Context context = getApplicationContext(); LauncherAppWidgetProviderInfo launcherAppWidgetProviderInfo = - LauncherAppWidgetProviderInfo.fromProviderInfo(getApplicationContext(), widgetInfo); + LauncherAppWidgetProviderInfo.fromProviderInfo(context, widgetInfo); launcherAppWidgetProviderInfo.spanX = spanX; launcherAppWidgetProviderInfo.spanY = spanY; launcherAppWidgetProviderInfo.label = label; - return new WidgetItem(launcherAppWidgetProviderInfo, mTestProfile, mIconCache); + return new WidgetItem(launcherAppWidgetProviderInfo, mTestProfile, mIconCache, context); } } diff --git a/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java b/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java index 0124f73f2c..9c03ccf13f 100644 --- a/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java +++ b/tests/src/com/android/launcher3/widget/picker/search/SimpleWidgetsSearchAlgorithmTest.java @@ -202,7 +202,7 @@ public class SimpleWidgetsSearchAlgorithmTest { WidgetItem widgetItem = new WidgetItem( LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, widgetInfo), - mTestProfile, mIconCache); + mTestProfile, mIconCache, mContext); widgetItems.add(widgetItem); } return widgetItems; diff --git a/tests/src/com/android/launcher3/widget/picker/util/WidgetsTableUtilsTest.java b/tests/src/com/android/launcher3/widget/picker/util/WidgetsTableUtilsTest.java index 834f8517a2..2c5a39621a 100644 --- a/tests/src/com/android/launcher3/widget/picker/util/WidgetsTableUtilsTest.java +++ b/tests/src/com/android/launcher3/widget/picker/util/WidgetsTableUtilsTest.java @@ -218,19 +218,18 @@ public final class WidgetsTableUtilsTest { new Point(2, 4), new Point(4, 4)); ArrayList widgetItems = new ArrayList<>(); - widgetSizes.stream().forEach( - widgetSize -> { - AppWidgetProviderInfo info = createAppWidgetProviderInfo( - ComponentName.createRelative( - TEST_PACKAGE, - ".WidgetProvider_" + widgetSize.x + "x" + widgetSize.y)); - LauncherAppWidgetProviderInfo widgetInfo = - LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); - widgetInfo.spanX = widgetSize.x; - widgetInfo.spanY = widgetSize.y; - widgetItems.add(new WidgetItem(widgetInfo, mTestInvariantProfile, mIconCache)); - } - ); + widgetSizes.stream().forEach(widgetSize -> { + AppWidgetProviderInfo info = createAppWidgetProviderInfo( + ComponentName.createRelative( + TEST_PACKAGE, + ".WidgetProvider_" + widgetSize.x + "x" + widgetSize.y)); + LauncherAppWidgetProviderInfo widgetInfo = + LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); + widgetInfo.spanX = widgetSize.x; + widgetInfo.spanY = widgetSize.y; + widgetItems.add(new WidgetItem( + widgetInfo, mTestInvariantProfile, mIconCache, mContext)); + }); mWidget1x1 = widgetItems.get(0); mWidget2x2 = widgetItems.get(1); mWidget2x3 = widgetItems.get(2);