Merge "Use updated process capability name." into udc-dev

This commit is contained in:
Kweku Adams
2023-03-02 20:23:06 +00:00
committed by Android (Google) Code Review
7 changed files with 55 additions and 25 deletions

View File

@@ -630,7 +630,7 @@ public class ActivityManager {
PROCESS_CAPABILITY_FOREGROUND_LOCATION, PROCESS_CAPABILITY_FOREGROUND_LOCATION,
PROCESS_CAPABILITY_FOREGROUND_CAMERA, PROCESS_CAPABILITY_FOREGROUND_CAMERA,
PROCESS_CAPABILITY_FOREGROUND_MICROPHONE, PROCESS_CAPABILITY_FOREGROUND_MICROPHONE,
PROCESS_CAPABILITY_NETWORK, PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK,
PROCESS_CAPABILITY_BFSL, PROCESS_CAPABILITY_BFSL,
}) })
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@@ -791,7 +791,7 @@ public class ActivityManager {
public static final int PROCESS_CAPABILITY_ALL = PROCESS_CAPABILITY_FOREGROUND_LOCATION public static final int PROCESS_CAPABILITY_ALL = PROCESS_CAPABILITY_FOREGROUND_LOCATION
| PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_CAMERA
| PROCESS_CAPABILITY_FOREGROUND_MICROPHONE | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE
| PROCESS_CAPABILITY_NETWORK | PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK
| PROCESS_CAPABILITY_BFSL; | 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_LOCATION) != 0 ? 'L' : '-');
pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-');
pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); 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' : '-'); 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_LOCATION) != 0 ? 'L' : '-');
sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-');
sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); 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' : '-'); sb.append((caps & PROCESS_CAPABILITY_BFSL) != 0 ? 'F' : '-');
} }

View File

@@ -528,7 +528,7 @@ public abstract class Context {
/** /**
* Flag for {@link #bindService}: allow the process hosting the target service to gain * 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. * to access network regardless of any power saving restrictions.
* *
* @hide * @hide

View File

@@ -475,8 +475,8 @@ public class NetworkPolicyManager {
* *
* @param uid The UID whose status needs to be checked. * @param uid The UID whose status needs to be checked.
* @return {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_DISABLED}, * @return {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_DISABLED},
* {@link ConnectivityManager##RESTRICT_BACKGROUND_STATUS_ENABLED}, * {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_ENABLED},
* or {@link ConnectivityManager##RESTRICT_BACKGROUND_STATUS_WHITELISTED} to denote * or {@link ConnectivityManager#RESTRICT_BACKGROUND_STATUS_WHITELISTED} to denote
* the current status of the UID. * the current status of the UID.
* @hide * @hide
*/ */
@@ -768,6 +768,28 @@ public class NetworkPolicyManager {
return string.toString(); return string.toString();
} }
/**
* Returns the default network capabilities
* ({@link ActivityManager#PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK
* ActivityManager.PROCESS_CAPABILITY_*}) of the specified process state.
* This <b>DOES NOT</b> 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 * 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. * 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( public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(
int procState, @ProcessCapability int capability) { int procState, @ProcessCapability int capability) {
return procState <= FOREGROUND_THRESHOLD_STATE return procState <= FOREGROUND_THRESHOLD_STATE
|| (capability & ActivityManager.PROCESS_CAPABILITY_NETWORK) != 0; || (capability & ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0;
} }
/** @hide */ /** @hide */

View File

