diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2011-01-23 16:04:05 -0800 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2011-01-23 16:04:05 -0800 |
commit | 05d8936f275762bab0d66c6337e352388c8eeee0 (patch) | |
tree | 44d9018f036719a92730455496c696771aa67f40 /services | |
parent | 9d97b63d0e0c7c9deb2d140c1dd579b51f52c1af (diff) | |
download | frameworks_base-05d8936f275762bab0d66c6337e352388c8eeee0.zip frameworks_base-05d8936f275762bab0d66c6337e352388c8eeee0.tar.gz frameworks_base-05d8936f275762bab0d66c6337e352388c8eeee0.tar.bz2 |
Fix tethering when switching default connection
If the default connection is suitable use that rather than a random interface.
This permits us to deterministically switch back to wifi after hanging out on
DUN APN.
bug:3374236
Change-Id: Iee5137b9f09c358f262e7a62f20282e79f7d889f
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/connectivity/Tethering.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java index dd9db9a..26c7e71 100644 --- a/services/java/com/android/server/connectivity/Tethering.java +++ b/services/java/com/android/server/connectivity/Tethering.java @@ -31,6 +31,7 @@ import android.net.ConnectivityManager; import android.net.InterfaceConfiguration; import android.net.IConnectivityManager; import android.net.INetworkManagementEventObserver; +import android.net.LinkProperties; import android.net.NetworkInfo; import android.os.Binder; import android.os.Environment; @@ -1219,7 +1220,20 @@ public class Tethering extends INetworkManagementEventObserver.Stub { } protected String findActiveUpstreamIface() { // check for what iface we can use - if none found switch to error. - IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); + IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE); + IConnectivityManager cm = IConnectivityManager.Stub.asInterface(b); + + try { + LinkProperties defaultProp = cm.getActiveLinkProperties(); + if (defaultProp != null) { + String iface = defaultProp.getInterfaceName(); + for(String regex : mUpstreamIfaceRegexs) { + if (iface.matches(regex)) return iface; + } + } + } catch (RemoteException e) { } + + b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); INetworkManagementService service = INetworkManagementService.Stub.asInterface(b); String[] ifaces = new String[0]; @@ -1390,7 +1404,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub { } break; case CMD_UPSTREAM_CHANGED: - mTryCell = WAIT_FOR_NETWORK_TO_SETTLE; + // need to try DUN immediately if Wifi goes down + mTryCell = !WAIT_FOR_NETWORK_TO_SETTLE; chooseUpstreamType(mTryCell); mTryCell = !mTryCell; break; |