Merge "Only disable Wi-Fi IP serving on specific interface, if available"

This commit is contained in:
Treehugger Robot
2017-06-13 03:13:18 +00:00
committed by Gerrit Code Review
2 changed files with 25 additions and 12 deletions

View File

@@ -815,30 +815,41 @@ public class Tethering extends BaseNetworkObserver {
case WifiManager.WIFI_AP_STATE_DISABLING: case WifiManager.WIFI_AP_STATE_DISABLING:
case WifiManager.WIFI_AP_STATE_FAILED: case WifiManager.WIFI_AP_STATE_FAILED:
default: default:
disableWifiIpServingLocked(curState); disableWifiIpServingLocked(ifname, curState);
break; break;
} }
} }
} }
} }
// TODO: Pass in the interface name and, if non-empty, only turn down IP private void disableWifiIpServingLocked(String ifname, int apState) {
// serving on that one interface. mLog.log("Canceling WiFi tethering request - AP_STATE=" + apState);
private void disableWifiIpServingLocked(int apState) {
if (DBG) Log.d(TAG, "Canceling WiFi tethering request - AP_STATE=" + apState); // Regardless of whether we requested this transition, the AP has gone
// down. Don't try to tether again unless we're requested to do so.
// TODO: Remove this altogether, once Wi-Fi reliably gives us an
// interface name with every broadcast.
mWifiTetherRequested = false;
if (!TextUtils.isEmpty(ifname)) {
final TetherState ts = mTetherStates.get(ifname);
if (ts != null) {
ts.stateMachine.unwanted();
return;
}
}
// Tell appropriate interface state machines that they should tear
// themselves down.
for (int i = 0; i < mTetherStates.size(); i++) { for (int i = 0; i < mTetherStates.size(); i++) {
TetherInterfaceStateMachine tism = mTetherStates.valueAt(i).stateMachine; TetherInterfaceStateMachine tism = mTetherStates.valueAt(i).stateMachine;
if (tism.interfaceType() == ConnectivityManager.TETHERING_WIFI) { if (tism.interfaceType() == ConnectivityManager.TETHERING_WIFI) {
tism.sendMessage(TetherInterfaceStateMachine.CMD_TETHER_UNREQUESTED); tism.unwanted();
break; // There should be at most one of these. return;
} }
} }
// Regardless of whether we requested this transition, the AP has gone
// down. Don't try to tether again unless we're requested to do so. mLog.log("Error disabling Wi-Fi IP serving; " +
mWifiTetherRequested = false; (TextUtils.isEmpty(ifname) ? "no interface name specified"
: "specified interface: " + ifname));
} }
private void enableWifiIpServingLocked(String ifname, int wifiIpMode) { private void enableWifiIpServingLocked(String ifname, int wifiIpMode) {

View File

@@ -132,6 +132,8 @@ public class TetherInterfaceStateMachine extends StateMachine {
public void stop() { sendMessage(CMD_INTERFACE_DOWN); } public void stop() { sendMessage(CMD_INTERFACE_DOWN); }
public void unwanted() { sendMessage(CMD_TETHER_UNREQUESTED); }
// configured when we start tethering and unconfig'd on error or conclusion // configured when we start tethering and unconfig'd on error or conclusion
private boolean configureIfaceIp(boolean enabled) { private boolean configureIfaceIp(boolean enabled) {
if (VDBG) Log.d(TAG, "configureIfaceIp(" + enabled + ")"); if (VDBG) Log.d(TAG, "configureIfaceIp(" + enabled + ")");