From 2b823f452b6c0b7c0bb5ef67f77510ce75800809 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Tue, 2 May 2017 18:36:18 -0700 Subject: [PATCH] Show icon in PendingAppWidgetHostView immediately. Before this change, PendingAppWidgetHostView would appear 'blank' until they were loaded -- which could take a while depending on how many apps the user had, because the all apps icons are loaded first. Bug: 36815047 Change-Id: Ia7449cce4341ed9e9384fc8aaadeaae6c33bb262 --- src/com/android/launcher3/Launcher.java | 3 +++ src/com/android/launcher3/LauncherAppWidgetInfo.java | 6 ++++++ src/com/android/launcher3/LauncherModel.java | 10 ++++++++++ .../android/launcher3/PendingAppWidgetHostView.java | 11 +++++++---- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index a61e05af11..3a50bd1991 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3613,6 +3613,9 @@ public class Launcher extends BaseActivity LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) view.getTag(); info.restoreStatus = finalRestoreFlag; + if (info.restoreStatus == LauncherAppWidgetInfo.RESTORE_COMPLETED) { + info.pendingItemInfo = null; + } mWorkspace.reinflateWidgetsIfNecessary(); getModelWriter().updateItemInDatabase(info); diff --git a/src/com/android/launcher3/LauncherAppWidgetInfo.java b/src/com/android/launcher3/LauncherAppWidgetInfo.java index 1e0f28546b..6f23e56b34 100644 --- a/src/com/android/launcher3/LauncherAppWidgetInfo.java +++ b/src/com/android/launcher3/LauncherAppWidgetInfo.java @@ -21,6 +21,7 @@ import android.content.ComponentName; import android.content.Intent; import android.os.Process; +import com.android.launcher3.model.PackageItemInfo; import com.android.launcher3.util.ContentWriter; /** @@ -95,6 +96,11 @@ public class LauncherAppWidgetInfo extends ItemInfo { */ public Intent bindOptions; + /** + * Nonnull for pending widgets. We use this to get the icon and title for the widget. + */ + public PackageItemInfo pendingItemInfo; + private boolean mHasNotifiedInitialWidgetSizeChanged; public LauncherAppWidgetInfo(int appWidgetId, ComponentName providerName) { diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 53d9385065..c84eecbc2a 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1216,6 +1216,16 @@ public class LauncherModel extends BroadcastReceiver .commit(); } } + + if (appWidgetInfo.restoreStatus != + LauncherAppWidgetInfo.RESTORE_COMPLETED) { + String pkg = appWidgetInfo.providerName.getPackageName(); + appWidgetInfo.pendingItemInfo = new PackageItemInfo(pkg); + appWidgetInfo.pendingItemInfo.user = appWidgetInfo.user; + mIconCache.getTitleAndIconForApp( + appWidgetInfo.pendingItemInfo, false); + } + c.checkAndAddItem(appWidgetInfo, sBgDataModel); } break; diff --git a/src/com/android/launcher3/PendingAppWidgetHostView.java b/src/com/android/launcher3/PendingAppWidgetHostView.java index b163464ddb..de424aba1f 100644 --- a/src/com/android/launcher3/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/PendingAppWidgetHostView.java @@ -80,10 +80,13 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView updateAppWidget(null); setOnClickListener(mLauncher); - // Load icon - PackageItemInfo item = new PackageItemInfo(info.providerName.getPackageName()); - item.user = info.user; - cache.updateIconInBackground(this, item); + if (info.pendingItemInfo == null) { + info.pendingItemInfo = new PackageItemInfo(info.providerName.getPackageName()); + info.pendingItemInfo.user = info.user; + cache.updateIconInBackground(this, info.pendingItemInfo); + } else { + reapplyItemInfo(info.pendingItemInfo); + } } @Override