Merge "Fix "USB tethering" doesn't work after reconnecting USB" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2aa8d2b437
@@ -64,14 +64,24 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
|
|
||||||
private UsbConnectionBroadcastReceiver mUsbReceiver;
|
private UsbConnectionBroadcastReceiver mUsbReceiver;
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
|
private boolean mIsConnected = false;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
|
UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
|
||||||
(connected, functions, powerRole, dataRole) -> {
|
(connected, functions, powerRole, dataRole) -> {
|
||||||
|
final long defaultFunctions = mUsbBackend.getDefaultUsbFunctions();
|
||||||
|
Log.d(TAG, "UsbConnectionListener() connected : " + connected + ", functions : "
|
||||||
|
+ functions + ", defaultFunctions : " + defaultFunctions);
|
||||||
|
if (connected && !mIsConnected && defaultFunctions == UsbManager.FUNCTION_RNDIS) {
|
||||||
|
startTethering();
|
||||||
|
}
|
||||||
|
|
||||||
if (mIsStartTethering) {
|
if (mIsStartTethering) {
|
||||||
mCurrentFunctions = functions;
|
mCurrentFunctions = functions;
|
||||||
refresh(functions);
|
refresh(functions);
|
||||||
|
mIsStartTethering = false;
|
||||||
}
|
}
|
||||||
|
mIsConnected = connected;
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -146,9 +156,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
if (functions == UsbManager.FUNCTION_RNDIS) {
|
if (functions == UsbManager.FUNCTION_RNDIS) {
|
||||||
// We need to have entitlement check for usb tethering, so use API in
|
// We need to have entitlement check for usb tethering, so use API in
|
||||||
// TetheringManager.
|
// TetheringManager.
|
||||||
mIsStartTethering = true;
|
startTethering();
|
||||||
mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler),
|
|
||||||
mOnStartTetheringCallback);
|
|
||||||
} else {
|
} else {
|
||||||
mIsStartTethering = false;
|
mIsStartTethering = false;
|
||||||
mCurrentFunctions = functions;
|
mCurrentFunctions = functions;
|
||||||
@@ -159,6 +167,13 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startTethering() {
|
||||||
|
Log.d(TAG, "startTethering()");
|
||||||
|
mIsStartTethering = true;
|
||||||
|
mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler),
|
||||||
|
mOnStartTetheringCallback);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
@@ -171,6 +186,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTetheringStarted() {
|
public void onTetheringStarted() {
|
||||||
|
Log.d(TAG, "onTetheringStarted()");
|
||||||
// Set default usb functions again to make internal data persistent
|
// Set default usb functions again to make internal data persistent
|
||||||
mCurrentFunctions = UsbManager.FUNCTION_RNDIS;
|
mCurrentFunctions = UsbManager.FUNCTION_RNDIS;
|
||||||
mUsbBackend.setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
|
mUsbBackend.setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
|
||||||
|
@@ -224,6 +224,32 @@ public class UsbDefaultFragmentTest {
|
|||||||
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
|
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void usbIsPluginAndUsbTetheringIsOn_startTetheringIsInvoked() {
|
||||||
|
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).startTethering(eq(TetheringManager.TETHERING_USB),
|
||||||
|
any(),
|
||||||
|
eq(mFragment.mOnStartTetheringCallback));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void usbIsNotPluginAndUsbTetheringIsOn_startTetheringIsNotInvoked() {
|
||||||
|
when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
|
||||||
|
|
||||||
|
mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* 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