diff options
author | 2017-01-11 08:38:00 +0000 | |
---|---|---|
committer | 2017-01-11 08:38:00 +0000 | |
commit | d48902d37e5ae8ef08ac3923f52bf1e027ffff08 (patch) | |
tree | ba6e69da1333d0eb3d967d1250c4e0a77beb8251 | |
parent | 140b9b65a12409b3abaa63a99b99296d50827f05 (diff) | |
parent | f84e5e8f767c872ec6d43f893f6860edac9b464e (diff) |
Merge "Prepare UpstreamNetworkMonitor for extraction"
am: f84e5e8f76
Change-Id: I4e4d525ff1dc23189e4ef6978a1980319d6b85f2
-rw-r--r-- | services/core/java/com/android/server/connectivity/Tethering.java | 120 |
1 files changed, 67 insertions, 53 deletions
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 0beb227e5825..6bb7378e5228 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -198,7 +198,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper); mTetherMasterSM.start(); - mUpstreamNetworkMonitor = new UpstreamNetworkMonitor(); + mUpstreamNetworkMonitor = new UpstreamNetworkMonitor( + mContext, mTetherMasterSM, TetherMasterSM.EVENT_UPSTREAM_CALLBACK); mStateReceiver = new StateReceiver(); IntentFilter filter = new IntentFilter(); @@ -1026,38 +1027,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 * 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 * could/should be moved here. */ - class UpstreamNetworkMonitor { - static final int EVENT_ON_AVAILABLE = 1; - static final int EVENT_ON_CAPABILITIES = 2; - static final int EVENT_ON_LINKPROPERTIES = 3; - static final int EVENT_ON_LOST = 4; - - final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>(); - NetworkCallback mDefaultNetworkCallback; - NetworkCallback mDunTetheringCallback; - - void start() { + public class UpstreamNetworkMonitor { + public static final int EVENT_ON_AVAILABLE = 1; + public static final int EVENT_ON_CAPABILITIES = 2; + public static final int EVENT_ON_LINKPROPERTIES = 3; + 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; + + public UpstreamNetworkMonitor(Context ctx, StateMachine tgt, int what) { + mContext = ctx; + mTarget = tgt; + mWhat = what; + } + + public void start() { stop(); mDefaultNetworkCallback = new UpstreamNetworkCallback(); - getConnectivityManager().registerDefaultNetworkCallback(mDefaultNetworkCallback); + cm().registerDefaultNetworkCallback(mDefaultNetworkCallback); final NetworkRequest dunTetheringRequest = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) @@ -1093,29 +1072,28 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) .build(); mDunTetheringCallback = new UpstreamNetworkCallback(); - getConnectivityManager().registerNetworkCallback( - dunTetheringRequest, mDunTetheringCallback); + cm().registerNetworkCallback(dunTetheringRequest, mDunTetheringCallback); } - void stop() { + public void stop() { if (mDefaultNetworkCallback != null) { - getConnectivityManager().unregisterNetworkCallback(mDefaultNetworkCallback); + cm().unregisterNetworkCallback(mDefaultNetworkCallback); mDefaultNetworkCallback = null; } if (mDunTetheringCallback != null) { - getConnectivityManager().unregisterNetworkCallback(mDunTetheringCallback); + cm().unregisterNetworkCallback(mDunTetheringCallback); mDunTetheringCallback = null; } mNetworkMap.clear(); } - NetworkState lookup(Network network) { + public NetworkState lookup(Network network) { return (network != null) ? mNetworkMap.get(network) : null; } - NetworkState processCallback(int arg1, Object obj) { + public NetworkState processCallback(int arg1, Object obj) { switch (arg1) { case EVENT_ON_AVAILABLE: { final Network network = (Network) obj; @@ -1127,7 +1105,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering new NetworkState(null, null, null, network, null, null)); } - final ConnectivityManager cm = getConnectivityManager(); + final ConnectivityManager cm = cm(); if (mDefaultNetworkCallback != null) { cm.requestNetworkCapabilities(mDefaultNetworkCallback); @@ -1198,6 +1176,42 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering 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 |