summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/telephony/TelephonyProvider.java
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2012-05-21 23:24:06 -0700
committerDan Pasanen <dan.pasanen@gmail.com>2015-10-29 11:16:55 -0500
commitc51b725f3d3b598857aab6204f97a2f049c7017a (patch)
tree631696f832f0a8b883edd14f27314cc81dac8105 /src/com/android/providers/telephony/TelephonyProvider.java
parent2148bdf7fd4073c865a0625886bbb67971d2ec8e (diff)
downloadandroid_packages_providers_TelephonyProvider-c51b725f3d3b598857aab6204f97a2f049c7017a.tar.gz
android_packages_providers_TelephonyProvider-c51b725f3d3b598857aab6204f97a2f049c7017a.tar.bz2
android_packages_providers_TelephonyProvider-c51b725f3d3b598857aab6204f97a2f049c7017a.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". Conflicts: res/values/config.xml src/com/android/providers/telephony/TelephonyProvider.java Change-Id: Ia6ca4159491bee15b3f18ad7ad524b8b0ffce2f2
Diffstat (limited to 'src/com/android/providers/telephony/TelephonyProvider.java')
-rw-r--r--src/com/android/providers/telephony/TelephonyProvider.java47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index fd245fd..ffcec07 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -279,6 +279,24 @@ public class TelephonyProvider extends ContentProvider
if (DBG) log("dbh.createCarriersTable:-");
}
+ 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.
@@ -1383,7 +1401,33 @@ public class TelephonyProvider extends ContentProvider
private long getPreferredApnId(int subId) {
SharedPreferences sp = getContext().getSharedPreferences(
PREF_FILE, Context.MODE_PRIVATE);
- return sp.getLong(COLUMN_APN_ID + subId, -1);
+ long id = sp.getLong(COLUMN_APN_ID + subId, -1);
+ if (id == -1) {
+ id = getDefaultPreferredApnId();
+ if (id > -1) {
+ setPreferredApnId(id, subId);
+ }
+ }
+ return id;
+ }
+
+ 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() {
@@ -2005,6 +2049,7 @@ public class TelephonyProvider extends ContentProvider
}
setPreferredApnId((long)-1, subId);
mOpenHelper.initDatabase(db);
+ setPreferredApnId(getDefaultPreferredApnId(), subId);
}
private synchronized void updateApnDb() {