@@ -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_CAMERA;
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; 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_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.ActivityManagerInternal.ALLOW_NON_FULL;
import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM; import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM;
@@ -2014,7 +2014,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
int mask = PROCESS_CAPABILITY_FOREGROUND_LOCATION int mask = PROCESS_CAPABILITY_FOREGROUND_LOCATION
| PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_CAMERA
| PROCESS_CAPABILITY_FOREGROUND_MICROPHONE | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE
| PROCESS_CAPABILITY_NETWORK; | PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK;
while ((opt=getNextOption()) != null) { while ((opt=getNextOption()) != null) {
if (opt.equals("--oom")) { if (opt.equals("--oom")) {

View File

@@ -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_CAMERA;
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; 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_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_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_FOREGROUND_SERVICE;
import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP; import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP;
import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY; import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY;
@@ -117,6 +117,7 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo;
import android.net.NetworkPolicyManager;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.PowerManagerInternal; import android.os.PowerManagerInternal;
@@ -2280,14 +2281,15 @@ public class OomAdjuster {
// elevated to a high enough procstate anyway to get network unless they // elevated to a high enough procstate anyway to get network unless they
// request otherwise, so don't propagate the network capability by default // request otherwise, so don't propagate the network capability by default
// in this case unless they explicitly request it. // 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) { if (clientProcState <= PROCESS_STATE_BOUND_FOREGROUND_SERVICE) {
// This is used to grant network access to Expedited Jobs. // This is used to grant network access to Expedited Jobs.
if (cr.hasFlag(Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS)) { if (cr.hasFlag(Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS)) {
capability |= PROCESS_CAPABILITY_NETWORK; capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK;
} }
} else { } 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) { private int getDefaultCapability(ProcessRecord app, int procState) {
final int networkCapabilities =
NetworkPolicyManager.getDefaultProcessNetworkCapabilities(procState);
final int baseCapabilities;
switch (procState) { switch (procState) {
case PROCESS_STATE_PERSISTENT: case PROCESS_STATE_PERSISTENT:
case PROCESS_STATE_PERSISTENT_UI: case PROCESS_STATE_PERSISTENT_UI:
case PROCESS_STATE_TOP: case PROCESS_STATE_TOP:
return PROCESS_CAPABILITY_ALL; // BFSL allowed baseCapabilities = PROCESS_CAPABILITY_ALL; // BFSL allowed
break;
case PROCESS_STATE_BOUND_TOP: case PROCESS_STATE_BOUND_TOP:
return PROCESS_CAPABILITY_NETWORK | PROCESS_CAPABILITY_BFSL; baseCapabilities = PROCESS_CAPABILITY_BFSL;
break;
case PROCESS_STATE_FOREGROUND_SERVICE: case PROCESS_STATE_FOREGROUND_SERVICE:
if (app.getActiveInstrumentation() != null) { if (app.getActiveInstrumentation() != null) {
return PROCESS_CAPABILITY_ALL_IMPLICIT | PROCESS_CAPABILITY_NETWORK ; baseCapabilities = PROCESS_CAPABILITY_ALL_IMPLICIT;
} else { } else {
// Capability from foreground service is conditional depending on // Capability from foreground service is conditional depending on
// foregroundServiceType in the manifest file and the // foregroundServiceType in the manifest file and the
// mAllowWhileInUsePermissionInFgs flag. // mAllowWhileInUsePermissionInFgs flag.
return PROCESS_CAPABILITY_NETWORK; baseCapabilities = PROCESS_CAPABILITY_NONE;
} }
case PROCESS_STATE_BOUND_FOREGROUND_SERVICE: break;
return PROCESS_CAPABILITY_NETWORK;
default: default:
return PROCESS_CAPABILITY_NONE; baseCapabilities = PROCESS_CAPABILITY_NONE;
break;
} }
return baseCapabilities | networkCapabilities;
} }
/** /**

View File

@@ -528,7 +528,7 @@ public class ActivityManagerServiceTest {
ActivityManager.PROCESS_CAPABILITY_NONE, ActivityManager.PROCESS_CAPABILITY_NONE,
ActivityManager.PROCESS_CAPABILITY_NONE, ActivityManager.PROCESS_CAPABILITY_NONE,
ActivityManager.PROCESS_CAPABILITY_NONE, ActivityManager.PROCESS_CAPABILITY_NONE,
ActivityManager.PROCESS_CAPABILITY_NETWORK, ActivityManager.PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK,
}; };
final Map<Integer, ChangeRecord> changeItems = new HashMap<>(); final Map<Integer, ChangeRecord> changeItems = new HashMap<>();
for (int i = 0; i < changesForPendingUidRecords.length; ++i) { for (int i = 0; i < changesForPendingUidRecords.length; ++i) {

View File

@@ -18,8 +18,8 @@ package com.android.server.am;
import static android.app.ActivityManager.PROCESS_CAPABILITY_ALL; import static android.app.ActivityManager.PROCESS_CAPABILITY_ALL;
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; 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_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_CACHED_RECENT;
import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
import static android.app.ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND; import static android.app.ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND;
@@ -185,10 +185,10 @@ public class UidObserverControllerTest {
verifyNoMoreInteractions(observer2); verifyNoMoreInteractions(observer2);
addPendingChange(TEST_UID1, UidRecord.CHANGE_PROCSTATE | UidRecord.CHANGE_CAPABILITY, 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(); mUidObserverController.dispatchUidsChanged();
verify(observer2).onUidStateChanged(TEST_UID1, PROCESS_STATE_RECEIVER, verify(observer2).onUidStateChanged(TEST_UID1, PROCESS_STATE_RECEIVER,
111, PROCESS_CAPABILITY_NETWORK); 111, PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK);
verifyNoMoreInteractions(observer1); verifyNoMoreInteractions(observer1);
verifyNoMoreInteractions(observer2); verifyNoMoreInteractions(observer2);