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

Commit 07ad5ff0 authored by John Wu's avatar John Wu
Browse files

Update PackageInfo APIs to reflect shared UID status

Properly reflect the current status of shared UID in several
PackageManager public APIs that returns PackageInfo.

For getPackageArchiveInfo, we only consider the sharedUserMaxSdkVersion
attribute as a best effort to reflect the APK status.

Test: atest CtsSharedUserMigrationTestCases
Bug: 220015249
Change-Id: I9a0c5d5ad0dee19a86ab9f2af6deb254d8b5cbb7
parent 2f11dc5e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -121,6 +121,9 @@ public abstract class PackageManager {
    /** {@hide} */
    public static final boolean APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE = true;

    /** {@hide} */
    public static final boolean ENABLE_SHARED_UID_MIGRATION = true;

    /**
     * This exception is thrown when a given package, application, or component
     * name cannot be found.
+19 −12
Original line number Diff line number Diff line
@@ -1944,6 +1944,12 @@ public class PackageParser {
        TypedArray sa = res.obtainAttributes(parser,
                com.android.internal.R.styleable.AndroidManifest);

        int maxSdkVersion = 0;
        if (PackageManager.ENABLE_SHARED_UID_MIGRATION) {
            maxSdkVersion = sa.getInteger(
                    com.android.internal.R.styleable.AndroidManifest_sharedUserMaxSdkVersion, 0);
        }
        if (maxSdkVersion == 0 || maxSdkVersion >= Build.VERSION.RESOURCES_SDK_INT) {
            String str = sa.getNonConfigurationString(
                    com.android.internal.R.styleable.AndroidManifest_sharedUserId, 0);
            if (str != null && str.length() > 0) {
@@ -1958,6 +1964,7 @@ public class PackageParser {
                pkg.mSharedUserLabel = sa.getResourceId(
                        com.android.internal.R.styleable.AndroidManifest_sharedUserLabel, 0);
            }
        }

        pkg.installLocation = sa.getInteger(
                com.android.internal.R.styleable.AndroidManifest_installLocation,
+4 −10
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.pm;

import android.annotation.IntDef;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.SystemProperties;

@@ -59,22 +60,15 @@ public final class SharedUidMigration {
    @Retention(RetentionPolicy.SOURCE)
    public @interface Strategy {}

    @Strategy
    private static final int DEFAULT = BEST_EFFORT;

    /**
     * All shared UID migration is disabled.
     * This is not a strategy that can be set with system properties.
     * To disable shared UID migration, change {@link #DEFAULT} to this value.
     */
    private static final int DISABLED = 0;

    /**
     * Whether shared UID migration is fully disabled. Disabled means the sharedUserMaxSdkVersion
     * attribute will be directly ignored in the parsing phase.
     */
    @SuppressWarnings("ConstantConditions")
    public static boolean isDisabled() {
        return DEFAULT == DISABLED;
        return !PackageManager.ENABLE_SHARED_UID_MIGRATION;
    }

    /**
@@ -88,7 +82,7 @@ public final class SharedUidMigration {

        final int s = SystemProperties.getInt(PROPERTY_KEY, DEFAULT);
        // No transition strategies can be used (http://b/221088088)
        if (s > BEST_EFFORT || s <= DISABLED) {
        if (s > BEST_EFFORT || s < NEW_INSTALL_ONLY) {
            return DEFAULT;
        }
        return s;
+6 −0
Original line number Diff line number Diff line
@@ -122,6 +122,12 @@ public class PackageInfoUtils {
        info.isStub = pkg.isStub();
        info.coreApp = pkg.isCoreApp();

        if (!pkgSetting.hasSharedUser()) {
            // It is possible that this shared UID app has left
            info.sharedUserId = null;
            info.sharedUserLabel = 0;
        }

        if ((flags & PackageManager.GET_ACTIVITIES) != 0) {
            final int N = pkg.getActivities().size();
            if (N > 0) {