From 152e389bae3010c27296798f8e9237127a38ae2b Mon Sep 17 00:00:00 2001 From: Kevin Han Date: Wed, 17 Mar 2021 15:37:40 -0700 Subject: Add MANAGE_APP_HIBERNATION permission Add permission for app hibernation state manipulation. Bug: 183058954 Test: run hibernation job and confirm the API works for PermissionController (cherrypick of ag/13909632) Merged-In: Id57ee57f49710d0b8a49a4ec561800db43089f87 Change-Id: Id57ee57f49710d0b8a49a4ec561800db43089f87 --- core/api/system-current.txt | 9 +++++---- core/java/android/apphibernation/AppHibernationManager.java | 5 +++++ core/res/AndroidManifest.xml | 4 ++++ 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'core') diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 68be0bfa1f24..f9ff3f21b6b0 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -113,6 +113,7 @@ package android { field public static final String LOOP_RADIO = "android.permission.LOOP_RADIO"; field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY"; field public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS"; + field public static final String MANAGE_APP_HIBERNATION = "android.permission.MANAGE_APP_HIBERNATION"; field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS"; field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS"; field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS"; @@ -1421,10 +1422,10 @@ package android.app.usage { package android.apphibernation { public final class AppHibernationManager { - method public boolean isHibernatingForUser(@NonNull String); - method public boolean isHibernatingGlobally(@NonNull String); - method public void setHibernatingForUser(@NonNull String, boolean); - method public void setHibernatingGlobally(@NonNull String, boolean); + method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String); + method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String); + method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String, boolean); + method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingGlobally(@NonNull String, boolean); } } diff --git a/core/java/android/apphibernation/AppHibernationManager.java b/core/java/android/apphibernation/AppHibernationManager.java index 7281d50a33a5..132cc40f3948 100644 --- a/core/java/android/apphibernation/AppHibernationManager.java +++ b/core/java/android/apphibernation/AppHibernationManager.java @@ -17,6 +17,7 @@ package android.apphibernation; import android.annotation.NonNull; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.content.Context; @@ -54,6 +55,7 @@ public final class AppHibernationManager { * @hide */ @SystemApi + @RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String packageName) { try { return mIAppHibernationService.isHibernatingForUser(packageName, mContext.getUserId()); @@ -68,6 +70,7 @@ public final class AppHibernationManager { * @hide */ @SystemApi + @RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String packageName, boolean isHibernating) { try { mIAppHibernationService.setHibernatingForUser(packageName, mContext.getUserId(), @@ -83,6 +86,7 @@ public final class AppHibernationManager { * @hide */ @SystemApi + @RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String packageName) { try { return mIAppHibernationService.isHibernatingGlobally(packageName); @@ -99,6 +103,7 @@ public final class AppHibernationManager { * @hide */ @SystemApi + @RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingGlobally(@NonNull String packageName, boolean isHibernating) { try { mIAppHibernationService.setHibernatingGlobally(packageName, isHibernating); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 2f352e955d29..61e7d0ad9a73 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -5172,6 +5172,10 @@ + + + -- cgit v1.2.3 From f0df72a9c7268c2bde7443dfde708ab895e2bf30 Mon Sep 17 00:00:00 2001 From: Kevin Han Date: Thu, 11 Mar 2021 00:48:06 -0800 Subject: Add API to get hibernating packages Add API to AppHibernationService to get hibernating packages so Settings can access this information. Bug: 175829330 Test: atest AppHibernationServiceTest Change-Id: Icd186807c19ece55a21fc4d240d2f0132951af82 --- core/api/system-current.txt | 1 + .../android/apphibernation/AppHibernationManager.java | 18 ++++++++++++++++++ .../android/apphibernation/IAppHibernationService.aidl | 1 + 3 files changed, 20 insertions(+) (limited to 'core') diff --git a/core/api/system-current.txt b/core/api/system-current.txt index f9ff3f21b6b0..5ce5075ac54b 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1422,6 +1422,7 @@ package android.app.usage { package android.apphibernation { public final class AppHibernationManager { + method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public java.util.List getHibernatingPackagesForUser(); method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String); method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String); method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String, boolean); diff --git a/core/java/android/apphibernation/AppHibernationManager.java b/core/java/android/apphibernation/AppHibernationManager.java index 132cc40f3948..de778488df03 100644 --- a/core/java/android/apphibernation/AppHibernationManager.java +++ b/core/java/android/apphibernation/AppHibernationManager.java @@ -24,6 +24,8 @@ import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; +import java.util.List; + /** * This class provides an API surface for system apps to manipulate the app hibernation * state of a package for the user provided in the context. @@ -111,4 +113,20 @@ public final class AppHibernationManager { throw e.rethrowFromSystemServer(); } } + + /** + * Get the hibernating packages for the user. This is equivalent to the list of packages for + * the user that return true for {@link #isHibernatingForUser}. + * + * @hide + */ + @SystemApi + @RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION) + public @NonNull List getHibernatingPackagesForUser() { + try { + return mIAppHibernationService.getHibernatingPackagesForUser(mContext.getUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } } diff --git a/core/java/android/apphibernation/IAppHibernationService.aidl b/core/java/android/apphibernation/IAppHibernationService.aidl index 6a068ee2b147..afdb3fe03dad 100644 --- a/core/java/android/apphibernation/IAppHibernationService.aidl +++ b/core/java/android/apphibernation/IAppHibernationService.aidl @@ -25,4 +25,5 @@ interface IAppHibernationService { void setHibernatingForUser(String packageName, int userId, boolean isHibernating); boolean isHibernatingGlobally(String packageName); void setHibernatingGlobally(String packageName, boolean isHibernating); + List getHibernatingPackagesForUser(int userId); } \ No newline at end of file -- cgit v1.2.3