Fix usb tethering switch back to none after off/on the screen
This CL adds conditions to check whether usb is connected or not. If usb is not connected or tethering is not started don't update the state. Bug: 157709648 Test: make RunSettingsRoboTests -j56 Change-Id: Ifbf5900923419d6abf35834b196aab12601076e4
This commit is contained in:
@@ -63,7 +63,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
boolean mIsStartTethering = false;
|
boolean mIsStartTethering = false;
|
||||||
|
|
||||||
private UsbConnectionBroadcastReceiver mUsbReceiver;
|
private UsbConnectionBroadcastReceiver mUsbReceiver;
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler;
|
||||||
private boolean mIsConnected = false;
|
private boolean mIsConnected = false;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -71,14 +71,17 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
(connected, functions, powerRole, dataRole) -> {
|
(connected, functions, powerRole, dataRole) -> {
|
||||||
final long defaultFunctions = mUsbBackend.getDefaultUsbFunctions();
|
final long defaultFunctions = mUsbBackend.getDefaultUsbFunctions();
|
||||||
Log.d(TAG, "UsbConnectionListener() connected : " + connected + ", functions : "
|
Log.d(TAG, "UsbConnectionListener() connected : " + connected + ", functions : "
|
||||||
+ functions + ", defaultFunctions : " + defaultFunctions);
|
+ functions + ", defaultFunctions : " + defaultFunctions
|
||||||
if (connected && !mIsConnected && defaultFunctions == UsbManager.FUNCTION_RNDIS) {
|
+ ", mIsStartTethering : " + mIsStartTethering);
|
||||||
|
if (connected && !mIsConnected && defaultFunctions == UsbManager.FUNCTION_RNDIS
|
||||||
|
&& !mIsStartTethering) {
|
||||||
startTethering();
|
startTethering();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mIsStartTethering) {
|
if (mIsStartTethering && connected) {
|
||||||
mCurrentFunctions = functions;
|
mCurrentFunctions = functions;
|
||||||
refresh(functions);
|
refresh(functions);
|
||||||
|
mUsbBackend.setDefaultUsbFunctions(functions);
|
||||||
mIsStartTethering = false;
|
mIsStartTethering = false;
|
||||||
}
|
}
|
||||||
mIsConnected = connected;
|
mIsConnected = connected;
|
||||||
@@ -91,6 +94,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
mTetheringManager = context.getSystemService(TetheringManager.class);
|
mTetheringManager = context.getSystemService(TetheringManager.class);
|
||||||
mUsbReceiver = new UsbConnectionBroadcastReceiver(context, mUsbConnectionListener,
|
mUsbReceiver = new UsbConnectionBroadcastReceiver(context, mUsbConnectionListener,
|
||||||
mUsbBackend);
|
mUsbBackend);
|
||||||
|
mHandler = new Handler(context.getMainLooper());
|
||||||
getSettingsLifecycle().addObserver(mUsbReceiver);
|
getSettingsLifecycle().addObserver(mUsbReceiver);
|
||||||
mCurrentFunctions = mUsbBackend.getDefaultUsbFunctions();
|
mCurrentFunctions = mUsbBackend.getDefaultUsbFunctions();
|
||||||
}
|
}
|
||||||
|
@@ -57,7 +57,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
|
|||||||
|
|
||||||
private PreferenceCategory mProfilesContainer;
|
private PreferenceCategory mProfilesContainer;
|
||||||
private TetheringManager mTetheringManager;
|
private TetheringManager mTetheringManager;
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
OnStartTetheringCallback mOnStartTetheringCallback;
|
OnStartTetheringCallback mOnStartTetheringCallback;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -69,6 +69,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
|
|||||||
mTetheringManager = context.getSystemService(TetheringManager.class);
|
mTetheringManager = context.getSystemService(TetheringManager.class);
|
||||||
mOnStartTetheringCallback = new OnStartTetheringCallback();
|
mOnStartTetheringCallback = new OnStartTetheringCallback();
|
||||||
mPreviousFunction = mUsbBackend.getCurrentFunctions();
|
mPreviousFunction = mUsbBackend.getCurrentFunctions();
|
||||||
|
mHandler = new Handler(context.getMainLooper());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -27,6 +27,7 @@ import static org.mockito.ArgumentMatchers.eq;
|
|||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -172,7 +173,7 @@ public class UsbDefaultFragmentTest {
|
|||||||
|
|
||||||
mFragment.onPause();
|
mFragment.onPause();
|
||||||
|
|
||||||
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
|
verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
|
||||||
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_RNDIS);
|
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_RNDIS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +185,7 @@ public class UsbDefaultFragmentTest {
|
|||||||
|
|
||||||
mFragment.onPause();
|
mFragment.onPause();
|
||||||
|
|
||||||
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
|
verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
|
||||||
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
|
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,7 +197,7 @@ public class UsbDefaultFragmentTest {
|
|||||||
|
|
||||||
mFragment.onPause();
|
mFragment.onPause();
|
||||||
|
|
||||||
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
|
verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
|
||||||
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MTP);
|
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MTP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,7 +209,7 @@ public class UsbDefaultFragmentTest {
|
|||||||
|
|
||||||
mFragment.onPause();
|
mFragment.onPause();
|
||||||
|
|
||||||
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
|
verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
|
||||||
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_PTP);
|
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_PTP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,7 +221,7 @@ public class UsbDefaultFragmentTest {
|
|||||||
|
|
||||||
mFragment.onPause();
|
mFragment.onPause();
|
||||||
|
|
||||||
verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
|
verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
|
||||||
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
|
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,6 +251,21 @@ public class UsbDefaultFragmentTest {
|
|||||||
eq(mFragment.mOnStartTetheringCallback));
|
eq(mFragment.mOnStartTetheringCallback));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void usbIsPluginAndUsbTetheringIsAlreadyStarted_startTetheringIsNotInvoked() {
|
||||||
|
mFragment.mIsStartTethering = true;
|
||||||
|
when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
|
||||||
|
|
||||||
|
mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
|
||||||
|
UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
|
||||||
|
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
|
||||||
|
UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
|
||||||
|
|
||||||
|
verify(mTetheringManager, never()).startTethering(eq(TetheringManager.TETHERING_USB),
|
||||||
|
any(),
|
||||||
|
eq(mFragment.mOnStartTetheringCallback));
|
||||||
|
}
|
||||||
|
|
||||||
public static class TestFragment extends UsbDefaultFragment {
|
public static class TestFragment extends UsbDefaultFragment {
|
||||||
public final PreferenceScreen mScreen;
|
public final PreferenceScreen mScreen;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user