summaryrefslogtreecommitdiff
path: root/services/core/java
diff options
context:
space:
mode:
authorKevin Han <kevhan@google.com>2021-03-11 00:48:06 -0800
committerKevin Han <kevhan@google.com>2021-03-19 10:38:16 -0700
commitf0df72a9c7268c2bde7443dfde708ab895e2bf30 (patch)
tree96d1c9f03cdc4f2acfd352cd10177ec197ab4bda /services/core/java
parent152e389bae3010c27296798f8e9237127a38ae2b (diff)
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
Diffstat (limited to 'services/core/java')
-rw-r--r--services/core/java/com/android/server/apphibernation/AppHibernationService.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java
index aa7da77d06e8..b3373d0bb536 100644
--- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java
+++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java
@@ -293,6 +293,35 @@ public final class AppHibernationService extends SystemService {
}
/**
+ * Get the hibernating packages for the given user. This is equivalent to the list of
+ * packages for the user that return true for {@link #isHibernatingForUser}.
+ */
+ @NonNull List<String> getHibernatingPackagesForUser(int userId) {
+ ArrayList<String> hibernatingPackages = new ArrayList<>();
+ if (!checkHibernationEnabled("getHibernatingPackagesForUser")) {
+ return hibernatingPackages;
+ }
+ getContext().enforceCallingOrSelfPermission(
+ android.Manifest.permission.MANAGE_APP_HIBERNATION,
+ "Caller does not have MANAGE_APP_HIBERNATION permission.");
+ userId = handleIncomingUser(userId, "getHibernatingPackagesForUser");
+ if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
+ Slog.w(TAG, "Attempt to get hibernating packages for a stopped or nonexistent user "
+ + userId);
+ return hibernatingPackages;
+ }
+ synchronized (mLock) {
+ Map<String, UserLevelState> userStates = mUserStates.get(userId);
+ for (UserLevelState state : userStates.values()) {
+ if (state.hibernated) {
+ hibernatingPackages.add(state.packageName);
+ }
+ }
+ return hibernatingPackages;
+ }
+ }
+
+ /**
* Put an app into hibernation for a given user, allowing user-level optimizations to occur.
*
* @param pkgState package hibernation state
@@ -619,6 +648,11 @@ public final class AppHibernationService extends SystemService {
}
@Override
+ public List<String> getHibernatingPackagesForUser(int userId) {
+ return mService.getHibernatingPackagesForUser(userId);
+ }
+
+ @Override
public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
@Nullable FileDescriptor err, @NonNull String[] args,
@Nullable ShellCallback callback, @NonNull ResultReceiver resultReceiver) {