Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96324ec3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix "USB tethering" doesn't work after reconnecting USB" into sc-dev am: 2aa8d2b4

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/13769527

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Iec5873050d56edd21763a467766a80e844ba7dfe
parents 28b36fcc 2aa8d2b4
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -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();
@@ -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);
+26 −0
Original line number Diff line number Diff line
@@ -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;