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

Commit 9492d508 authored by John Wu's avatar John Wu Committed by Android (Google) Code Review
Browse files

Merge "Always parse sharedUserId and sharedUserLabel" into tm-dev

parents ffdd9002 a31246dc
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -183,7 +183,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ExecutorService;

@@ -1596,18 +1595,16 @@ final class InstallPackageHelper {
                        parsedPackage.setRestrictUpdateHash(oldPackage.getRestrictUpdateHash());
                    }

                    // Check for shared user id changes
                    if (!Objects.equals(oldPackage.getSharedUserId(),
                            parsedPackage.getSharedUserId())
                            // Don't mark as invalid if the app is trying to
                            // leave a sharedUserId
                            && parsedPackage.getSharedUserId() != null) {
                    // APK should not change its sharedUserId declarations
                    final var oldSharedUid = oldPackage.getSharedUserId() != null
                            ? oldPackage.getSharedUserId() : "<nothing>";
                    final var newSharedUid = parsedPackage.getSharedUserId() != null
                            ? parsedPackage.getSharedUserId() : "<nothing>";
                    if (!oldSharedUid.equals(newSharedUid)) {
                        throw new PrepareFailure(INSTALL_FAILED_UID_CHANGED,
                                "Package " + parsedPackage.getPackageName()
                                        + " shared user changed from "
                                        + (oldPackage.getSharedUserId() != null
                                        ? oldPackage.getSharedUserId() : "<nothing>")
                                        + " to " + parsedPackage.getSharedUserId());
                                        + oldSharedUid + " to " + newSharedUid);
                    }

                    // In case of rollback, remember per-user/profile install state
@@ -3696,10 +3693,13 @@ final class InstallPackageHelper {
            }
            disabledPkgSetting = mPm.mSettings.getDisabledSystemPkgLPr(
                    parsedPackage.getPackageName());
            sharedUserSetting = (parsedPackage.getSharedUserId() != null)
                    ? mPm.mSettings.getSharedUserLPw(parsedPackage.getSharedUserId(),
                    0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/, true)
                    : null;
            if (parsedPackage.getSharedUserId() != null && !parsedPackage.isLeavingSharedUid()) {
                sharedUserSetting = mPm.mSettings.getSharedUserLPw(
                        parsedPackage.getSharedUserId(),
                        0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/, true /*create*/);
            } else {
                sharedUserSetting = null;
            }
            if (DEBUG_PACKAGE_SCANNING
                    && (parseFlags & ParsingPackageUtils.PARSE_CHATTY) != 0
                    && sharedUserSetting != null) {
+3 −0
Original line number Diff line number Diff line
@@ -290,6 +290,9 @@ public interface ParsingPackage extends ParsingPackageRead {
    /** @see R#styleable.AndroidManifest_inheritKeyStoreKeys */
    ParsingPackage setInheritKeyStoreKeys(boolean inheritKeyStoreKeys);

    /** @see R#styleable.AndroidManifest_sharedUserMaxSdkVersion */
    ParsingPackage setLeavingSharedUid(boolean leavingSharedUid);

    ParsingPackage setLabelRes(int labelRes);

    ParsingPackage setLargestWidthLimitDp(int largestWidthLimitDp);
+11 −0
Original line number Diff line number Diff line
@@ -549,6 +549,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
        private static final long SDK_LIBRARY = 1L << 49;
        private static final long INHERIT_KEYSTORE_KEYS = 1L << 50;
        private static final long ENABLE_ON_BACK_INVOKED_CALLBACK = 1L << 51;
        private static final long LEAVING_SHARED_UID = 1L << 52;
    }

    private ParsingPackageImpl setBoolean(@Booleans.Values long flag, boolean value) {
@@ -2402,6 +2403,11 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
        return getBoolean(Booleans.ENABLE_ON_BACK_INVOKED_CALLBACK);
    }

    @Override
    public boolean isLeavingSharedUid() {
        return getBoolean(Booleans.LEAVING_SHARED_UID);
    }

    @Override
    public ParsingPackageImpl setBaseRevisionCode(int value) {
        baseRevisionCode = value;
@@ -2550,6 +2556,11 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
        return setBoolean(Booleans.INHERIT_KEYSTORE_KEYS, value);
    }

    @Override
    public ParsingPackageImpl setLeavingSharedUid(boolean value) {
        return setBoolean(Booleans.LEAVING_SHARED_UID, value);
    }

    @Override
    public ParsingPackageImpl setLabelRes(int value) {
        labelRes = value;
+7 −0
Original line number Diff line number Diff line
@@ -360,4 +360,11 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt
     * @see R.styleable.AndroidManifestApplication_enableOnBackInvokedCallback
     */
    boolean isOnBackInvokedCallbackEnabled();

    /**
     * Returns true if R.styleable#AndroidManifest_sharedUserMaxSdkVersion is set to a value
     * smaller than the current SDK version.
     * @see R.styleable#AndroidManifest_sharedUserMaxSdkVersion
     */
    boolean isLeavingSharedUid();
}
+4 −5
Original line number Diff line number Diff line
@@ -1032,11 +1032,6 @@ public class ParsingPackageUtils {

    private static ParseResult<ParsingPackage> parseSharedUser(ParseInput input,
            ParsingPackage pkg, TypedArray sa) {
        int maxSdkVersion = anInteger(0, R.styleable.AndroidManifest_sharedUserMaxSdkVersion, sa);
        if ((maxSdkVersion != 0) && maxSdkVersion < Build.VERSION.RESOURCES_SDK_INT) {
            return input.success(pkg);
        }

        String str = nonConfigString(0, R.styleable.AndroidManifest_sharedUserId, sa);
        if (TextUtils.isEmpty(str)) {
            return input.success(pkg);
@@ -1052,7 +1047,11 @@ public class ParsingPackageUtils {
            }
        }

        int maxSdkVersion = anInteger(0, R.styleable.AndroidManifest_sharedUserMaxSdkVersion, sa);
        boolean leaving = (maxSdkVersion != 0) && (maxSdkVersion < Build.VERSION.RESOURCES_SDK_INT);

        return input.success(pkg
                .setLeavingSharedUid(leaving)
                .setSharedUserId(str.intern())
                .setSharedUserLabel(resId(R.styleable.AndroidManifest_sharedUserLabel, sa)));
    }
Loading