Always send result code to IntentSender, if present.

Bug: 276185613
Fixes: 276185613
Test: atest CtsPackageInstallTestCases
Change-Id: Ic3bc9acbab68fa5f0dce6e11cd718973a4c53406
This commit is contained in:
Alex Buynytskyy
2023-05-11 11:23:27 -07:00
parent 90c01a2a47
commit d08c0ec740
3 changed files with 23 additions and 13 deletions

View File

@@ -613,8 +613,8 @@ final class InstallPackageHelper {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
public int installExistingPackageAsUser(@Nullable String packageName, @UserIdInt int userId,
@PackageManager.InstallFlags int installFlags,
public Pair<Integer, IntentSender> installExistingPackageAsUser(@Nullable String packageName,
@UserIdInt int userId, @PackageManager.InstallFlags int installFlags,
@PackageManager.InstallReason int installReason,
@Nullable List<String> allowlistedRestrictedPermissions,
@Nullable IntentSender intentSender) {
@@ -639,7 +639,7 @@ final class InstallPackageHelper {
true /* requireFullPermission */, true /* checkShell */,
"installExistingPackage for user " + userId);
if (mPm.isUserRestricted(userId, UserManager.DISALLOW_INSTALL_APPS)) {
return PackageManager.INSTALL_FAILED_USER_RESTRICTED;
return Pair.create(PackageManager.INSTALL_FAILED_USER_RESTRICTED, intentSender);
}
final long callingId = Binder.clearCallingIdentity();
@@ -655,7 +655,7 @@ final class InstallPackageHelper {
final Computer snapshot = mPm.snapshotComputer();
pkgSetting = mPm.mSettings.getPackageLPr(packageName);
if (pkgSetting == null || pkgSetting.getPkg() == null) {
return PackageManager.INSTALL_FAILED_INVALID_URI;
return Pair.create(PackageManager.INSTALL_FAILED_INVALID_URI, intentSender);
}
if (!snapshot.canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) {
// only allow the existing package to be used if it's installed as a full
@@ -668,7 +668,7 @@ final class InstallPackageHelper {
}
}
if (!installAllowed) {
return PackageManager.INSTALL_FAILED_INVALID_URI;
return Pair.create(PackageManager.INSTALL_FAILED_INVALID_URI, intentSender);
}
}
if (!pkgSetting.getInstalled(userId)) {
@@ -726,14 +726,17 @@ final class InstallPackageHelper {
}
// start async restore with no post-install since we finish install here
final IntentSender onCompleteSender = intentSender;
intentSender = null;
InstallRequest request = new InstallRequest(userId,
PackageManager.INSTALL_SUCCEEDED, pkgSetting.getPkg(), new int[]{ userId },
() -> {
mPm.restorePermissionsAndUpdateRolesForNewUserInstall(packageName,
userId);
if (intentSender != null) {
onRestoreComplete(PackageManager.INSTALL_SUCCEEDED, mContext,
intentSender);
if (onCompleteSender != null) {
onInstallComplete(PackageManager.INSTALL_SUCCEEDED, mContext,
onCompleteSender);
}
});
restoreAndPostInstall(request);
@@ -742,10 +745,10 @@ final class InstallPackageHelper {
Binder.restoreCallingIdentity(callingId);
}
return PackageManager.INSTALL_SUCCEEDED;
return Pair.create(PackageManager.INSTALL_SUCCEEDED, intentSender);
}
private static void onRestoreComplete(int returnCode, Context context, IntentSender target) {
static void onInstallComplete(int returnCode, Context context, IntentSender target) {
Intent fillIn = new Intent();
fillIn.putExtra(PackageInstaller.EXTRA_STATUS,
PackageManager.installStatusToPublicStatus(returnCode));

View File

@@ -1292,8 +1292,15 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
public void installExistingPackage(String packageName, int installFlags, int installReason,
IntentSender statusReceiver, int userId, List<String> allowListedPermissions) {
final InstallPackageHelper installPackageHelper = new InstallPackageHelper(mPm);
installPackageHelper.installExistingPackageAsUser(packageName, userId, installFlags,
installReason, allowListedPermissions, statusReceiver);
var result = installPackageHelper.installExistingPackageAsUser(packageName, userId,
installFlags, installReason, allowListedPermissions, statusReceiver);
int returnCode = result.first;
IntentSender onCompleteSender = result.second;
if (onCompleteSender != null) {
InstallPackageHelper.onInstallComplete(returnCode, mContext, onCompleteSender);
}
}
@Override

View File

@@ -5342,7 +5342,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
public int installExistingPackageAsUser(String packageName, int userId, int installFlags,
int installReason, List<String> whiteListedPermissions) {
return mInstallPackageHelper.installExistingPackageAsUser(packageName, userId, installFlags,
installReason, whiteListedPermissions, null);
installReason, whiteListedPermissions, null).first;
}
@Override