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

Commit 43c36b55 authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Refactor NetworkFactoryInfo to hide implementation details.

This is in preparation for introducing NetworkProvider, which
will initially share ConnectivityService code with NetworkFactory.

Bug: 138306002
Test: atest FrameworksNetTests
Change-Id: Ic6f888621f473342ee3fe8fedf9411552111342b
parent ff266fb0
Loading
Loading
Loading
Loading
+44 −26
Original line number Diff line number Diff line
@@ -3022,25 +3022,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
            if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
                if (VDBG) log("NetworkFactory connected");
                // Finish setting up the full connection
                mNetworkFactoryInfos.get(msg.replyTo).asyncChannel.sendMessage(
                        AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
                // A network factory has connected.  Send it all current NetworkRequests.
                for (NetworkRequestInfo nri : mNetworkRequests.values()) {
                    if (nri.request.isListen()) continue;
                    ensureRunningOnConnectivityServiceThread();
                    NetworkAgentInfo nai = nri.mSatisfier;
                    final int score;
                    final int serial;
                    if (nai != null) {
                        score = nai.getCurrentScore();
                        serial = nai.factorySerialNumber;
                    } else {
                        score = 0;
                        serial = NetworkFactory.SerialNumber.NONE;
                    }
                    ac.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score, serial,
                            nri.request);
                }
                NetworkFactoryInfo nfi = mNetworkFactoryInfos.get(msg.replyTo);
                nfi.completeConnection();
                sendAllRequestsToFactory(nfi);
            } else {
                loge("Error connecting NetworkFactory");
                mNetworkFactoryInfos.remove(msg.obj);
@@ -3423,8 +3407,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            }

            for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
                nfi.asyncChannel.sendMessage(android.net.NetworkFactory.CMD_CANCEL_REQUEST,
                        nri.request);
                nfi.cancelRequest(nri.request);
            }
        } else {
            // listens don't have a singular affectedNetwork.  Check all networks to see
@@ -4920,16 +4903,33 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private static class NetworkFactoryInfo {
        public final String name;
        public final Messenger messenger;
        public final AsyncChannel asyncChannel;
        private final AsyncChannel mAsyncChannel;
        public final int factorySerialNumber;

        NetworkFactoryInfo(String name, Messenger messenger, AsyncChannel asyncChannel,
                int factorySerialNumber) {
            this.name = name;
            this.messenger = messenger;
            this.asyncChannel = asyncChannel;
            this.mAsyncChannel = asyncChannel;
            this.factorySerialNumber = factorySerialNumber;
        }

        void requestNetwork(NetworkRequest request, int score, int servingSerialNumber) {
            mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score,
                    servingSerialNumber, request);
        }

        void cancelRequest(NetworkRequest request) {
            mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_CANCEL_REQUEST, request);
        }

        void connect(Context context, Handler handler) {
            mAsyncChannel.connect(context, handler, messenger);
        }

        void completeConnection() {
            mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
        }
    }

    private void ensureNetworkRequestHasType(NetworkRequest request) {
@@ -5318,7 +5318,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private void handleRegisterNetworkFactory(NetworkFactoryInfo nfi) {
        if (DBG) log("Got NetworkFactory Messenger for " + nfi.name);
        mNetworkFactoryInfos.put(nfi.messenger, nfi);
        nfi.asyncChannel.connect(mContext, mTrackerHandler, nfi.messenger);
        nfi.connect(mContext, mTrackerHandler);
    }

    @Override
@@ -5954,8 +5954,26 @@ public class ConnectivityService extends IConnectivityManager.Stub
            log("sending new Min Network Score(" + score + "): " + networkRequest.toString());
        }
        for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
            nfi.asyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score,
                    serial, networkRequest);
            nfi.requestNetwork(networkRequest, score, serial);
        }
    }

    /** Sends all current NetworkRequests to the specified factory. */
    private void sendAllRequestsToFactory(NetworkFactoryInfo nfi) {
        ensureRunningOnConnectivityServiceThread();
        for (NetworkRequestInfo nri : mNetworkRequests.values()) {
            if (nri.request.isListen()) continue;
            NetworkAgentInfo nai = nri.mSatisfier;
            final int score;
            final int serial;
            if (nai != null) {
                score = nai.getCurrentScore();
                serial = nai.factorySerialNumber;
            } else {
                score = 0;
                serial = NetworkFactory.SerialNumber.NONE;
            }
            nfi.requestNetwork(nri.request, score, serial);
        }
    }