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

Commit 7cbff107 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix it will auto switch back to "No data transfer" after selecting "USB...

Merge "Fix it will auto switch back to "No data transfer" after selecting "USB Tethering"" into sc-dev am: b4dccf9b

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

Change-Id: I706d0ad598acd587e616903a9242c10c29078ab8
parents a1e610b6 b4dccf9b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -75,6 +75,9 @@ public class UsbConnectionBroadcastReceiver extends BroadcastReceiver implements
            if (intent.getExtras().getBoolean(UsbManager.USB_FUNCTION_ACCESSORY)) {
                functions |= UsbManager.FUNCTION_ACCESSORY;
            }
            if (intent.getExtras().getBoolean(UsbManager.USB_FUNCTION_NCM)) {
                functions |= UsbManager.FUNCTION_NCM;
            }
            mFunctions = functions;
            mDataRole = mUsbBackend.getDataRole();
            mPowerRole = mUsbBackend.getPowerRole();
+16 −6
Original line number Diff line number Diff line
@@ -74,8 +74,10 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
                Log.d(TAG, "UsbConnectionListener() connected : " + connected + ", functions : "
                        + functions + ", defaultFunctions : " + defaultFunctions
                        + ", mIsStartTethering : " + mIsStartTethering);
                if (connected && !mIsConnected && defaultFunctions == UsbManager.FUNCTION_RNDIS
                if (connected && !mIsConnected && (defaultFunctions == UsbManager.FUNCTION_RNDIS
                        || defaultFunctions == UsbManager.FUNCTION_NCM)
                        && !mIsStartTethering) {
                    mCurrentFunctions = defaultFunctions;
                    startTethering();
                }

@@ -150,7 +152,11 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {

    @Override
    protected String getDefaultKey() {
        return UsbBackend.usbFunctionsToString(mUsbBackend.getDefaultUsbFunctions());
        long defaultUsbFunctions = mUsbBackend.getDefaultUsbFunctions();
        // Because we didn't have an option for NCM, so make FUNCTION_NCM corresponding to
        // FUNCTION_RNDIS for initializing the UI.
        return UsbBackend.usbFunctionsToString(defaultUsbFunctions == UsbManager.FUNCTION_NCM
                ? UsbManager.FUNCTION_RNDIS : defaultUsbFunctions);
    }

    @Override
@@ -158,9 +164,10 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
        long functions = UsbBackend.usbFunctionsFromString(key);
        mPreviousFunctions = mUsbBackend.getCurrentFunctions();
        if (!Utils.isMonkeyRunning()) {
            if (functions == UsbManager.FUNCTION_RNDIS) {
            if (functions == UsbManager.FUNCTION_RNDIS || functions == UsbManager.FUNCTION_NCM) {
                // We need to have entitlement check for usb tethering, so use API in
                // TetheringManager.
                mCurrentFunctions = functions;
                startTethering();
            } else {
                mIsStartTethering = false;
@@ -193,8 +200,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
        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);
            mUsbBackend.setDefaultUsbFunctions(mCurrentFunctions);
        }

        @Override
@@ -214,9 +220,13 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
                final boolean isSupported = mUsbBackend.areFunctionsSupported(option);
                pref.setEnabled(isSupported);
                if (isSupported) {
                    if (functions == UsbManager.FUNCTION_NCM) {
                        pref.setChecked(UsbManager.FUNCTION_RNDIS == option);
                    } else {
                        pref.setChecked(functions == option);
                    }
                }
            }
        }
    }
}
 No newline at end of file
