From 0900154ef542785af7175748e1ef57cf749366fa Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Wed, 15 Jan 2020 04:01:53 +0900 Subject: [PATCH] Add a systemapi constructor for NetworkAgent Bug: 138306002 Bug: 139268426 Test: atest FrameworksNetTests FrameworksWifiTests FrameworksTelephonyTests make doc-comment-check-docs Change-Id: I288ea32fac07a9a486e2ea451a2c9b098446a74c Merged-In: I288ea32fac07a9a486e2ea451a2c9b098446a74c --- core/java/android/net/NetworkAgent.java | 44 +++++++++++--- core/java/android/net/NetworkAgentConfig.java | 58 ++++++++++++++++++- 2 files changed, 91 insertions(+), 11 deletions(-) diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java index aae9fd4725..61a1484cef 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 abc6b67efb..1e5af673b8 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 */ @@ -119,6 +118,19 @@ public final class NetworkAgentConfig implements Parcelable { return !skip464xlat; } + /** + * 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; } } @@ -184,6 +213,29 @@ public final class NetworkAgentConfig implements Parcelable { return this; } + /** + * 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. */