Merge "Replace NetworkPolicyManagerInternal#isUidRestrictedOnMeteredNetworks()" am: ce1b5d00d9

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1534910

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I0f8833a502cfa4674190509300eb378c4072efcc
This commit is contained in:
Paul Hu
2021-01-22 14:53:33 +00:00
committed by Automerger Merge Worker
5 changed files with 43 additions and 25 deletions

View File

@@ -81,4 +81,5 @@ interface INetworkPolicyManager {
void factoryReset(String subscriber); void factoryReset(String subscriber);
boolean isUidNetworkingBlocked(int uid, boolean meteredNetwork); boolean isUidNetworkingBlocked(int uid, boolean meteredNetwork);
boolean isUidRestrictedOnMeteredNetworks(int uid);
} }

View File

@@ -459,6 +459,22 @@ public class NetworkPolicyManager {
} }
} }
/**
* Check that the given uid is restricted from doing networking on metered networks.
*
* @param uid The target uid.
* @return true if the given uid is restricted from doing networking on metered networks.
*
* @hide
*/
public boolean isUidRestrictedOnMeteredNetworks(int uid) {
try {
return mService.isUidRestrictedOnMeteredNetworks(uid);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/** /**
* Get multipath preference for the given network. * Get multipath preference for the given network.
*/ */

View File

@@ -5714,9 +5714,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
// Policy already enforced. // Policy already enforced.
return; return;
} }
if (mPolicyManagerInternal.isUidRestrictedOnMeteredNetworks(uid)) { final long ident = Binder.clearCallingIdentity();
// If UID is restricted, don't allow them to bring up metered APNs. try {
networkCapabilities.addCapability(NET_CAPABILITY_NOT_METERED); if (mPolicyManager.isUidRestrictedOnMeteredNetworks(uid)) {
// If UID is restricted, don't allow them to bring up metered APNs.
networkCapabilities.addCapability(NET_CAPABILITY_NOT_METERED);
}
} finally {
Binder.restoreCallingIdentity(ident);
} }
} }

View File

@@ -38,11 +38,6 @@ public abstract class NetworkPolicyManagerInternal {
*/ */
public abstract void resetUserState(int userId); public abstract void resetUserState(int userId);
/**
* @return true if the given uid is restricted from doing networking on metered networks.
*/
public abstract boolean isUidRestrictedOnMeteredNetworks(int uid);
/** /**
* Figure out if networking is blocked for a given set of conditions. * Figure out if networking is blocked for a given set of conditions.
* *

View File

@@ -5361,7 +5361,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
public boolean isUidNetworkingBlocked(int uid, boolean isNetworkMetered) { public boolean isUidNetworkingBlocked(int uid, boolean isNetworkMetered) {
final long startTime = mStatLogger.getTime(); final long startTime = mStatLogger.getTime();
enforceAnyPermissionOf(OBSERVE_NETWORK_POLICY, PERMISSION_MAINLINE_NETWORK_STACK); mContext.enforceCallingOrSelfPermission(OBSERVE_NETWORK_POLICY, TAG);
final int uidRules; final int uidRules;
final boolean isBackgroundRestricted; final boolean isBackgroundRestricted;
synchronized (mUidRulesFirstLock) { synchronized (mUidRulesFirstLock) {
@@ -5376,6 +5376,23 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
return ret; return ret;
} }
@Override
public boolean isUidRestrictedOnMeteredNetworks(int uid) {
mContext.enforceCallingOrSelfPermission(OBSERVE_NETWORK_POLICY, TAG);
final int uidRules;
final boolean isBackgroundRestricted;
synchronized (mUidRulesFirstLock) {
uidRules = mUidRules.get(uid, RULE_ALLOW_ALL);
isBackgroundRestricted = mRestrictBackground;
}
//TODO(b/177490332): The logic here might not be correct because it doesn't consider
// RULE_REJECT_METERED condition. And it could be replaced by
// isUidNetworkingBlockedInternal().
return isBackgroundRestricted
&& !hasRule(uidRules, RULE_ALLOW_METERED)
&& !hasRule(uidRules, RULE_TEMPORARY_ALLOW_METERED);
}
private static boolean isSystem(int uid) { private static boolean isSystem(int uid) {
return uid < Process.FIRST_APPLICATION_UID; return uid < Process.FIRST_APPLICATION_UID;
} }
@@ -5444,22 +5461,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
} }
} }
/**
* @return true if the given uid is restricted from doing networking on metered networks.
*/
@Override
public boolean isUidRestrictedOnMeteredNetworks(int uid) {
final int uidRules;
final boolean isBackgroundRestricted;
synchronized (mUidRulesFirstLock) {
uidRules = mUidRules.get(uid, RULE_ALLOW_ALL);
isBackgroundRestricted = mRestrictBackground;
}
return isBackgroundRestricted
&& !hasRule(uidRules, RULE_ALLOW_METERED)
&& !hasRule(uidRules, RULE_TEMPORARY_ALLOW_METERED);
}
@Override @Override
public void onTempPowerSaveWhitelistChange(int appId, boolean added) { public void onTempPowerSaveWhitelistChange(int appId, boolean added) {
synchronized (mUidRulesFirstLock) { synchronized (mUidRulesFirstLock) {