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

Commit 04bdf998 authored by JW Wang's avatar JW Wang
Browse files

Early detection of mis-configuration (1/n)

Move the check to addChildSessionId() to reject the error
as early as possible.

Bug: 203026561
Test: will be added to CtsAtomicInstallTestCases

Change-Id: I30a6161d8ae5a15c270793c80280247b5ae55fa5
parent 2417a8a4
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -2406,13 +2406,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        final VerificationParams verifyingSession = prepareForVerification();
        if (isMultiPackage()) {
            final List<PackageInstallerSession> childSessions = getChildSessions();
            // Spot check to reject a non-staged multi package install of APEXes and APKs.
            if (!params.isStaged && containsApkSession()
                    && sessionContains(s -> s.isApexSession())) {
                throw new PackageManagerException(
                    PackageManager.INSTALL_FAILED_SESSION_INVALID,
                    "Non-staged multi package install of APEX and APK packages is not supported");
            }
            List<VerificationParams> verifyingChildSessions =
                    new ArrayList<>(childSessions.size());
            boolean success = true;
@@ -4172,6 +4165,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                    + childSession.sessionId + " and session " + sessionId
                    + " have inconsistent rollback settings");
        }
        boolean hasAPK = containsApkSession() || !childSession.isApexSession();
        boolean hasAPEX = sessionContains(s -> s.isApexSession()) || childSession.isApexSession();
        if (!params.isStaged && hasAPK && hasAPEX) {
            throw new IllegalStateException("Mix of APK and APEX is not supported for "
                    + "non-staged multi-package session");
        }

        try {
            acquireTransactionLock();