From 8cce9dd83aecd90920db751ab3f8fb6969f087c5 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 14 Oct 2014 11:07:33 -0700 Subject: DO NOT MERGE Rechecking unrestored items when launcher gets created Bug: 17941096 Change-Id: Ic54464a9c64442d6784cda44ef22fa3d08e22f1f --- src/com/android/launcher3/Launcher.java | 19 +++++++ src/com/android/launcher3/LauncherModel.java | 59 ++++++++++++++++++++++ .../launcher3/compat/PackageInstallerCompatVL.java | 3 +- 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 6603dcedb..42ec4fb48 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4610,6 +4610,7 @@ public class Launcher extends Activity mIntentsOnWorkspaceFromUpgradePath = mWorkspace.getUniqueComponents(true, null); } PackageInstallerCompat.getInstance(this).onFinishBind(); + mModel.recheckRestoredItems(this); } private void sendLoadingCompleteBroadcastIfNecessary() { @@ -4718,6 +4719,24 @@ public class Launcher extends Activity } } + /** + * Packages were restored + */ + public void bindAppsRestored(final ArrayList apps) { + Runnable r = new Runnable() { + public void run() { + bindAppsRestored(apps); + } + }; + if (waitUntilResume(r)) { + return; + } + + if (mWorkspace != null) { + mWorkspace.updateShortcutsAndWidgets(apps); + } + } + /** * Update the state of a package, typically related to install state. * diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 60eb15f9c..c64506d80 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -198,6 +198,7 @@ public class LauncherModel extends BroadcastReceiver ArrayList addAnimated, ArrayList addedApps); public void bindAppsUpdated(ArrayList apps); + public void bindAppsRestored(ArrayList apps); public void updatePackageState(ArrayList installInfo); public void updatePackageBadge(String packageName); public void bindComponentsRemoved(ArrayList packageNames, @@ -2949,6 +2950,64 @@ public class LauncherModel extends BroadcastReceiver } } + /** + * Workaround to re-check unrestored items, in-case they were installed but the Package-ADD + * runnable was missed by the launcher. + */ + public void recheckRestoredItems(final Context context) { + Runnable r = new Runnable() { + + @Override + public void run() { + LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); + HashSet installedPackages = new HashSet(); + UserHandleCompat user = UserHandleCompat.myUserHandle(); + synchronized(sBgLock) { + for (ItemInfo info : sBgItemsIdMap.values()) { + if (info instanceof ShortcutInfo) { + ShortcutInfo si = (ShortcutInfo) info; + if (si.isPromise() && si.getTargetComponent() != null + && launcherApps.isPackageEnabledForProfile( + si.getTargetComponent().getPackageName(), user)) { + installedPackages.add(si.getTargetComponent().getPackageName()); + } + } else if (info instanceof LauncherAppWidgetInfo) { + LauncherAppWidgetInfo widget = (LauncherAppWidgetInfo) info; + if (widget.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) + && launcherApps.isPackageEnabledForProfile( + widget.providerName.getPackageName(), user)) { + installedPackages.add(widget.providerName.getPackageName()); + } + } + } + } + + if (!installedPackages.isEmpty()) { + final ArrayList restoredApps = new ArrayList(); + for (String pkg : installedPackages) { + for (LauncherActivityInfoCompat info : launcherApps.getActivityList(pkg, user)) { + restoredApps.add(new AppInfo(context, info, user, mIconCache, null)); + } + } + + final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null; + if (!restoredApps.isEmpty()) { + mHandler.post(new Runnable() { + public void run() { + Callbacks cb = mCallbacks != null ? mCallbacks.get() : null; + if (callbacks == cb && cb != null) { + callbacks.bindAppsRestored(restoredApps); + } + } + }); + } + + } + } + }; + sWorker.post(r); + } + private class PackageUpdatedTask implements Runnable { int mOp; String[] mPackages; diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index a84bf0224..16ad3792a 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -81,7 +81,6 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { @Override public void onStop() { - mInstaller.unregisterSessionCallback(mCallback); } @Override @@ -112,7 +111,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { // Not yet ready return; } - if ((mPendingReplays.size() == 0) && (newInfo == null)) { + if ((mPendingReplays.size() == 0) && (newInfo == null) && mPendingBadgeUpdates.isEmpty()) { // Nothing to update return; } -- cgit v1.2.3