From b3640019f670167facf07bcf47bd1abf621e5d41 Mon Sep 17 00:00:00 2001 From: Hugh Chen Date: Mon, 28 Sep 2020 11:20:31 +0800 Subject: [PATCH 1/2] 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) (cherry picked from commit a50f020c85371418c9207d35142b3ffdf08cbaf7) --- .../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(); + } } From 78b33b3824235784dfbbc2dcd2041e6d5f10b2be Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Tue, 20 Oct 2020 18:37:39 +0800 Subject: [PATCH 2/2] To fix bug, summary is wrong if nr_enabled_bool=false The carrier config nr_enabled_bool is false, preferred network mode should hide 5G UI. This bug is that the summary show 5G item when nr_enabled_bool is false. Solution: if nr_enabled_bool is false, it checks capability and then removes 5G capability of network mode. Bug: 170460943 Test: make RunSettingsRoboTests ROBOTEST_FILTER=\ EnabledNetworkModePreferenceControllerTest (PASS) Change-Id: I3f7d41c196569c0cb61e89cfc270b957e2f0add5 (cherry picked from commit 706036e5b320d061bf2ce1dfc989a6dec1d92bb9) --- ...nabledNetworkModePreferenceController.java | 42 ++++++++++++++++++- ...edNetworkModePreferenceControllerTest.java | 29 ++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java index 63273759ba1..fd585a151d2 100644 --- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java @@ -365,9 +365,15 @@ public class EnabledNetworkModePreferenceController extends } private int getPreferredNetworkMode() { - return Settings.Global.getInt(mContext.getContentResolver(), + int networkMode = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.PREFERRED_NETWORK_MODE + mSubId, TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE); + if (!showNrList()) { + Log.d(LOG_TAG, "Network mode :" + networkMode + " reduce NR"); + networkMode = reduceNrToLteNetworkType(networkMode); + } + Log.d(LOG_TAG, "getPreferredNetworkMode: " + networkMode); + return networkMode; } private EnabledNetworks getEnabledNetworkType() { @@ -635,6 +641,40 @@ public class EnabledNetworkModePreferenceController extends } } + /** + * Transform NR5G network mode to LTE network mode. + * + * @param networkType an 5G network mode. + * @return the corresponding network mode without 5G. + */ + private static int reduceNrToLteNetworkType(int networkType) { + switch(networkType) { + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE: + return TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO: + return TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA: + return TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA: + return TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA: + return TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA: + return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM: + return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA: + return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA: + return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA; + case TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: + return TelephonyManagerConstants + .NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA; + default: + return networkType; // do nothing + } + } + private void setPreferenceValueAndSummary() { setPreferenceValueAndSummary(getPreferredNetworkMode()); } diff --git a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java index e38bd62dc66..e519b9ad264 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java @@ -221,6 +221,28 @@ public class EnabledNetworkModePreferenceControllerTest { TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA)); } + @Test + public void updateState_NrEnableBoolFalse_5gOptionHidden() { + mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA); + mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA); + mPersistableBundle.putBoolean(CarrierConfigManager.KEY_NR_ENABLED_BOOL, false); + + mController.init(mLifecycle, SUB_ID); + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID, + TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA); + + mController.updateState(mPreference); + + assertThat(mPreference.getValue()).isEqualTo( + String.valueOf( + TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA)); + assertThat(mPreference.getEntryValues()) + .asList() + .doesNotContain( + String.valueOf(TelephonyManager.NETWORK_MODE_NR_LTE_GSM_WCDMA)); + } + @Test public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() { mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA); @@ -393,6 +415,11 @@ public class EnabledNetworkModePreferenceControllerTest { } else if (networkMode == TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA) { mockPhoneType(TelephonyManager.PHONE_TYPE_GSM); mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true); + } else if (networkMode + == TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA) { + mockPhoneType(TelephonyManager.PHONE_TYPE_GSM); + mPersistableBundle.putBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL, true); + mPersistableBundle.putBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL, true); } } @@ -407,6 +434,6 @@ public class EnabledNetworkModePreferenceControllerTest { } private void mockPhoneType(int phoneType) { - doReturn(TelephonyManager.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType(); + doReturn(phoneType).when(mTelephonyManager).getPhoneType(); } }