Loading src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java +19 −3 Original line number Diff line number Diff line Loading @@ -64,14 +64,24 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { private UsbConnectionBroadcastReceiver mUsbReceiver; private Handler mHandler = new Handler(); private boolean mIsConnected = false; @VisibleForTesting UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener = (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) { mCurrentFunctions = functions; refresh(functions); mIsStartTethering = false; } mIsConnected = connected; }; @Override Loading Loading @@ -146,9 +156,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { if (functions == UsbManager.FUNCTION_RNDIS) { // We need to have entitlement check for usb tethering, so use API in // TetheringManager. mIsStartTethering = true; mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler), mOnStartTetheringCallback); startTethering(); } else { mIsStartTethering = false; mCurrentFunctions = functions; Loading @@ -159,6 +167,13 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { return true; } private void startTethering() { Log.d(TAG, "startTethering()"); mIsStartTethering = true; mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler), mOnStartTetheringCallback); } @Override public void onPause() { super.onPause(); Loading @@ -171,6 +186,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { @Override public void onTetheringStarted() { Log.d(TAG, "onTetheringStarted()"); // Set default usb functions again to make internal data persistent mCurrentFunctions = UsbManager.FUNCTION_RNDIS; mUsbBackend.setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS); Loading tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -224,6 +224,32 @@ public class UsbDefaultFragmentTest { 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 final PreferenceScreen mScreen; Loading Loading
src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java +19 −3 Original line number Diff line number Diff line Loading @@ -64,14 +64,24 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { private UsbConnectionBroadcastReceiver mUsbReceiver; private Handler mHandler = new Handler(); private boolean mIsConnected = false; @VisibleForTesting UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener = (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) { mCurrentFunctions = functions; refresh(functions); mIsStartTethering = false; } mIsConnected = connected; }; @Override Loading Loading @@ -146,9 +156,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { if (functions == UsbManager.FUNCTION_RNDIS) { // We need to have entitlement check for usb tethering, so use API in // TetheringManager. mIsStartTethering = true; mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler), mOnStartTetheringCallback); startTethering(); } else { mIsStartTethering = false; mCurrentFunctions = functions; Loading @@ -159,6 +167,13 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { return true; } private void startTethering() { Log.d(TAG, "startTethering()"); mIsStartTethering = true; mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler), mOnStartTetheringCallback); } @Override public void onPause() { super.onPause(); Loading @@ -171,6 +186,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { @Override public void onTetheringStarted() { Log.d(TAG, "onTetheringStarted()"); // Set default usb functions again to make internal data persistent mCurrentFunctions = UsbManager.FUNCTION_RNDIS; mUsbBackend.setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS); Loading
tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -224,6 +224,32 @@ public class UsbDefaultFragmentTest { 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 final PreferenceScreen mScreen; Loading