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

Commit bf7371e5 authored by Jon Miranda's avatar Jon Miranda Committed by android-build-merger
Browse files

Key by both package and user for list of active install sessions.

am: c1322b6a

Change-Id: I112298649de8f9abd0898fdf4feda02395b7a31c
parents 315732e5 c1322b6a
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3.compat;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionInfo;
import android.os.Process;
import android.os.UserHandle;

@@ -29,6 +30,7 @@ import java.util.List;
import androidx.annotation.NonNull;

import com.android.launcher3.Utilities;
import com.android.launcher3.util.PackageUserKey;

public abstract class PackageInstallerCompat {

@@ -52,19 +54,19 @@ public abstract class PackageInstallerCompat {
        }
    }

    public static UserHandle getUserHandle(PackageInstaller.SessionInfo info) {
    public static UserHandle getUserHandle(SessionInfo info) {
        return Utilities.ATLEAST_Q ? info.getUser() : Process.myUserHandle();
    }

    /**
     * @return a map of active installs to their progress
     */
    public abstract HashMap<String, PackageInstaller.SessionInfo> updateAndGetActiveSessionCache();
    public abstract HashMap<PackageUserKey, SessionInfo> updateAndGetActiveSessionCache();

    /**
     * @return an active SessionInfo for {@param pkg} or null if none exists.
     */
    public abstract PackageInstaller.SessionInfo getActiveSessionInfo(UserHandle user, String pkg);
    public abstract SessionInfo getActiveSessionInfo(UserHandle user, String pkg);

    public abstract void onStop();

@@ -75,7 +77,7 @@ public abstract class PackageInstallerCompat {
        public final int progress;
        public final UserHandle user;

        private PackageInstallInfo(@NonNull PackageInstaller.SessionInfo info) {
        private PackageInstallInfo(@NonNull SessionInfo info) {
            this.state = STATUS_INSTALLING;
            this.packageName = info.getAppPackageName();
            this.componentName = new ComponentName(packageName, "");
@@ -91,7 +93,7 @@ public abstract class PackageInstallerCompat {
            this.user = user;
        }

        public static PackageInstallInfo fromInstallingState(PackageInstaller.SessionInfo info) {
        public static PackageInstallInfo fromInstallingState(SessionInfo info) {
            return new PackageInstallInfo(info);
        }

@@ -101,7 +103,7 @@ public abstract class PackageInstallerCompat {

    }

    public abstract List<PackageInstaller.SessionInfo> getAllVerifiedSessions();
    public abstract List<SessionInfo> getAllVerifiedSessions();

    /**
     * Returns true if a promise icon was already added to the home screen for {@param sessionId}.
+4 −3
Original line number Diff line number Diff line
@@ -89,12 +89,13 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat {
    }

    @Override
    public HashMap<String, SessionInfo> updateAndGetActiveSessionCache() {
        HashMap<String, SessionInfo> activePackages = new HashMap<>();
    public HashMap<PackageUserKey, SessionInfo> updateAndGetActiveSessionCache() {
        HashMap<PackageUserKey, SessionInfo> activePackages = new HashMap<>();
        for (SessionInfo info : getAllVerifiedSessions()) {
            addSessionInfoToCache(info, getUserHandle(info));
            if (info.getAppPackageName() != null) {
                activePackages.put(info.getAppPackageName(), info);
                activePackages.put(new PackageUserKey(info.getAppPackageName(),
                        getUserHandle(info)), info);
                mActiveSessions.put(info.getSessionId(),
                        new PackageUserKey(info.getAppPackageName(), getUserHandle(info)));
            }
+10 −5
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherAppWidgetInfo;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.PackageUserKey;

import java.util.ArrayList;
import java.util.HashMap;
@@ -34,6 +35,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;

import static android.os.Process.myUserHandle;

/**
 * Helper class to send broadcasts to package installers that have:
 * - Items on the first screen
@@ -60,7 +63,7 @@ public class FirstScreenBroadcast {

    private final MultiHashMap<String, String> mPackagesForInstaller;

    public FirstScreenBroadcast(HashMap<String, SessionInfo> sessionInfoForPackage) {
    public FirstScreenBroadcast(HashMap<PackageUserKey, SessionInfo> sessionInfoForPackage) {
        mPackagesForInstaller = getPackagesForInstaller(sessionInfoForPackage);
    }

@@ -69,11 +72,13 @@ public class FirstScreenBroadcast {
     *         of packages with active sessions for that installer.
     */
    private MultiHashMap<String, String> getPackagesForInstaller(
            HashMap<String, SessionInfo> sessionInfoForPackage) {
            HashMap<PackageUserKey, SessionInfo> sessionInfoForPackage) {
        MultiHashMap<String, String> packagesForInstaller = new MultiHashMap<>();
        for (Map.Entry<String, SessionInfo> entry : sessionInfoForPackage.entrySet()) {
        for (Map.Entry<PackageUserKey, SessionInfo> entry : sessionInfoForPackage.entrySet()) {
            if (myUserHandle().equals(entry.getKey().mUser)) {
                packagesForInstaller.addToList(entry.getValue().getInstallerPackageName(),
                    entry.getKey());
                        entry.getKey().mPackageName);
            }
        }
        return packagesForInstaller;
    }
+5 −2
Original line number Diff line number Diff line
@@ -34,10 +34,12 @@ import com.android.launcher3.provider.LauncherDbUtils.SQLiteTransaction;
import com.android.launcher3.util.GridOccupancy;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSparseArrayMap;
import com.android.launcher3.util.PackageUserKey;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.function.Consumer;

import androidx.annotation.VisibleForTesting;

@@ -970,8 +972,9 @@ public class GridSizeMigrationTask {
                .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES)) {
            validPackages.add(info.packageName);
        }
        validPackages.addAll(PackageInstallerCompat.getInstance(context)
                .updateAndGetActiveSessionCache().keySet());
        PackageInstallerCompat.getInstance(context)
                .updateAndGetActiveSessionCache().keySet()
                .forEach(packageUserKey -> validPackages.add(packageUserKey.mPackageName));
        return validPackages;
    }

+6 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3.model;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_LOCKED_USER;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_SAFEMODE;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_SUSPENDED;
import static com.android.launcher3.compat.PackageInstallerCompat.getUserHandle;
import static com.android.launcher3.model.LoaderResults.filterCurrentWorkspaceItems;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.PackageManagerHelper.isSystemApp;
@@ -75,6 +76,7 @@ import com.android.launcher3.util.IOUtils;
import com.android.launcher3.util.LooperIdleLock;
import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.TraceHelper;

import java.util.ArrayList;
@@ -295,8 +297,9 @@ public class LoaderTask implements Runnable {
        synchronized (mBgDataModel) {
            mBgDataModel.clear();

            final HashMap<String, SessionInfo> installingPkgs =
            final HashMap<PackageUserKey, SessionInfo> installingPkgs =
                    mPackageInstaller.updateAndGetActiveSessionCache();
            final PackageUserKey tempPackageKey = new PackageUserKey(null, null);
            mFirstScreenBroadcast = new FirstScreenBroadcast(installingPkgs);

            Map<ShortcutKey, ShortcutInfo> shortcutKeyToPinnedShortcuts = new HashMap<>();
@@ -433,9 +436,10 @@ public class LoaderTask implements Runnable {
                                    // installed later.
                                    FileLog.d(TAG, "package not yet restored: " + targetPkg);

                                    tempPackageKey.update(targetPkg, c.user);
                                    if (c.hasRestoreFlag(WorkspaceItemInfo.FLAG_RESTORE_STARTED)) {
                                        // Restore has started once.
                                    } else if (installingPkgs.containsKey(targetPkg)) {
                                    } else if (installingPkgs.containsKey(tempPackageKey)) {
                                        // App restore has started. Update the flag
                                        c.restoreFlag |= WorkspaceItemInfo.FLAG_RESTORE_STARTED;
                                        c.updater().put(LauncherSettings.Favorites.RESTORED,
Loading