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

Commit d48902d3 authored by Erik Kline's avatar Erik Kline Committed by android-build-merger
Browse files

Merge "Prepare UpstreamNetworkMonitor for extraction"

am: f84e5e8f

Change-Id: I4e4d525ff1dc23189e4ef6978a1980319d6b85f2
parents 140b9b65 f84e5e8f
Loading
Loading
Loading
Loading
+67 −53
Original line number Original line Diff line number Diff line
@@ -198,7 +198,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
        mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper);
        mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper);
        mTetherMasterSM.start();
        mTetherMasterSM.start();


        mUpstreamNetworkMonitor = new UpstreamNetworkMonitor();
        mUpstreamNetworkMonitor = new UpstreamNetworkMonitor(
                mContext, mTetherMasterSM, TetherMasterSM.EVENT_UPSTREAM_CALLBACK);


        mStateReceiver = new StateReceiver();
        mStateReceiver = new StateReceiver();
        IntentFilter filter = new IntentFilter();
        IntentFilter filter = new IntentFilter();
@@ -1025,38 +1026,6 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
        }
        }
    }
    }


    /**
     * A NetworkCallback class that relays information of interest to the
     * tethering master state machine thread for subsequent processing.
     */
    class UpstreamNetworkCallback extends NetworkCallback {
        @Override
        public void onAvailable(Network network) {
            mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
                    UpstreamNetworkMonitor.EVENT_ON_AVAILABLE, 0, network);
        }

        @Override
        public void onCapabilitiesChanged(Network network, NetworkCapabilities newNc) {
            mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
                    UpstreamNetworkMonitor.EVENT_ON_CAPABILITIES, 0,
                    new NetworkState(null, null, newNc, network, null, null));
        }

        @Override
        public void onLinkPropertiesChanged(Network network, LinkProperties newLp) {
            mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
                    UpstreamNetworkMonitor.EVENT_ON_LINKPROPERTIES, 0,
                    new NetworkState(null, newLp, null, network, null, null));
        }

        @Override
        public void onLost(Network network) {
            mTetherMasterSM.sendMessage(TetherMasterSM.EVENT_UPSTREAM_CALLBACK,
                    UpstreamNetworkMonitor.EVENT_ON_LOST, 0, network);
        }
    }

    /**
    /**
     * A class to centralize all the network and link properties information
     * A class to centralize all the network and link properties information
     * pertaining to the current and any potential upstream network.
     * pertaining to the current and any potential upstream network.
@@ -1071,21 +1040,31 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
     * TODO: Investigate whether more "upstream-specific" logic/functionality
     * TODO: Investigate whether more "upstream-specific" logic/functionality
     * could/should be moved here.
     * could/should be moved here.
     */
     */
    class UpstreamNetworkMonitor {
    public class UpstreamNetworkMonitor {
        static final int EVENT_ON_AVAILABLE      = 1;
        public static final int EVENT_ON_AVAILABLE      = 1;
        static final int EVENT_ON_CAPABILITIES   = 2;
        public static final int EVENT_ON_CAPABILITIES   = 2;
        static final int EVENT_ON_LINKPROPERTIES = 3;
        public static final int EVENT_ON_LINKPROPERTIES = 3;
        static final int EVENT_ON_LOST           = 4;
        public static final int EVENT_ON_LOST           = 4;

        private final Context mContext;
        private final StateMachine mTarget;
        private final int mWhat;
        private final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>();
        private ConnectivityManager mCM;
        private NetworkCallback mDefaultNetworkCallback;
        private NetworkCallback mDunTetheringCallback;


        final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>();
        public UpstreamNetworkMonitor(Context ctx, StateMachine tgt, int what) {
        NetworkCallback mDefaultNetworkCallback;
            mContext = ctx;
        NetworkCallback mDunTetheringCallback;
            mTarget = tgt;
            mWhat = what;
        }


        void start() {
        public void start() {
            stop();
            stop();


            mDefaultNetworkCallback = new UpstreamNetworkCallback();
            mDefaultNetworkCallback = new UpstreamNetworkCallback();
            getConnectivityManager().registerDefaultNetworkCallback(mDefaultNetworkCallback);
            cm().registerDefaultNetworkCallback(mDefaultNetworkCallback);


            final NetworkRequest dunTetheringRequest = new NetworkRequest.Builder()
            final NetworkRequest dunTetheringRequest = new NetworkRequest.Builder()
                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
@@ -1093,29 +1072,28 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
                    .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
                    .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
                    .build();
                    .build();
            mDunTetheringCallback = new UpstreamNetworkCallback();
            mDunTetheringCallback = new UpstreamNetworkCallback();
            getConnectivityManager().registerNetworkCallback(
            cm().registerNetworkCallback(dunTetheringRequest, mDunTetheringCallback);
                    dunTetheringRequest, mDunTetheringCallback);
        }
        }


        void stop() {
        public void stop() {
            if (mDefaultNetworkCallback != null) {
            if (mDefaultNetworkCallback != null) {
                getConnectivityManager().unregisterNetworkCallback(mDefaultNetworkCallback);
                cm().unregisterNetworkCallback(mDefaultNetworkCallback);
                mDefaultNetworkCallback = null;
                mDefaultNetworkCallback = null;
            }
            }


            if (mDunTetheringCallback != null) {
            if (mDunTetheringCallback != null) {
                getConnectivityManager().unregisterNetworkCallback(mDunTetheringCallback);
                cm().unregisterNetworkCallback(mDunTetheringCallback);
                mDunTetheringCallback = null;
                mDunTetheringCallback = null;
            }
            }


            mNetworkMap.clear();
            mNetworkMap.clear();
        }
        }


        NetworkState lookup(Network network) {
        public NetworkState lookup(Network network) {
            return (network != null) ? mNetworkMap.get(network) : null;
            return (network != null) ? mNetworkMap.get(network) : null;
        }
        }


        NetworkState processCallback(int arg1, Object obj) {
        public NetworkState processCallback(int arg1, Object obj) {
            switch (arg1) {
            switch (arg1) {
                case EVENT_ON_AVAILABLE: {
                case EVENT_ON_AVAILABLE: {
                    final Network network = (Network) obj;
                    final Network network = (Network) obj;
@@ -1127,7 +1105,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
                                new NetworkState(null, null, null, network, null, null));
                                new NetworkState(null, null, null, network, null, null));
                    }
                    }


                    final ConnectivityManager cm = getConnectivityManager();
                    final ConnectivityManager cm = cm();


                    if (mDefaultNetworkCallback != null) {
                    if (mDefaultNetworkCallback != null) {
                        cm.requestNetworkCapabilities(mDefaultNetworkCallback);
                        cm.requestNetworkCapabilities(mDefaultNetworkCallback);
@@ -1198,6 +1176,42 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
                    return null;
                    return null;
            }
            }
        }
        }

        // Fetch (and cache) a ConnectivityManager only if and when we need one.
        private ConnectivityManager cm() {
            if (mCM == null) {
                mCM = mContext.getSystemService(ConnectivityManager.class);
            }
            return mCM;
        }

        /**
         * A NetworkCallback class that relays information of interest to the
         * tethering master state machine thread for subsequent processing.
         */
        private class UpstreamNetworkCallback extends NetworkCallback {
            @Override
            public void onAvailable(Network network) {
                mTarget.sendMessage(mWhat, EVENT_ON_AVAILABLE, 0, network);
            }

            @Override
            public void onCapabilitiesChanged(Network network, NetworkCapabilities newNc) {
                mTarget.sendMessage(mWhat, EVENT_ON_CAPABILITIES, 0,
                        new NetworkState(null, null, newNc, network, null, null));
            }

            @Override
            public void onLinkPropertiesChanged(Network network, LinkProperties newLp) {
                mTarget.sendMessage(mWhat, EVENT_ON_LINKPROPERTIES, 0,
                        new NetworkState(null, newLp, null, network, null, null));
            }

            @Override
            public void onLost(Network network) {
                mTarget.sendMessage(mWhat, EVENT_ON_LOST, 0, network);
            }
        }
    }
    }


    // Needed because the canonical source of upstream truth is just the
    // Needed because the canonical source of upstream truth is just the