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

Commit 0091ae61 authored by Hugh Chen's avatar Hugh Chen
Browse files

Refactor Usb settings

1. Rename ShouldIgnoreClickEvent() to isClickEventIgnored().
2. Use TetheringManager instead of ConnectivityManager.

Bug: 175651578
Test: make -j42 RunSettingsRoboTests
Change-Id: I37c49694257b7575550b5a905e293b5d056ba1bf
parent 73fe8207
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbPort;
import android.hardware.usb.UsbPortStatus;
import android.net.ConnectivityManager;
import android.net.TetheringManager;
import android.os.UserHandle;
import android.os.UserManager;

@@ -74,9 +74,8 @@ public class UsbBackend {
        mIsAdminUser = userManager.isAdminUser();

        mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI);
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        mTetheringSupported = cm.isTetheringSupported();
        final TetheringManager tm = context.getSystemService(TetheringManager.class);
        mTetheringSupported = tm.isTetheringSupported();

        updatePorts();
    }
+17 −11
Original line number Diff line number Diff line
@@ -16,14 +16,17 @@

package com.android.settings.connecteddevice.usb;

import static android.net.ConnectivityManager.TETHERING_USB;
import static android.net.TetheringManager.TETHERING_USB;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.TetheringManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
@@ -43,10 +46,13 @@ import java.util.List;
 * Provides options for selecting the default USB mode.
 */
public class UsbDefaultFragment extends RadioButtonPickerFragment {

    private static final String TAG = "UsbDefaultFragment";

    @VisibleForTesting
    UsbBackend mUsbBackend;
    @VisibleForTesting
    ConnectivityManager mConnectivityManager;
    TetheringManager mTetheringManager;
    @VisibleForTesting
    OnStartTetheringCallback mOnStartTetheringCallback = new OnStartTetheringCallback();
    @VisibleForTesting
@@ -57,6 +63,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
    boolean mIsStartTethering = false;

    private UsbConnectionBroadcastReceiver mUsbReceiver;
    private Handler mHandler = new Handler();

