summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2012-05-21 23:24:06 -0700
committerMichael Bestas <mikeioannina@gmail.com>2016-12-30 22:25:34 +0200
commite57c616b7ef624b1233feedba577f973ed1907a5 (patch)
tree2d5045ca9ec096a9da2dc63f09b7d3b2d49cb3d7
parent8d8ddc27b09781201de0bd2643d33b1d967b516d (diff)
downloadandroid_packages_providers_TelephonyProvider-e57c616b7ef624b1233feedba577f973ed1907a5.tar.gz
android_packages_providers_TelephonyProvider-e57c616b7ef624b1233feedba577f973ed1907a5.tar.bz2
android_packages_providers_TelephonyProvider-e57c616b7ef624b1233feedba577f973ed1907a5.zip
telephony: Add support for choosing a default APN
* Sometimes, the standard method of choosing the "first" available APN is not what we want. Consider the case where a certain provider has both a "normal" APN and an LTE APN. The LTE APN is what we want, but it's not chosen. * Add a new overlayable value "config_preferred_apn" to handle this. A device can override this. The format is "apn,mcc,mnc". Change-Id: Ia6ca4159491bee15b3f18ad7ad524b8b0ffce2f2
-rw-r--r--res/values/config.xml4
-rw-r--r--src/com/android/providers/telephony/TelephonyProvider.java42
2 files changed, 44 insertions, 2 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 6148e5e..311a104 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -7,4 +7,8 @@
<item>310120</item>
<item>311480</item>
</string-array>
+
+ <!-- The preferred APN to use, in the format name,mcc,mnc
+ Leave empty to choose automatically. -->
+ <string name="config_preferred_apn"></string>
</resources>
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index d2f560f..de1e100 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -383,6 +383,24 @@ public class TelephonyProvider extends ContentProvider
}
}
+ private int getDefaultPreferredApnId(SQLiteDatabase db) {
+ int id = -1;
+ String configPref = mContext.getResources().getString(R.string.config_preferred_apn, "");
+ if (!TextUtils.isEmpty(configPref)) {
+ String[] s = configPref.split(",");
+ if (s.length == 3) {
+ Cursor c = db.query("carriers", new String[] { "_id" },
+ "apn='" + s[0] + "' AND mcc='" + s[1] + "' AND mnc='" + s[2] + "'",
+ null, null, null, null);
+ if (c.moveToFirst()) {
+ id = c.getInt(0);
+ }
+ c.close();
+ }
+ }
+ return id;
+ }
+
/**
* This function adds APNs from xml file(s) to db. The db may or may not be empty to begin
* with.
@@ -1522,8 +1540,8 @@ public class TelephonyProvider extends ContentProvider
Context.MODE_PRIVATE);
long apnId = sp.getLong(COLUMN_APN_ID + subId, INVALID_APN_ID);
if (apnId == INVALID_APN_ID && checkApnSp) {
- apnId = getPreferredApnIdFromApn(subId);
- if (apnId != INVALID_APN_ID) {
+ apnId = getDefaultPreferredApnId();
+ if (apnId > INVALID_APN_ID) {
setPreferredApnId(apnId, subId);
deletePreferredApn(subId);
}
@@ -1531,6 +1549,25 @@ public class TelephonyProvider extends ContentProvider
return apnId;
}
+ private long getDefaultPreferredApnId() {
+ long id = -1;
+ String configPref = getContext().getResources().getString(R.string.config_preferred_apn, "");
+ if (!TextUtils.isEmpty(configPref)) {
+ String[] s = configPref.split(",");
+ if (s.length == 3) {
+ Cursor c = mOpenHelper.getReadableDatabase().query("carriers", new String[] { "_id" },
+ "apn='" + s[0] + "' AND mcc='" + s[1] + "' AND mnc='" + s[2] + "'",
+ null, null, null, null);
+ if (c.moveToFirst()) {
+ id = c.getLong(0);
+ }
+ c.close();
+ }
+ }
+ Log.d(TAG, "Preferred APN: " + id);
+ return id;
+ }
+
private void deletePreferredApnId() {
SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE_APN,
Context.MODE_PRIVATE);
@@ -2270,6 +2307,7 @@ public class TelephonyProvider extends ContentProvider
}
setPreferredApnId((long) INVALID_APN_ID, subId);
mOpenHelper.initDatabase(db);
+ setPreferredApnId(getDefaultPreferredApnId(), subId);
}
private synchronized void updateApnDb() {