Fix tethering doesn't turn off issue am: 862c8a1ea0 am: cd34630e6b am: 1b62a26c1a am: c7884164c6

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1484019

Change-Id: I896b23cf0e7d622d6814940656cd72a17f591a22
This commit is contained in:
paulhu
2020-11-10 16:40:27 +00:00
committed by Automerger Merge Worker
2 changed files with 46 additions and 10 deletions

View File

@@ -1079,9 +1079,14 @@ public class Tethering {
}
}
@VisibleForTesting
SparseArray<TetheringRequestParcel> getActiveTetheringRequests() {
return mActiveTetheringRequests;
}
@VisibleForTesting
boolean isTetheringActive() {
return mActiveTetheringRequests.size() > 0;
return getTetheredIfaces().length > 0;
}
@VisibleForTesting

View File

@@ -52,6 +52,7 @@ import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static com.android.net.module.util.Inet4AddressUtils.intToInet4AddressHTH;
import static com.android.networkstack.tethering.Tethering.UserRestrictionActionListener;
import static com.android.networkstack.tethering.TetheringNotificationUpdater.DOWNSTREAM_NONE;
import static com.android.networkstack.tethering.UpstreamNetworkMonitor.EVENT_ON_CAPABILITIES;
@@ -735,9 +736,12 @@ public class TetheringTest {
initTetheringUpstream(upstreamState);
// Emulate pressing the USB tethering button in Settings UI.
mTethering.startTethering(createTetheringRequestParcel(TETHERING_USB), null);
final TetheringRequestParcel request = createTetheringRequestParcel(TETHERING_USB);
mTethering.startTethering(request, null);
mLooper.dispatchAll();
verify(mUsbManager, times(1)).setCurrentFunctions(UsbManager.FUNCTION_RNDIS);
assertEquals(1, mTethering.getActiveTetheringRequests().size());
assertEquals(request, mTethering.getActiveTetheringRequests().get(TETHERING_USB));
mTethering.interfaceStatusChanged(TEST_USB_IFNAME, true);
}
@@ -1174,20 +1178,26 @@ public class TetheringTest {
verifyNoMoreInteractions(mNetd);
}
private UserRestrictionActionListener makeUserRestrictionActionListener(
final Tethering tethering, final boolean currentDisallow, final boolean nextDisallow) {
final Bundle newRestrictions = new Bundle();
newRestrictions.putBoolean(UserManager.DISALLOW_CONFIG_TETHERING, nextDisallow);
when(mUserManager.getUserRestrictions()).thenReturn(newRestrictions);
final UserRestrictionActionListener ural =
new UserRestrictionActionListener(mUserManager, tethering, mNotificationUpdater);
ural.mDisallowTethering = currentDisallow;
return ural;
}
private void runUserRestrictionsChange(
boolean currentDisallow, boolean nextDisallow, boolean isTetheringActive,
int expectedInteractionsWithShowNotification) throws Exception {
final Bundle newRestrictions = new Bundle();
newRestrictions.putBoolean(UserManager.DISALLOW_CONFIG_TETHERING, nextDisallow);
final Tethering mockTethering = mock(Tethering.class);
when(mockTethering.isTetheringActive()).thenReturn(isTetheringActive);
when(mUserManager.getUserRestrictions()).thenReturn(newRestrictions);
final Tethering.UserRestrictionActionListener ural =
new Tethering.UserRestrictionActionListener(
mUserManager, mockTethering, mNotificationUpdater);
ural.mDisallowTethering = currentDisallow;
final UserRestrictionActionListener ural =
makeUserRestrictionActionListener(mockTethering, currentDisallow, nextDisallow);
ural.onUserRestrictionsChanged();
verify(mNotificationUpdater, times(expectedInteractionsWithShowNotification))
@@ -1256,6 +1266,27 @@ public class TetheringTest {
expectedInteractionsWithShowNotification);
}
@Test
public void testUntetherUsbWhenRestrictionIsOn() {
// Start usb tethering and check that usb interface is tethered.
final UpstreamNetworkState upstreamState = buildMobileIPv4UpstreamState();
runUsbTethering(upstreamState);
assertContains(Arrays.asList(mTethering.getTetheredIfaces()), TEST_USB_IFNAME);
assertTrue(mTethering.isTetheringActive());
assertEquals(0, mTethering.getActiveTetheringRequests().size());
final Tethering.UserRestrictionActionListener ural = makeUserRestrictionActionListener(
mTethering, false /* currentDisallow */, true /* nextDisallow */);
ural.onUserRestrictionsChanged();
mLooper.dispatchAll();
// Verify that restriction notification has showed to user.
verify(mNotificationUpdater, times(1)).notifyTetheringDisabledByRestriction();
// Verify that usb tethering has been disabled.
verify(mUsbManager, times(1)).setCurrentFunctions(UsbManager.FUNCTION_NONE);
}
private class TestTetheringEventCallback extends ITetheringEventCallback.Stub {
private final ArrayList<Network> mActualUpstreams = new ArrayList<>();
private final ArrayList<TetheringConfigurationParcel> mTetheringConfigs =