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

Commit f0768be0 authored by Chalard Jean's avatar Chalard Jean
Browse files

[NS04.5] Have NetworkOffer embark a provider ID

...instead of a Messenger.
This will be useful later to compare whether a given offer is
offered by the same provider satisfying a request.

Bug: 167544279
Test: ConnectivityServiceTest
Change-Id: I975a9439021c7fa511c50ac982819b6dd146291e
parent 40a95a5a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3261,11 +3261,11 @@ public class ConnectivityManager {
    @RequiresPermission(anyOf = {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_FACTORY})
    public void offerNetwork(@NonNull final NetworkProvider provider,
    public void offerNetwork(@NonNull final int providerId,
            @NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps,
            @NonNull final INetworkOfferCallback callback) {
        try {
            mService.offerNetwork(Objects.requireNonNull(provider.getMessenger(), "null messenger"),
            mService.offerNetwork(providerId,
                    Objects.requireNonNull(score, "null score"),
                    Objects.requireNonNull(caps, "null caps"),
                    Objects.requireNonNull(callback, "null callback"));
+1 −1
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ interface IConnectivityManager

    int getRestrictBackgroundStatusByCaller();

    void offerNetwork(in Messenger messenger, in NetworkScore score,
    void offerNetwork(int providerId, in NetworkScore score,
            in NetworkCapabilities caps, in INetworkOfferCallback callback);
    void unofferNetwork(in INetworkOfferCallback callback);
}
+5 −1
Original line number Diff line number Diff line
@@ -272,6 +272,9 @@ public class NetworkProvider {
    public void offerNetwork(@NonNull final NetworkScore score,
            @NonNull final NetworkCapabilities caps, @NonNull final Executor executor,
            @NonNull final NetworkOfferCallback callback) {
        // Can't offer a network with a provider that is not yet registered or already unregistered.
        final int providerId = mProviderId;
        if (providerId == ID_NONE) return;
        NetworkOfferCallbackProxy proxy = null;
        synchronized (mProxies) {
            for (final NetworkOfferCallbackProxy existingProxy : mProxies) {
@@ -285,7 +288,8 @@ public class NetworkProvider {
                mProxies.add(proxy);
            }
        }
        mContext.getSystemService(ConnectivityManager.class).offerNetwork(this, score, caps, proxy);
        mContext.getSystemService(ConnectivityManager.class)
                .offerNetwork(providerId, score, caps, proxy);
    }

    /**
+5 −12
Original line number Diff line number Diff line
@@ -6013,11 +6013,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }

    @Override
    public void offerNetwork(@NonNull final Messenger providerMessenger,
    public void offerNetwork(final int providerId,
            @NonNull final NetworkScore score, @NonNull final NetworkCapabilities caps,
            @NonNull final INetworkOfferCallback callback) {
        final NetworkOffer offer = new NetworkOffer(
                FullScore.makeProspectiveScore(score, caps), caps, callback, providerMessenger);
                FullScore.makeProspectiveScore(score, caps), caps, callback, providerId);
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_OFFER, offer));
    }

@@ -6035,7 +6035,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        // Unregister all the offers from this provider
        final ArrayList<NetworkOfferInfo> toRemove = new ArrayList<>();
        for (final NetworkOfferInfo noi : mNetworkOffers) {
            if (noi.offer.provider == messenger) {
            if (noi.offer.providerId == npi.providerId) {
                // Can't call handleUnregisterNetworkOffer here because iteration is in progress
                toRemove.add(noi);
            }
@@ -6410,13 +6410,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
     */
    private void handleRegisterNetworkOffer(@NonNull final NetworkOffer newOffer) {
        ensureRunningOnConnectivityServiceThread();
        if (null == mNetworkProviderInfos.get(newOffer.provider)) {
            // This may actually happen if a provider updates its score or registers and then
            // immediately unregisters. The offer would still be in the handler queue, but the
            // provider would have been removed.
            if (DBG) log("Received offer from an unregistered provider");
            return;
        }

        final NetworkOfferInfo existingOffer = findNetworkOfferInfoByCallback(newOffer.callback);
        if (null != existingOffer) {
@@ -6425,7 +6418,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        }
        final NetworkOfferInfo noi = new NetworkOfferInfo(newOffer);
        try {
            noi.offer.provider.getBinder().linkToDeath(noi, 0 /* flags */);
            noi.offer.callback.asBinder().linkToDeath(noi, 0 /* flags */);
        } catch (RemoteException e) {
            noi.binderDied();
            return;
@@ -6437,7 +6430,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private void handleUnregisterNetworkOffer(@NonNull final NetworkOfferInfo noi) {
        ensureRunningOnConnectivityServiceThread();
        mNetworkOffers.remove(noi);
        noi.offer.provider.getBinder().unlinkToDeath(noi, 0 /* flags */);
        noi.offer.callback.asBinder().unlinkToDeath(noi, 0 /* flags */);
    }

    @Nullable private NetworkOfferInfo findNetworkOfferInfoByCallback(
+3 −4
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.annotation.Nullable;
import android.net.INetworkOfferCallback;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Messenger;

import java.util.Objects;

@@ -44,7 +43,7 @@ public class NetworkOffer {
    @NonNull public final FullScore score;
    @NonNull public final NetworkCapabilities caps;
    @NonNull public final INetworkOfferCallback callback;
    @NonNull public final Messenger provider;
    @NonNull public final int providerId;

    private static NetworkCapabilities emptyCaps() {
        final NetworkCapabilities nc = new NetworkCapabilities();
@@ -56,11 +55,11 @@ public class NetworkOffer {
    public NetworkOffer(@NonNull final FullScore score,
            @Nullable final NetworkCapabilities caps,
            @NonNull final INetworkOfferCallback callback,
            @NonNull final Messenger provider) {
            @NonNull final int providerId) {
        this.score = Objects.requireNonNull(score);
        this.caps = null != caps ? caps : emptyCaps();
        this.callback = Objects.requireNonNull(callback);
        this.provider = Objects.requireNonNull(provider);
        this.providerId = providerId;
    }

    /**