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

Commit cb41ac5f authored by Mohammad Samiul Islam's avatar Mohammad Samiul Islam Committed by Android (Google) Code Review
Browse files

Merge "Simplify handleStartCopy method so that it is easier to understand"

parents 87f3948a cf70e8f1
Loading
Loading
Loading
Loading
+61 −76
Original line number Diff line number Diff line
@@ -14813,35 +14813,27 @@ public class PackageManagerService extends IPackageManager.Stub
         * on the install location.
         */
        public void handleStartCopy() {
            int ret = PackageManager.INSTALL_SUCCEEDED;
            PackageInfoLite pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mContext,
                    origin.resolvedPath, installFlags, packageAbiOverride);
            final boolean ephemeral = (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0;
            if (DEBUG_INSTANT && ephemeral) {
                Slog.v(TAG, "pkgLite for install: " + pkgLite);
            }
            // If we're already staged, we've firmly committed to an install location
            if (origin.staged) {
                // If we're already staged, we've firmly committed to an install location
                if (origin.file != null) {
                    installFlags |= PackageManager.INSTALL_INTERNAL;
                } else {
                    throw new IllegalStateException("Invalid stage location");
                }
            }
            final boolean onInt = (installFlags & PackageManager.INSTALL_INTERNAL) != 0;
            final boolean ephemeral = (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0;
            PackageInfoLite pkgLite = null;
            pkgLite = PackageManagerServiceUtils.getMinimalPackageInfo(mContext,
                    origin.resolvedPath, installFlags, packageAbiOverride);
            if (DEBUG_INSTANT && ephemeral) {
                Slog.v(TAG, "pkgLite for install: " + pkgLite);
            }
            } else if (pkgLite.recommendedInstallLocation
                    == PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE) {
                /*
             * If we have too little free space, try to free cache
                 * If we are not staged and have too little free space, try to free cache
                 * before giving up.
                 */
            if (!origin.staged && pkgLite.recommendedInstallLocation
                    == PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE) {
                // TODO: focus freeing disk space on the target device
                final StorageManager storage = StorageManager.from(mContext);
                final long lowThreshold = storage.getStorageLowBytes(
@@ -14871,8 +14863,7 @@ public class PackageManagerService extends IPackageManager.Stub
                }
            }
            if (ret == PackageManager.INSTALL_SUCCEEDED) {
            int ret = PackageManager.INSTALL_SUCCEEDED;
            int loc = pkgLite.recommendedInstallLocation;
            if (loc == PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION) {
                ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
@@ -14889,6 +14880,9 @@ public class PackageManagerService extends IPackageManager.Stub
            } else {
                // Override with defaults if needed.
                loc = installLocationPolicy(pkgLite);
                final boolean onInt = (installFlags & PackageManager.INSTALL_INTERNAL) != 0;
                if (loc == PackageHelper.RECOMMEND_FAILED_VERSION_DOWNGRADE) {
                    ret = PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE;
                } else if (loc == PackageHelper.RECOMMEND_FAILED_WRONG_INSTALLED_VERSION) {
@@ -14898,12 +14892,6 @@ public class PackageManagerService extends IPackageManager.Stub
                    if (loc == PackageHelper.RECOMMEND_INSTALL_EXTERNAL) {
                        // Set the flag to install on external media.
                        installFlags &= ~PackageManager.INSTALL_INTERNAL;
                        } else if (loc == PackageHelper.RECOMMEND_INSTALL_EPHEMERAL) {
                            if (DEBUG_INSTANT) {
                                Slog.v(TAG, "...setting INSTALL_EPHEMERAL install flag");
                            }
                            installFlags |= PackageManager.INSTALL_INSTANT_APP;
                            installFlags &= ~PackageManager.INSTALL_INTERNAL;
                    } else {
                        // Make sure the flag for installing on external
                        // media is unset
@@ -14911,19 +14899,19 @@ public class PackageManagerService extends IPackageManager.Stub
                    }
                }
            }
            }
            final InstallArgs args = createInstallArgs(this);
            mVerificationCompleted = true;
            mIntegrityVerificationCompleted = true;
            mEnableRollbackCompleted = true;
            mArgs = args;
            if (ret == PackageManager.INSTALL_SUCCEEDED) {
            // Now that installFlags is finalized, we can create an immutable InstallArgs
            mArgs = createInstallArgs(this);
            // Perform package verification and enable rollback (unless we are simply moving the
            // package).
            if (ret == PackageManager.INSTALL_SUCCEEDED && !origin.existing) {
                final int verificationId = mPendingVerificationToken++;
                // Perform package verification (unless we are simply moving the package).
                if (!origin.existing) {
                PackageVerificationState verificationState =
                        new PackageVerificationState(this);
                mPendingVerification.append(verificationId, verificationState);
@@ -14936,11 +14924,8 @@ public class PackageManagerService extends IPackageManager.Stub
                if (verificationState.areAllVerificationsComplete()) {
                    mPendingVerification.remove(verificationId);
                }
                }
                if ((installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0) {
                    // TODO(ruhler) b/112431924: Don't do this in case of 'move'?
                    final int enableRollbackToken = mPendingEnableRollbackToken++;
                    Trace.asyncTraceBegin(
                            TRACE_TAG_PACKAGE_MANAGER, "enable_rollback", enableRollbackToken);