Loading src/com/android/settings/connecteddevice/usb/UsbBackend.java +9 −1 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public class UsbBackend { private final boolean mTetheringRestrictedBySystem; private final boolean mMidiSupported; private final boolean mTetheringSupported; private final boolean mIsAdminUser; private UsbManager mUsbManager; Loading @@ -70,6 +71,7 @@ public class UsbBackend { mFileTransferRestrictedBySystem = isUsbFileTransferRestrictedBySystem(userManager); mTetheringRestricted = isUsbTetheringRestricted(userManager); mTetheringRestrictedBySystem = isUsbTetheringRestrictedBySystem(userManager); mIsAdminUser = userManager.isAdminUser(); mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); ConnectivityManager cm = Loading Loading @@ -100,7 +102,8 @@ public class UsbBackend { || (!mTetheringSupported && (functions & UsbManager.FUNCTION_RNDIS) != 0)) { return false; } return !(areFunctionDisallowed(functions) || areFunctionsDisallowedBySystem(functions)); return !(areFunctionDisallowed(functions) || areFunctionsDisallowedBySystem(functions) || areFunctionsDisallowedByNonAdminUser(functions)); } public int getPowerRole() { Loading Loading @@ -207,6 +210,11 @@ public class UsbBackend { || (mTetheringRestrictedBySystem && ((functions & UsbManager.FUNCTION_RNDIS) != 0)); } @VisibleForTesting boolean areFunctionsDisallowedByNonAdminUser(long functions) { return !mIsAdminUser && (functions & UsbManager.FUNCTION_RNDIS) != 0; } private void updatePorts() { mPort = null; mPortStatus = null; Loading tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -181,4 +181,24 @@ public class UsbBackendTest { assertThat(usbBackend.areFunctionsSupported(UsbManager.FUNCTION_MTP)).isTrue(); } @Test public void areFunctionsDisallowedByNonAdminUser_isAdminUser_returnFalse() { when(mUserManager.isAdminUser()).thenReturn(true); final UsbBackend usbBackend = new UsbBackend(mContext, mUserManager); assertThat(usbBackend.areFunctionsDisallowedByNonAdminUser( UsbManager.FUNCTION_RNDIS)).isFalse(); } @Test public void areFunctionsDisallowedByNonAdminUser_isNotAdminUser_returnTrue() { when(mUserManager.isAdminUser()).thenReturn(false); final UsbBackend usbBackend = new UsbBackend(mContext, mUserManager); assertThat(usbBackend.areFunctionsDisallowedByNonAdminUser( UsbManager.FUNCTION_RNDIS)).isTrue(); } } Loading
src/com/android/settings/connecteddevice/usb/UsbBackend.java +9 −1 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public class UsbBackend { private final boolean mTetheringRestrictedBySystem; private final boolean mMidiSupported; private final boolean mTetheringSupported; private final boolean mIsAdminUser; private UsbManager mUsbManager; Loading @@ -70,6 +71,7 @@ public class UsbBackend { mFileTransferRestrictedBySystem = isUsbFileTransferRestrictedBySystem(userManager); mTetheringRestricted = isUsbTetheringRestricted(userManager); mTetheringRestrictedBySystem = isUsbTetheringRestrictedBySystem(userManager); mIsAdminUser = userManager.isAdminUser(); mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); ConnectivityManager cm = Loading Loading @@ -100,7 +102,8 @@ public class UsbBackend { || (!mTetheringSupported && (functions & UsbManager.FUNCTION_RNDIS) != 0)) { return false; } return !(areFunctionDisallowed(functions) || areFunctionsDisallowedBySystem(functions)); return !(areFunctionDisallowed(functions) || areFunctionsDisallowedBySystem(functions) || areFunctionsDisallowedByNonAdminUser(functions)); } public int getPowerRole() { Loading Loading @@ -207,6 +210,11 @@ public class UsbBackend { || (mTetheringRestrictedBySystem && ((functions & UsbManager.FUNCTION_RNDIS) != 0)); } @VisibleForTesting boolean areFunctionsDisallowedByNonAdminUser(long functions) { return !mIsAdminUser && (functions & UsbManager.FUNCTION_RNDIS) != 0; } private void updatePorts() { mPort = null; mPortStatus = null; Loading
tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -181,4 +181,24 @@ public class UsbBackendTest { assertThat(usbBackend.areFunctionsSupported(UsbManager.FUNCTION_MTP)).isTrue(); } @Test public void areFunctionsDisallowedByNonAdminUser_isAdminUser_returnFalse() { when(mUserManager.isAdminUser()).thenReturn(true); final UsbBackend usbBackend = new UsbBackend(mContext, mUserManager); assertThat(usbBackend.areFunctionsDisallowedByNonAdminUser( UsbManager.FUNCTION_RNDIS)).isFalse(); } @Test public void areFunctionsDisallowedByNonAdminUser_isNotAdminUser_returnTrue() { when(mUserManager.isAdminUser()).thenReturn(false); final UsbBackend usbBackend = new UsbBackend(mContext, mUserManager); assertThat(usbBackend.areFunctionsDisallowedByNonAdminUser( UsbManager.FUNCTION_RNDIS)).isTrue(); } }