Fix issue #35365651: ActivityManager.getPackageImportance() doesn't...

...return the highest importance of all processes

Also clean up the importance constants to correctly reflect the
current state of the system.

Test: run activity test, added new conditions to it for this.
Change-Id: I25c4351b017c4a703212f604079e13f7d4fead5b
diff --git a/api/current.txt b/api/current.txt
index db13a0b..668e94e 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3911,8 +3911,9 @@
     method public void readFromParcel(android.os.Parcel);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningAppProcessInfo> CREATOR;
-    field public static final int IMPORTANCE_BACKGROUND = 400; // 0x190
-    field public static final int IMPORTANCE_EMPTY = 500; // 0x1f4
+    field public static final deprecated int IMPORTANCE_BACKGROUND = 400; // 0x190
+    field public static final int IMPORTANCE_CACHED = 400; // 0x190
+    field public static final deprecated int IMPORTANCE_EMPTY = 500; // 0x1f4
     field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64
     field public static final int IMPORTANCE_FOREGROUND_SERVICE = 125; // 0x7d
     field public static final int IMPORTANCE_GONE = 1000; // 0x3e8
diff --git a/api/system-current.txt b/api/system-current.txt
index 9536d13..05a21e8 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4049,8 +4049,9 @@
     method public void readFromParcel(android.os.Parcel);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningAppProcessInfo> CREATOR;
-    field public static final int IMPORTANCE_BACKGROUND = 400; // 0x190
-    field public static final int IMPORTANCE_EMPTY = 500; // 0x1f4
+    field public static final deprecated int IMPORTANCE_BACKGROUND = 400; // 0x190
+    field public static final int IMPORTANCE_CACHED = 400; // 0x190
+    field public static final deprecated int IMPORTANCE_EMPTY = 500; // 0x1f4
     field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64
     field public static final int IMPORTANCE_FOREGROUND_SERVICE = 125; // 0x7d
     field public static final int IMPORTANCE_GONE = 1000; // 0x3e8
diff --git a/api/test-current.txt b/api/test-current.txt
index 5776bc3..d534fcb 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3920,8 +3920,9 @@
     method public void readFromParcel(android.os.Parcel);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningAppProcessInfo> CREATOR;
-    field public static final int IMPORTANCE_BACKGROUND = 400; // 0x190
-    field public static final int IMPORTANCE_EMPTY = 500; // 0x1f4
+    field public static final deprecated int IMPORTANCE_BACKGROUND = 400; // 0x190
+    field public static final int IMPORTANCE_CACHED = 400; // 0x190
+    field public static final deprecated int IMPORTANCE_EMPTY = 500; // 0x1f4
     field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64
     field public static final int IMPORTANCE_FOREGROUND_SERVICE = 125; // 0x7d
     field public static final int IMPORTANCE_GONE = 1000; // 0x3e8
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index fda9966..cae37c6 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -3024,14 +3024,22 @@
 
         /**
          * Constant for {@link #importance}: This process process contains
-         * background code that is expendable.
+         * cached code that is expendable, not actively running any app components
+         * we care about.
          */
-        public static final int IMPORTANCE_BACKGROUND = 400;
+        public static final int IMPORTANCE_CACHED = 400;
+
+        /**
+         * @deprecated Renamed to {@link #IMPORTANCE_CACHED}.
+         */
+        public static final int IMPORTANCE_BACKGROUND = IMPORTANCE_CACHED;
 
         /**
          * Constant for {@link #importance}: This process is empty of any
          * actively running code.
+         * @deprecated This value is no longer reported, use {@link #IMPORTANCE_CACHED} instead.
          */
+        @Deprecated
         public static final int IMPORTANCE_EMPTY = 500;
 
         /**
@@ -3044,7 +3052,7 @@
             if (procState == PROCESS_STATE_NONEXISTENT) {
                 return IMPORTANCE_GONE;
             } else if (procState >= PROCESS_STATE_HOME) {
-                return IMPORTANCE_BACKGROUND;
+                return IMPORTANCE_CACHED;
             } else if (procState >= PROCESS_STATE_SERVICE) {
                 return IMPORTANCE_SERVICE;
             } else if (procState > PROCESS_STATE_HEAVY_WEIGHT) {
@@ -3066,7 +3074,7 @@
         public static int importanceToProcState(int importance) {
             if (importance == IMPORTANCE_GONE) {
                 return PROCESS_STATE_NONEXISTENT;
-            } else if (importance >= IMPORTANCE_BACKGROUND) {
+            } else if (importance >= IMPORTANCE_CACHED) {
                 return PROCESS_STATE_HOME;
             } else if (importance >= IMPORTANCE_SERVICE) {
                 return PROCESS_STATE_SERVICE;
@@ -3088,8 +3096,8 @@
         /**
          * The relative importance level that the system places on this
          * process.  May be one of {@link #IMPORTANCE_FOREGROUND},
-         * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE},
-         * {@link #IMPORTANCE_BACKGROUND}, or {@link #IMPORTANCE_EMPTY}.  These
+         * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE}, or
+         * {@link #IMPORTANCE_CACHED}.  These
          * constants are numbered so that "more important" values are always
          * smaller than "less important" values.
          */
@@ -3101,7 +3109,7 @@
          * utility of processes within a category.  This number means nothing
          * except that a smaller values are more recently used (and thus
          * more important).  Currently an LRU value is only maintained for
-         * the {@link #IMPORTANCE_BACKGROUND} category, though others may
+         * the {@link #IMPORTANCE_CACHED} category, though others may
          * be maintained in the future.
          */
         public int lru;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 9a01942..59685ad 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -4148,13 +4148,9 @@
         synchronized (this) {
             for (int i=mLruProcesses.size()-1; i>=0; i--) {
                 final ProcessRecord proc = mLruProcesses.get(i);
-                if (procState == ActivityManager.PROCESS_STATE_NONEXISTENT
-                        || procState > proc.setProcState) {
-                    if (proc.pkgList.containsKey(packageName)) {
-                        procState = proc.setProcState;
-                        break;
-                    }
-                    if (proc.pkgDeps != null && proc.pkgDeps.contains(packageName)) {
+                if (procState > proc.setProcState) {
+                    if (proc.pkgList.containsKey(packageName) ||
+                            (proc.pkgDeps != null && proc.pkgDeps.contains(packageName))) {
                         procState = proc.setProcState;
                     }
                 }