Merge "Only disable Wi-Fi IP serving on specific interface, if available"
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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 + ")");
|
||||||
|
|||||||
Reference in New Issue
Block a user