Loading core/java/com/android/internal/content/PackageMonitor.java +50 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageAdded(String packageName, int uid) { } /** * Same as {@link #onPackageAdded(String, int)}, but this callback * has extras passed in. */ public void onPackageAddedWithExtras(String packageName, int uid, Bundle extras) { } /** * Called when a package is really removed (and not replaced). */ Loading @@ -172,6 +179,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageRemoved(String packageName, int uid) { } /** * Same as {@link #onPackageRemoved(String, int)}, but this callback * has extras passed in. */ public void onPackageRemovedWithExtras(String packageName, int uid, Bundle extras) { } /** * Called when a package is really removed (and not replaced) for * all users on the device. Loading @@ -179,12 +193,33 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageRemovedAllUsers(String packageName, int uid) { } /** * Same as {@link #onPackageRemovedAllUsers(String, int)}, but this callback * has extras passed in. */ public void onPackageRemovedAllUsersWithExtras(String packageName, int uid, Bundle extras) { } public void onPackageUpdateStarted(String packageName, int uid) { } /** * Same as {@link #onPackageUpdateStarted(String, int)}, but this callback * has extras passed in. */ public void onPackageUpdateStartedWithExtras(String packageName, int uid, Bundle extras) { } public void onPackageUpdateFinished(String packageName, int uid) { } /** * Same as {@link #onPackageUpdateFinished(String, int)}, but this callback * has extras passed in. */ public void onPackageUpdateFinishedWithExtras(String packageName, int uid, Bundle extras) { } /** * Direct reflection of {@link Intent#ACTION_PACKAGE_CHANGED * Intent.ACTION_PACKAGE_CHANGED} being received, informing you of Loading Loading @@ -282,6 +317,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageModified(@NonNull String packageName) { } /** * Same as {@link #onPackageModified(String)}, but this callback * has extras passed in. */ public void onPackageModifiedWithExtras(@NonNull String packageName, Bundle extras) { } /** * Called when a package in the stopped state is started for some reason. * Loading Loading @@ -425,10 +467,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { mModifiedPackages = mTempArray; mChangeType = PACKAGE_UPDATING; onPackageUpdateFinished(pkg, uid); onPackageUpdateFinishedWithExtras(pkg, uid, intent.getExtras()); onPackageModified(pkg); onPackageModifiedWithExtras(pkg, intent.getExtras()); } else { mChangeType = PACKAGE_PERMANENT_CHANGE; onPackageAdded(pkg, uid); onPackageAddedWithExtras(pkg, uid, intent.getExtras()); } onPackageAppearedWithExtras(pkg, intent.getExtras()); onPackageAppeared(pkg, mChangeType); Loading @@ -442,11 +487,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { mChangeType = PACKAGE_UPDATING; onPackageUpdateStarted(pkg, uid); onPackageUpdateStartedWithExtras(pkg, uid, intent.getExtras()); if (intent.getBooleanExtra(Intent.EXTRA_ARCHIVAL, false)) { // In case it is a removal event due to archiving, we trigger package // update event to refresh details like icons, title etc. corresponding to // the archived app. onPackageModified(pkg); onPackageModifiedWithExtras(pkg, intent.getExtras()); } } else { mChangeType = PACKAGE_PERMANENT_CHANGE; Loading @@ -455,8 +502,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { // it when it is re-added. mSomePackagesChanged = true; onPackageRemoved(pkg, uid); onPackageRemovedWithExtras(pkg, uid, intent.getExtras()); if (intent.getBooleanExtra(Intent.EXTRA_REMOVED_FOR_ALL_USERS, false)) { onPackageRemovedAllUsers(pkg, uid); onPackageRemovedAllUsersWithExtras(pkg, uid, intent.getExtras()); } } onPackageDisappearedWithExtras(pkg, intent.getExtras()); Loading @@ -476,6 +525,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } onPackageChangedWithExtras(pkg, intent.getExtras()); onPackageModified(pkg); onPackageModifiedWithExtras(pkg, intent.getExtras()); } } else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) { String pkg = getPackageName(intent); Loading core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java +27 −5 Original line number Diff line number Diff line Loading @@ -328,8 +328,11 @@ public class PackageMonitorTest { verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); verify(spyPackageMonitor, times(1)) .onPackageUpdateStarted(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageUpdateStartedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageDisappearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -362,11 +365,16 @@ public class PackageMonitorTest { spyPackageMonitor.doHandlePackageEvent(intent); verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageUpdateStarted(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageUpdateStartedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageModified(eq(FAKE_PACKAGE_NAME)); verify(spyPackageMonitor, times(1)).onPackageModifiedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageDisappearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -399,12 +407,18 @@ public class PackageMonitorTest { spyPackageMonitor.doHandlePackageEvent(intent); verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageRemoved(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageRemovedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)) .onPackageRemovedAllUsers(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageRemovedAllUsersWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)).onPackageDisappearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -436,11 +450,16 @@ public class PackageMonitorTest { spyPackageMonitor.doHandlePackageEvent(intent); verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageUpdateFinished(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageModifiedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageModified(eq(FAKE_PACKAGE_NAME)); verify(spyPackageMonitor, times(1)) .onPackageModifiedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)).onPackageAppearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -472,8 +491,11 @@ public class PackageMonitorTest { verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); verify(spyPackageMonitor, times(1)) .onPackageAdded(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageAddedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageAppearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading
core/java/com/android/internal/content/PackageMonitor.java +50 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageAdded(String packageName, int uid) { } /** * Same as {@link #onPackageAdded(String, int)}, but this callback * has extras passed in. */ public void onPackageAddedWithExtras(String packageName, int uid, Bundle extras) { } /** * Called when a package is really removed (and not replaced). */ Loading @@ -172,6 +179,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageRemoved(String packageName, int uid) { } /** * Same as {@link #onPackageRemoved(String, int)}, but this callback * has extras passed in. */ public void onPackageRemovedWithExtras(String packageName, int uid, Bundle extras) { } /** * Called when a package is really removed (and not replaced) for * all users on the device. Loading @@ -179,12 +193,33 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageRemovedAllUsers(String packageName, int uid) { } /** * Same as {@link #onPackageRemovedAllUsers(String, int)}, but this callback * has extras passed in. */ public void onPackageRemovedAllUsersWithExtras(String packageName, int uid, Bundle extras) { } public void onPackageUpdateStarted(String packageName, int uid) { } /** * Same as {@link #onPackageUpdateStarted(String, int)}, but this callback * has extras passed in. */ public void onPackageUpdateStartedWithExtras(String packageName, int uid, Bundle extras) { } public void onPackageUpdateFinished(String packageName, int uid) { } /** * Same as {@link #onPackageUpdateFinished(String, int)}, but this callback * has extras passed in. */ public void onPackageUpdateFinishedWithExtras(String packageName, int uid, Bundle extras) { } /** * Direct reflection of {@link Intent#ACTION_PACKAGE_CHANGED * Intent.ACTION_PACKAGE_CHANGED} being received, informing you of Loading Loading @@ -282,6 +317,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackageModified(@NonNull String packageName) { } /** * Same as {@link #onPackageModified(String)}, but this callback * has extras passed in. */ public void onPackageModifiedWithExtras(@NonNull String packageName, Bundle extras) { } /** * Called when a package in the stopped state is started for some reason. * Loading Loading @@ -425,10 +467,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { mModifiedPackages = mTempArray; mChangeType = PACKAGE_UPDATING; onPackageUpdateFinished(pkg, uid); onPackageUpdateFinishedWithExtras(pkg, uid, intent.getExtras()); onPackageModified(pkg); onPackageModifiedWithExtras(pkg, intent.getExtras()); } else { mChangeType = PACKAGE_PERMANENT_CHANGE; onPackageAdded(pkg, uid); onPackageAddedWithExtras(pkg, uid, intent.getExtras()); } onPackageAppearedWithExtras(pkg, intent.getExtras()); onPackageAppeared(pkg, mChangeType); Loading @@ -442,11 +487,13 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { mChangeType = PACKAGE_UPDATING; onPackageUpdateStarted(pkg, uid); onPackageUpdateStartedWithExtras(pkg, uid, intent.getExtras()); if (intent.getBooleanExtra(Intent.EXTRA_ARCHIVAL, false)) { // In case it is a removal event due to archiving, we trigger package // update event to refresh details like icons, title etc. corresponding to // the archived app. onPackageModified(pkg); onPackageModifiedWithExtras(pkg, intent.getExtras()); } } else { mChangeType = PACKAGE_PERMANENT_CHANGE; Loading @@ -455,8 +502,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { // it when it is re-added. mSomePackagesChanged = true; onPackageRemoved(pkg, uid); onPackageRemovedWithExtras(pkg, uid, intent.getExtras()); if (intent.getBooleanExtra(Intent.EXTRA_REMOVED_FOR_ALL_USERS, false)) { onPackageRemovedAllUsers(pkg, uid); onPackageRemovedAllUsersWithExtras(pkg, uid, intent.getExtras()); } } onPackageDisappearedWithExtras(pkg, intent.getExtras()); Loading @@ -476,6 +525,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } onPackageChangedWithExtras(pkg, intent.getExtras()); onPackageModified(pkg); onPackageModifiedWithExtras(pkg, intent.getExtras()); } } else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) { String pkg = getPackageName(intent); Loading
core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java +27 −5 Original line number Diff line number Diff line Loading @@ -328,8 +328,11 @@ public class PackageMonitorTest { verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); verify(spyPackageMonitor, times(1)) .onPackageUpdateStarted(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageUpdateStartedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageDisappearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -362,11 +365,16 @@ public class PackageMonitorTest { spyPackageMonitor.doHandlePackageEvent(intent); verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageUpdateStarted(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageUpdateStartedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageModified(eq(FAKE_PACKAGE_NAME)); verify(spyPackageMonitor, times(1)).onPackageModifiedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageDisappearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -399,12 +407,18 @@ public class PackageMonitorTest { spyPackageMonitor.doHandlePackageEvent(intent); verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageRemoved(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageRemovedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)) .onPackageRemovedAllUsers(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageRemovedAllUsersWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)).onPackageDisappearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -436,11 +450,16 @@ public class PackageMonitorTest { spyPackageMonitor.doHandlePackageEvent(intent); verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageUpdateFinished(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); verify(spyPackageMonitor, times(1)) .onPackageModifiedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageModified(eq(FAKE_PACKAGE_NAME)); verify(spyPackageMonitor, times(1)) .onPackageModifiedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)).onPackageAppearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading Loading @@ -472,8 +491,11 @@ public class PackageMonitorTest { verify(spyPackageMonitor, times(1)).onBeginPackageChanges(); verify(spyPackageMonitor, times(1)) .onPackageAdded(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID)); ArgumentCaptor<Bundle> argumentCaptor = ArgumentCaptor.forClass(Bundle.class); verify(spyPackageMonitor, times(1)) .onPackageAddedWithExtras(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), argumentCaptor.capture()); verify(spyPackageMonitor, times(1)).onPackageAppearedWithExtras(eq(FAKE_PACKAGE_NAME), argumentCaptor.capture()); Bundle capturedExtras = argumentCaptor.getValue(); Loading