From 7b0411782aebe43115d49c187f0dda661b10e034 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 23 Aug 2019 10:46:43 +0900 Subject: [PATCH] Backport PackageListObserver#onPackageChanged. Added internally in Ic48e3c728387ecf02f89d517ba1fe785ab9c75fd, of which this is a partial cherry-pick. Bug: 137864893 Test: builds, boots Change-Id: I6975e0b70ded6047e1ac8013a82bc35ff150f03b Merged-In: Ic48e3c728387ecf02f89d517ba1fe785ab9c75fd --- .../content/pm/PackageManagerInternal.java | 2 ++ .../server/pm/PackageManagerService.java | 19 +++++++++++++++++++ .../server/pm/PackageManagerServiceTest.java | 5 +++++ 3 files changed, 26 insertions(+) diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index c29936937ecde..0694c5fc26868 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -63,6 +63,8 @@ public abstract class PackageManagerInternal { public interface PackageListObserver { /** A package was added to the system. */ void onPackageAdded(@NonNull String packageName, int uid); + /** A package was changed - either installed for a specific user or updated. */ + default void onPackageChanged(@NonNull String packageName, int uid) {} /** A package was removed from the system. */ void onPackageRemoved(@NonNull String packageName, int uid); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 88a1ef3e84fa0..5b83f44e55e4e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2155,6 +2155,8 @@ public class PackageManagerService extends IPackageManager.Stub if (allNewUsers && !update) { notifyPackageAdded(packageName, res.uid); + } else { + notifyPackageChanged(packageName, res.uid); } // Log current value of "unknown sources" setting @@ -13761,6 +13763,22 @@ public class PackageManagerService extends IPackageManager.Stub } } + @Override + public void notifyPackageChanged(String packageName, int uid) { + final PackageListObserver[] observers; + synchronized (mPackages) { + if (mPackageListObservers.size() == 0) { + return; + } + final PackageListObserver[] observerArray = + new PackageListObserver[mPackageListObservers.size()]; + observers = mPackageListObservers.toArray(observerArray); + } + for (int i = observers.length - 1; i >= 0; --i) { + observers[i].onPackageChanged(packageName, uid); + } + } + @Override public void notifyPackageRemoved(String packageName, int uid) { final PackageListObserver[] observers; @@ -24987,5 +25005,6 @@ interface PackageSender { void sendPackageAddedForNewUsers(String packageName, boolean sendBootCompleted, boolean includeStopped, int appId, int[] userIds, int[] instantUserIds); void notifyPackageAdded(String packageName, int uid); + void notifyPackageChanged(String packageName, int uid); void notifyPackageRemoved(String packageName, int uid); } diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java index 68728af9528c8..6a03aedbe4f56 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java @@ -59,6 +59,11 @@ public class PackageManagerServiceTest { public void notifyPackageAdded(String packageName, int uid) { } + @Override + public void notifyPackageChanged(String packageName, int uid) { + + } + @Override public void notifyPackageRemoved(String packageName, int uid) { }