diff options
author | Steve Kondik <shade@chemlab.org> | 2012-05-21 23:24:06 -0700 |
---|---|---|
committer | Michael Bestas <mikeioannina@gmail.com> | 2016-12-30 22:25:34 +0200 |
commit | e57c616b7ef624b1233feedba577f973ed1907a5 (patch) | |
tree | 2d5045ca9ec096a9da2dc63f09b7d3b2d49cb3d7 | |
parent | 8d8ddc27b09781201de0bd2643d33b1d967b516d (diff) | |
download | android_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.xml | 4 | ||||
-rw-r--r-- | src/com/android/providers/telephony/TelephonyProvider.java | 42 |
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() { |