diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index ba36d937edc38..87fe215edd852 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -630,7 +630,7 @@ public class ActivityManager { PROCESS_CAPABILITY_FOREGROUND_LOCATION, PROCESS_CAPABILITY_FOREGROUND_CAMERA, PROCESS_CAPABILITY_FOREGROUND_MICROPHONE, - PROCESS_CAPABILITY_NETWORK, + PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK, PROCESS_CAPABILITY_BFSL, }) @Retention(RetentionPolicy.SOURCE) @@ -791,7 +791,7 @@ public class ActivityManager { public static final int PROCESS_CAPABILITY_ALL = PROCESS_CAPABILITY_FOREGROUND_LOCATION | PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE - | PROCESS_CAPABILITY_NETWORK + | PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK | PROCESS_CAPABILITY_BFSL; /** @@ -810,7 +810,7 @@ public class ActivityManager { pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0 ? 'L' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); - pw.print((caps & PROCESS_CAPABILITY_NETWORK) != 0 ? 'N' : '-'); + pw.print((caps & PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0 ? 'N' : '-'); pw.print((caps & PROCESS_CAPABILITY_BFSL) != 0 ? 'F' : '-'); } @@ -819,7 +819,7 @@ public class ActivityManager { sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0 ? 'L' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); - sb.append((caps & PROCESS_CAPABILITY_NETWORK) != 0 ? 'N' : '-'); + sb.append((caps & PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0 ? 'N' : '-'); sb.append((caps & PROCESS_CAPABILITY_BFSL) != 0 ? 'F' : '-'); } diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index d0accb72a0e1c..a412560d0347d 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -528,7 +528,7 @@ public abstract class Context { /** * Flag for {@link #bindService}: allow the process hosting the target service to gain - * {@link ActivityManager#PROCESS_CAPABILITY_NETWORK}, which allows it be able + * {@link ActivityManager#PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK}, which allows it be able * to access network regardless of any power saving restrictions. * * @hide diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 9341105675a2e..104a8b2095d85 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -475,8 +475,8 @@ public class NetworkPolicyManager { * * @param uid The UID whose status needs to be checked. * @return {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_DISABLED}, - * {@link ConnectivityManager##RESTRICT_BACKGROUND_STATUS_ENABLED}, - * or {@link ConnectivityManager##RESTRICT_BACKGROUND_STATUS_WHITELISTED} to denote + * {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_ENABLED}, + * or {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_WHITELISTED} to denote * the current status of the UID. * @hide */ @@ -768,6 +768,28 @@ public class NetworkPolicyManager { return string.toString(); } + /** + * Returns the default network capabilities + * ({@link ActivityManager#PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK + * ActivityManager.PROCESS_CAPABILITY_*}) of the specified process state. + * This DOES NOT return all default process capabilities for a proc state. + * @hide + */ + public static int getDefaultProcessNetworkCapabilities(int procState) { + switch (procState) { + case ActivityManager.PROCESS_STATE_PERSISTENT: + case ActivityManager.PROCESS_STATE_PERSISTENT_UI: + case ActivityManager.PROCESS_STATE_TOP: + return ActivityManager.PROCESS_CAPABILITY_ALL; + case ActivityManager.PROCESS_STATE_BOUND_TOP: + case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: + case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: + return ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; + default: + return ActivityManager.PROCESS_CAPABILITY_NONE; + } + } + /** * Returns true if {@param procState} is considered foreground and as such will be allowed * to access network when the device is idle or in battery saver mode. Otherwise, false. @@ -784,7 +806,7 @@ public class NetworkPolicyManager { public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode( int procState, @ProcessCapability int capability) { return procState <= FOREGROUND_THRESHOLD_STATE - || (capability & ActivityManager.PROCESS_CAPABILITY_NETWORK) != 0; + || (capability & ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0; } /** @hide */ diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 34002a9a1209a..2c79f8ce9bf94 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -19,7 +19,7 @@ package com.android.server.am; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; -import static android.app.ActivityManager.PROCESS_CAPABILITY_NETWORK; +import static android.app.ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; import static android.app.ActivityManagerInternal.ALLOW_NON_FULL; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM; @@ -2046,7 +2046,7 @@ final class ActivityManagerShellCommand extends ShellCommand { int mask = PROCESS_CAPABILITY_FOREGROUND_LOCATION | PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE - | PROCESS_CAPABILITY_NETWORK; + | PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; while ((opt=getNextOption()) != null) { if (opt.equals("--oom")) { diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 086b77b03f57c..7121421858632 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -22,8 +22,8 @@ import static android.app.ActivityManager.PROCESS_CAPABILITY_BFSL; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; -import static android.app.ActivityManager.PROCESS_CAPABILITY_NETWORK; import static android.app.ActivityManager.PROCESS_CAPABILITY_NONE; +import static android.app.ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; import static android.app.ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP; import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY; @@ -117,6 +117,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.ServiceInfo; +import android.net.NetworkPolicyManager; import android.os.Handler; import android.os.IBinder; import android.os.PowerManagerInternal; @@ -2280,14 +2281,15 @@ public class OomAdjuster { // elevated to a high enough procstate anyway to get network unless they // request otherwise, so don't propagate the network capability by default // in this case unless they explicitly request it. - if ((cstate.getCurCapability() & PROCESS_CAPABILITY_NETWORK) != 0) { + if ((cstate.getCurCapability() + & PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0) { if (clientProcState <= PROCESS_STATE_BOUND_FOREGROUND_SERVICE) { // This is used to grant network access to Expedited Jobs. if (cr.hasFlag(Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS)) { - capability |= PROCESS_CAPABILITY_NETWORK; + capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; } } else { - capability |= PROCESS_CAPABILITY_NETWORK; + capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; } } @@ -2798,27 +2800,33 @@ public class OomAdjuster { } private int getDefaultCapability(ProcessRecord app, int procState) { + final int networkCapabilities = + NetworkPolicyManager.getDefaultProcessNetworkCapabilities(procState); + final int baseCapabilities; switch (procState) { case PROCESS_STATE_PERSISTENT: case PROCESS_STATE_PERSISTENT_UI: case PROCESS_STATE_TOP: - return PROCESS_CAPABILITY_ALL; // BFSL allowed + baseCapabilities = PROCESS_CAPABILITY_ALL; // BFSL allowed + break; case PROCESS_STATE_BOUND_TOP: - return PROCESS_CAPABILITY_NETWORK | PROCESS_CAPABILITY_BFSL; + baseCapabilities = PROCESS_CAPABILITY_BFSL; + break; case PROCESS_STATE_FOREGROUND_SERVICE: if (app.getActiveInstrumentation() != null) { - return PROCESS_CAPABILITY_ALL_IMPLICIT | PROCESS_CAPABILITY_NETWORK ; + baseCapabilities = PROCESS_CAPABILITY_ALL_IMPLICIT; } else { // Capability from foreground service is conditional depending on // foregroundServiceType in the manifest file and the // mAllowWhileInUsePermissionInFgs flag. - return PROCESS_CAPABILITY_NETWORK; + baseCapabilities = PROCESS_CAPABILITY_NONE; } - case PROCESS_STATE_BOUND_FOREGROUND_SERVICE: - return PROCESS_CAPABILITY_NETWORK; + break; default: - return PROCESS_CAPABILITY_NONE; + baseCapabilities = PROCESS_CAPABILITY_NONE; + break; } + return baseCapabilities | networkCapabilities; } /** diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java index 93dfee6f2da44..8c7b0c5a569a2 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java @@ -528,7 +528,7 @@ public class ActivityManagerServiceTest { ActivityManager.PROCESS_CAPABILITY_NONE, ActivityManager.PROCESS_CAPABILITY_NONE, ActivityManager.PROCESS_CAPABILITY_NONE, - ActivityManager.PROCESS_CAPABILITY_NETWORK, + ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK, }; final Map changeItems = new HashMap<>(); for (int i = 0; i < changesForPendingUidRecords.length; ++i) { diff --git a/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java b/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java index 8a3f246fd6567..f788c92b24b2d 100644 --- a/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/am/UidObserverControllerTest.java @@ -18,8 +18,8 @@ package com.android.server.am; import static android.app.ActivityManager.PROCESS_CAPABILITY_ALL; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; -import static android.app.ActivityManager.PROCESS_CAPABILITY_NETWORK; import static android.app.ActivityManager.PROCESS_CAPABILITY_NONE; +import static android.app.ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK; import static android.app.ActivityManager.PROCESS_STATE_CACHED_RECENT; import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; import static android.app.ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND; @@ -185,10 +185,10 @@ public class UidObserverControllerTest { verifyNoMoreInteractions(observer2); addPendingChange(TEST_UID1, UidRecord.CHANGE_PROCSTATE | UidRecord.CHANGE_CAPABILITY, - PROCESS_STATE_RECEIVER, 111, PROCESS_CAPABILITY_NETWORK, false); + PROCESS_STATE_RECEIVER, 111, PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK, false); mUidObserverController.dispatchUidsChanged(); verify(observer2).onUidStateChanged(TEST_UID1, PROCESS_STATE_RECEIVER, - 111, PROCESS_CAPABILITY_NETWORK); + 111, PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK); verifyNoMoreInteractions(observer1); verifyNoMoreInteractions(observer2);