diff options
| -rw-r--r-- | services/core/java/com/android/server/connectivity/Tethering.java | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java | 5 |
2 files changed, 12 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 1bee594de9f1..0a9dba72ce82 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -255,6 +255,12 @@ public class Tethering extends BaseNetworkObserver { mUpstreamNetworkMonitor.updateMobileRequiresDun(mConfig.isDunRequired); } + private void maybeUpdateConfiguration() { + final int dunCheck = TetheringConfiguration.checkDunRequired(mContext); + if (dunCheck == mConfig.dunCheck) return; + updateConfiguration(); + } + @Override public void interfaceStatusChanged(String iface, boolean up) { // Never called directly: only called from interfaceLinkStateChanged. @@ -1283,7 +1289,9 @@ public class Tethering extends BaseNetworkObserver { } protected void chooseUpstreamType(boolean tryCell) { - updateConfiguration(); // TODO - remove? + // We rebuild configuration on ACTION_CONFIGURATION_CHANGED, but we + // do not currently know how to watch for changes in DUN settings. + maybeUpdateConfiguration(); final NetworkState ns = mUpstreamNetworkMonitor.selectPreferredUpstreamType( mConfig.preferredUpstreamIfaceTypes); diff --git a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java index 7efa1664788c..acbc10b9dc43 100644 --- a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java +++ b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java @@ -70,6 +70,7 @@ public class TetheringConfiguration { public final String[] tetherableUsbRegexs; public final String[] tetherableWifiRegexs; public final String[] tetherableBluetoothRegexs; + public final int dunCheck; public final boolean isDunRequired; public final Collection<Integer> preferredUpstreamIfaceTypes; public final String[] dhcpRanges; @@ -88,7 +89,7 @@ public class TetheringConfiguration { tetherableBluetoothRegexs = ctx.getResources().getStringArray( com.android.internal.R.array.config_tether_bluetooth_regexs); - final int dunCheck = checkDunRequired(ctx); + dunCheck = checkDunRequired(ctx); configLog.log("DUN check returned: " + dunCheckString(dunCheck)); preferredUpstreamIfaceTypes = getUpstreamIfaceTypes(ctx, dunCheck); @@ -175,7 +176,7 @@ public class TetheringConfiguration { return upstreamNames; } - private static int checkDunRequired(Context ctx) { + public static int checkDunRequired(Context ctx) { final TelephonyManager tm = (TelephonyManager) ctx.getSystemService(TELEPHONY_SERVICE); return (tm != null) ? tm.getTetherApnRequired() : DUN_UNSPECIFIED; } |