Merge "Don't crash Tethering service when WiFi feature is missing"

This commit is contained in:
Tomasz Wasilczyk 2021-02-18 18:20:28 +00:00 • committed by Gerrit Code Review
commit 736f8ec55a
2 changed files with 23 additions and 5 deletions

View file

@ -1689,12 +1689,14 @@ public class Tethering {
// If this is a Wi-Fi interface, tell WifiManager of any errors
// or the inactive serving state.
if (who.interfaceType() == TETHERING_WIFI) {
if (who.lastError() != TETHER_ERROR_NO_ERROR) {
getWifiManager().updateInterfaceIpState(
who.interfaceName(), IFACE_IP_MODE_CONFIGURATION_ERROR);
final WifiManager mgr = getWifiManager();
final String iface = who.interfaceName();
if (mgr == null) {
Log.wtf(TAG, "Skipping WifiManager notification about inactive tethering");
} else if (who.lastError() != TETHER_ERROR_NO_ERROR) {
mgr.updateInterfaceIpState(iface, IFACE_IP_MODE_CONFIGURATION_ERROR);
} else {
getWifiManager().updateInterfaceIpState(
who.interfaceName(), IFACE_IP_MODE_UNSPECIFIED);
mgr.updateInterfaceIpState(iface, IFACE_IP_MODE_UNSPECIFIED);
}
}
}
@ -2421,6 +2423,19 @@ public class Tethering {
mLog.log(iface + " is not a tetherable iface, ignoring");
return;
}
final PackageManager pm = mContext.getPackageManager();
if ((interfaceType == TETHERING_WIFI || interfaceType == TETHERING_WIGIG)
&& !pm.hasSystemFeature(PackageManager.FEATURE_WIFI)) {
mLog.log(iface + " is not tetherable, because WiFi feature is disabled");
return;
}
if (interfaceType == TETHERING_WIFI_P2P
&& !pm.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)) {
mLog.log(iface + " is not tetherable, because WiFi Direct feature is disabled");
return;
}
maybeTrackNewInterfaceLocked(iface, interfaceType);
}

View file

@ -586,6 +586,9 @@ public class TetheringTest {
ArgumentCaptor.forClass(SoftApCallback.class);
verify(mWifiManager).registerSoftApCallback(any(), softApCallbackCaptor.capture());
mSoftApCallback = softApCallbackCaptor.getValue();
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)).thenReturn(true);
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)).thenReturn(true);
}
private void setTetheringSupported(final boolean supported) {