diff options
author | Steve Kondik <shade@chemlab.org> | 2012-05-21 23:24:06 -0700 |
---|---|---|
committer | Dan Pasanen <dan.pasanen@gmail.com> | 2015-10-29 11:16:55 -0500 |
commit | c51b725f3d3b598857aab6204f97a2f049c7017a (patch) | |
tree | 631696f832f0a8b883edd14f27314cc81dac8105 /src/com/android/providers/telephony/TelephonyProvider.java | |
parent | 2148bdf7fd4073c865a0625886bbb67971d2ec8e (diff) | |
download | android_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.java | 47 |
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() { |