diff options
4 files changed, 35 insertions, 8 deletions
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 7654e9b6ee22..a932d01946e3 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -574,6 +574,14 @@ public class Process {      }      /** +     * Returns whether the given uid belongs to a system core component or not. +     * @hide +     */ +    public static boolean isCoreUid(int uid) { +        return UserHandle.isCore(uid); +    } + +    /**       * Returns whether the given uid belongs to an application.       * @param uid A kernel uid.       * @return Whether the uid corresponds to an application sandbox running in diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index 6381b56a6503..5be72bc5c54b 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -126,7 +126,10 @@ public final class UserHandle implements Parcelable {          return getAppId(uid1) == getAppId(uid2);      } -    /** @hide */ +    /** +     * Whether a UID is an "isolated" UID. +     * @hide +     */      public static boolean isIsolated(int uid) {          if (uid > 0) {              final int appId = getAppId(uid); @@ -136,7 +139,11 @@ public final class UserHandle implements Parcelable {          }      } -    /** @hide */ +    /** +     * Whether a UID belongs to a regular app. *Note* "Not a regular app" does not mean +     * "it's system", because of isolated UIDs. Use {@link #isCore} for that. +     * @hide +     */      public static boolean isApp(int uid) {          if (uid > 0) {              final int appId = getAppId(uid); @@ -147,6 +154,19 @@ public final class UserHandle implements Parcelable {      }      /** +     * Whether a UID belongs to a system core component or not. +     * @hide +     */ +    public static boolean isCore(int uid) { +        if (uid > 0) { +            final int appId = getAppId(uid); +            return appId < Process.FIRST_APPLICATION_UID; +        } else { +            return false; +        } +    } + +    /**       * Returns the user for a given uid.       * @param uid A uid for an application running in a particular user.       * @return A {@link UserHandle} for that user. diff --git a/services/core/java/com/android/server/ForceAppStandbyTracker.java b/services/core/java/com/android/server/ForceAppStandbyTracker.java index de113a6a53e0..a1a5fb4d50b1 100644 --- a/services/core/java/com/android/server/ForceAppStandbyTracker.java +++ b/services/core/java/com/android/server/ForceAppStandbyTracker.java @@ -504,7 +504,7 @@ public class ForceAppStandbyTracker {       */      void uidToForeground(int uid) {          synchronized (mLock) { -            if (!UserHandle.isApp(uid)) { +            if (UserHandle.isCore(uid)) {                  return;              }              // TODO This can be optimized by calling indexOfKey and sharing the index for get and @@ -522,7 +522,7 @@ public class ForceAppStandbyTracker {       */      void uidToBackground(int uid, boolean remove) {          synchronized (mLock) { -            if (!UserHandle.isApp(uid)) { +            if (UserHandle.isCore(uid)) {                  return;              }              // TODO This can be optimized by calling indexOfKey and sharing the index for get and @@ -864,7 +864,7 @@ public class ForceAppStandbyTracker {       * Note clients normally shouldn't need to access it. It's only for dumpsys.       */      public boolean isInForeground(int uid) { -        if (!UserHandle.isApp(uid)) { +        if (UserHandle.isCore(uid)) {              return true;          }          synchronized (mLock) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index c0c684c41bc5..401072107fd8 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -425,7 +425,6 @@ import com.android.server.SystemServiceManager;  import com.android.server.ThreadPriorityBooster;  import com.android.server.Watchdog;  import com.android.server.am.ActivityStack.ActivityState; -import com.android.server.am.EventLogTags;  import com.android.server.am.proto.ActivityManagerServiceProto;  import com.android.server.am.proto.BroadcastProto;  import com.android.server.am.proto.GrantUriProto; @@ -8834,7 +8833,7 @@ public class ActivityManagerService extends IActivityManager.Stub              case AppOpsManager.MODE_ALLOWED:                  // If force-background-check is enabled, restrict all apps that aren't whitelisted.                  if (mForceBackgroundCheck && -                        UserHandle.isApp(uid) && +                        !UserHandle.isCore(uid) &&                          !isOnDeviceIdleWhitelistLocked(uid)) {                      if (DEBUG_BACKGROUND_CHECK) {                          Slog.i(TAG, "Force background check: " + @@ -24086,7 +24085,7 @@ public class ActivityManagerService extends IActivityManager.Stub          final int size = mActiveUids.size();          for (int i = 0; i < size; i++) {              final int uid = mActiveUids.keyAt(i); -            if (!UserHandle.isApp(uid)) { +            if (UserHandle.isCore(uid)) {                  continue;              }              final UidRecord uidRec = mActiveUids.valueAt(i);  |