Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8cce9dd8 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

DO NOT MERGE

Rechecking unrestored items when launcher gets created

Bug: 17941096
Change-Id: Ic54464a9c64442d6784cda44ef22fa3d08e22f1f
parent 0c2918f4
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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.
     *
+59 −0
Original line number Diff line number Diff line
@@ -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;
+1 −2
Original line number Diff line number Diff line
@@ -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;
        }