diff options
| author | 2017-04-12 10:54:03 -0700 | |
|---|---|---|
| committer | 2017-04-12 10:54:31 -0700 | |
| commit | 83249ec4f17494484f7923c90b3800a966fd6da3 (patch) | |
| tree | 5176519abf0df11dabe2bf1c77f42a02cd7daf6e | |
| parent | 4a306894145340a4fe08b70b569eaa31641b38e6 (diff) | |
Add API to get a uid's current importance.
This is kind-of useful to go along with monitoring
uid importance changes.
Test: none yet
Change-Id: Ic0f8418955d17ea21d06f49dcd9641bc5f32387b
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 20 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.aidl | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 13 |
5 files changed, 36 insertions, 0 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 99a579321c79..7c4e1564007c 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3980,6 +3980,7 @@ package android.app { method public android.app.PendingIntent getRunningServiceControlPanel(android.content.ComponentName) throws java.lang.SecurityException; method public java.util.List<android.app.ActivityManager.RunningServiceInfo> getRunningServices(int) throws java.lang.SecurityException; method public deprecated java.util.List<android.app.ActivityManager.RunningTaskInfo> getRunningTasks(int) throws java.lang.SecurityException; + method public int getUidImportance(int); method public deprecated boolean isInLockTaskMode(); method public boolean isLowRamDevice(); method public static boolean isRunningInTestHarness(); diff --git a/api/test-current.txt b/api/test-current.txt index 570855fb0043..c91e880b911e 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -3848,6 +3848,7 @@ package android.app { method public android.app.PendingIntent getRunningServiceControlPanel(android.content.ComponentName) throws java.lang.SecurityException; method public java.util.List<android.app.ActivityManager.RunningServiceInfo> getRunningServices(int) throws java.lang.SecurityException; method public deprecated java.util.List<android.app.ActivityManager.RunningTaskInfo> getRunningTasks(int) throws java.lang.SecurityException; + method public int getUidImportance(int); method public deprecated boolean isInLockTaskMode(); method public boolean isLowRamDevice(); method public static boolean isRunningInTestHarness(); diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 4004bd6686b1..76ba133e3028 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -3347,6 +3347,26 @@ public class ActivityManager { } /** + * Return the importance of a given uid, based on the processes that are + * currently running. The return value is one of the importance constants defined + * in {@link RunningAppProcessInfo}, giving you the highest importance of all the + * processes that this uid has running. If there are no processes + * running its code, {@link RunningAppProcessInfo#IMPORTANCE_GONE} is returned. + * @hide + */ + @SystemApi @TestApi + @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS) + public int getUidImportance(int uid) { + try { + int procState = getService().getUidProcessState(uid, + mContext.getOpPackageName()); + return RunningAppProcessInfo.procStateToImportance(procState); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Callback to get reports about changes to the importance of a uid. Use with * {@link #addOnUidImportanceListener}. * @hide diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 079bbcdd4951..42a70ecfb2cb 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -463,6 +463,7 @@ interface IActivityManager { * etc. */ void keyguardGoingAway(int flags); + int getUidProcessState(int uid, in String callingPackage); void registerUidObserver(in IUidObserver observer, int which, int cutpoint, String callingPackage); void unregisterUidObserver(in IUidObserver observer); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 35654d76dee5..d67822523900 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -13025,6 +13025,19 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override + public int getUidProcessState(int uid, String callingPackage) { + if (!hasUsageStatsPermission(callingPackage)) { + enforceCallingPermission(android.Manifest.permission.PACKAGE_USAGE_STATS, + "getUidProcessState"); + } + + synchronized (this) { + UidRecord uidRec = mActiveUids.get(uid); + return uidRec != null ? uidRec.curProcState : ActivityManager.PROCESS_STATE_NONEXISTENT; + } + } + + @Override public void registerUidObserver(IUidObserver observer, int which, int cutpoint, String callingPackage) { if (!hasUsageStatsPermission(callingPackage)) { |