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

Commit 6daf8545 authored by Samiul Islam's avatar Samiul Islam
Browse files

Handle session abandonment correctly for Dependency Installer

Bug: 372862145
Test: atest PackageManagerShellCommandInstallTest
FLAG: android.content.pm.sdk_dependency_installer
Change-Id: I55eb598bc74fb61a82ce8ee2d4426930c5fd44f7
parent 369d0425
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ public class InstallDependencyHelper {

        if (missing.isEmpty()) {
            if (DEBUG) {
                Slog.i(TAG, "No missing dependency for " + pkg);
                Slog.d(TAG, "No missing dependency for " + pkg);
            }
            // No need for dependency resolution. Move to installation directly.
            callback.onResult(null);
@@ -125,7 +125,7 @@ public class InstallDependencyHelper {

    void notifySessionComplete(int sessionId, boolean success) {
        if (DEBUG) {
            Slog.i(TAG, "Session complete for " + sessionId + " result: " + success);
            Slog.d(TAG, "Session complete for " + sessionId + " result: " + success);
        }
        synchronized (mTrackers) {
            List<DependencyInstallTracker> completedTrackers = new ArrayList<>();
@@ -451,7 +451,6 @@ public class InstallDependencyHelper {
                if (!success) {
                    // If one of the dependency fails, the orig session would fail too.
                    onError(mCallback, "Failed to install all dependencies");
                    // TODO(b/372862145): Abandon the rest of the pending sessions.
                    return false; // No point in tracking anymore
                }

+1 −8
Original line number Diff line number Diff line
@@ -229,7 +229,6 @@ final class InstallPackageHelper {
    private final SharedLibrariesImpl mSharedLibraries;
    private final PackageManagerServiceInjector mInjector;
    private final UpdateOwnershipHelper mUpdateOwnershipHelper;
    private final InstallDependencyHelper mInstallDependencyHelper;

    private final Object mInternalLock = new Object();
    @GuardedBy("mInternalLock")
@@ -240,8 +239,7 @@ final class InstallPackageHelper {
                         AppDataHelper appDataHelper,
                         RemovePackageHelper removePackageHelper,
                         DeletePackageHelper deletePackageHelper,
                         BroadcastHelper broadcastHelper,
                         InstallDependencyHelper installDependencyHelper) {
                         BroadcastHelper broadcastHelper) {
        mPm = pm;
        mInjector = pm.mInjector;
        mAppDataHelper = appDataHelper;
@@ -255,7 +253,6 @@ final class InstallPackageHelper {
        mPackageAbiHelper = pm.mInjector.getAbiHelper();
        mSharedLibraries = pm.mInjector.getSharedLibrariesImpl();
        mUpdateOwnershipHelper = pm.mInjector.getUpdateOwnershipHelper();
        mInstallDependencyHelper = installDependencyHelper;
    }

    /**
@@ -1367,10 +1364,6 @@ final class InstallPackageHelper {
                }
            }
        }

        for (InstallRequest request : requests) {
            mInstallDependencyHelper.notifySessionComplete(request.getSessionId(), success);
        }
    }

    @GuardedBy("mPm.mInstallLock")
+2 −0
Original line number Diff line number Diff line
@@ -2329,6 +2329,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
                            }
                        }

                        mInstallDependencyHelper.notifySessionComplete(session.sessionId, success);

                        final File appIconFile = buildAppIconFile(session.sessionId);
                        if (appIconFile.exists()) {
                            appIconFile.delete();
+1 −2
Original line number Diff line number Diff line
@@ -2118,8 +2118,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mDeletePackageHelper = new DeletePackageHelper(this, mRemovePackageHelper,
                mBroadcastHelper);
        mInstallPackageHelper = new InstallPackageHelper(this, mAppDataHelper, mRemovePackageHelper,
                mDeletePackageHelper, mBroadcastHelper,
                injector.getPackageInstallerService().getInstallDependencyHelper());
                mDeletePackageHelper, mBroadcastHelper);

        mInstantAppRegistry = new InstantAppRegistry(mContext, mPermissionManager,
                mInjector.getUserManagerInternal(), mDeletePackageHelper);
+1 −1
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ public class ApexManagerTest {
        mMockSystem.system().validateFinalState();
        mInstallPackageHelper = new InstallPackageHelper(mPmService, mock(AppDataHelper.class),
                mock(RemovePackageHelper.class), mock(DeletePackageHelper.class),
                mock(BroadcastHelper.class), mock(InstallDependencyHelper.class));
                mock(BroadcastHelper.class));
    }

    @NonNull