Merge "Create InstallParams directly"
This commit is contained in:
committed by
Android (Google) Code Review
commit
d7a14de01b
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user