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 {
|
public class NetworkPolicyManager {
|
||||||
method @NonNull public static String blockedReasonsToString(int);
|
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 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 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);
|
method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void unregisterNetworkPolicyCallback(@NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ interface INetworkPolicyManager {
|
|||||||
3 - enabled
|
3 - enabled
|
||||||
*/
|
*/
|
||||||
int getRestrictBackgroundByCaller();
|
int getRestrictBackgroundByCaller();
|
||||||
|
int getRestrictBackgroundStatus(int uid);
|
||||||
|
|
||||||
void setDeviceIdleMode(boolean enabled);
|
void setDeviceIdleMode(boolean enabled);
|
||||||
void setWifiMeteredOverride(String networkId, int meteredOverride);
|
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,
|
* Override connections to be temporarily marked as either unmetered or congested,
|
||||||
* along with automatic timeouts if desired.
|
* 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
|
* @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 {
|
try {
|
||||||
return mService.getMultipathPreference(network);
|
return mService.getMultipathPreference(network);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ import android.os.PersistableBundle;
|
|||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ResultReceiver;
|
import android.os.ResultReceiver;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.ServiceSpecificException;
|
import android.os.ServiceSpecificException;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -842,7 +841,6 @@ public class ConnectivityManager {
|
|||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
|
||||||
private INetworkPolicyManager mNPManager;
|
|
||||||
private final TetheringManager mTetheringManager;
|
private final TetheringManager mTetheringManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4794,17 +4792,6 @@ public class ConnectivityManager {
|
|||||||
public @interface RestrictBackgroundStatus {
|
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
|
* Determines if the calling application is subject to metered network restrictions while
|
||||||
* running on background.
|
* running on background.
|
||||||
@@ -4815,7 +4802,7 @@ public class ConnectivityManager {
|
|||||||
*/
|
*/
|
||||||
public @RestrictBackgroundStatus int getRestrictBackgroundStatus() {
|
public @RestrictBackgroundStatus int getRestrictBackgroundStatus() {
|
||||||
try {
|
try {
|
||||||
return getNetworkPolicyManager().getRestrictBackgroundByCaller();
|
return mService.getRestrictBackgroundStatusByCaller();
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
throw e.rethrowFromSystemServer();
|
throw e.rethrowFromSystemServer();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,4 +220,6 @@ interface IConnectivityManager
|
|||||||
|
|
||||||
void setProfileNetworkPreference(in UserHandle profile, int preference,
|
void setProfileNetworkPreference(in UserHandle profile, int preference,
|
||||||
in IOnCompleteListener listener);
|
in IOnCompleteListener listener);
|
||||||
|
|
||||||
|
int getRestrictBackgroundStatusByCaller();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ import android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
|
|||||||
import android.net.ConnectivityDiagnosticsManager.DataStallReport;
|
import android.net.ConnectivityDiagnosticsManager.DataStallReport;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.ConnectivityManager.NetworkCallback;
|
import android.net.ConnectivityManager.NetworkCallback;
|
||||||
|
import android.net.ConnectivityManager.RestrictBackgroundStatus;
|
||||||
import android.net.ConnectivitySettingsManager;
|
import android.net.ConnectivitySettingsManager;
|
||||||
import android.net.DataStallReportParcelable;
|
import android.net.DataStallReportParcelable;
|
||||||
import android.net.DnsResolverServiceManager;
|
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.
|
// TODO: Consider delete this function or turn it into a no-op method.
|
||||||
@Override
|
@Override
|
||||||
public NetworkState[] getAllNetworkState() {
|
public NetworkState[] getAllNetworkState() {
|
||||||
@@ -4407,7 +4420,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
final NetworkPolicyManager netPolicyManager =
|
final NetworkPolicyManager netPolicyManager =
|
||||||
mContext.getSystemService(NetworkPolicyManager.class);
|
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) {
|
if (networkPreference != 0) {
|
||||||
return networkPreference;
|
return networkPreference;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,6 +261,7 @@ import com.android.internal.util.IndentingPrintWriter;
|
|||||||
import com.android.internal.util.StatLogger;
|
import com.android.internal.util.StatLogger;
|
||||||
import com.android.internal.util.XmlUtils;
|
import com.android.internal.util.XmlUtils;
|
||||||
import com.android.net.module.util.NetworkIdentityUtils;
|
import com.android.net.module.util.NetworkIdentityUtils;
|
||||||
|
import com.android.net.module.util.PermissionUtils;
|
||||||
import com.android.server.EventLogTags;
|
import com.android.server.EventLogTags;
|
||||||
import com.android.server.LocalServices;
|
import com.android.server.LocalServices;
|
||||||
import com.android.server.ServiceThread;
|
import com.android.server.ServiceThread;
|
||||||
@@ -3112,8 +3113,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
@Override
|
@Override
|
||||||
public int getRestrictBackgroundByCaller() {
|
public int getRestrictBackgroundByCaller() {
|
||||||
mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
|
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) {
|
synchronized (mUidRulesFirstLock) {
|
||||||
// Must clear identity because getUidPolicy() is restricted to system.
|
// Must clear identity because getUidPolicy() is restricted to system.
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
@@ -3582,6 +3591,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
* Get multipath preference value for the given network.
|
* Get multipath preference value for the given network.
|
||||||
*/
|
*/
|
||||||
public int getMultipathPreference(Network network) {
|
public int getMultipathPreference(Network network) {
|
||||||
|
PermissionUtils.enforceNetworkStackPermission(mContext);
|
||||||
final Integer preference = mMultipathPolicyTracker.getMultipathPreference(network);
|
final Integer preference = mMultipathPolicyTracker.getMultipathPreference(network);
|
||||||
if (preference != null) {
|
if (preference != null) {
|
||||||
return preference;
|
return preference;
|
||||||
|
|||||||
Reference in New Issue
Block a user