From f1320ee71453ee1016711ebbb7fe3afbc32448d4 Mon Sep 17 00:00:00 2001 From: Sumedh Sen Date: Mon, 20 Feb 2023 18:00:43 -0800 Subject: [PATCH] Pass correct user id to PackageInstaller for uninstall When PIA issues an uninstall to PackageInstaller from any other user or profile, the userId passed is always user{0} since a PackageInstaller instance is created from user{0}. Now PIA creates a PackageInstaller instance from the user where the uninstall should happen Bug: 264689472 Test: Manual. Setup work profile using TestDPC, attempt to uninstall an app. Change-Id: I7781a05b66fe8d6d717081b126484a7581fad965 --- .../android/packageinstaller/UninstallUninstalling.java | 4 ++-- .../com/android/packageinstaller/UninstallerActivity.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) mode change 100755 => 100644 packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java index b60aba8be6f72..e6710fff1bd5e 100644 --- a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java +++ b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java @@ -83,7 +83,7 @@ public class UninstallUninstalling extends Activity implements } UserManager customUserManager = UninstallUninstalling.this - .createContextAsUser(UserHandle.of(user.getIdentifier()), 0) + .createContextAsUser(user, 0) .getSystemService(UserManager.class); if (customUserManager.isUserOfType(UserManager.USER_TYPE_PROFILE_CLONE)) { isCloneUser = true; @@ -117,7 +117,7 @@ public class UninstallUninstalling extends Activity implements int flags = allUsers ? PackageManager.DELETE_ALL_USERS : 0; flags |= keepData ? PackageManager.DELETE_KEEP_DATA : 0; - getPackageManager().getPackageInstaller().uninstall( + createContextAsUser(user, 0).getPackageManager().getPackageInstaller().uninstall( new VersionedPackage(mAppInfo.packageName, PackageManager.VERSION_CODE_HIGHEST), flags, pendingIntent.getIntentSender()); diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java old mode 100755 new mode 100644 index 7250bdd4bec61..9c67817cbef49 --- a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java +++ b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java @@ -367,10 +367,10 @@ public class UninstallerActivity extends Activity { int flags = mDialogInfo.allUsers ? PackageManager.DELETE_ALL_USERS : 0; flags |= keepData ? PackageManager.DELETE_KEEP_DATA : 0; - getPackageManager().getPackageInstaller().uninstall( - new VersionedPackage(mDialogInfo.appInfo.packageName, - PackageManager.VERSION_CODE_HIGHEST), - flags, pendingIntent.getIntentSender()); + createContextAsUser(mDialogInfo.user, 0).getPackageManager().getPackageInstaller() + .uninstall(new VersionedPackage(mDialogInfo.appInfo.packageName, + PackageManager.VERSION_CODE_HIGHEST), flags, + pendingIntent.getIntentSender()); } catch (Exception e) { notificationManager.cancel(uninstallId);