From e74e961711cf83c97d26d55f1698fe96bbae4064 Mon Sep 17 00:00:00 2001 From: Jackal Guo Date: Thu, 20 Aug 2020 15:16:49 +0800 Subject: [PATCH] Update broadcast with correct extra field The extra field EXTRA_DATA_REMOVED in Intent ACTION_PACKAGE_REMOVED indicates whether this represents a full uninstall (removing both the code and its data). When uninstalling apps on a multi-user device without the keep data flag, we don't set field dataRemoved properly. This results in that EXTRA_DATA_REMOVED is false and ACTION_PACKAGE_FULLY_REMOVED isn't broadcasted until the app are completely uninstalled from all users in the device. Hence, field dataRemoved needs to be set to correct value accordingly in this case. Bug: 29072973 Test: manual test 1. Install an app in both primary and second user (user from work profile of multiple user). 2. Unintall this app from each user. 3. Make sure that the Intent ACTION_PACKAGE_REMOVED with EXTRA_DATA_REMOVED = true and ACTION_PACKAGE_FULLY_REMOVED are broadcasted for each user. Change-Id: Ib67c0b5849cc562bd9e915d45d56f8488915a8f2 --- .../core/java/com/android/server/pm/PackageManagerService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index c05bc455887d0..052e79acb86de 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -19453,6 +19453,9 @@ public class PackageManagerService extends IPackageManager.Stub } if (outInfo != null) { + if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) { + outInfo.dataRemoved = true; + } outInfo.removedPackage = ps.name; outInfo.installerPackageName = ps.installSource.installerPackageName; outInfo.isStaticSharedLib = pkg != null && pkg.getStaticSharedLibName() != null;