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

Commit c5967e98 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

More progress on triaging PackageManager callers.

Catch a bunch of simple cases where the PackageManager flags are
obvious.  Add the ability to use the MATCH_SYSTEM_ONLY flag on
PackageInfo and ApplicationInfo queries.

Re-examine recent tasks after a user is unlocked, since some of the
activities may now be available and runnable.

Bug: 26471205, 26253870
Change-Id: I989d9f8409070e5cae13202b47e2c7de85bf4a5b
parent f0e4daec
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1815,7 +1815,9 @@ public final class ActivityThread {
        ApplicationInfo ai = null;
        try {
            ai = getPackageManager().getApplicationInfo(packageName,
                    PackageManager.GET_SHARED_LIBRARY_FILES, userId);
                    PackageManager.GET_SHARED_LIBRARY_FILES
                            | PackageManager.MATCH_DEBUG_TRIAGED_MISSING,
                    userId);
        } catch (RemoteException e) {
            // Ignore
        }
+1 −0
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ public abstract class PackageManager {
            MATCH_UNINSTALLED_PACKAGES,
            MATCH_DISABLED_COMPONENTS,
            MATCH_DISABLED_UNTIL_USED_COMPONENTS,
            MATCH_SYSTEM_ONLY,
            MATCH_DEBUG_TRIAGED_MISSING,
    })
    @Retention(RetentionPolicy.SOURCE)
+10 −6
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileUtils;
import android.os.PatternMatcher;
import android.os.Trace;
@@ -52,6 +51,7 @@ import android.util.Log;
import android.util.Pair;
import android.util.Slog;
import android.util.TypedValue;
import android.util.jar.StrictJarFile;
import android.view.Gravity;

import com.android.internal.R;
@@ -86,8 +86,6 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.zip.ZipEntry;

import android.util.jar.StrictJarFile;

/**
 * Parser for package files (APKs) on disk. This supports apps packaged either
 * as a single "monolithic" APK, or apps packaged as a "cluster" of multiple
@@ -421,8 +419,7 @@ public class PackageParser {
    public static PackageInfo generatePackageInfo(PackageParser.Package p,
            int gids[], int flags, long firstInstallTime, long lastUpdateTime,
            Set<String> grantedPermissions, PackageUserState state, int userId) {

        if (!checkUseInstalledOrHidden(flags, state)) {
        if (!checkUseInstalledOrHidden(flags, state) || !p.isMatch(flags)) {
            return null;
        }
        PackageInfo pi = new PackageInfo();
@@ -4623,6 +4620,13 @@ public class PackageParser {
                    && !isForwardLocked() && !applicationInfo.isExternalAsec();
        }

        public boolean isMatch(int flags) {
            if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) {
                return isSystemApp();
            }
            return true;
        }

        public String toString() {
            return "Package{"
                + Integer.toHexString(System.identityHashCode(this))
@@ -4873,7 +4877,7 @@ public class PackageParser {
    public static ApplicationInfo generateApplicationInfo(Package p, int flags,
            PackageUserState state, int userId) {
        if (p == null) return null;
        if (!checkUseInstalledOrHidden(flags, state)) {
        if (!checkUseInstalledOrHidden(flags, state) || !p.isMatch(flags)) {
            return null;
        }
        if (!copyNeeded(flags, p, state, null, userId)
+2 −1
Original line number Diff line number Diff line
@@ -882,7 +882,8 @@ public class StorageManager {
                }
                packageName = packageNames[0];
            }
            final int uid = ActivityThread.getPackageManager().getPackageUid(packageName, userId);
            final int uid = ActivityThread.getPackageManager().getPackageUidEtc(packageName,
                    PackageManager.MATCH_DEBUG_TRIAGED_MISSING, userId);
            if (uid <= 0) {
                return new StorageVolume[0];
            }
+3 −4
Original line number Diff line number Diff line
@@ -139,9 +139,8 @@ public class WebViewProviderInfo implements Parcelable {
    private String[] signatures;

    private PackageInfo packageInfo;

    // flags declaring we want extra info from the package manager
    private final static int PACKAGE_FLAGS =
        PackageManager.GET_META_DATA
        | PackageManager.GET_SIGNATURES;
    private final static int PACKAGE_FLAGS = PackageManager.GET_META_DATA
            | PackageManager.GET_SIGNATURES | PackageManager.MATCH_DEBUG_TRIAGED_MISSING;
}
Loading