    @VisibleForTesting
    UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
@@ -71,7 +78,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
    public void onAttach(Context context) {
        super.onAttach(context);
        mUsbBackend = new UsbBackend(context);
        mConnectivityManager = context.getSystemService(ConnectivityManager.class);
        mTetheringManager = context.getSystemService(TetheringManager.class);
        mUsbReceiver = new UsbConnectionBroadcastReceiver(context, mUsbConnectionListener,
                mUsbBackend);
        getSettingsLifecycle().addObserver(mUsbReceiver);
@@ -138,9 +145,9 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
        if (!Utils.isMonkeyRunning()) {
            if (functions == UsbManager.FUNCTION_RNDIS) {
                // We need to have entitlement check for usb tethering, so use API in
                // ConnectivityManager.
                // TetheringManager.
                mIsStartTethering = true;
                mConnectivityManager.startTethering(TETHERING_USB, true /* showProvisioningUi */,
                mTetheringManager.startTethering(TETHERING_USB, new HandlerExecutor(mHandler),
                        mOnStartTetheringCallback);
            } else {
                mIsStartTethering = false;
@@ -159,20 +166,19 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
    }

    @VisibleForTesting
    final class OnStartTetheringCallback extends
            ConnectivityManager.OnStartTetheringCallback {
    final class OnStartTetheringCallback implements
            TetheringManager.StartTetheringCallback {

        @Override
        public void onTetheringStarted() {
            super.onTetheringStarted();
            // Set default usb functions again to make internal data persistent
            mCurrentFunctions = UsbManager.FUNCTION_RNDIS;
            mUsbBackend.setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
        }

        @Override
        public void onTetheringFailed() {
            super.onTetheringFailed();
        public void onTetheringFailed(int error) {
            Log.w(TAG, "onTetheringFailed() error : " + error);
            mUsbBackend.setDefaultUsbFunctions(mPreviousFunctions);
            updateCandidates();
        }
+14 −12
Original line number Diff line number Diff line
@@ -17,11 +17,12 @@
package com.android.settings.connecteddevice.usb;

import static android.hardware.usb.UsbPortStatus.DATA_ROLE_DEVICE;
import static android.net.ConnectivityManager.TETHERING_USB;

import android.content.Context;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.TetheringManager;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
@@ -55,7 +56,8 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
    }

    private PreferenceCategory mProfilesContainer;
    private ConnectivityManager mConnectivityManager;
    private TetheringManager mTetheringManager;
    private Handler mHandler = new Handler();
    @VisibleForTesting
    OnStartTetheringCallback mOnStartTetheringCallback;
    @VisibleForTesting
@@ -64,7 +66,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
    public UsbDetailsFunctionsController(Context context, UsbDetailsFragment fragment,
            UsbBackend backend) {
        super(context, fragment, backend);
        mConnectivityManager = context.getSystemService(ConnectivityManager.class);
        mTetheringManager = context.getSystemService(TetheringManager.class);
        mOnStartTetheringCallback = new OnStartTetheringCallback();
        mPreviousFunction = mUsbBackend.getCurrentFunctions();
    }
@@ -130,7 +132,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
                    + UsbManager.usbFunctionsToString(previousFunction));
        }
        if (function != previousFunction && !Utils.isMonkeyRunning()
                && !shouldIgnoreClickEvent(function, previousFunction)) {
                && !isClickEventIgnored(function, previousFunction)) {
            mPreviousFunction = previousFunction;

            //Update the UI in advance to make it looks smooth
@@ -144,8 +146,9 @@ public class UsbDetailsFunctionsController extends UsbDetailsController

            if (function == UsbManager.FUNCTION_RNDIS) {
                // We need to have entitlement check for usb tethering, so use API in
                // ConnectivityManager.
                mConnectivityManager.startTethering(TETHERING_USB, true /* showProvisioningUi */,
                // TetheringManager.
                mTetheringManager.startTethering(
                        TetheringManager.TETHERING_USB, new HandlerExecutor(mHandler),
                        mOnStartTetheringCallback);
            } else {
                mUsbBackend.setCurrentFunctions(function);
@@ -153,7 +156,7 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
        }
    }

    private boolean shouldIgnoreClickEvent(long function, long previousFunction) {
    private boolean isClickEventIgnored(long function, long previousFunction) {
        return isAccessoryMode(previousFunction) && function == UsbManager.FUNCTION_MTP;
    }

@@ -172,12 +175,11 @@ public class UsbDetailsFunctionsController extends UsbDetailsController
    }

    @VisibleForTesting
    final class OnStartTetheringCallback extends
            ConnectivityManager.OnStartTetheringCallback {
    final class OnStartTetheringCallback implements TetheringManager.StartTetheringCallback {

        @Override
        public void onTetheringFailed() {
            super.onTetheringFailed();
        public void onTetheringFailed(int error) {
            Log.w(TAG, "onTetheringFailed() error : " + error);
            mUsbBackend.setCurrentFunctions(mPreviousFunction);
        }
    }
+4 −4
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.hardware.usb.UsbPort;
import android.hardware.usb.UsbPortStatus;
import android.net.ConnectivityManager;
import android.net.TetheringManager;
import android.os.UserHandle;
import android.os.UserManager;

@@ -57,7 +57,7 @@ public class UsbBackendTest {
    @Mock
    private UserManager mUserManager;
    @Mock
    private ConnectivityManager mConnectivityManager;
    private TetheringManager mTetheringManager;
    @Mock
    private UsbPort mUsbPort;
    @Mock
@@ -69,8 +69,8 @@ public class UsbBackendTest {
        when(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI))
                .thenReturn(true);
        when((Object) mContext.getSystemService(UsbManager.class)).thenReturn(mUsbManager);
        when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
                .thenReturn(mConnectivityManager);
        when((Object) mContext.getSystemService(
                TetheringManager.class)).thenReturn(mTetheringManager);
        when(mUsbManager.getPorts()).thenReturn(Collections.singletonList(mUsbPort));
        when(mUsbPortStatus.isConnected()).thenReturn(true);
        when(mUsbPort.getStatus()).thenReturn(mUsbPortStatus);
+8 −6
Original line number Diff line number Diff line
@@ -18,11 +18,12 @@ package com.android.settings.connecteddevice.usb;

import static android.hardware.usb.UsbPortStatus.DATA_ROLE_DEVICE;
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SINK;
import static android.net.ConnectivityManager.TETHERING_USB;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -30,7 +31,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.TetheringManager;

import androidx.preference.PreferenceScreen;

@@ -50,7 +51,7 @@ public class UsbDefaultFragmentTest {
    @Mock
    private UsbBackend mUsbBackend;
    @Mock
    private ConnectivityManager mConnectivityManager;
    private TetheringManager mTetheringManager;

    private UsbDefaultFragment mFragment;

@@ -59,7 +60,7 @@ public class UsbDefaultFragmentTest {
        MockitoAnnotations.initMocks(this);
        mFragment = new TestFragment();
        mFragment.mUsbBackend = mUsbBackend;
        mFragment.mConnectivityManager = mConnectivityManager;
        mFragment.mTetheringManager = mTetheringManager;
    }

    @Test
@@ -136,8 +137,9 @@ public class UsbDefaultFragmentTest {

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

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