+3 −1
Original line number Diff line number Diff line
@@ -116,6 +116,8 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
            if (mUsbBackend.areFunctionsSupported(option)) {
                if (isAccessoryMode(functions)) {
                    pref.setChecked(UsbManager.FUNCTION_MTP == option);
                } else if (functions == UsbManager.FUNCTION_NCM) {
                    pref.setChecked(UsbManager.FUNCTION_RNDIS == option);
                } else {
                    pref.setChecked(functions == option);
                }
@@ -148,7 +150,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
                preference.setChecked(true);
            }

            if (function == UsbManager.FUNCTION_RNDIS) {
            if (function == UsbManager.FUNCTION_RNDIS || function == UsbManager.FUNCTION_NCM) {
                // We need to have entitlement check for usb tethering, so use API in
                // TetheringManager.
                mTetheringManager.startTethering(
+14 −0
Original line number Diff line number Diff line
@@ -98,6 +98,20 @@ public class UsbConnectionBroadcastReceiverTest {
                POWER_ROLE_NONE, DATA_ROLE_NONE);
    }

    @Test
    public void onReceive_usbConnectedNcmEnabled_invokesCallback() {
        Intent intent = new Intent();
        intent.setAction(UsbManager.ACTION_USB_STATE);
        intent.putExtra(UsbManager.USB_CONNECTED, true);
        intent.putExtra(UsbManager.USB_FUNCTION_NCM, true);
        intent.putExtra(UsbManager.USB_DATA_UNLOCKED, true);

        mReceiver.onReceive(mContext, intent);

        verify(mListener).onUsbConnectionChanged(/* connected */ true, UsbManager.FUNCTION_NCM,
                POWER_ROLE_NONE, DATA_ROLE_NONE);
    }

    @Test
    public void onReceive_usbPortStatus_invokeCallback() {
        final Intent intent = new Intent();
+59 −2
Original line number Diff line number Diff line
@@ -103,6 +103,14 @@ public class UsbDefaultFragmentTest {
                .isEqualTo(UsbBackend.usbFunctionsToString(UsbManager.FUNCTION_MIDI));
    }

    @Test
    public void getDefaultKey_isNcm_returnsRndis() {
        when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_NCM);

        assertThat(mFragment.getDefaultKey())
                .isEqualTo(UsbBackend.usbFunctionsToString(UsbManager.FUNCTION_RNDIS));
    }

    @Test
    public void setDefaultKey_isNone_shouldSetNone() {
        mFragment.setDefaultKey(UsbBackend.usbFunctionsToString(UsbManager.FUNCTION_NONE));
@@ -149,6 +157,19 @@ public class UsbDefaultFragmentTest {
                UsbManager.FUNCTION_MTP);
    }

    @Test
    public void setDefaultKey_functionNcm_invokesStartTethering() {
        doReturn(UsbManager.FUNCTION_MTP).when(mUsbBackend).getCurrentFunctions();

        mFragment.setDefaultKey(UsbBackend.usbFunctionsToString(UsbManager.FUNCTION_NCM));

        verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB),
                any(),
                eq(mFragment.mOnStartTetheringCallback));
        assertThat(mFragment.mPreviousFunctions).isEqualTo(
                UsbManager.FUNCTION_MTP);
    }

    @Test
    public void setDefaultKey_functionOther_setCurrentFunctionInvoked() {
        doReturn(UsbManager.FUNCTION_MTP).when(mUsbBackend).getCurrentFunctions();
@@ -161,14 +182,24 @@ public class UsbDefaultFragmentTest {
    }

    @Test
    public void onTetheringStarted_setDefaultUsbFunctions() {
        mFragment.mPreviousFunctions = UsbManager.FUNCTION_PTP;
    public void onTetheringStarted_currentFunctionsIsRndis_setsRndisAsDefaultUsbFunctions() {
        mFragment.mCurrentFunctions = UsbManager.FUNCTION_RNDIS;

        mFragment.mOnStartTetheringCallback.onTetheringStarted();

        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
    }

    @Test
    public void onTetheringStarted_currentFunctionsIsNcm_setsNcmAsDefaultUsbFunctions() {
        mFragment.mCurrentFunctions = UsbManager.FUNCTION_NCM;

        mFragment.mOnStartTetheringCallback.onTetheringStarted();

        verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NCM);
    }


    @Test
    public void onPause_receivedRndis_shouldSetRndis() {
        mFragment.mIsStartTethering = true;
@@ -229,6 +260,18 @@ public class UsbDefaultFragmentTest {
        assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
    }

    @Test
    public void onPause_receivedNcm_setsNcm() {
        mFragment.mIsStartTethering = true;
        mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ true,
                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);

        mFragment.onPause();

        verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_NCM);
        assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NCM);
    }

    @Test
    public void usbIsPluginAndUsbTetheringIsOn_startTetheringIsInvoked() {
        when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
@@ -243,6 +286,20 @@ public class UsbDefaultFragmentTest {
                eq(mFragment.mOnStartTetheringCallback));
    }

    @Test
    public void usbIsPluginAndUsbTetheringIsOn_receivedNcm_startsTethering() {
        when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_NCM);

        mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ false,
                UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
        mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ true,
                UsbManager.FUNCTION_NCM, 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);
Loading