aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Yu <jackyu@google.com>2019-06-20 17:18:45 -0700
committerJack Yu <jackyu@google.com>2019-06-21 11:32:55 -0700
commit389afecf5229edab07d1f041268ca29a2077cc5e (patch)
treeabf673fc8074c4ff13efabcfd13f83fa99996aef
parentd6bdf0be155631e0c768d3c159336b0be5418182 (diff)
downloadandroid_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.java16
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java72
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));
+ }
}