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

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

Merge "Create InstallParams directly"

parents 5a82063f af5ea8b3
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -1805,21 +1805,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {

    private void installNonStaged(List<PackageInstallerSession> childSessions)
            throws PackageManagerException {
        final PackageManagerService.ActiveInstallSession installingSession =
                makeSessionActiveForInstall();
        final PackageManagerService.InstallParams installingSession =
                makeInstallParams();
        if (installingSession == null) {
            return;
        }
        if (isMultiPackage()) {
            List<PackageManagerService.ActiveInstallSession> installingChildSessions =
            List<PackageManagerService.InstallParams> installingChildSessions =
                    new ArrayList<>(childSessions.size());
            boolean success = true;
            PackageManagerException failure = null;
            for (int i = 0; i < childSessions.size(); ++i) {
                final PackageInstallerSession session = childSessions.get(i);
                try {
                    final PackageManagerService.ActiveInstallSession installingChildSession =
                            session.makeSessionActiveForInstall();
                    final PackageManagerService.InstallParams installingChildSession =
                            session.makeInstallParams();
                    if (installingChildSession != null) {
                        installingChildSessions.add(installingChildSession);
                    }
@@ -2017,9 +2017,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {

    /**
     * Stages this session for install and returns a
     * {@link PackageManagerService.ActiveInstallSession} representing this new staged state.
     * {@link PackageManagerService.InstallParams} representing this new staged state.
     */
    private PackageManagerService.ActiveInstallSession makeSessionActiveForInstall()
    private PackageManagerService.InstallParams makeInstallParams()
            throws PackageManagerException {
        synchronized (mLock) {
            if (mDestroyed) {
@@ -2056,9 +2056,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        }

        synchronized (mLock) {
            return new PackageManagerService.ActiveInstallSession(mPackageName, stageDir,
                    localObserver, sessionId, params, mInstallerUid, mInstallSource, user,
                    mSigningDetails);
            return mPm.new InstallParams(stageDir, localObserver, params, mInstallSource, user,
                    mSigningDetails, mInstallerUid);
        }
    }

+29 −120
Original line number Diff line number Diff line
@@ -12853,15 +12853,8 @@ public class PackageManagerService extends IPackageManager.Stub
        return installReason;
    }
    void installStage(ActiveInstallSession activeInstallSession) {
        if (DEBUG_INSTANT) {
            if ((activeInstallSession.getSessionParams().installFlags
                    & PackageManager.INSTALL_INSTANT_APP) != 0) {
                Slog.d(TAG, "Ephemeral install of " + activeInstallSession.getPackageName());
            }
        }
    void installStage(InstallParams params) {
        final Message msg = mHandler.obtainMessage(INIT_COPY);
        final InstallParams params = new InstallParams(activeInstallSession);
        params.setTraceMethod("installStage").setTraceCookie(System.identityHashCode(params));
        msg.obj = params;
@@ -12873,11 +12866,11 @@ public class PackageManagerService extends IPackageManager.Stub
        mHandler.sendMessage(msg);
    }
    void installStage(ActiveInstallSession parent, List<ActiveInstallSession> children)
    void installStage(InstallParams parent, List<InstallParams> children)
            throws PackageManagerException {
        final Message msg = mHandler.obtainMessage(INIT_COPY);
        final MultiPackageInstallParams params =
                new MultiPackageInstallParams(UserHandle.ALL, parent, children);
                new MultiPackageInstallParams(parent, children);
        params.setTraceMethod("installStageMultiPackage")
                .setTraceCookie(System.identityHashCode(params));
        msg.obj = params;
@@ -14764,23 +14757,19 @@ public class PackageManagerService extends IPackageManager.Stub
     * committed together.
     */
    class MultiPackageInstallParams extends HandlerParams {
        private final ArrayList<InstallParams> mChildParams;
        private final List<InstallParams> mChildParams;
        private final Map<InstallArgs, Integer> mCurrentState;
        MultiPackageInstallParams(
                @NonNull UserHandle user,
                @NonNull ActiveInstallSession parent,
                @NonNull List<ActiveInstallSession> activeInstallSessions)
        MultiPackageInstallParams(InstallParams parent, List<InstallParams> childParams)
                throws PackageManagerException {
            super(user);
            if (activeInstallSessions.size() == 0) {
            super(parent.getUser());
            if (childParams.size() == 0) {
                throw new PackageManagerException("No child sessions found!");
            }
            mChildParams = new ArrayList<>(activeInstallSessions.size());
            for (int i = 0; i < activeInstallSessions.size(); i++) {
                final InstallParams childParams = new InstallParams(activeInstallSessions.get(i));
                childParams.mParentInstallParams = this;
                this.mChildParams.add(childParams);
            mChildParams = childParams;
            for (int i = 0; i < childParams.size(); i++) {
                final InstallParams childParam = childParams.get(i);
                childParam.mParentInstallParams = this;
            }
            this.mCurrentState = new ArrayMap<>(mChildParams.size());
        }
@@ -14825,7 +14814,6 @@ public class PackageManagerService extends IPackageManager.Stub
    }
    class InstallParams extends HandlerParams {
        // TODO: see if we can collapse this into ActiveInstallSession
        final OriginInfo origin;
        final MoveInfo move;
        final IPackageInstallObserver2 observer;
@@ -14845,10 +14833,7 @@ public class PackageManagerService extends IPackageManager.Stub
        InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
                int installFlags, InstallSource installSource, String volumeUuid,
                UserHandle user, String packageAbiOverride,
                String[] grantedPermissions, List<String> whitelistedRestrictedPermissions,
                int autoRevokePermissionsMode,
                SigningDetails signingDetails, int installReason, int dataLoaderType) {
                UserHandle user, String packageAbiOverride) {
            super(user);
            this.origin = origin;
            this.move = move;
@@ -14857,40 +14842,33 @@ public class PackageManagerService extends IPackageManager.Stub
            this.installSource = Preconditions.checkNotNull(installSource);
            this.volumeUuid = volumeUuid;
            this.packageAbiOverride = packageAbiOverride;
            this.grantedRuntimePermissions = grantedPermissions;
            this.whitelistedRestrictedPermissions = whitelistedRestrictedPermissions;
            this.autoRevokePermissionsMode = autoRevokePermissionsMode;
            this.signingDetails = signingDetails;
            this.installReason = installReason;
            this.grantedRuntimePermissions = null;
            this.whitelistedRestrictedPermissions = null;
            this.autoRevokePermissionsMode = MODE_DEFAULT;
            this.signingDetails = PackageParser.SigningDetails.UNKNOWN;
            this.installReason = PackageManager.INSTALL_REASON_UNKNOWN;
            this.forceQueryableOverride = false;
            this.mDataLoaderType = dataLoaderType;
            this.mDataLoaderType = DataLoaderType.NONE;
        }
        InstallParams(ActiveInstallSession activeInstallSession) {
            super(activeInstallSession.getUser());
            final PackageInstaller.SessionParams sessionParams =
                    activeInstallSession.getSessionParams();
            if (DEBUG_INSTANT) {
                if ((sessionParams.installFlags
                        & PackageManager.INSTALL_INSTANT_APP) != 0) {
                    Slog.d(TAG, "Ephemeral install of " + activeInstallSession.getPackageName());
                }
            }
            origin = OriginInfo.fromStagedFile(activeInstallSession.getStagedDir());
        InstallParams(File stagedDir, IPackageInstallObserver2 observer,
                PackageInstaller.SessionParams sessionParams, InstallSource installSource,
                UserHandle user, SigningDetails signingDetails, int installerUid) {
            super(user);
            origin = OriginInfo.fromStagedFile(stagedDir);
            move = null;
            installReason = fixUpInstallReason(
                    activeInstallSession.getInstallSource().installerPackageName,
                    activeInstallSession.getInstallerUid(),
                    sessionParams.installReason);
            observer = activeInstallSession.getObserver();
                    installSource.installerPackageName, installerUid, sessionParams.installReason);
            this.observer = observer;
            installFlags = sessionParams.installFlags;
            installSource = activeInstallSession.getInstallSource();
            this.installSource = installSource;
            volumeUuid = sessionParams.volumeUuid;
            packageAbiOverride = sessionParams.abiOverride;
            grantedRuntimePermissions = sessionParams.grantedRuntimePermissions;
            whitelistedRestrictedPermissions = sessionParams.whitelistedRestrictedPermissions;
            autoRevokePermissionsMode = sessionParams.autoRevokePermissionsMode;
            signingDetails = activeInstallSession.getSigningDetails();
            this.signingDetails = signingDetails;
            forceQueryableOverride = sessionParams.forceQueryableOverride;
            mDataLoaderType = (sessionParams.dataLoaderParams != null)
                    ? sessionParams.dataLoaderParams.getType() : DataLoaderType.NONE;
@@ -23449,11 +23427,7 @@ public class PackageManagerService extends IPackageManager.Stub
        final Message msg = mHandler.obtainMessage(INIT_COPY);
        final OriginInfo origin = OriginInfo.fromExistingFile(codeFile);
        final InstallParams params = new InstallParams(origin, move, installObserver, installFlags,
                installSource, volumeUuid, user,
                packageAbiOverride, null /*grantedPermissions*/,
                null /*whitelistedRestrictedPermissions*/, MODE_DEFAULT /* autoRevokePermissions */,
                PackageParser.SigningDetails.UNKNOWN,
                PackageManager.INSTALL_REASON_UNKNOWN, DataLoaderType.NONE);
                installSource, volumeUuid, user, packageAbiOverride);
        params.setTraceMethod("movePackage").setTraceCookie(System.identityHashCode(params));
        msg.obj = params;
@@ -25699,71 +25673,6 @@ public class PackageManagerService extends IPackageManager.Stub
    public List<String> getMimeGroup(String packageName, String mimeGroup) {
        return mSettings.mPackages.get(packageName).getMimeGroup(mimeGroup);
    }
    // TODO(samiul): Get rid of this class. The callers can create InstallParams and
    //  VerificationParams directly.
    static class ActiveInstallSession {
        private final String mPackageName;
        private final File mStagedDir;
        private final IPackageInstallObserver2 mObserver;
        private final int mSessionId;
        private final PackageInstaller.SessionParams mSessionParams;
        private final int mInstallerUid;
        @NonNull private final InstallSource mInstallSource;
        private final UserHandle mUser;
        private final SigningDetails mSigningDetails;
        ActiveInstallSession(String packageName, File stagedDir, IPackageInstallObserver2 observer,
                int sessionId, PackageInstaller.SessionParams sessionParams, int installerUid,
                InstallSource installSource, UserHandle user, SigningDetails signingDetails) {
            mPackageName = packageName;
            mStagedDir = stagedDir;
            mObserver = observer;
            mSessionId = sessionId;
            mSessionParams = sessionParams;
            mInstallerUid = installerUid;
            mInstallSource = Preconditions.checkNotNull(installSource);
            mUser = user;
            mSigningDetails = signingDetails;
        }
        public String getPackageName() {
            return mPackageName;
        }
        public File getStagedDir() {
            return mStagedDir;
        }
        public IPackageInstallObserver2 getObserver() {
            return mObserver;
        }
        public int getSessionId() {
            return mSessionId;
        }
        public PackageInstaller.SessionParams getSessionParams() {
            return mSessionParams;
        }
        public int getInstallerUid() {
            return mInstallerUid;
        }
        @NonNull
        public InstallSource getInstallSource() {
            return mInstallSource;
        }
        public UserHandle getUser() {
            return mUser;
        }
        public SigningDetails getSigningDetails() {
            return mSigningDetails;
        }
    }
}
interface PackageSender {