Loading api/system-current.txt +0 −2 Original line number Original line Diff line number Diff line Loading @@ -1027,7 +1027,6 @@ package android.content.pm { method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String); method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String); method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int); method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int); method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle); method public android.os.PersistableBundle getSuspendedPackageAppExtras(java.lang.String); method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; Loading @@ -1039,7 +1038,6 @@ package android.content.pm { method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int); method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int); method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence); method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence); method public java.lang.String[] setPackagesSuspended(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String); method public java.lang.String[] setPackagesSuspended(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String); method public void setSuspendedPackageAppExtras(java.lang.String, android.os.PersistableBundle); method public abstract void setUpdateAvailable(java.lang.String, boolean); method public abstract void setUpdateAvailable(java.lang.String, boolean); method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int); method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int); method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle); method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle); Loading core/java/android/app/ApplicationPackageManager.java +4 −16 Original line number Original line Diff line number Diff line Loading @@ -2165,29 +2165,17 @@ public class ApplicationPackageManager extends PackageManager { } } @Override @Override public PersistableBundle getSuspendedPackageAppExtras(String packageName) { public Bundle getSuspendedPackageAppExtras() { final PersistableBundle extras; try { try { return mPM.getSuspendedPackageAppExtras(packageName, mContext.getUserId()); extras = mPM.getSuspendedPackageAppExtras(mContext.getOpPackageName(), mContext.getUserId()); } catch (RemoteException e) { } catch (RemoteException e) { throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer(); } } } @Override public Bundle getSuspendedPackageAppExtras() { final PersistableBundle extras = getSuspendedPackageAppExtras(mContext.getOpPackageName()); return extras != null ? new Bundle(extras.deepCopy()) : null; return extras != null ? new Bundle(extras.deepCopy()) : null; } } @Override public void setSuspendedPackageAppExtras(String packageName, PersistableBundle appExtras) { try { mPM.setSuspendedPackageAppExtras(packageName, appExtras, mContext.getUserId()); } catch (RemoteException e) { e.rethrowFromSystemServer(); } } @Override @Override public boolean isPackageSuspendedForUser(String packageName, int userId) { public boolean isPackageSuspendedForUser(String packageName, int userId) { try { try { Loading core/java/android/content/pm/IPackageManager.aidl +0 −3 Original line number Original line Diff line number Diff line Loading @@ -280,9 +280,6 @@ interface IPackageManager { PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId); PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId); void setSuspendedPackageAppExtras(String packageName, in PersistableBundle appExtras, int userId); /** /** * Backup/restore support - only the system uid may use these. * Backup/restore support - only the system uid may use these. */ */ Loading core/java/android/content/pm/PackageManager.java +0 −40 Original line number Original line Diff line number Diff line Loading @@ -5615,46 +5615,6 @@ public abstract class PackageManager { throw new UnsupportedOperationException("isPackageSuspended not implemented"); throw new UnsupportedOperationException("isPackageSuspended not implemented"); } } /** * Retrieve the {@link PersistableBundle} that was passed as {@code appExtras} when the given * package was suspended. * * <p> The caller must hold permission {@link Manifest.permission#SUSPEND_APPS} to use this * api.</p> * * @param packageName The package to retrieve extras for. * @return The {@code appExtras} for the suspended package. * * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) * @hide */ @SystemApi @RequiresPermission(Manifest.permission.SUSPEND_APPS) public @Nullable PersistableBundle getSuspendedPackageAppExtras(String packageName) { throw new UnsupportedOperationException("getSuspendedPackageAppExtras not implemented"); } /** * Set the app extras for a suspended package. This method can be used to update the appExtras * for a package that was earlier suspended using * {@link #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, * String)} * Does nothing if the given package is not already in a suspended state. * * @param packageName The package for which the appExtras need to be updated * @param appExtras The new appExtras for the given package * * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) * * @hide */ @SystemApi @RequiresPermission(Manifest.permission.SUSPEND_APPS) public void setSuspendedPackageAppExtras(String packageName, @Nullable PersistableBundle appExtras) { throw new UnsupportedOperationException("setSuspendedPackageAppExtras not implemented"); } /** /** * Returns any extra information supplied as {@code appExtras} to the system when the calling * Returns any extra information supplied as {@code appExtras} to the system when the calling * app was suspended. * app was suspended. Loading services/core/java/com/android/server/pm/PackageManagerService.java +27 −40 Original line number Original line Diff line number Diff line Loading @@ -14032,7 +14032,7 @@ public class PackageManagerService extends IPackageManager.Stub "setPackagesSuspended for user " + userId); "setPackagesSuspended for user " + userId); if (callingUid != Process.ROOT_UID && if (callingUid != Process.ROOT_UID && !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) { !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) { throw new IllegalArgumentException("callingPackage " + callingPackage + " does not" throw new IllegalArgumentException("CallingPackage " + callingPackage + " does not" + " belong to calling app id " + UserHandle.getAppId(callingUid)); + " belong to calling app id " + UserHandle.getAppId(callingUid)); } } Loading @@ -14056,12 +14056,11 @@ public class PackageManagerService extends IPackageManager.Stub final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); if (pkgSetting == null if (pkgSetting == null || filterAppAccessLPr(pkgSetting, callingUid, userId)) { || filterAppAccessLPr(pkgSetting, callingUid, userId)) { Slog.w(TAG, "Could not find package setting for package \"" + packageName Slog.w(TAG, "Could not find package setting for package: " + packageName + "\". Skipping suspending/un-suspending."); + ". Skipping suspending/un-suspending."); unactionedPackages.add(packageName); unactionedPackages.add(packageName); continue; continue; } } if (pkgSetting.getSuspended(userId) != suspended) { if (!canSuspendPackageForUserLocked(packageName, userId)) { if (!canSuspendPackageForUserLocked(packageName, userId)) { unactionedPackages.add(packageName); unactionedPackages.add(packageName); continue; continue; Loading @@ -14071,7 +14070,6 @@ public class PackageManagerService extends IPackageManager.Stub changedPackagesList.add(packageName); changedPackagesList.add(packageName); } } } } } } finally { } finally { Binder.restoreCallingIdentity(callingId); Binder.restoreCallingIdentity(callingId); } } Loading @@ -14084,7 +14082,6 @@ public class PackageManagerService extends IPackageManager.Stub scheduleWritePackageRestrictionsLocked(userId); scheduleWritePackageRestrictionsLocked(userId); } } } } return unactionedPackages.toArray(new String[unactionedPackages.size()]); return unactionedPackages.toArray(new String[unactionedPackages.size()]); } } Loading @@ -14092,7 +14089,8 @@ public class PackageManagerService extends IPackageManager.Stub public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) { public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) { final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); if (getPackageUid(packageName, 0, userId) != callingUid) { if (getPackageUid(packageName, 0, userId) != callingUid) { mContext.enforceCallingOrSelfPermission(Manifest.permission.SUSPEND_APPS, null); throw new SecurityException("Calling package " + packageName + " does not belong to calling uid " + callingUid); } } synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); final PackageSetting ps = mSettings.mPackages.get(packageName); Loading @@ -14107,25 +14105,6 @@ public class PackageManagerService extends IPackageManager.Stub } } } } @Override public void setSuspendedPackageAppExtras(String packageName, PersistableBundle appExtras, int userId) { final int callingUid = Binder.getCallingUid(); mContext.enforceCallingOrSelfPermission(Manifest.permission.SUSPEND_APPS, null); synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps == null || filterAppAccessLPr(ps, callingUid, userId)) { throw new IllegalArgumentException("Unknown target package: " + packageName); } final PackageUserState packageUserState = ps.readUserState(userId); if (packageUserState.suspended) { packageUserState.suspendedAppExtras = appExtras; sendMyPackageSuspendedOrUnsuspended(new String[] {packageName}, true, appExtras, userId); } } } private void sendMyPackageSuspendedOrUnsuspended(String[] affectedPackages, boolean suspended, private void sendMyPackageSuspendedOrUnsuspended(String[] affectedPackages, boolean suspended, PersistableBundle appExtras, int userId) { PersistableBundle appExtras, int userId) { final String action; final String action; Loading Loading @@ -14180,17 +14159,25 @@ public class PackageManagerService extends IPackageManager.Stub } } } } void onSuspendingPackageRemoved(String packageName, int userId) { void onSuspendingPackageRemoved(String packageName, int removedForUser) { final int[] userIds = (userId == UserHandle.USER_ALL) ? sUserManager.getUserIds() final int[] userIds = (removedForUser == UserHandle.USER_ALL) ? sUserManager.getUserIds() : new int[] {userId}; : new int[] {removedForUser}; for (int userId : userIds) { List<String> affectedPackages = new ArrayList<>(); synchronized (mPackages) { synchronized (mPackages) { for (PackageSetting ps : mSettings.mPackages.values()) { for (PackageSetting ps : mSettings.mPackages.values()) { for (int user : userIds) { final PackageUserState pus = ps.readUserState(userId); final PackageUserState pus = ps.readUserState(user); if (pus.suspended && packageName.equals(pus.suspendingPackage)) { if (pus.suspended && packageName.equals(pus.suspendingPackage)) { ps.setSuspended(false, null, null, null, null, user); ps.setSuspended(false, null, null, null, null, userId); affectedPackages.add(ps.name); } } } } } if (!affectedPackages.isEmpty()) { final String[] packageArray = affectedPackages.toArray( new String[affectedPackages.size()]); sendMyPackageSuspendedOrUnsuspended(packageArray, false, null, userId); sendPackagesSuspendedForUser(packageArray, userId, false, null); } } } } } } Loading
api/system-current.txt +0 −2 Original line number Original line Diff line number Diff line Loading @@ -1027,7 +1027,6 @@ package android.content.pm { method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String); method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String); method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int); method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int); method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle); method public android.os.PersistableBundle getSuspendedPackageAppExtras(java.lang.String); method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; Loading @@ -1039,7 +1038,6 @@ package android.content.pm { method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int); method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int); method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence); method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence); method public java.lang.String[] setPackagesSuspended(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String); method public java.lang.String[] setPackagesSuspended(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String); method public void setSuspendedPackageAppExtras(java.lang.String, android.os.PersistableBundle); method public abstract void setUpdateAvailable(java.lang.String, boolean); method public abstract void setUpdateAvailable(java.lang.String, boolean); method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int); method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int); method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle); method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle); Loading
core/java/android/app/ApplicationPackageManager.java +4 −16 Original line number Original line Diff line number Diff line Loading @@ -2165,29 +2165,17 @@ public class ApplicationPackageManager extends PackageManager { } } @Override @Override public PersistableBundle getSuspendedPackageAppExtras(String packageName) { public Bundle getSuspendedPackageAppExtras() { final PersistableBundle extras; try { try { return mPM.getSuspendedPackageAppExtras(packageName, mContext.getUserId()); extras = mPM.getSuspendedPackageAppExtras(mContext.getOpPackageName(), mContext.getUserId()); } catch (RemoteException e) { } catch (RemoteException e) { throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer(); } } } @Override public Bundle getSuspendedPackageAppExtras() { final PersistableBundle extras = getSuspendedPackageAppExtras(mContext.getOpPackageName()); return extras != null ? new Bundle(extras.deepCopy()) : null; return extras != null ? new Bundle(extras.deepCopy()) : null; } } @Override public void setSuspendedPackageAppExtras(String packageName, PersistableBundle appExtras) { try { mPM.setSuspendedPackageAppExtras(packageName, appExtras, mContext.getUserId()); } catch (RemoteException e) { e.rethrowFromSystemServer(); } } @Override @Override public boolean isPackageSuspendedForUser(String packageName, int userId) { public boolean isPackageSuspendedForUser(String packageName, int userId) { try { try { Loading
core/java/android/content/pm/IPackageManager.aidl +0 −3 Original line number Original line Diff line number Diff line Loading @@ -280,9 +280,6 @@ interface IPackageManager { PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId); PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId); void setSuspendedPackageAppExtras(String packageName, in PersistableBundle appExtras, int userId); /** /** * Backup/restore support - only the system uid may use these. * Backup/restore support - only the system uid may use these. */ */ Loading
core/java/android/content/pm/PackageManager.java +0 −40 Original line number Original line Diff line number Diff line Loading @@ -5615,46 +5615,6 @@ public abstract class PackageManager { throw new UnsupportedOperationException("isPackageSuspended not implemented"); throw new UnsupportedOperationException("isPackageSuspended not implemented"); } } /** * Retrieve the {@link PersistableBundle} that was passed as {@code appExtras} when the given * package was suspended. * * <p> The caller must hold permission {@link Manifest.permission#SUSPEND_APPS} to use this * api.</p> * * @param packageName The package to retrieve extras for. * @return The {@code appExtras} for the suspended package. * * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) * @hide */ @SystemApi @RequiresPermission(Manifest.permission.SUSPEND_APPS) public @Nullable PersistableBundle getSuspendedPackageAppExtras(String packageName) { throw new UnsupportedOperationException("getSuspendedPackageAppExtras not implemented"); } /** * Set the app extras for a suspended package. This method can be used to update the appExtras * for a package that was earlier suspended using * {@link #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, * String)} * Does nothing if the given package is not already in a suspended state. * * @param packageName The package for which the appExtras need to be updated * @param appExtras The new appExtras for the given package * * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) * * @hide */ @SystemApi @RequiresPermission(Manifest.permission.SUSPEND_APPS) public void setSuspendedPackageAppExtras(String packageName, @Nullable PersistableBundle appExtras) { throw new UnsupportedOperationException("setSuspendedPackageAppExtras not implemented"); } /** /** * Returns any extra information supplied as {@code appExtras} to the system when the calling * Returns any extra information supplied as {@code appExtras} to the system when the calling * app was suspended. * app was suspended. Loading
services/core/java/com/android/server/pm/PackageManagerService.java +27 −40 Original line number Original line Diff line number Diff line Loading @@ -14032,7 +14032,7 @@ public class PackageManagerService extends IPackageManager.Stub "setPackagesSuspended for user " + userId); "setPackagesSuspended for user " + userId); if (callingUid != Process.ROOT_UID && if (callingUid != Process.ROOT_UID && !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) { !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) { throw new IllegalArgumentException("callingPackage " + callingPackage + " does not" throw new IllegalArgumentException("CallingPackage " + callingPackage + " does not" + " belong to calling app id " + UserHandle.getAppId(callingUid)); + " belong to calling app id " + UserHandle.getAppId(callingUid)); } } Loading @@ -14056,12 +14056,11 @@ public class PackageManagerService extends IPackageManager.Stub final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); if (pkgSetting == null if (pkgSetting == null || filterAppAccessLPr(pkgSetting, callingUid, userId)) { || filterAppAccessLPr(pkgSetting, callingUid, userId)) { Slog.w(TAG, "Could not find package setting for package \"" + packageName Slog.w(TAG, "Could not find package setting for package: " + packageName + "\". Skipping suspending/un-suspending."); + ". Skipping suspending/un-suspending."); unactionedPackages.add(packageName); unactionedPackages.add(packageName); continue; continue; } } if (pkgSetting.getSuspended(userId) != suspended) { if (!canSuspendPackageForUserLocked(packageName, userId)) { if (!canSuspendPackageForUserLocked(packageName, userId)) { unactionedPackages.add(packageName); unactionedPackages.add(packageName); continue; continue; Loading @@ -14071,7 +14070,6 @@ public class PackageManagerService extends IPackageManager.Stub changedPackagesList.add(packageName); changedPackagesList.add(packageName); } } } } } } finally { } finally { Binder.restoreCallingIdentity(callingId); Binder.restoreCallingIdentity(callingId); } } Loading @@ -14084,7 +14082,6 @@ public class PackageManagerService extends IPackageManager.Stub scheduleWritePackageRestrictionsLocked(userId); scheduleWritePackageRestrictionsLocked(userId); } } } } return unactionedPackages.toArray(new String[unactionedPackages.size()]); return unactionedPackages.toArray(new String[unactionedPackages.size()]); } } Loading @@ -14092,7 +14089,8 @@ public class PackageManagerService extends IPackageManager.Stub public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) { public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) { final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); if (getPackageUid(packageName, 0, userId) != callingUid) { if (getPackageUid(packageName, 0, userId) != callingUid) { mContext.enforceCallingOrSelfPermission(Manifest.permission.SUSPEND_APPS, null); throw new SecurityException("Calling package " + packageName + " does not belong to calling uid " + callingUid); } } synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); final PackageSetting ps = mSettings.mPackages.get(packageName); Loading @@ -14107,25 +14105,6 @@ public class PackageManagerService extends IPackageManager.Stub } } } } @Override public void setSuspendedPackageAppExtras(String packageName, PersistableBundle appExtras, int userId) { final int callingUid = Binder.getCallingUid(); mContext.enforceCallingOrSelfPermission(Manifest.permission.SUSPEND_APPS, null); synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps == null || filterAppAccessLPr(ps, callingUid, userId)) { throw new IllegalArgumentException("Unknown target package: " + packageName); } final PackageUserState packageUserState = ps.readUserState(userId); if (packageUserState.suspended) { packageUserState.suspendedAppExtras = appExtras; sendMyPackageSuspendedOrUnsuspended(new String[] {packageName}, true, appExtras, userId); } } } private void sendMyPackageSuspendedOrUnsuspended(String[] affectedPackages, boolean suspended, private void sendMyPackageSuspendedOrUnsuspended(String[] affectedPackages, boolean suspended, PersistableBundle appExtras, int userId) { PersistableBundle appExtras, int userId) { final String action; final String action; Loading Loading @@ -14180,17 +14159,25 @@ public class PackageManagerService extends IPackageManager.Stub } } } } void onSuspendingPackageRemoved(String packageName, int userId) { void onSuspendingPackageRemoved(String packageName, int removedForUser) { final int[] userIds = (userId == UserHandle.USER_ALL) ? sUserManager.getUserIds() final int[] userIds = (removedForUser == UserHandle.USER_ALL) ? sUserManager.getUserIds() : new int[] {userId}; : new int[] {removedForUser}; for (int userId : userIds) { List<String> affectedPackages = new ArrayList<>(); synchronized (mPackages) { synchronized (mPackages) { for (PackageSetting ps : mSettings.mPackages.values()) { for (PackageSetting ps : mSettings.mPackages.values()) { for (int user : userIds) { final PackageUserState pus = ps.readUserState(userId); final PackageUserState pus = ps.readUserState(user); if (pus.suspended && packageName.equals(pus.suspendingPackage)) { if (pus.suspended && packageName.equals(pus.suspendingPackage)) { ps.setSuspended(false, null, null, null, null, user); ps.setSuspended(false, null, null, null, null, userId); affectedPackages.add(ps.name); } } } } } if (!affectedPackages.isEmpty()) { final String[] packageArray = affectedPackages.toArray( new String[affectedPackages.size()]); sendMyPackageSuspendedOrUnsuspended(packageArray, false, null, userId); sendPackagesSuspendedForUser(packageArray, userId, false, null); } } } } } }