summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChalard Jean <jchalard@google.com>2020-01-18 15:38:15 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-01-18 15:38:15 +0000
commit380f3c9ae622c7284d88afbab4732291b472f64b (patch)
treef10ef9e885a4142f8668ae179a8849f662e5901c
parentaca9fccf06794e7cf3b1f1e280e6e252b52753d8 (diff)
parent3b680ae1e65d306e25385f82f32ce3de7d160b2c (diff)
Merge changes from topics "NetworkAgent_constructor", "roaming"
* changes: Add a systemapi constructor for NetworkAgent Make NetworkCapabilities authoritative for roaming state
-rwxr-xr-xapi/system-current.txt5
-rw-r--r--core/java/android/net/NetworkAgent.java44
-rw-r--r--core/java/android/net/NetworkAgentConfig.java58
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java10
4 files changed, 103 insertions, 14 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 551647b267d7..5e7982e4613a 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5073,6 +5073,7 @@ package android.net {
}
public abstract class NetworkAgent {
+ ctor public NetworkAgent(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, int, @NonNull android.net.NetworkAgentConfig, @Nullable android.net.NetworkProvider);
method public void onAddKeepalivePacketFilter(int, @NonNull android.net.KeepalivePacketData);
method public void onAutomaticReconnectDisabled();
method public void onBandwidthUpdateRequested();
@@ -5095,6 +5096,8 @@ package android.net {
public final class NetworkAgentConfig implements android.os.Parcelable {
method public int describeContents();
+ method public int getLegacyType();
+ method @NonNull public String getLegacyTypeName();
method @Nullable public String getSubscriberId();
method public boolean isNat64DetectionEnabled();
method public boolean isProvisioningNotificationEnabled();
@@ -5107,6 +5110,8 @@ package android.net {
method @NonNull public android.net.NetworkAgentConfig build();
method @NonNull public android.net.NetworkAgentConfig.Builder disableNat64Detection();
method @NonNull public android.net.NetworkAgentConfig.Builder disableProvisioningNotification();
+ method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyType(int);
+ method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyTypeName(@NonNull String);
method @NonNull public android.net.NetworkAgentConfig.Builder setSubscriberId(@Nullable String);
}
diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java
index aae9fd4725b4..61a1484cef0d 100644
--- a/core/java/android/net/NetworkAgent.java
+++ b/core/java/android/net/NetworkAgent.java
@@ -262,32 +262,60 @@ public abstract class NetworkAgent {
*/
public static final int CMD_REMOVE_KEEPALIVE_PACKET_FILTER = BASE + 17;
- // TODO : remove these two constructors. They are a stopgap measure to help sheperding a number
- // of dependent changes that would conflict throughout the automerger graph. Having these
- // temporarily helps with the process of going through with all these dependent changes across
- // the entire tree.
- /** @hide TODO: decide which of these to expose. */
+ /** @hide TODO: remove and replace usage with the public constructor. */
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score) {
this(looper, context, logTag, ni, nc, lp, score, null, NetworkProvider.ID_NONE);
}
- /** @hide TODO: decide which of these to expose. */
+ /** @hide TODO: remove and replace usage with the public constructor. */
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score, NetworkAgentConfig config) {
this(looper, context, logTag, ni, nc, lp, score, config, NetworkProvider.ID_NONE);
}
- /** @hide TODO: decide which of these to expose. */
+ /** @hide TODO: remove and replace usage with the public constructor. */
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score, int providerId) {
this(looper, context, logTag, ni, nc, lp, score, null, providerId);
}
- /** @hide TODO: decide which of these to expose. */
+ /** @hide TODO: remove and replace usage with the public constructor. */
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score, NetworkAgentConfig config,
int providerId) {
+ this(looper, context, logTag, nc, lp, score, config, providerId, ni);
+ }
+
+ private static NetworkInfo getLegacyNetworkInfo(final NetworkAgentConfig config) {
+ // The subtype can be changed with (TODO) setLegacySubtype, but it starts
+ // with the type and an empty description.
+ return new NetworkInfo(config.legacyType, config.legacyType, config.legacyTypeName, "");
+ }
+
+ /**
+ * Create a new network agent.
+ * @param context a {@link Context} to get system services from.
+ * @param looper the {@link Looper} on which to invoke the callbacks.
+ * @param logTag the tag for logs
+ * @param nc the initial {@link NetworkCapabilities} of this network. Update with
+ * sendNetworkCapabilities.
+ * @param lp the initial {@link LinkProperties} of this network. Update with sendLinkProperties.
+ * @param score the initial score of this network. Update with sendNetworkScore.
+ * @param config an immutable {@link NetworkAgentConfig} for this agent.
+ * @param provider the {@link NetworkProvider} managing this agent.
+ */
+ public NetworkAgent(@NonNull Context context, @NonNull Looper looper, @NonNull String logTag,
+ @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp, int score,
+ @NonNull NetworkAgentConfig config, @Nullable NetworkProvider provider) {
+ this(looper, context, logTag, nc, lp, score, config,
+ provider == null ? NetworkProvider.ID_NONE : provider.getProviderId(),
+ getLegacyNetworkInfo(config));
+ }
+
+ private NetworkAgent(Looper looper, Context context, String logTag, NetworkCapabilities nc,
+ LinkProperties lp, int score, NetworkAgentConfig config, int providerId,
+ NetworkInfo ni) {
mHandler = new NetworkAgentHandler(looper);
LOG_TAG = logTag;
mContext = context;
diff --git a/core/java/android/net/NetworkAgentConfig.java b/core/java/android/net/NetworkAgentConfig.java
index abc6b67efb11..1e5af673b860 100644
--- a/core/java/android/net/NetworkAgentConfig.java
+++ b/core/java/android/net/NetworkAgentConfig.java
@@ -21,12 +21,11 @@ import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
-import android.text.TextUtils;
/**
* Allows a network transport to provide the system with policy and configuration information about
- * a particular network when registering a {@link NetworkAgent}. This information cannot change once
- * the agent is registered.
+ * a particular network when registering a {@link NetworkAgent}.
+ * @note This information cannot change once the agent is registered.
*
* @hide
*/
@@ -120,6 +119,19 @@ public final class NetworkAgentConfig implements Parcelable {
}
/**
+ * The legacy type of this network agent, or TYPE_NONE if unset.
+ * @hide
+ */
+ public int legacyType = ConnectivityManager.TYPE_NONE;
+
+ /**
+ * @return the legacy type
+ */
+ public int getLegacyType() {
+ return legacyType;
+ }
+
+ /**
* Set to true if the PRIVATE_DNS_BROKEN notification has shown for this network.
* Reset this bit when private DNS mode is changed from strict mode to opportunistic/off mode.
*
@@ -127,6 +139,21 @@ public final class NetworkAgentConfig implements Parcelable {
*/
public boolean hasShownBroken;
+ /**
+ * The name of the legacy network type. It's a free-form string used in logging.
+ * @hide
+ */
+ @NonNull
+ public String legacyTypeName = "";
+
+ /**
+ * @return the name of the legacy network type. It's a free-form string used in logging.
+ */
+ @NonNull
+ public String getLegacyTypeName() {
+ return legacyTypeName;
+ }
+
/** @hide */
public NetworkAgentConfig() {
}
@@ -140,6 +167,8 @@ public final class NetworkAgentConfig implements Parcelable {
subscriberId = nac.subscriberId;
provisioningNotificationDisabled = nac.provisioningNotificationDisabled;
skip464xlat = nac.skip464xlat;
+ legacyType = nac.legacyType;
+ legacyTypeName = nac.legacyTypeName;
}
}
@@ -185,6 +214,29 @@ public final class NetworkAgentConfig implements Parcelable {
}
/**
+ * Sets the legacy type for this network.
+ *
+ * @param legacyType the type
+ * @return this builder, to facilitate chaining.
+ */
+ @NonNull
+ public Builder setLegacyType(int legacyType) {
+ mConfig.legacyType = legacyType;
+ return this;
+ }
+
+ /**
+ * Sets the name of the legacy type of the agent. It's a free-form string used in logging.
+ * @param legacyTypeName the name
+ * @return this builder, to facilitate chaining.
+ */
+ @NonNull
+ public Builder setLegacyTypeName(@NonNull String legacyTypeName) {
+ mConfig.legacyTypeName = legacyTypeName;
+ return this;
+ }
+
+ /**
* Returns the constructed {@link NetworkAgentConfig} object.
*/
@NonNull
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 5e495b98c58a..98b572801716 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -5848,9 +5848,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
newNc.setPrivateDnsBroken(nai.networkCapabilities.isPrivateDnsBroken());
- // TODO : remove this once all factories are updated to send NOT_SUSPENDED
+ // TODO : remove this once all factories are updated to send NOT_SUSPENDED and NOT_ROAMING
if (!newNc.hasTransport(TRANSPORT_CELLULAR)) {
newNc.addCapability(NET_CAPABILITY_NOT_SUSPENDED);
+ newNc.addCapability(NET_CAPABILITY_NOT_ROAMING);
}
return newNc;
@@ -5899,7 +5900,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
processListenRequests(nai);
final boolean prevSuspended = !prevNc.hasCapability(NET_CAPABILITY_NOT_SUSPENDED);
final boolean suspended = !newNc.hasCapability(NET_CAPABILITY_NOT_SUSPENDED);
- if (prevSuspended != suspended) {
+ final boolean prevRoaming = !prevNc.hasCapability(NET_CAPABILITY_NOT_ROAMING);
+ final boolean roaming = !newNc.hasCapability(NET_CAPABILITY_NOT_ROAMING);
+ if (prevSuspended != suspended || prevRoaming != roaming) {
// TODO (b/73132094) : remove this call once the few users of onSuspended and
// onResumed have been removed.
notifyNetworkCallbacks(nai, suspended ? ConnectivityManager.CALLBACK_SUSPENDED
@@ -6615,7 +6618,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
@NonNull
private NetworkInfo mixInInfo(@NonNull final NetworkAgentInfo nai, @NonNull NetworkInfo info) {
final NetworkInfo newInfo = new NetworkInfo(info);
- // The suspended bit is managed in NetworkCapabilities.
+ // The suspended and roaming bits are managed in NetworkCapabilities.
final boolean suspended =
!nai.networkCapabilities.hasCapability(NET_CAPABILITY_NOT_SUSPENDED);
if (suspended && info.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {
@@ -6628,6 +6631,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
newInfo.setDetailedState(NetworkInfo.DetailedState.SUSPENDED, info.getReason(),
info.getExtraInfo());
}
+ newInfo.setRoaming(!nai.networkCapabilities.hasCapability(NET_CAPABILITY_NOT_ROAMING));
return newInfo;
}