Merge "Prepare UpstreamNetworkMonitor for extraction"
This commit is contained in:
@@ -199,7 +199,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();
|
||||||
@@ -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
|
* 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.
|
||||||
@@ -1072,21 +1041,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;
|
||||||
|
|
||||||
final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>();
|
private final Context mContext;
|
||||||
NetworkCallback mDefaultNetworkCallback;
|
private final StateMachine mTarget;
|
||||||
NetworkCallback mDunTetheringCallback;
|
private final int mWhat;
|
||||||
|
private final HashMap<Network, NetworkState> mNetworkMap = new HashMap<>();
|
||||||
|
private ConnectivityManager mCM;
|
||||||
|
private NetworkCallback mDefaultNetworkCallback;
|
||||||
|
private NetworkCallback mDunTetheringCallback;
|
||||||
|
|
||||||
void start() {
|
public UpstreamNetworkMonitor(Context ctx, StateMachine tgt, int what) {
|
||||||
|
mContext = ctx;
|
||||||
|
mTarget = tgt;
|
||||||
|
mWhat = what;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
@@ -1094,29 +1073,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;
|
||||||
@@ -1128,7 +1106,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);
|
||||||
@@ -1199,6 +1177,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
|
||||||
|
|||||||
Reference in New Issue
Block a user