Always send result code to IntentSender, if present.
Bug: 276185613 Fixes: 276185613 Test: atest CtsPackageInstallTestCases Change-Id: Ic3bc9acbab68fa5f0dce6e11cd718973a4c53406
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user