Fix tethering doesn't turn off issue am: 862c8a1ea0
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1484019 Change-Id: I58cad341b3ac7623ae7303f66bb95b057485a8c6
This commit is contained in:
@@ -1079,9 +1079,14 @@ public class Tethering {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
SparseArray<TetheringRequestParcel> getActiveTetheringRequests() {
|
||||||
|
return mActiveTetheringRequests;
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean isTetheringActive() {
|
boolean isTetheringActive() {
|
||||||
return mActiveTetheringRequests.size() > 0;
|
return getTetheredIfaces().length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED;
|
|||||||
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
|
|
||||||
import static com.android.net.module.util.Inet4AddressUtils.intToInet4AddressHTH;
|
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.TetheringNotificationUpdater.DOWNSTREAM_NONE;
|
||||||
import static com.android.networkstack.tethering.UpstreamNetworkMonitor.EVENT_ON_CAPABILITIES;
|
import static com.android.networkstack.tethering.UpstreamNetworkMonitor.EVENT_ON_CAPABILITIES;
|
||||||
|
|
||||||
@@ -735,9 +736,12 @@ public class TetheringTest {
|
|||||||
initTetheringUpstream(upstreamState);
|
initTetheringUpstream(upstreamState);
|
||||||
|
|
||||||
// Emulate pressing the USB tethering button in Settings UI.
|
// 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();
|
mLooper.dispatchAll();
|
||||||
verify(mUsbManager, times(1)).setCurrentFunctions(UsbManager.FUNCTION_RNDIS);
|
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);
|
mTethering.interfaceStatusChanged(TEST_USB_IFNAME, true);
|
||||||
}
|
}
|
||||||
@@ -1174,20 +1178,26 @@ public class TetheringTest {
|
|||||||
verifyNoMoreInteractions(mNetd);
|
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(
|
private void runUserRestrictionsChange(
|
||||||
boolean currentDisallow, boolean nextDisallow, boolean isTetheringActive,
|
boolean currentDisallow, boolean nextDisallow, boolean isTetheringActive,
|
||||||
int expectedInteractionsWithShowNotification) throws Exception {
|
int expectedInteractionsWithShowNotification) throws Exception {
|
||||||
final Bundle newRestrictions = new Bundle();
|
|
||||||
newRestrictions.putBoolean(UserManager.DISALLOW_CONFIG_TETHERING, nextDisallow);
|
|
||||||
final Tethering mockTethering = mock(Tethering.class);
|
final Tethering mockTethering = mock(Tethering.class);
|
||||||
when(mockTethering.isTetheringActive()).thenReturn(isTetheringActive);
|
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();
|
ural.onUserRestrictionsChanged();
|
||||||
|
|
||||||
verify(mNotificationUpdater, times(expectedInteractionsWithShowNotification))
|
verify(mNotificationUpdater, times(expectedInteractionsWithShowNotification))
|
||||||
@@ -1256,6 +1266,27 @@ public class TetheringTest {
|
|||||||
expectedInteractionsWithShowNotification);
|
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 class TestTetheringEventCallback extends ITetheringEventCallback.Stub {
|
||||||
private final ArrayList<Network> mActualUpstreams = new ArrayList<>();
|
private final ArrayList<Network> mActualUpstreams = new ArrayList<>();
|
||||||
private final ArrayList<TetheringConfigurationParcel> mTetheringConfigs =
|
private final ArrayList<TetheringConfigurationParcel> mTetheringConfigs =
|
||||||
|
|||||||
Reference in New Issue
Block a user