Fix to return mno dun apn when mvno is not matched
If different type with same apn in apns-conf.xml,
apn should merge through createApnList() -> dedupeApnSettings()
but tethering apn will be chosen by fetchDunApn().
So, apn merge does not work in spite of using same apn.
This will cause make a another requestNetwork with same apn.
In this case, Hotspot is not working.
BUG=25331132
Change-Id: I43de74b93c919b0060b3ecc473b048f3c917e729
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index 4bd71ef..919d3b4 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -1212,7 +1212,14 @@
} while (cursor.moveToNext());
}
- ArrayList<ApnSetting> result = mvnoApns.isEmpty() ? mnoApns : mvnoApns;
+ ArrayList<ApnSetting> result;
+ if (mvnoApns.isEmpty()) {
+ result = mnoApns;
+ // mMvnoMatched = false; - not needed as cleared in createAllApnList
+ } else {
+ result = mvnoApns;
+ mMvnoMatched = true;
+ }
if (DBG) log("createApnList: X result=" + result);
return result;
}
@@ -2257,6 +2264,7 @@
* Data Connections and setup the preferredApn.
*/
private void createAllApnList() {
+ mMvnoMatched = false;
mAllApnSettings = new ArrayList<ApnSetting>();
IccRecords r = mIccRecords.get();
String operator = (r != null) ? r.getOperatorNumeric() : "";
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java b/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
index 2f738cc..65b3fa4 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTrackerBase.java
@@ -240,6 +240,9 @@
// really a lower power mode")
protected boolean mIsScreenOn = true;
+ // Indicates if we found mvno-specific APNs in the full APN list.
+ protected boolean mMvnoMatched = false;
+
/** Allows the generation of unique Id's for DataConnection objects */
protected AtomicInteger mUniqueIdGenerator = new AtomicInteger(0);
@@ -710,7 +713,7 @@
}
return dunSetting;
}
- } else {
+ } else if (mMvnoMatched == false) {
if (VDBG) log("fetchDunApn: global TETHER_DUN_APN dunSetting=" + dunSetting);
return dunSetting;
}
@@ -731,7 +734,7 @@
}
return dunSetting;
}
- } else {
+ } else if (mMvnoMatched == false) {
retDunSetting = dunSetting;
}
}