Add multipath preference, background status API

Add APIs for getMultipathPreference and getRestrictBackgroundStatus.
Both are used by Connectivity to back the external
ConnectivityManager.getRestrictBackgroundStatus, and
ConnectivityManager.getMultipathPreference APIs.

Test: atest CtsNetTestCases
      atest ConnectivityServiceTests
      atest NetworkPolicyManagerServiceTest
Bug: 176289731
Change-Id: I8a03162b2f6691086bb64e75ffd354cdfca7f86a
Merged-In: I8a03162b2f6691086bb64e75ffd354cdfca7f86a
This commit is contained in:
Remi NGUYEN VAN 2021-03-18 14:23:12 +09:00 • committed by Lorenzo Colitti
commit e2139a0be2
3 changed files with 23 additions and 15 deletions

View file

@ -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();
}

View file

@ -220,4 +220,6 @@ interface IConnectivityManager
void setProfileNetworkPreference(in UserHandle profile, int preference,
in IOnCompleteListener listener);
int getRestrictBackgroundStatusByCaller();
}

View file

@ -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;
}