Loading src/com/android/settings/network/telephony/MobileNetworkUtils.java +47 −13 Original line number Diff line number Diff line Loading @@ -277,8 +277,7 @@ public class MobileNetworkUtils { return true; } if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA && !isTdscdmaSupported(context, telephonyManager)) { if (shouldSpeciallyUpdateGsmCdma(context, subId)) { return true; } } Loading @@ -296,16 +295,15 @@ public class MobileNetworkUtils { if (isGsmBasicOptions(context, subId)) { return true; } final int settingsNetworkMode = android.provider.Settings.Global.getInt( final int networkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (isWorldMode(context, subId)) { if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO || settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { if (networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO || networkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { return true; } else if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA && !MobileNetworkUtils.isTdscdmaSupported(context, subId)) { } else if (shouldSpeciallyUpdateGsmCdma(context, subId)) { return true; } } Loading Loading @@ -362,16 +360,24 @@ public class MobileNetworkUtils { return false; } final int networkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO && isWorldMode(context, subId)) { return false; } if (shouldSpeciallyUpdateGsmCdma(context, subId)) { return false; } if (isGsmBasicOptions(context, subId)) { return true; } final int settingsNetworkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (isWorldMode(context, subId)) { if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { if (networkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { return true; } } Loading Loading @@ -414,7 +420,6 @@ public class MobileNetworkUtils { return false; } /** * Return subId that supported by search. If there are more than one, return first one, * otherwise return {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID} Loading Loading @@ -461,4 +466,33 @@ public class MobileNetworkUtils { } } } /** * This method is migrated from {@link com.android.phone.MobileNetworkSettings} and we should * use it carefully. This code snippet doesn't have very clear meaning however we should * update GSM or CDMA differently based on what it returns. * * 1. For all CDMA settings, make them visible if it return {@code true} * 2. For GSM settings, make them visible if it return {@code true} unless 3 * 3. For network select settings, make it invisible if it return {@code true} */ @VisibleForTesting static boolean shouldSpeciallyUpdateGsmCdma(Context context, int subId) { final int networkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA) { if (!isTdscdmaSupported(context, subId) && isWorldMode(context, subId)) { return true; } } return false; } } tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java +82 −0 Original line number Diff line number Diff line Loading @@ -219,4 +219,86 @@ public class MobileNetworkUtilsTest { assertThat(MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, SUB_ID_1)) .isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_notWorldMode_returnFalse() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, false); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isFalse(); } @Test public void shouldSpeciallyUpdateGsmCdma_supportTdscdma_returnFalse() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isFalse(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaGsm_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaGsmWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaCdmaEvdoGsmWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteCdmaEvdoGsmWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } } Loading
src/com/android/settings/network/telephony/MobileNetworkUtils.java +47 −13 Original line number Diff line number Diff line Loading @@ -277,8 +277,7 @@ public class MobileNetworkUtils { return true; } if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA && !isTdscdmaSupported(context, telephonyManager)) { if (shouldSpeciallyUpdateGsmCdma(context, subId)) { return true; } } Loading @@ -296,16 +295,15 @@ public class MobileNetworkUtils { if (isGsmBasicOptions(context, subId)) { return true; } final int settingsNetworkMode = android.provider.Settings.Global.getInt( final int networkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (isWorldMode(context, subId)) { if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO || settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { if (networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO || networkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { return true; } else if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA && !MobileNetworkUtils.isTdscdmaSupported(context, subId)) { } else if (shouldSpeciallyUpdateGsmCdma(context, subId)) { return true; } } Loading Loading @@ -362,16 +360,24 @@ public class MobileNetworkUtils { return false; } final int networkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO && isWorldMode(context, subId)) { return false; } if (shouldSpeciallyUpdateGsmCdma(context, subId)) { return false; } if (isGsmBasicOptions(context, subId)) { return true; } final int settingsNetworkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (isWorldMode(context, subId)) { if (settingsNetworkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { if (networkMode == TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA) { return true; } } Loading Loading @@ -414,7 +420,6 @@ public class MobileNetworkUtils { return false; } /** * Return subId that supported by search. If there are more than one, return first one, * otherwise return {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID} Loading Loading @@ -461,4 +466,33 @@ public class MobileNetworkUtils { } } } /** * This method is migrated from {@link com.android.phone.MobileNetworkSettings} and we should * use it carefully. This code snippet doesn't have very clear meaning however we should * update GSM or CDMA differently based on what it returns. * * 1. For all CDMA settings, make them visible if it return {@code true} * 2. For GSM settings, make them visible if it return {@code true} unless 3 * 3. For network select settings, make it invisible if it return {@code true} */ @VisibleForTesting static boolean shouldSpeciallyUpdateGsmCdma(Context context, int subId) { final int networkMode = android.provider.Settings.Global.getInt( context.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + subId, Phone.PREFERRED_NT_MODE); if (networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA || networkMode == TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA) { if (!isTdscdmaSupported(context, subId) && isWorldMode(context, subId)) { return true; } } return false; } }
tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java +82 −0 Original line number Diff line number Diff line Loading @@ -219,4 +219,86 @@ public class MobileNetworkUtilsTest { assertThat(MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, SUB_ID_1)) .isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_notWorldMode_returnFalse() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, false); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isFalse(); } @Test public void shouldSpeciallyUpdateGsmCdma_supportTdscdma_returnFalse() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, true); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isFalse(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaGsm_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaGsmWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteTdscdmaCdmaEvdoGsmWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } @Test public void shouldSpeciallyUpdateGsmCdma_ModeLteCdmaEvdoGsmWcdma_returnTrue() { mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true); mCarrierConfig.putBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL, false); Settings.Global.putInt(mContext.getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1, TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); assertThat(MobileNetworkUtils.shouldSpeciallyUpdateGsmCdma(mContext, SUB_ID_1)).isTrue(); } }