Add a systemapi constructor for NetworkAgent

Bug: 138306002
Bug: 139268426
Test: atest FrameworksNetTests FrameworksWifiTests FrameworksTelephonyTests
      make doc-comment-check-docs
Change-Id: I288ea32fac07a9a486e2ea451a2c9b098446a74c
This commit is contained in:
Chalard Jean
2020-01-15 04:01:53 +09:00
parent a8cc3cb4c5
commit fd1758d45e
2 changed files with 91 additions and 11 deletions

View File

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

View File

@@ -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.
*/