diff options
| -rw-r--r-- | services/core/java/com/android/server/connectivity/Tethering.java | 55 | ||||
| -rw-r--r-- | services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java | 10 |
2 files changed, 24 insertions, 41 deletions
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 31100000e501..4858dfa7bb9c 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -18,6 +18,7 @@ package com.android.server.connectivity; import static android.hardware.usb.UsbManager.USB_CONNECTED; import static android.hardware.usb.UsbManager.USB_FUNCTION_RNDIS; +import static android.net.ConnectivityManager.getNetworkTypeName; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_MODE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; @@ -241,8 +242,10 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering return (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); } + // NOTE: This is always invoked on the mLooper thread. private void updateConfiguration() { mConfig = new TetheringConfiguration(mContext, mLog); + mUpstreamNetworkMonitor.updateMobileRequiresDun(mConfig.isDunRequired); } @Override @@ -1179,15 +1182,6 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering return false; } - protected void requestUpstreamMobileConnection() { - mUpstreamNetworkMonitor.updateMobileRequiresDun(mConfig.isDunRequired); - mUpstreamNetworkMonitor.registerMobileNetworkRequest(); - } - - protected void unrequestUpstreamMobileConnection() { - mUpstreamNetworkMonitor.releaseMobileNetworkRequest(); - } - protected boolean turnOnMasterTetherSettings() { final TetheringConfiguration cfg = mConfig; try { @@ -1236,17 +1230,26 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering } protected void chooseUpstreamType(boolean tryCell) { - final int upstreamType = findPreferredUpstreamType(tryCell); + updateConfiguration(); // TODO - remove? + + final int upstreamType = findPreferredUpstreamType( + getConnectivityManager(), mConfig); + if (upstreamType == ConnectivityManager.TYPE_NONE) { + if (tryCell) { + mUpstreamNetworkMonitor.registerMobileNetworkRequest(); + // We think mobile should be coming up; don't set a retry. + } else { + sendMessageDelayed(CMD_RETRY_UPSTREAM, UPSTREAM_SETTLE_TIME_MS); + } + } setUpstreamByType(upstreamType); } - protected int findPreferredUpstreamType(boolean tryCell) { - final ConnectivityManager cm = getConnectivityManager(); + // TODO: Move this function into UpstreamNetworkMonitor. + protected int findPreferredUpstreamType(ConnectivityManager cm, + TetheringConfiguration cfg) { int upType = ConnectivityManager.TYPE_NONE; - updateConfiguration(); // TODO - remove? - - final TetheringConfiguration cfg = mConfig; if (VDBG) { Log.d(TAG, "chooseUpstreamType has upstream iface types:"); for (Integer netType : cfg.preferredUpstreamIfaceTypes) { @@ -1267,27 +1270,18 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering final int preferredUpstreamMobileApn = cfg.isDunRequired ? ConnectivityManager.TYPE_MOBILE_DUN : ConnectivityManager.TYPE_MOBILE_HIPRI; - if (DBG) { - Log.d(TAG, "chooseUpstreamType(" + tryCell + ")," - + " preferredApn=" - + ConnectivityManager.getNetworkTypeName(preferredUpstreamMobileApn) - + ", got type=" - + ConnectivityManager.getNetworkTypeName(upType)); - } + mLog.log(String.format( + "findPreferredUpstreamType(), preferredApn=%s, got type=%s", + getNetworkTypeName(preferredUpstreamMobileApn), + getNetworkTypeName(upType))); switch (upType) { case ConnectivityManager.TYPE_MOBILE_DUN: case ConnectivityManager.TYPE_MOBILE_HIPRI: // If we're on DUN, put our own grab on it. - requestUpstreamMobileConnection(); + mUpstreamNetworkMonitor.registerMobileNetworkRequest(); break; case ConnectivityManager.TYPE_NONE: - if (tryCell) { - requestUpstreamMobileConnection(); - // We think mobile should be coming up; don't set a retry. - } else { - sendMessageDelayed(CMD_RETRY_UPSTREAM, UPSTREAM_SETTLE_TIME_MS); - } break; default: /* If we've found an active upstream connection that's not DUN/HIPRI @@ -1296,7 +1290,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering * If we found NONE we don't want to do this as we want any previous * requests to keep trying to bring up something we can use. */ - unrequestUpstreamMobileConnection(); + mUpstreamNetworkMonitor.releaseMobileNetworkRequest(); break; } @@ -1455,7 +1449,6 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering @Override public void exit() { mOffloadController.stop(); - unrequestUpstreamMobileConnection(); mUpstreamNetworkMonitor.stop(); mSimChange.stopListening(); notifyTetheredOfNewUpstreamIface(null); diff --git a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java index be714907725b..cd6038ffa0dd 100644 --- a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java @@ -332,19 +332,16 @@ public class UpstreamNetworkMonitor { @Override public void onAvailable(Network network) { - checkExpectedThread(); handleAvailable(mCallbackType, network); } @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities newNc) { - checkExpectedThread(); handleNetCap(network, newNc); } @Override public void onLinkPropertiesChanged(Network network, LinkProperties newLp) { - checkExpectedThread(); handleLinkProp(network, newLp); } @@ -353,15 +350,8 @@ public class UpstreamNetworkMonitor { @Override public void onLost(Network network) { - checkExpectedThread(); handleLost(mCallbackType, network); } - - private void checkExpectedThread() { - if (Looper.myLooper() != mHandler.getLooper()) { - Log.wtf(TAG, "Handling callback in unexpected thread."); - } - } } private void releaseCallback(NetworkCallback cb) { |