Merge changes from topic "blocked-reasons-callback-tests" am: 2108a92452 am: 05c65a10f5
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1652214 Change-Id: Ie51249f5fa47b0a5afe287083139082488f9b503
This commit is contained in:
@@ -28,10 +28,12 @@ package android.net {
|
|||||||
method public void systemReady();
|
method public void systemReady();
|
||||||
field public static final int BLOCKED_METERED_REASON_ADMIN_DISABLED = 262144; // 0x40000
|
field public static final int BLOCKED_METERED_REASON_ADMIN_DISABLED = 262144; // 0x40000
|
||||||
field public static final int BLOCKED_METERED_REASON_DATA_SAVER = 65536; // 0x10000
|
field public static final int BLOCKED_METERED_REASON_DATA_SAVER = 65536; // 0x10000
|
||||||
|
field public static final int BLOCKED_METERED_REASON_MASK = -65536; // 0xffff0000
|
||||||
field public static final int BLOCKED_METERED_REASON_USER_RESTRICTED = 131072; // 0x20000
|
field public static final int BLOCKED_METERED_REASON_USER_RESTRICTED = 131072; // 0x20000
|
||||||
field public static final int BLOCKED_REASON_APP_STANDBY = 4; // 0x4
|
field public static final int BLOCKED_REASON_APP_STANDBY = 4; // 0x4
|
||||||
field public static final int BLOCKED_REASON_BATTERY_SAVER = 1; // 0x1
|
field public static final int BLOCKED_REASON_BATTERY_SAVER = 1; // 0x1
|
||||||
field public static final int BLOCKED_REASON_DOZE = 2; // 0x2
|
field public static final int BLOCKED_REASON_DOZE = 2; // 0x2
|
||||||
|
field public static final int BLOCKED_REASON_LOCKDOWN_VPN = 16; // 0x10
|
||||||
field public static final int BLOCKED_REASON_NONE = 0; // 0x0
|
field public static final int BLOCKED_REASON_NONE = 0; // 0x0
|
||||||
field public static final int BLOCKED_REASON_RESTRICTED_MODE = 8; // 0x8
|
field public static final int BLOCKED_REASON_RESTRICTED_MODE = 8; // 0x8
|
||||||
field public static final String PRIVATE_DNS_MODE_OFF = "off";
|
field public static final String PRIVATE_DNS_MODE_OFF = "off";
|
||||||
@@ -41,6 +43,10 @@ package android.net {
|
|||||||
field public static final int PROFILE_NETWORK_PREFERENCE_ENTERPRISE = 1; // 0x1
|
field public static final int PROFILE_NETWORK_PREFERENCE_ENTERPRISE = 1; // 0x1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ConnectivityManager.NetworkCallback {
|
||||||
|
method public void onBlockedStatusChanged(@NonNull android.net.Network, int);
|
||||||
|
}
|
||||||
|
|
||||||
public class ConnectivitySettingsManager {
|
public class ConnectivitySettingsManager {
|
||||||
method public static void clearGlobalProxy(@NonNull android.content.Context);
|
method public static void clearGlobalProxy(@NonNull android.content.Context);
|
||||||
method @Nullable public static String getCaptivePortalHttpUrl(@NonNull android.content.Context);
|
method @Nullable public static String getCaptivePortalHttpUrl(@NonNull android.content.Context);
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ import android.annotation.SuppressLint;
|
|||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
import android.annotation.SystemService;
|
import android.annotation.SystemService;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.compat.annotation.UnsupportedAppUsage;
|
import android.compat.annotation.UnsupportedAppUsage;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -871,6 +873,17 @@ public class ConnectivityManager {
|
|||||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||||
public static final int BLOCKED_REASON_RESTRICTED_MODE = 1 << 3;
|
public static final int BLOCKED_REASON_RESTRICTED_MODE = 1 << 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag to indicate that an app is blocked because it is subject to an always-on VPN but the VPN
|
||||||
|
* is not currently connected.
|
||||||
|
*
|
||||||
|
* @see DevicePolicyManager#setAlwaysOnVpnPackage(ComponentName, String, boolean)
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||||
|
public static final int BLOCKED_REASON_LOCKDOWN_VPN = 1 << 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag to indicate that an app is subject to Data saver restrictions that would
|
* Flag to indicate that an app is subject to Data saver restrictions that would
|
||||||
* result in its metered network access being blocked.
|
* result in its metered network access being blocked.
|
||||||
@@ -914,6 +927,14 @@ public class ConnectivityManager {
|
|||||||
})
|
})
|
||||||
public @interface BlockedReason {}
|
public @interface BlockedReason {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of blocked reasons that are only applicable on metered networks.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||||
|
public static final int BLOCKED_METERED_REASON_MASK = 0xffff0000;
|
||||||
|
|
||||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 130143562)
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 130143562)
|
||||||
private final IConnectivityManager mService;
|
private final IConnectivityManager mService;
|
||||||
|
|
||||||
@@ -3442,12 +3463,30 @@ public class ConnectivityManager {
|
|||||||
* @param blocked Whether access to the {@link Network} is blocked due to system policy.
|
* @param blocked Whether access to the {@link Network} is blocked due to system policy.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public void onAvailable(@NonNull Network network,
|
public final void onAvailable(@NonNull Network network,
|
||||||
@NonNull NetworkCapabilities networkCapabilities,
|
@NonNull NetworkCapabilities networkCapabilities,
|
||||||
@NonNull LinkProperties linkProperties, boolean blocked) {
|
@NonNull LinkProperties linkProperties, @BlockedReason int blocked) {
|
||||||
// Internally only this method is called when a new network is available, and
|
// Internally only this method is called when a new network is available, and
|
||||||
// it calls the callback in the same way and order that older versions used
|
// it calls the callback in the same way and order that older versions used
|
||||||
// to call so as not to change the behavior.
|
// to call so as not to change the behavior.
|
||||||
|
onAvailable(network, networkCapabilities, linkProperties, blocked != 0);
|
||||||
|
onBlockedStatusChanged(network, blocked);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy variant of onAvailable that takes a boolean blocked reason.
|
||||||
|
*
|
||||||
|
* This method has never been public API, but it's not final, so there may be apps that
|
||||||
|
* implemented it and rely on it being called. Do our best not to break them.
|
||||||
|
* Note: such apps will also get a second call to onBlockedStatusChanged immediately after
|
||||||
|
* this method is called. There does not seem to be a way to avoid this.
|
||||||
|
* TODO: add a compat check to move apps off this method, and eventually stop calling it.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public void onAvailable(@NonNull Network network,
|
||||||
|
@NonNull NetworkCapabilities networkCapabilities,
|
||||||
|
@NonNull LinkProperties linkProperties, boolean blocked) {
|
||||||
onAvailable(network);
|
onAvailable(network);
|
||||||
if (!networkCapabilities.hasCapability(
|
if (!networkCapabilities.hasCapability(
|
||||||
NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)) {
|
NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)) {
|
||||||
@@ -3455,7 +3494,7 @@ public class ConnectivityManager {
|
|||||||
}
|
}
|
||||||
onCapabilitiesChanged(network, networkCapabilities);
|
onCapabilitiesChanged(network, networkCapabilities);
|
||||||
onLinkPropertiesChanged(network, linkProperties);
|
onLinkPropertiesChanged(network, linkProperties);
|
||||||
onBlockedStatusChanged(network, blocked);
|
// No call to onBlockedStatusChanged here. That is done by the caller.
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3619,6 +3658,26 @@ public class ConnectivityManager {
|
|||||||
*/
|
*/
|
||||||
public void onBlockedStatusChanged(@NonNull Network network, boolean blocked) {}
|
public void onBlockedStatusChanged(@NonNull Network network, boolean blocked) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when access to the specified network is blocked or unblocked.
|
||||||
|
*
|
||||||
|
* If a NetworkCallback object implements this method,
|
||||||
|
* {@link #onBlockedStatusChanged(Network, boolean)} will not be called.
|
||||||
|
*
|
||||||
|
* <p>Do NOT call {@link #getNetworkCapabilities(Network)} or
|
||||||
|
* {@link #getLinkProperties(Network)} or other synchronous ConnectivityManager methods in
|
||||||
|
* this callback as this is prone to race conditions : calling these methods while in a
|
||||||
|
* callback may return an outdated or even a null object.
|
||||||
|
*
|
||||||
|
* @param network The {@link Network} whose blocked status has changed.
|
||||||
|
* @param blocked The blocked status of this {@link Network}.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public void onBlockedStatusChanged(@NonNull Network network, @BlockedReason int blocked) {
|
||||||
|
onBlockedStatusChanged(network, blocked != 0);
|
||||||
|
}
|
||||||
|
|
||||||
private NetworkRequest networkRequest;
|
private NetworkRequest networkRequest;
|
||||||
private final int mFlags;
|
private final int mFlags;
|
||||||
}
|
}
|
||||||
@@ -3733,7 +3792,7 @@ public class ConnectivityManager {
|
|||||||
case CALLBACK_AVAILABLE: {
|
case CALLBACK_AVAILABLE: {
|
||||||
NetworkCapabilities cap = getObject(message, NetworkCapabilities.class);
|
NetworkCapabilities cap = getObject(message, NetworkCapabilities.class);
|
||||||
LinkProperties lp = getObject(message, LinkProperties.class);
|
LinkProperties lp = getObject(message, LinkProperties.class);
|
||||||
callback.onAvailable(network, cap, lp, message.arg1 != 0);
|
callback.onAvailable(network, cap, lp, message.arg1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CALLBACK_LOSING: {
|
case CALLBACK_LOSING: {
|
||||||
@@ -3767,8 +3826,7 @@ public class ConnectivityManager {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CALLBACK_BLK_CHANGED: {
|
case CALLBACK_BLK_CHANGED: {
|
||||||
boolean blocked = message.arg1 != 0;
|
callback.onBlockedStatusChanged(network, message.arg1);
|
||||||
callback.onBlockedStatusChanged(network, blocked);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user