DO NOT MERGE - Merge RQ1A.201205.011

Bug: 172690556
Merged-In: I3f7d41c196569c0cb61e89cfc270b957e2f0add5
Change-Id: Id2d9c4f56beae280e6299b6695185577a1521345
This commit is contained in:
Xin Li
2020-12-06 19:59:06 -08:00
4 changed files with 98 additions and 3 deletions

View File

@@ -50,6 +50,7 @@ public class UsbBackend {
private final boolean mTetheringRestrictedBySystem; private final boolean mTetheringRestrictedBySystem;
private final boolean mMidiSupported; private final boolean mMidiSupported;
private final boolean mTetheringSupported; private final boolean mTetheringSupported;
private final boolean mIsAdminUser;
private UsbManager mUsbManager; private UsbManager mUsbManager;
@@ -70,6 +71,7 @@ public class UsbBackend {
mFileTransferRestrictedBySystem = isUsbFileTransferRestrictedBySystem(userManager); mFileTransferRestrictedBySystem = isUsbFileTransferRestrictedBySystem(userManager);
mTetheringRestricted = isUsbTetheringRestricted(userManager); mTetheringRestricted = isUsbTetheringRestricted(userManager);
mTetheringRestrictedBySystem = isUsbTetheringRestrictedBySystem(userManager); mTetheringRestrictedBySystem = isUsbTetheringRestrictedBySystem(userManager);
mIsAdminUser = userManager.isAdminUser();
mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI);
ConnectivityManager cm = ConnectivityManager cm =
@@ -100,7 +102,8 @@ public class UsbBackend {
|| (!mTetheringSupported && (functions & UsbManager.FUNCTION_RNDIS) != 0)) { || (!mTetheringSupported && (functions & UsbManager.FUNCTION_RNDIS) != 0)) {
return false; return false;
} }
return !(areFunctionDisallowed(functions) || areFunctionsDisallowedBySystem(functions)); return !(areFunctionDisallowed(functions) || areFunctionsDisallowedBySystem(functions)
|| areFunctionsDisallowedByNonAdminUser(functions));
} }
public int getPowerRole() { public int getPowerRole() {
@@ -207,6 +210,11 @@ public class UsbBackend {
|| (mTetheringRestrictedBySystem && ((functions & UsbManager.FUNCTION_RNDIS) != 0)); || (mTetheringRestrictedBySystem && ((functions & UsbManager.FUNCTION_RNDIS) != 0));
} }
@VisibleForTesting
boolean areFunctionsDisallowedByNonAdminUser(long functions) {
return !mIsAdminUser && (functions & UsbManager.FUNCTION_RNDIS) != 0;
}
private void updatePorts() { private void updatePorts() {
mPort = null; mPort = null;
mPortStatus = null; mPortStatus = null;

View File

@@ -365,9 +365,15 @@ public class EnabledNetworkModePreferenceController extends
} }
private int getPreferredNetworkMode() { private int getPreferredNetworkMode() {
return Settings.Global.getInt(mContext.getContentResolver(), int networkMode = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + mSubId, Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
TelephonyManager.DEFAULT_PREFERRED_NETWORK_MODE); 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() { 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() { private void setPreferenceValueAndSummary() {
setPreferenceValueAndSummary(getPreferredNetworkMode()); setPreferenceValueAndSummary(getPreferredNetworkMode());
} }

View File

@@ -181,4 +181,24 @@ public class UsbBackendTest {
assertThat(usbBackend.areFunctionsSupported(UsbManager.FUNCTION_MTP)).isTrue(); 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();
}
} }

View File

@@ -221,6 +221,28 @@ public class EnabledNetworkModePreferenceControllerTest {
TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA)); 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 @Test
public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() { public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() {
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA); 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) { } else if (networkMode == TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA) {
mockPhoneType(TelephonyManager.PHONE_TYPE_GSM); mockPhoneType(TelephonyManager.PHONE_TYPE_GSM);
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true); 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) { private void mockPhoneType(int phoneType) {
doReturn(TelephonyManager.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType(); doReturn(phoneType).when(mTelephonyManager).getPhoneType();
} }
} }