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:
Remi NGUYEN VAN
2021-03-21 16:37:02 +00:00
committed by Automerger Merge Worker
7 changed files with 63 additions and 18 deletions

View File

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

View File

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

View File

@@ -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) {

View File

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

View File

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

View File

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

View File

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