Loading core/api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -11568,6 +11568,7 @@ package android.content { field public static final String EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME"; field public static final String EXTRA_PERMISSION_GROUP_NAME = "android.intent.extra.PERMISSION_GROUP_NAME"; field public static final String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final String EXTRA_PREVIOUS_UID = "android.intent.extra.PREVIOUS_UID"; field public static final String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; field public static final String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY"; field public static final String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES"; Loading Loading @@ -11599,6 +11600,7 @@ package android.content { field public static final String EXTRA_TIMEZONE = "time-zone"; field public static final String EXTRA_TITLE = "android.intent.extra.TITLE"; field public static final String EXTRA_UID = "android.intent.extra.UID"; field public static final String EXTRA_UID_CHANGING = "android.intent.extra.UID_CHANGING"; field public static final String EXTRA_USER = "android.intent.extra.USER"; field public static final String EXTRA_USER_INITIATED = "android.intent.extra.USER_INITIATED"; field public static final int FILL_IN_ACTION = 1; // 0x1 core/java/android/content/Intent.java +18 −0 Original line number Diff line number Diff line Loading @@ -5914,6 +5914,14 @@ public class Intent implements Parcelable, Cloneable { */ public static final String EXTRA_UID = "android.intent.extra.UID"; /** * Used as an optional int extra field in {@link android.content.Intent#ACTION_PACKAGE_ADDED} * intents to supply the previous uid the package had been assigned. * This would only be set when a package is leaving sharedUserId in an upgrade, or when a * system app upgrade that had left sharedUserId is getting uninstalled. */ public static final String EXTRA_PREVIOUS_UID = "android.intent.extra.PREVIOUS_UID"; /** * @hide String array of package names. */ Loading Loading @@ -5945,6 +5953,16 @@ public class Intent implements Parcelable, Cloneable { */ public static final String EXTRA_REPLACING = "android.intent.extra.REPLACING"; /** * Used as a boolean extra field in {@link android.content.Intent#ACTION_PACKAGE_REMOVED}, * {@link android.content.Intent#ACTION_UID_REMOVED}, and * {@link android.content.Intent#ACTION_PACKAGE_ADDED} * intents to indicate that this package is changing its UID. * This would only be set when a package is leaving sharedUserId in an upgrade, or when a * system app upgrade that had left sharedUserId is getting uninstalled. */ public static final String EXTRA_UID_CHANGING = "android.intent.extra.UID_CHANGING"; /** * Used as an int extra field in {@link android.app.AlarmManager} pending intents * to tell the application being invoked how many pending alarms are being Loading services/core/java/com/android/server/pm/DeletePackageHelper.java +4 −1 Original line number Diff line number Diff line Loading @@ -236,7 +236,9 @@ final class DeletePackageHelper { if (res) { final boolean killApp = (deleteFlags & PackageManager.DELETE_DONT_KILL_APP) == 0; info.sendPackageRemovedBroadcasts(killApp, removedBySystem); info.sendSystemPackageUpdatedBroadcasts(); if (disabledSystemPs != null) { info.sendSystemPackageUpdatedBroadcasts(disabledSystemPs.getAppId()); } } // Force a gc here. Runtime.getRuntime().gc(); Loading Loading @@ -591,6 +593,7 @@ final class DeletePackageHelper { if (outInfo != null) { // Delete the updated package outInfo.mIsRemovedPackageSystemUpdate = true; outInfo.mAppIdChanging = disabledPs.getAppId() != deletedPs.getAppId(); } if (disabledPs.getVersionCode() < deletedPs.getVersionCode() Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +31 −18 Original line number Diff line number Diff line Loading @@ -936,6 +936,9 @@ final class InstallPackageHelper { + " in multi-package install request."); return; } if (result.needsNewAppId()) { request.mInstallResult.mRemovedInfo.mAppIdChanging = true; } createdAppId.put(packageName, optimisticallyRegisterAppId(result)); versionInfos.put(result.mPkgSetting.getPkg().getPackageName(), mPm.getSettingsVersionForPackage(result.mPkgSetting.getPkg())); Loading Loading @@ -2582,6 +2585,8 @@ final class InstallPackageHelper { final int dataLoaderType = installArgs.mDataLoaderType; final boolean succeeded = res.mReturnCode == PackageManager.INSTALL_SUCCEEDED; final boolean update = res.mRemovedInfo != null && res.mRemovedInfo.mRemovedPackage != null; final int previousAppId = (res.mRemovedInfo != null && res.mRemovedInfo.mAppIdChanging) ? res.mRemovedInfo.mUid : Process.INVALID_UID; final String packageName = res.mName; final PackageStateInternal pkgSetting = succeeded ? mPm.getPackageStateInternal(packageName) : null; Loading Loading @@ -2678,9 +2683,12 @@ final class InstallPackageHelper { dataLoaderType); // Send added for users that don't see the package for the first time Bundle extras = new Bundle(1); Bundle extras = new Bundle(); extras.putInt(Intent.EXTRA_UID, res.mUid); if (update) { if (previousAppId != Process.INVALID_UID) { extras.putBoolean(Intent.EXTRA_UID_CHANGING, true); extras.putInt(Intent.EXTRA_PREVIOUS_UID, previousAppId); } else if (update) { extras.putBoolean(Intent.EXTRA_REPLACING, true); } extras.putInt(PackageInstaller.EXTRA_DATA_LOADER_TYPE, dataLoaderType); Loading Loading @@ -2723,6 +2731,8 @@ final class InstallPackageHelper { // Send replaced for users that don't see the package for the first time if (update) { // Only send PACKAGE_REPLACED if appId has not changed if (previousAppId == Process.INVALID_UID) { mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, 0 /*flags*/, null /*targetPackage*/, null /*finishedReceiver*/, Loading @@ -2732,13 +2742,16 @@ final class InstallPackageHelper { mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, 0 /*flags*/, installerPackageName, null /*finishedReceiver*/, updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); } if (notifyVerifier) { mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, 0 /*flags*/, mPm.mRequiredVerifierPackage, null /*finishedReceiver*/, updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); } } mPm.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null /*package*/, null /*extras*/, 0 /*flags*/, Loading services/core/java/com/android/server/pm/PackageRemovedInfo.java +35 −19 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ final class PackageRemovedInfo { boolean mDataRemoved; boolean mRemovedForAllUsers; boolean mIsStaticSharedLib; boolean mAppIdChanging = false; // a two dimensional array mapping userId to the set of appIds that can receive notice // of package changes SparseArray<int[]> mBroadcastAllowList; Loading @@ -64,34 +65,44 @@ final class PackageRemovedInfo { sendPackageRemovedBroadcastInternal(killApp, removedBySystem); } void sendSystemPackageUpdatedBroadcasts() { void sendSystemPackageUpdatedBroadcasts(int newAppId) { if (mIsRemovedPackageSystemUpdate) { sendSystemPackageUpdatedBroadcastsInternal(); sendSystemPackageUpdatedBroadcastsInternal(newAppId); } } private void sendSystemPackageUpdatedBroadcastsInternal() { private void sendSystemPackageUpdatedBroadcastsInternal(int newAppId) { Bundle extras = new Bundle(2); extras.putInt(Intent.EXTRA_UID, mRemovedAppId >= 0 ? mRemovedAppId : mUid); extras.putInt(Intent.EXTRA_UID, newAppId); // When appId changes, do not set the replacing extra if (mAppIdChanging) { extras.putBoolean(Intent.EXTRA_UID_CHANGING, true); extras.putInt(Intent.EXTRA_PREVIOUS_UID, mRemovedAppId >= 0 ? mRemovedAppId : mUid); } else { extras.putBoolean(Intent.EXTRA_REPLACING, true); } mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, mRemovedPackage, extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null); mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage, extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null); mPackageSender.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null, null, 0, mRemovedPackage, null, null, null, null /* broadcastAllowList */, getTemporaryAppAllowlistBroadcastOptions(REASON_PACKAGE_REPLACED).toBundle()); if (mInstallerPackageName != null) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, mRemovedPackage, extras, 0 /*flags*/, mInstallerPackageName, null, null, null, null /* broadcastAllowList */, null); } if (!mAppIdChanging) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage, extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null); if (mInstallerPackageName != null) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage, extras, 0 /*flags*/, mInstallerPackageName, null, null, null, null /* broadcastAllowList */, null); } } mPackageSender.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null, null, 0, mRemovedPackage, null, null, null, null /* broadcastAllowList */, getTemporaryAppAllowlistBroadcastOptions(REASON_PACKAGE_REPLACED).toBundle()); } private static @NonNull BroadcastOptions getTemporaryAppAllowlistBroadcastOptions( @PowerExemptionManager.ReasonCode int reasonCode) { Loading @@ -115,15 +126,20 @@ final class PackageRemovedInfo { if (mIsStaticSharedLib) { return; } Bundle extras = new Bundle(2); Bundle extras = new Bundle(); final int removedUid = mRemovedAppId >= 0 ? mRemovedAppId : mUid; extras.putInt(Intent.EXTRA_UID, removedUid); extras.putBoolean(Intent.EXTRA_DATA_REMOVED, mDataRemoved); extras.putBoolean(Intent.EXTRA_DONT_KILL_APP, !killApp); extras.putBoolean(Intent.EXTRA_USER_INITIATED, !removedBySystem); if (mIsUpdate || mIsRemovedPackageSystemUpdate) { // When appId changes, do not set the replacing extra if (mAppIdChanging) { extras.putBoolean(Intent.EXTRA_UID_CHANGING, true); } else if (mIsUpdate || mIsRemovedPackageSystemUpdate) { extras.putBoolean(Intent.EXTRA_REPLACING, true); } extras.putBoolean(Intent.EXTRA_REMOVED_FOR_ALL_USERS, mRemovedForAllUsers); if (mRemovedPackage != null) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, Loading @@ -146,9 +162,9 @@ final class PackageRemovedInfo { } } if (mRemovedAppId >= 0) { // If a system app's updates are uninstalled the UID is not actually removed. Some // services need to know the package name affected. if (extras.getBoolean(Intent.EXTRA_REPLACING, false)) { // If the package is not actually removed, some services need to know the // package name affected. if (mAppIdChanging || mIsUpdate || mIsRemovedPackageSystemUpdate) { extras.putString(Intent.EXTRA_PACKAGE_NAME, mRemovedPackage); } Loading Loading
core/api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -11568,6 +11568,7 @@ package android.content { field public static final String EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME"; field public static final String EXTRA_PERMISSION_GROUP_NAME = "android.intent.extra.PERMISSION_GROUP_NAME"; field public static final String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; field public static final String EXTRA_PREVIOUS_UID = "android.intent.extra.PREVIOUS_UID"; field public static final String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; field public static final String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY"; field public static final String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES"; Loading Loading @@ -11599,6 +11600,7 @@ package android.content { field public static final String EXTRA_TIMEZONE = "time-zone"; field public static final String EXTRA_TITLE = "android.intent.extra.TITLE"; field public static final String EXTRA_UID = "android.intent.extra.UID"; field public static final String EXTRA_UID_CHANGING = "android.intent.extra.UID_CHANGING"; field public static final String EXTRA_USER = "android.intent.extra.USER"; field public static final String EXTRA_USER_INITIATED = "android.intent.extra.USER_INITIATED"; field public static final int FILL_IN_ACTION = 1; // 0x1
core/java/android/content/Intent.java +18 −0 Original line number Diff line number Diff line Loading @@ -5914,6 +5914,14 @@ public class Intent implements Parcelable, Cloneable { */ public static final String EXTRA_UID = "android.intent.extra.UID"; /** * Used as an optional int extra field in {@link android.content.Intent#ACTION_PACKAGE_ADDED} * intents to supply the previous uid the package had been assigned. * This would only be set when a package is leaving sharedUserId in an upgrade, or when a * system app upgrade that had left sharedUserId is getting uninstalled. */ public static final String EXTRA_PREVIOUS_UID = "android.intent.extra.PREVIOUS_UID"; /** * @hide String array of package names. */ Loading Loading @@ -5945,6 +5953,16 @@ public class Intent implements Parcelable, Cloneable { */ public static final String EXTRA_REPLACING = "android.intent.extra.REPLACING"; /** * Used as a boolean extra field in {@link android.content.Intent#ACTION_PACKAGE_REMOVED}, * {@link android.content.Intent#ACTION_UID_REMOVED}, and * {@link android.content.Intent#ACTION_PACKAGE_ADDED} * intents to indicate that this package is changing its UID. * This would only be set when a package is leaving sharedUserId in an upgrade, or when a * system app upgrade that had left sharedUserId is getting uninstalled. */ public static final String EXTRA_UID_CHANGING = "android.intent.extra.UID_CHANGING"; /** * Used as an int extra field in {@link android.app.AlarmManager} pending intents * to tell the application being invoked how many pending alarms are being Loading
services/core/java/com/android/server/pm/DeletePackageHelper.java +4 −1 Original line number Diff line number Diff line Loading @@ -236,7 +236,9 @@ final class DeletePackageHelper { if (res) { final boolean killApp = (deleteFlags & PackageManager.DELETE_DONT_KILL_APP) == 0; info.sendPackageRemovedBroadcasts(killApp, removedBySystem); info.sendSystemPackageUpdatedBroadcasts(); if (disabledSystemPs != null) { info.sendSystemPackageUpdatedBroadcasts(disabledSystemPs.getAppId()); } } // Force a gc here. Runtime.getRuntime().gc(); Loading Loading @@ -591,6 +593,7 @@ final class DeletePackageHelper { if (outInfo != null) { // Delete the updated package outInfo.mIsRemovedPackageSystemUpdate = true; outInfo.mAppIdChanging = disabledPs.getAppId() != deletedPs.getAppId(); } if (disabledPs.getVersionCode() < deletedPs.getVersionCode() Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +31 −18 Original line number Diff line number Diff line Loading @@ -936,6 +936,9 @@ final class InstallPackageHelper { + " in multi-package install request."); return; } if (result.needsNewAppId()) { request.mInstallResult.mRemovedInfo.mAppIdChanging = true; } createdAppId.put(packageName, optimisticallyRegisterAppId(result)); versionInfos.put(result.mPkgSetting.getPkg().getPackageName(), mPm.getSettingsVersionForPackage(result.mPkgSetting.getPkg())); Loading Loading @@ -2582,6 +2585,8 @@ final class InstallPackageHelper { final int dataLoaderType = installArgs.mDataLoaderType; final boolean succeeded = res.mReturnCode == PackageManager.INSTALL_SUCCEEDED; final boolean update = res.mRemovedInfo != null && res.mRemovedInfo.mRemovedPackage != null; final int previousAppId = (res.mRemovedInfo != null && res.mRemovedInfo.mAppIdChanging) ? res.mRemovedInfo.mUid : Process.INVALID_UID; final String packageName = res.mName; final PackageStateInternal pkgSetting = succeeded ? mPm.getPackageStateInternal(packageName) : null; Loading Loading @@ -2678,9 +2683,12 @@ final class InstallPackageHelper { dataLoaderType); // Send added for users that don't see the package for the first time Bundle extras = new Bundle(1); Bundle extras = new Bundle(); extras.putInt(Intent.EXTRA_UID, res.mUid); if (update) { if (previousAppId != Process.INVALID_UID) { extras.putBoolean(Intent.EXTRA_UID_CHANGING, true); extras.putInt(Intent.EXTRA_PREVIOUS_UID, previousAppId); } else if (update) { extras.putBoolean(Intent.EXTRA_REPLACING, true); } extras.putInt(PackageInstaller.EXTRA_DATA_LOADER_TYPE, dataLoaderType); Loading Loading @@ -2723,6 +2731,8 @@ final class InstallPackageHelper { // Send replaced for users that don't see the package for the first time if (update) { // Only send PACKAGE_REPLACED if appId has not changed if (previousAppId == Process.INVALID_UID) { mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, 0 /*flags*/, null /*targetPackage*/, null /*finishedReceiver*/, Loading @@ -2732,13 +2742,16 @@ final class InstallPackageHelper { mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, 0 /*flags*/, installerPackageName, null /*finishedReceiver*/, updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); } if (notifyVerifier) { mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, 0 /*flags*/, mPm.mRequiredVerifierPackage, null /*finishedReceiver*/, updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); updateUserIds, instantUserIds, null /*broadcastAllowList*/, null); } } mPm.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null /*package*/, null /*extras*/, 0 /*flags*/, Loading
services/core/java/com/android/server/pm/PackageRemovedInfo.java +35 −19 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ final class PackageRemovedInfo { boolean mDataRemoved; boolean mRemovedForAllUsers; boolean mIsStaticSharedLib; boolean mAppIdChanging = false; // a two dimensional array mapping userId to the set of appIds that can receive notice // of package changes SparseArray<int[]> mBroadcastAllowList; Loading @@ -64,34 +65,44 @@ final class PackageRemovedInfo { sendPackageRemovedBroadcastInternal(killApp, removedBySystem); } void sendSystemPackageUpdatedBroadcasts() { void sendSystemPackageUpdatedBroadcasts(int newAppId) { if (mIsRemovedPackageSystemUpdate) { sendSystemPackageUpdatedBroadcastsInternal(); sendSystemPackageUpdatedBroadcastsInternal(newAppId); } } private void sendSystemPackageUpdatedBroadcastsInternal() { private void sendSystemPackageUpdatedBroadcastsInternal(int newAppId) { Bundle extras = new Bundle(2); extras.putInt(Intent.EXTRA_UID, mRemovedAppId >= 0 ? mRemovedAppId : mUid); extras.putInt(Intent.EXTRA_UID, newAppId); // When appId changes, do not set the replacing extra if (mAppIdChanging) { extras.putBoolean(Intent.EXTRA_UID_CHANGING, true); extras.putInt(Intent.EXTRA_PREVIOUS_UID, mRemovedAppId >= 0 ? mRemovedAppId : mUid); } else { extras.putBoolean(Intent.EXTRA_REPLACING, true); } mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, mRemovedPackage, extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null); mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage, extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null); mPackageSender.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null, null, 0, mRemovedPackage, null, null, null, null /* broadcastAllowList */, getTemporaryAppAllowlistBroadcastOptions(REASON_PACKAGE_REPLACED).toBundle()); if (mInstallerPackageName != null) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, mRemovedPackage, extras, 0 /*flags*/, mInstallerPackageName, null, null, null, null /* broadcastAllowList */, null); } if (!mAppIdChanging) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage, extras, 0, null /*targetPackage*/, null, null, null, mBroadcastAllowList, null); if (mInstallerPackageName != null) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, mRemovedPackage, extras, 0 /*flags*/, mInstallerPackageName, null, null, null, null /* broadcastAllowList */, null); } } mPackageSender.sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED, null, null, 0, mRemovedPackage, null, null, null, null /* broadcastAllowList */, getTemporaryAppAllowlistBroadcastOptions(REASON_PACKAGE_REPLACED).toBundle()); } private static @NonNull BroadcastOptions getTemporaryAppAllowlistBroadcastOptions( @PowerExemptionManager.ReasonCode int reasonCode) { Loading @@ -115,15 +126,20 @@ final class PackageRemovedInfo { if (mIsStaticSharedLib) { return; } Bundle extras = new Bundle(2); Bundle extras = new Bundle(); final int removedUid = mRemovedAppId >= 0 ? mRemovedAppId : mUid; extras.putInt(Intent.EXTRA_UID, removedUid); extras.putBoolean(Intent.EXTRA_DATA_REMOVED, mDataRemoved); extras.putBoolean(Intent.EXTRA_DONT_KILL_APP, !killApp); extras.putBoolean(Intent.EXTRA_USER_INITIATED, !removedBySystem); if (mIsUpdate || mIsRemovedPackageSystemUpdate) { // When appId changes, do not set the replacing extra if (mAppIdChanging) { extras.putBoolean(Intent.EXTRA_UID_CHANGING, true); } else if (mIsUpdate || mIsRemovedPackageSystemUpdate) { extras.putBoolean(Intent.EXTRA_REPLACING, true); } extras.putBoolean(Intent.EXTRA_REMOVED_FOR_ALL_USERS, mRemovedForAllUsers); if (mRemovedPackage != null) { mPackageSender.sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, Loading @@ -146,9 +162,9 @@ final class PackageRemovedInfo { } } if (mRemovedAppId >= 0) { // If a system app's updates are uninstalled the UID is not actually removed. Some // services need to know the package name affected. if (extras.getBoolean(Intent.EXTRA_REPLACING, false)) { // If the package is not actually removed, some services need to know the // package name affected. if (mAppIdChanging || mIsUpdate || mIsRemovedPackageSystemUpdate) { extras.putString(Intent.EXTRA_PACKAGE_NAME, mRemovedPackage); } Loading