Merge "Fix transfer API." into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
92d9af6c47
@@ -1291,9 +1291,8 @@ public class PackageInstaller {
|
||||
*
|
||||
* @throws PackageManager.NameNotFoundException if the new owner could not be found.
|
||||
* @throws SecurityException if called after the session has been committed or abandoned.
|
||||
* @throws SecurityException if the session does not update the original installer
|
||||
* @throws SecurityException if streams opened through
|
||||
* {@link #openWrite(String, long, long) are still open.
|
||||
* @throws IllegalArgumentException if streams opened through
|
||||
* {@link #openWrite(String, long, long) are still open.
|
||||
*/
|
||||
public void transfer(@NonNull String packageName)
|
||||
throws PackageManager.NameNotFoundException {
|
||||
|
||||
@@ -267,6 +267,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
/** Uid of the creator of this session. */
|
||||
private final int mOriginalInstallerUid;
|
||||
|
||||
/** Package name of the app that created the installation session. */
|
||||
private final String mOriginalInstallerPackageName;
|
||||
|
||||
/** Uid of the owner of the installer session */
|
||||
@GuardedBy("mLock")
|
||||
private int mInstallerUid;
|
||||
@@ -556,6 +559,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
mOriginalInstallerUid = installerUid;
|
||||
mInstallerUid = installerUid;
|
||||
mInstallSource = Objects.requireNonNull(installSource);
|
||||
mOriginalInstallerPackageName = mInstallSource.installerPackageName;
|
||||
this.params = params;
|
||||
this.createdMillis = createdMillis;
|
||||
this.updatedMillis = createdMillis;
|
||||
@@ -1666,11 +1670,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
throw new IllegalArgumentException("Package is not valid", e);
|
||||
}
|
||||
|
||||
if (!mPackageName.equals(mInstallSource.installerPackageName)) {
|
||||
throw new SecurityException("Can only transfer sessions that update the original "
|
||||
+ "installer");
|
||||
}
|
||||
|
||||
mInstallerUid = newOwnerAppInfo.uid;
|
||||
mInstallSource = InstallSource.create(packageName, null, packageName);
|
||||
}
|
||||
@@ -2157,6 +2156,15 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (mInstallerUid != mOriginalInstallerUid) {
|
||||
// Session has been transferred, check package name.
|
||||
if (TextUtils.isEmpty(mPackageName) || !mPackageName.equals(
|
||||
mOriginalInstallerPackageName)) {
|
||||
throw new PackageManagerException(PackageManager.INSTALL_FAILED_PACKAGE_CHANGED,
|
||||
"Can only transfer sessions that update the original installer");
|
||||
}
|
||||
}
|
||||
|
||||
if (params.mode == SessionParams.MODE_FULL_INSTALL) {
|
||||
// Full installs must include a base package
|
||||
if (!stagedSplits.contains(null)) {
|
||||
@@ -3182,6 +3190,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
|
||||
pw.printPair("userId", userId);
|
||||
pw.printPair("mOriginalInstallerUid", mOriginalInstallerUid);
|
||||
pw.printPair("mOriginalInstallerPackageName", mOriginalInstallerPackageName);
|
||||
pw.printPair("installerPackageName", mInstallSource.installerPackageName);
|
||||
pw.printPair("installInitiatingPackageName", mInstallSource.initiatingPackageName);
|
||||
pw.printPair("installOriginatingPackageName", mInstallSource.originatingPackageName);
|
||||
|
||||
Reference in New Issue
Block a user