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

Commit 1a645067 authored by Chalard Jean's avatar Chalard Jean Committed by Gerrit Code Review
Browse files

Merge "[NS01] Add NetworkScore"

parents 9deb79f9 5c4bb911
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
/**
 * Copyright (c) 2021, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

parcelable NetworkScore;
+108 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Object representing the quality of a network as perceived by the user.
 *
 * A NetworkScore object represents the characteristics of a network that affects how good the
 * network is considered for a particular use.
 * @hide
 */
// TODO : @SystemApi when the implementation is complete
public final class NetworkScore implements Parcelable {
    // This will be removed soon. Do *NOT* depend on it for any new code that is not part of
    // a migration.
    private final int mLegacyInt;

    /** @hide */
    NetworkScore(final int legacyInt) {
        this.mLegacyInt = legacyInt;
    }

    private NetworkScore(@NonNull final Parcel in) {
        mLegacyInt = in.readInt();
    }

    public int getLegacyInt() {
        return mLegacyInt;
    }

    @Override
    public String toString() {
        return "Score(" + mLegacyInt + ")";
    }

    @Override
    public void writeToParcel(@NonNull final Parcel dest, final int flags) {
        dest.writeInt(mLegacyInt);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @NonNull public static final Creator<NetworkScore> CREATOR = new Creator<>() {
        @Override
        @NonNull
        public NetworkScore createFromParcel(@NonNull final Parcel in) {
            return new NetworkScore(in);
        }

        @Override
        @NonNull
        public NetworkScore[] newArray(int size) {
            return new NetworkScore[size];
        }
    };

    /**
     * A builder for NetworkScore.
     */
    public static final class Builder {
        private static final int INVALID_LEGACY_INT = Integer.MIN_VALUE;
        private int mLegacyInt = INVALID_LEGACY_INT;

        /**
         * Sets the legacy int for this score.
         *
         * Do not rely on this. It will be gone by the time S is released.
         *
         * @param score the legacy int
         * @return this
         */
        @NonNull
        public Builder setLegacyInt(final int score) {
            mLegacyInt = score;
            return this;
        }

        /**
         * Builds this NetworkScore.
         * @return The built NetworkScore object.
         */
        @NonNull
        public NetworkScore build() {
            return new NetworkScore(mLegacyInt);
        }
    }
}
+2 −18
Original line number Original line Diff line number Diff line
@@ -3205,10 +3205,6 @@ public class ConnectivityManager {
        }
        }
    }
    }


    // TODO : remove this method. It is a stopgap measure to help sheperding a number
    // of dependent changes that would conflict throughout the automerger graph. Having this
    // temporarily helps with the process of going through with all these dependent changes across
    // the entire tree.
    /**
    /**
     * @hide
     * @hide
     * Register a NetworkAgent with ConnectivityService.
     * Register a NetworkAgent with ConnectivityService.
@@ -3218,20 +3214,8 @@ public class ConnectivityManager {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_FACTORY})
            android.Manifest.permission.NETWORK_FACTORY})
    public Network registerNetworkAgent(INetworkAgent na, NetworkInfo ni, LinkProperties lp,
    public Network registerNetworkAgent(INetworkAgent na, NetworkInfo ni, LinkProperties lp,
            NetworkCapabilities nc, int score, NetworkAgentConfig config) {
            NetworkCapabilities nc, @NonNull NetworkScore score, NetworkAgentConfig config,
        return registerNetworkAgent(na, ni, lp, nc, score, config, NetworkProvider.ID_NONE);
            int providerId) {
    }

    /**
     * @hide
     * Register a NetworkAgent with ConnectivityService.
     * @return Network corresponding to NetworkAgent.
     */
    @RequiresPermission(anyOf = {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_FACTORY})
    public Network registerNetworkAgent(INetworkAgent na, NetworkInfo ni, LinkProperties lp,
            NetworkCapabilities nc, int score, NetworkAgentConfig config, int providerId) {
        try {
        try {
            return mService.registerNetworkAgent(na, ni, lp, nc, score, config, providerId);
            return mService.registerNetworkAgent(na, ni, lp, nc, score, config, providerId);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.net.NetworkAgentConfig;
import android.net.NetworkCapabilities;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.net.NetworkRequest;
import android.net.NetworkScore;
import android.net.NetworkState;
import android.net.NetworkState;
import android.net.NetworkStateSnapshot;
import android.net.NetworkStateSnapshot;
import android.net.OemNetworkPreferences;
import android.net.OemNetworkPreferences;
@@ -138,7 +139,7 @@ interface IConnectivityManager
    void declareNetworkRequestUnfulfillable(in NetworkRequest request);
    void declareNetworkRequestUnfulfillable(in NetworkRequest request);


    Network registerNetworkAgent(in INetworkAgent na, in NetworkInfo ni, in LinkProperties lp,
    Network registerNetworkAgent(in INetworkAgent na, in NetworkInfo ni, in LinkProperties lp,
            in NetworkCapabilities nc, int score, in NetworkAgentConfig config,
            in NetworkCapabilities nc, in NetworkScore score, in NetworkAgentConfig config,
            in int factorySerialNumber);
            in int factorySerialNumber);


    NetworkRequest requestNetwork(in NetworkCapabilities networkCapabilities, int reqType,
    NetworkRequest requestNetwork(in NetworkCapabilities networkCapabilities, int reqType,
+31 −11
Original line number Original line Diff line number Diff line
@@ -371,6 +371,14 @@ public abstract class NetworkAgent {
        return ni;
        return ni;
    }
    }


    // Temporary backward compatibility constructor
    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(context, looper, logTag, nc, lp,
                new NetworkScore.Builder().setLegacyInt(score).build(), config, provider);
    }

    /**
    /**
     * Create a new network agent.
     * Create a new network agent.
     * @param context a {@link Context} to get system services from.
     * @param context a {@link Context} to get system services from.
@@ -382,10 +390,12 @@ public abstract class NetworkAgent {
     * @param score the initial score of this network. Update with sendNetworkScore.
     * @param score the initial score of this network. Update with sendNetworkScore.
     * @param config an immutable {@link NetworkAgentConfig} for this agent.
     * @param config an immutable {@link NetworkAgentConfig} for this agent.
     * @param provider the {@link NetworkProvider} managing this agent.
     * @param provider the {@link NetworkProvider} managing this agent.
     * @hide TODO : unhide when impl is complete
     */
     */
    public NetworkAgent(@NonNull Context context, @NonNull Looper looper, @NonNull String logTag,
    public NetworkAgent(@NonNull Context context, @NonNull Looper looper, @NonNull String logTag,
            @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp, int score,
            @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp,
            @NonNull NetworkAgentConfig config, @Nullable NetworkProvider provider) {
            @NonNull NetworkScore score, @NonNull NetworkAgentConfig config,
            @Nullable NetworkProvider provider) {
        this(looper, context, logTag, nc, lp, score, config,
        this(looper, context, logTag, nc, lp, score, config,
                provider == null ? NetworkProvider.ID_NONE : provider.getProviderId(),
                provider == null ? NetworkProvider.ID_NONE : provider.getProviderId(),
                getLegacyNetworkInfo(config));
                getLegacyNetworkInfo(config));
@@ -395,12 +405,12 @@ public abstract class NetworkAgent {
        public final Context context;
        public final Context context;
        public final NetworkCapabilities capabilities;
        public final NetworkCapabilities capabilities;
        public final LinkProperties properties;
        public final LinkProperties properties;
        public final int score;
        public final NetworkScore score;
        public final NetworkAgentConfig config;
        public final NetworkAgentConfig config;
        public final NetworkInfo info;
        public final NetworkInfo info;
        InitialConfiguration(@NonNull Context context, @NonNull NetworkCapabilities capabilities,
        InitialConfiguration(@NonNull Context context, @NonNull NetworkCapabilities capabilities,
                @NonNull LinkProperties properties, int score, @NonNull NetworkAgentConfig config,
                @NonNull LinkProperties properties, @NonNull NetworkScore score,
                @NonNull NetworkInfo info) {
                @NonNull NetworkAgentConfig config, @NonNull NetworkInfo info) {
            this.context = context;
            this.context = context;
            this.capabilities = capabilities;
            this.capabilities = capabilities;
            this.properties = properties;
            this.properties = properties;
@@ -412,8 +422,9 @@ public abstract class NetworkAgent {
    private volatile InitialConfiguration mInitialConfiguration;
    private volatile InitialConfiguration mInitialConfiguration;


    private NetworkAgent(@NonNull Looper looper, @NonNull Context context, @NonNull String logTag,
    private NetworkAgent(@NonNull Looper looper, @NonNull Context context, @NonNull String logTag,
            @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp, int score,
            @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp,
            @NonNull NetworkAgentConfig config, int providerId, @NonNull NetworkInfo ni) {
            @NonNull NetworkScore score, @NonNull NetworkAgentConfig config, int providerId,
            @NonNull NetworkInfo ni) {
        mHandler = new NetworkAgentHandler(looper);
        mHandler = new NetworkAgentHandler(looper);
        LOG_TAG = logTag;
        LOG_TAG = logTag;
        mNetworkInfo = new NetworkInfo(ni);
        mNetworkInfo = new NetworkInfo(ni);
@@ -872,16 +883,25 @@ public abstract class NetworkAgent {
        queueOrSendMessage(reg -> reg.sendNetworkCapabilities(nc));
        queueOrSendMessage(reg -> reg.sendNetworkCapabilities(nc));
    }
    }


    /**
     * Must be called by the agent to update the score of this network.
     *
     * @param score the new score.
     * @hide TODO : unhide when impl is complete
     */
    public final void sendNetworkScore(@NonNull NetworkScore score) {
        Objects.requireNonNull(score);
        queueOrSendMessage(reg -> reg.sendScore(score));
    }

    /**
    /**
     * Must be called by the agent to update the score of this network.
     * Must be called by the agent to update the score of this network.
     *
     *
     * @param score the new score, between 0 and 99.
     * @param score the new score, between 0 and 99.
     * deprecated use sendNetworkScore(NetworkScore) TODO : remove in S.
     */
     */
    public final void sendNetworkScore(@IntRange(from = 0, to = 99) int score) {
    public final void sendNetworkScore(@IntRange(from = 0, to = 99) int score) {
        if (score < 0) {
        sendNetworkScore(new NetworkScore.Builder().setLegacyInt(score).build());
            throw new IllegalArgumentException("Score must be >= 0");
        }
        queueOrSendMessage(reg -> reg.sendScore(score));
    }
    }


    /**
    /**
Loading