Loading src/com/android/settings/connecteddevice/usb/UsbBackend.java +3 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } Loading src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java +17 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -57,6 +63,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { boolean mIsStartTethering = false; private UsbConnectionBroadcastReceiver mUsbReceiver; private Handler mHandler = new Handler(); @VisibleForTesting UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener = Loading @@ -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); Loading Loading @@ -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; Loading @@ -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(); } Loading src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java +14 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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(); } Loading Loading @@ -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 Loading @@ -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); Loading @@ -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; } Loading @@ -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); } } Loading tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -57,7 +57,7 @@ public class UsbBackendTest { @Mock private UserManager mUserManager; @Mock private ConnectivityManager mConnectivityManager; private TetheringManager mTetheringManager; @Mock private UsbPort mUsbPort; @Mock Loading @@ -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); Loading tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java +8 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -50,7 +51,7 @@ public class UsbDefaultFragmentTest { @Mock private UsbBackend mUsbBackend; @Mock private ConnectivityManager mConnectivityManager; private TetheringManager mTetheringManager; private UsbDefaultFragment mFragment; Loading @@ -59,7 +60,7 @@ public class UsbDefaultFragmentTest { MockitoAnnotations.initMocks(this); mFragment = new TestFragment(); mFragment.mUsbBackend = mUsbBackend; mFragment.mConnectivityManager = mConnectivityManager; mFragment.mTetheringManager = mTetheringManager; } @Test Loading Loading @@ -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 Loading
src/com/android/settings/connecteddevice/usb/UsbBackend.java +3 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } Loading
src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java +17 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -57,6 +63,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment { boolean mIsStartTethering = false; private UsbConnectionBroadcastReceiver mUsbReceiver; private Handler mHandler = new Handler(); @VisibleForTesting UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener = Loading @@ -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); Loading Loading @@ -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; Loading @@ -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(); } Loading
src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java +14 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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(); } Loading Loading @@ -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 Loading @@ -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); Loading @@ -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; } Loading @@ -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); } } Loading
tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -57,7 +57,7 @@ public class UsbBackendTest { @Mock private UserManager mUserManager; @Mock private ConnectivityManager mConnectivityManager; private TetheringManager mTetheringManager; @Mock private UsbPort mUsbPort; @Mock Loading @@ -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); Loading
tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java +8 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -50,7 +51,7 @@ public class UsbDefaultFragmentTest { @Mock private UsbBackend mUsbBackend; @Mock private ConnectivityManager mConnectivityManager; private TetheringManager mTetheringManager; private UsbDefaultFragment mFragment; Loading @@ -59,7 +60,7 @@ public class UsbDefaultFragmentTest { MockitoAnnotations.initMocks(this); mFragment = new TestFragment(); mFragment.mUsbBackend = mUsbBackend; mFragment.mConnectivityManager = mConnectivityManager; mFragment.mTetheringManager = mTetheringManager; } @Test Loading Loading @@ -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