diff options
author | Kevin Han <kevhan@google.com> | 2021-03-11 00:48:06 -0800 |
---|---|---|
committer | Kevin Han <kevhan@google.com> | 2021-03-19 10:38:16 -0700 |
commit | f0df72a9c7268c2bde7443dfde708ab895e2bf30 (patch) | |
tree | 96d1c9f03cdc4f2acfd352cd10177ec197ab4bda /services/core/java | |
parent | 152e389bae3010c27296798f8e9237127a38ae2b (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.java | 34 |
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) { |