From 2678a99af96162572a270c8e4fa8c22ceac8340d Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Wed, 27 Nov 2019 10:21:23 -0800 Subject: [PATCH] Fix uninstall for 'all' Test: Manual. "uninstall" or "uninstall --user all" actually removes the application for all users Test: atest RoleManagerTest#openDefaultAppListThenHasDefaultApp Bug: 145561378 Change-Id: I9c879c5f0967804804f588633bb5f1738bd9b2f1 --- .../server/pm/PackageManagerShellCommand.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 1b73602a47904..b961096831152 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -1854,22 +1854,23 @@ class PackageManagerShellCommand extends ShellCommand { if (internal.isApexPackage(packageName)) { internal.uninstallApex( packageName, versionCode, translatedUserId, receiver.getIntentSender(), flags); - } else if ((flags & PackageManager.DELETE_ALL_USERS) != 0) { - final PackageInfo info = mInterface.getPackageInfo(packageName, - PackageManager.MATCH_STATIC_SHARED_LIBRARIES, translatedUserId); - if (info == null) { - pw.println("Failure [not installed for " + translatedUserId + "]"); - return 1; + } else { + if ((flags & PackageManager.DELETE_ALL_USERS) == 0) { + final PackageInfo info = mInterface.getPackageInfo(packageName, + PackageManager.MATCH_STATIC_SHARED_LIBRARIES, translatedUserId); + if (info == null) { + pw.println("Failure [not installed for " + translatedUserId + "]"); + return 1; + } + final boolean isSystem = + (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + // If we are being asked to delete a system app for just one + // user set flag so it disables rather than reverting to system + // version of the app. + if (isSystem) { + flags |= PackageManager.DELETE_SYSTEM_APP; + } } - final boolean isSystem = - (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; - // If we are being asked to delete a system app for just one - // user set flag so it disables rather than reverting to system - // version of the app. - if (isSystem) { - flags |= PackageManager.DELETE_SYSTEM_APP; - } - mInterface.getPackageInstaller().uninstall(new VersionedPackage(packageName, versionCode), null /*callerPackageName*/, flags, receiver.getIntentSender(), translatedUserId);