DO NOT MERGE

Rechecking unrestored items when launcher gets created

Bug: 17941096
Change-Id: Ic54464a9c64442d6784cda44ef22fa3d08e22f1f
This commit is contained in:
Sunny Goyal
2014-10-14 11:07:33 -07:00
parent 0c2918f4f4
commit 8cce9dd83a
3 changed files with 79 additions and 2 deletions
+19
View File
@@ -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<AppInfo> 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.
*
@@ -198,6 +198,7 @@ public class LauncherModel extends BroadcastReceiver
ArrayList<ItemInfo> addAnimated,
ArrayList<AppInfo> addedApps);
public void bindAppsUpdated(ArrayList<AppInfo> apps);
public void bindAppsRestored(ArrayList<AppInfo> apps);
public void updatePackageState(ArrayList<PackageInstallInfo> installInfo);
public void updatePackageBadge(String packageName);
public void bindComponentsRemoved(ArrayList<String> 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<String> installedPackages = new HashSet<String>();
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<AppInfo> restoredApps = new ArrayList<AppInfo>();
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;
@@ -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;
}