diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 9 | ||||
| -rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 2 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 24 |
3 files changed, 35 insertions, 0 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index fcd9a0511265..8bb704d76e85 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -2277,6 +2277,15 @@ public class ApplicationPackageManager extends PackageManager { } @Override + public boolean canSuspendPackage(String packageName) { + try { + return mPM.canSuspendPackageForUser(packageName, mContext.getUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + @Override public Bundle getSuspendedPackageAppExtras() { final PersistableBundle extras; try { diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index a87ee572b6d0..d0eff2e0fda9 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -276,6 +276,8 @@ interface IPackageManager { in PersistableBundle appExtras, in PersistableBundle launcherExtras, in SuspendDialogInfo dialogInfo, String callingPackage, int userId); + boolean canSuspendPackageForUser(String packageName, int userId); + boolean isPackageSuspendedForUser(String packageName, int userId); PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index d3e40452d9fb..e14b17e5cdd3 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -5797,6 +5797,30 @@ public abstract class PackageManager { } /** + * Returns whether or not a given package can be suspended via a call to {@link + * #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, + * SuspendDialogInfo) setPackagesSuspended}. The platform prevents suspending certain critical + * packages to keep the device in a functioning state, e.g. the default dialer. + * Apps need to hold {@link Manifest.permission#SUSPEND_APPS SUSPEND_APPS} to call this api. + * + * <p> + * Note that this set of critical packages can change with time, so <em>a value of {@code true} + * returned by this api does not guarantee that a following call to {@link + * #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, + * SuspendDialogInfo) setPackagesSuspended} for the same package will succeed</em>, especially + * if considerable time elapsed between the two calls. + * + * @param packageName The package to check. + * @return {@code true} if the given package can be suspended, {@code false} otherwise. + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.SUSPEND_APPS) + public boolean canSuspendPackage(@NonNull String packageName) { + throw new UnsupportedOperationException("canSuspendPackage not implemented"); + } + + /** * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) * @param packageName The name of the package to get the suspended status of. * @param userId The user id. |
