From a50f020c85371418c9207d35142b3ffdf08cbaf7 Mon Sep 17 00:00:00 2001 From: Hugh Chen Date: Mon, 28 Sep 2020 11:20:31 +0800 Subject: [PATCH] Hide tethering option when in a guest account - Before this CL, users can share their mobile data through enabling tethering in the USB menu when in a guest account. It will cause main users to spend their money unexpectedly. This CL will hide the tethering option on the USB menu when in the guest account. - Add test cases. Bug: 166125765 Test: 1. make -j42 RunSettingsRoboTests. 2. Switch to a guest account to verify whether the tethering option is hiding. Change-Id: I7523b3f3c3a1372bb128a58a6a7fac973d27cfbe Merged-In: I7523b3f3c3a1372bb128a58a6a7fac973d27cfbe (cherry picked from commit bde627b263baf3de10e096868235edde8e740eab) --- .../connecteddevice/usb/UsbBackend.java | 10 +++++++++- .../connecteddevice/usb/UsbBackendTest.java | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/connecteddevice/usb/UsbBackend.java b/src/com/android/settings/connecteddevice/usb/UsbBackend.java index 556f76d5531..4773aca814c 100644 --- a/src/com/android/settings/connecteddevice/usb/UsbBackend.java +++ b/src/com/android/settings/connecteddevice/usb/UsbBackend.java @@ -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; @@ -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 = @@ -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() { @@ -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; diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java index 4e5897da3ed..b816a187bd4 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java @@ -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(); + } }