Tethering shouldn't indicates on when SIM without tethering option

Before this CL, If SIM doesn't have tethering option then UI will not
back to previous option when press "USB tethering" in
[Default USB configuration].

This CL added receiver to observe USB state that get correct state
from UsbManager.

Bug: 138630479
Test: make -j42 RunSettingsRoboTests
Change-Id: I6cc8da508f6ab142142ca8c28460125bad93925b
This commit is contained in:
hughchen
2019-07-31 06:14:54 +08:00
parent 08d0041259
commit d6ec2ac7be
3 changed files with 142 additions and 20 deletions

View File

@@ -16,12 +16,15 @@
package com.android.settings.connecteddevice.usb;
import static android.hardware.usb.UsbPortStatus.DATA_ROLE_DEVICE;
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SINK;
import static android.net.ConnectivityManager.TETHERING_USB;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -29,6 +32,8 @@ import static org.mockito.Mockito.when;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import androidx.preference.PreferenceScreen;
import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.Before;
@@ -52,7 +57,7 @@ public class UsbDefaultFragmentTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mFragment = new UsbDefaultFragment();
mFragment = new TestFragment();
mFragment.mUsbBackend = mUsbBackend;
mFragment.mConnectivityManager = mConnectivityManager;
}
@@ -156,4 +161,77 @@ public class UsbDefaultFragmentTest {
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
}
@Test
public void onPause_receivedRndis_shouldSetRndis() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
mFragment.onPause();
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_RNDIS);
}
@Test
public void onPause_receivedNone_shouldSetNone() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
mFragment.onPause();
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
}
@Test
public void onPause_receivedMtp_shouldSetMtp() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
UsbManager.FUNCTION_MTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
mFragment.onPause();
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MTP);
}
@Test
public void onPause_receivedPtp_shouldSetPtp() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
UsbManager.FUNCTION_PTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
mFragment.onPause();
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_PTP);
}
@Test
public void onPause_receivedMidi_shouldSetMidi() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
UsbManager.FUNCTION_MIDI, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
mFragment.onPause();
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
}
public static class TestFragment extends UsbDefaultFragment {
public final PreferenceScreen mScreen;
public TestFragment() {
mScreen = mock(PreferenceScreen.class);
}
@Override
public PreferenceScreen getPreferenceScreen() {
return mScreen;
}
}
}