Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 380f3c9a authored by Chalard Jean's avatar Chalard Jean Committed by Android (Google) Code Review
Browse files

Merge changes from topics "NetworkAgent_constructor", "roaming"

* changes:
  Add a systemapi constructor for NetworkAgent
  Make NetworkCapabilities authoritative for roaming state
parents aca9fccf 3b680ae1
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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);
  }
+36 −8
Original line number Diff line number Diff line
@@ -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;
+55 −3
Original line number Diff line number Diff line
@@ -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.
         */
+7 −3
Original line number Diff line number Diff line
@@ -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;
    }