From c62fd3b166ee1bbf79a0fc4d7ac48610e053d921 Mon Sep 17 00:00:00 2001 From: Jackal Guo Date: Tue, 11 Aug 2020 16:38:10 +0800 Subject: Report changes from Instant App PackageManager didn't report Instant Apps as changes. This results in that certain apps that could access Instant App aren't aware of these changes. The solution is that PackageManager always reports the changes, but filter Instant App out when the callers don't have the appropriate permission. Bug: 139853359 Test: atest EphemeralTest Test: atest ApplicationVisibilityTest Test: Install an Instant App, and check if app with the appropriate permission could see the changes from #getChangedPackages immediately. Change-Id: I2ce8d775dc71d26ce889a624b64b230b682d5054 --- .../core/java/com/android/server/pm/PackageManagerService.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index a754497953c1..672bfe1f8bd8 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -5785,10 +5785,6 @@ public class PackageManagerService extends IPackageManager.Stub private void updateSequenceNumberLP(PackageSetting pkgSetting, int[] userList) { for (int i = userList.length - 1; i >= 0; --i) { final int userId = userList[i]; - // don't add instant app to the list of updates - if (pkgSetting.getInstantApp(userId)) { - continue; - } SparseArray changedPackages = mChangedPackages.get(userId); if (changedPackages == null) { changedPackages = new SparseArray<>(); @@ -5833,6 +5829,11 @@ public class PackageManagerService extends IPackageManager.Stub for (int i = sequenceNumber; i < mChangedPackagesSequenceNumber; i++) { final String packageName = changedPackages.get(i); if (packageName != null) { + // Filter out the changes if the calling package should not be able to see it. + final PackageSetting ps = mSettings.mPackages.get(packageName); + if (shouldFilterApplicationLocked(ps, callingUid, userId)) { + continue; + } packageNames.add(packageName); } } -- cgit v1.2.3-59-g8ed1b