Add multipath preference, background status API am: 00b8d2cf37
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1644388 Change-Id: I4c1a53223c4cce7759b2cc3efb74a6568abcde57
This commit is contained in:
@@ -48,6 +48,8 @@ package android.net {
|
||||
|
||||
public class NetworkPolicyManager {
|
||||
method @NonNull public static String blockedReasonsToString(int);
|
||||
method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public int getMultipathPreference(@NonNull android.net.Network);
|
||||
method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public int getRestrictBackgroundStatus(int);
|
||||
method public static boolean isUidBlocked(int, boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void registerNetworkPolicyCallback(@Nullable java.util.concurrent.Executor, @NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
|
||||
method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void unregisterNetworkPolicyCallback(@NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
|
||||
|
||||
@@ -62,6 +62,7 @@ interface INetworkPolicyManager {
|
||||
3 - enabled
|
||||
*/
|
||||
int getRestrictBackgroundByCaller();
|
||||
int getRestrictBackgroundStatus(int uid);
|
||||
|
||||
void setDeviceIdleMode(boolean enabled);
|
||||
void setWifiMeteredOverride(String networkId, int meteredOverride);
|
||||
|
||||
@@ -528,6 +528,26 @@ public class NetworkPolicyManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if an UID is subject to metered network restrictions while running in background.
|
||||
*
|
||||
* @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
|
||||
* the current status of the UID.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
@RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
|
||||
public int getRestrictBackgroundStatus(int uid) {
|
||||
try {
|
||||
return mService.getRestrictBackgroundStatus(uid);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Override connections to be temporarily marked as either unmetered or congested,
|
||||
* along with automatic timeouts if desired.
|
||||
@@ -663,11 +683,15 @@ public class NetworkPolicyManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get multipath preference for the given network.
|
||||
* Gets a hint on whether it is desirable to use multipath data transfer on the given network.
|
||||
*
|
||||
* @return One of the ConnectivityManager.MULTIPATH_PREFERENCE_* constants.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public int getMultipathPreference(Network network) {
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
@RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
|
||||
public int getMultipathPreference(@NonNull Network network) {
|
||||
try {
|
||||
return mService.getMultipathPreference(network);
|
||||
} catch (RemoteException e) {
|
||||
|
||||
@@ -62,7 +62,6 @@ import android.os.PersistableBundle;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ResultReceiver;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.ServiceSpecificException;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
@@ -842,7 +841,6 @@ public class ConnectivityManager {
|
||||
|
||||
private final Context mContext;
|
||||
|
||||
private INetworkPolicyManager mNPManager;
|
||||
private final TetheringManager mTetheringManager;
|
||||
|
||||
/**
|
||||
@@ -4794,17 +4792,6 @@ public class ConnectivityManager {
|
||||
public @interface RestrictBackgroundStatus {
|
||||
}
|
||||
|
||||
private INetworkPolicyManager getNetworkPolicyManager() {
|
||||
synchronized (this) {
|
||||
if (mNPManager != null) {
|
||||
return mNPManager;
|
||||
}
|
||||
mNPManager = INetworkPolicyManager.Stub.asInterface(ServiceManager
|
||||
.getService(Context.NETWORK_POLICY_SERVICE));
|
||||
return mNPManager;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the calling application is subject to metered network restrictions while
|
||||
* running on background.
|
||||
@@ -4815,7 +4802,7 @@ public class ConnectivityManager {
|
||||
*/
|
||||
public @RestrictBackgroundStatus int getRestrictBackgroundStatus() {
|
||||
try {
|
||||
return getNetworkPolicyManager().getRestrictBackgroundByCaller();
|
||||
return mService.getRestrictBackgroundStatusByCaller();
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
|
||||
@@ -220,4 +220,6 @@ interface IConnectivityManager
|
||||
|
||||
void setProfileNetworkPreference(in UserHandle profile, int preference,
|
||||
in IOnCompleteListener listener);
|
||||
|
||||
int getRestrictBackgroundStatusByCaller();
|
||||
}
|
||||
|
||||
@@ -106,6 +106,7 @@ import android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
|
||||
import android.net.ConnectivityDiagnosticsManager.DataStallReport;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.ConnectivityManager.NetworkCallback;
|
||||
import android.net.ConnectivityManager.RestrictBackgroundStatus;
|
||||
import android.net.ConnectivitySettingsManager;
|
||||
import android.net.DataStallReportParcelable;
|
||||
import android.net.DnsResolverServiceManager;
|
||||
@@ -1997,6 +1998,18 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @RestrictBackgroundStatus int getRestrictBackgroundStatusByCaller() {
|
||||
enforceAccessPermission();
|
||||
final int callerUid = Binder.getCallingUid();
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
return mPolicyManager.getRestrictBackgroundStatus(callerUid);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Consider delete this function or turn it into a no-op method.
|
||||
@Override
|
||||
public NetworkState[] getAllNetworkState() {
|
||||
@@ -4407,7 +4420,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
final NetworkPolicyManager netPolicyManager =
|
||||
mContext.getSystemService(NetworkPolicyManager.class);
|
||||
|
||||
final int networkPreference = netPolicyManager.getMultipathPreference(network);
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
final int networkPreference;
|
||||
try {
|
||||
networkPreference = netPolicyManager.getMultipathPreference(network);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
if (networkPreference != 0) {
|
||||
return networkPreference;
|
||||
}
|
||||
|
||||
@@ -261,6 +261,7 @@ import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.internal.util.StatLogger;
|
||||
import com.android.internal.util.XmlUtils;
|
||||
import com.android.net.module.util.NetworkIdentityUtils;
|
||||
import com.android.net.module.util.PermissionUtils;
|
||||
import com.android.server.EventLogTags;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.ServiceThread;
|
||||
@@ -3112,8 +3113,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
@Override
|
||||
public int getRestrictBackgroundByCaller() {
|
||||
mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
|
||||
final int uid = Binder.getCallingUid();
|
||||
return getRestrictBackgroundStatusInternal(Binder.getCallingUid());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRestrictBackgroundStatus(int uid) {
|
||||
PermissionUtils.enforceNetworkStackPermission(mContext);
|
||||
return getRestrictBackgroundStatusInternal(uid);
|
||||
}
|
||||
|
||||
private int getRestrictBackgroundStatusInternal(int uid) {
|
||||
synchronized (mUidRulesFirstLock) {
|
||||
// Must clear identity because getUidPolicy() is restricted to system.
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
@@ -3582,6 +3591,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
* Get multipath preference value for the given network.
|
||||
*/
|
||||
public int getMultipathPreference(Network network) {
|
||||
PermissionUtils.enforceNetworkStackPermission(mContext);
|
||||
final Integer preference = mMultipathPolicyTracker.getMultipathPreference(network);
|
||||
if (preference != null) {
|
||||
return preference;
|
||||
|
||||
Reference in New Issue
Block a user