diff options
author | Jack Yu <jackyu@google.com> | 2019-06-20 17:18:45 -0700 |
---|---|---|
committer | Jack Yu <jackyu@google.com> | 2019-06-21 11:32:55 -0700 |
commit | 389afecf5229edab07d1f041268ca29a2077cc5e (patch) | |
tree | abf673fc8074c4ff13efabcfd13f83fa99996aef | |
parent | d6bdf0be155631e0c768d3c159336b0be5418182 (diff) | |
download | android_frameworks_opt_telephony-389afecf5229edab07d1f041268ca29a2077cc5e.tar.gz android_frameworks_opt_telephony-389afecf5229edab07d1f041268ca29a2077cc5e.tar.bz2 android_frameworks_opt_telephony-389afecf5229edab07d1f041268ca29a2077cc5e.zip |
Reverted to the old logic for APN selection
Reverted to the old logic that we select APN based on
RAT, but adding a special handling for 2G cases. This can
deal with the case that some APN settings has EHRPD which
we incorrectly thought that APN setting can be used on CDMA
network.
Bug: 134086103
Test: Unit tests
Change-Id: I9aefefcaf3852075b32d774c1c5236bc336a9190
-rw-r--r-- | src/java/com/android/internal/telephony/dataconnection/DcTracker.java | 16 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java | 72 |
2 files changed, 81 insertions, 7 deletions
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java index 1e04223f6..7a4bfd8d3 100644 --- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java +++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java @@ -73,6 +73,7 @@ import android.telephony.NetworkRegistrationInfo; import android.telephony.PcoData; import android.telephony.Rlog; import android.telephony.ServiceState; +import android.telephony.ServiceState.RilRadioTechnology; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; @@ -1757,8 +1758,8 @@ public class DcTracker extends Handler { } for (ApnSetting dunSetting : dunCandidates) { - if (!ServiceState.networkBitmaskHasAccessNetworkType(dunSetting.getNetworkTypeBitmask(), - ServiceState.rilRadioTechnologyToAccessNetworkType(bearer))) { + if (!dunSetting.canSupportNetworkType( + ServiceState.rilRadioTechnologyToNetworkType(bearer))) { continue; } retDunSettings.add(dunSetting); @@ -3270,9 +3271,8 @@ public class DcTracker extends Handler { + mPreferredApn.getOperatorNumeric() + ":" + mPreferredApn); } if (mPreferredApn.getOperatorNumeric().equals(operator)) { - if (ServiceState.networkBitmaskHasAccessNetworkType( - mPreferredApn.getNetworkTypeBitmask(), - ServiceState.rilRadioTechnologyToAccessNetworkType(radioTech))) { + if (mPreferredApn.canSupportNetworkType( + ServiceState.rilRadioTechnologyToNetworkType(radioTech))) { apnList.add(mPreferredApn); apnList = sortApnListByPreferred(apnList); if (DBG) log("buildWaitingApns: X added preferred apnList=" + apnList); @@ -3292,8 +3292,8 @@ public class DcTracker extends Handler { if (DBG) log("buildWaitingApns: mAllApnSettings=" + mAllApnSettings); for (ApnSetting apn : mAllApnSettings) { if (apn.canHandleType(requestedApnTypeBitmask)) { - if (ServiceState.networkBitmaskHasAccessNetworkType(apn.getNetworkTypeBitmask(), - ServiceState.rilRadioTechnologyToAccessNetworkType(radioTech))) { + if (apn.canSupportNetworkType( + ServiceState.rilRadioTechnologyToNetworkType(radioTech))) { if (VDBG) log("buildWaitingApns: adding apn=" + apn); apnList.add(apn); } else { @@ -4816,6 +4816,7 @@ public class DcTracker extends Handler { return "UNKNOWN"; } + @RilRadioTechnology private int getDataRat() { ServiceState ss = mPhone.getServiceState(); NetworkRegistrationInfo nrs = ss.getNetworkRegistrationInfo( @@ -4826,6 +4827,7 @@ public class DcTracker extends Handler { return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN; } + @RilRadioTechnology private int getVoiceRat() { ServiceState ss = mPhone.getServiceState(); NetworkRegistrationInfo nrs = ss.getNetworkRegistrationInfo( diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java index 7e271427e..977b45ab2 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java @@ -27,6 +27,7 @@ import android.net.Uri; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.ServiceState; +import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.test.suitebuilder.annotation.SmallTest; @@ -684,4 +685,75 @@ public class ApnSettingTest extends TelephonyTest { assertTrue(apn1.equals(apn2, false)); assertFalse(apn1.equals(apn2, true)); } + + @Test + @SmallTest + public void testCanHandleNetwork() throws Exception { + ApnSetting apn1 = ApnSetting.makeApnSetting( + 1234, + "310260", + "", + "ims", + null, + -1, + null, + null, + -1, + "", + "", + -1, + ApnSetting.TYPE_IMS, + ApnSetting.PROTOCOL_IPV6, + -1, + true, + (int) (TelephonyManager.NETWORK_TYPE_BITMASK_LTE + | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS), + 0, + false, + 0, + 0, + 0, + 1440, + -1, + ""); + + ApnSetting apn2 = ApnSetting.makeApnSetting( + 1235, + "310260", + "", + "ims", + null, + -1, + null, + null, + -1, + "", + "", + -1, + ApnSetting.TYPE_IMS, + ApnSetting.PROTOCOL_IPV6, + ApnSetting.PROTOCOL_IPV6, + true, + (int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE + | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS), + 0, + false, + 0, + 0, + 0, + 1440, + -1, + ""); + + assertFalse(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT)); + assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE)); + assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_UMTS)); + + assertFalse(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT)); + assertFalse(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE)); + assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GPRS)); + assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_EDGE)); + + assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GSM)); + } } |