diff options
author | Roman Birg <roman@cyngn.com> | 2016-05-30 14:59:20 -0700 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2016-06-07 14:54:23 -0700 |
commit | 32c8322a8479a614bd511f063014a182681069e0 (patch) | |
tree | 3ccd7f752eb8764cca59739905fc8a343f1b2c25 /src/com/android/providers/telephony/TelephonyProvider.java | |
parent | f320e0916540ab9061ddf2af4bd46f0d8b3139a6 (diff) | |
download | android_packages_providers_TelephonyProvider-32c8322a8479a614bd511f063014a182681069e0.tar.gz android_packages_providers_TelephonyProvider-32c8322a8479a614bd511f063014a182681069e0.tar.bz2 android_packages_providers_TelephonyProvider-32c8322a8479a614bd511f063014a182681069e0.zip |
TelephonyProvider: add apn lookup for imsi
Ticket: PAELLA-158
Change-Id: I94b6e935177d4ac602353df02ca810235066495a
Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'src/com/android/providers/telephony/TelephonyProvider.java')
-rw-r--r-- | src/com/android/providers/telephony/TelephonyProvider.java | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java index 496e0fc..bd87c34 100644 --- a/src/com/android/providers/telephony/TelephonyProvider.java +++ b/src/com/android/providers/telephony/TelephonyProvider.java @@ -84,6 +84,7 @@ public class TelephonyProvider extends ContentProvider private static final int URL_PREFERAPN_NO_UPDATE_USING_SUBID = 12; private static final int URL_SIMINFO_USING_SUBID = 13; private static final int URL_UPDATE_DB = 14; + private static final int URL_PREFERAPN_USING_SUBID_IMSI = 15; private static final String TAG = "TelephonyProvider"; private static final String CARRIERS_TABLE = "carriers"; @@ -92,6 +93,7 @@ public class TelephonyProvider extends ContentProvider private static final String PREF_FILE = "preferred-apn"; private static final String COLUMN_APN_ID = "apn_id"; + private static final String COLUMN_APN_IMSI_ID = "apn_id"; private static final String PREF_FILE_FULL_APN = "preferred-full-apn"; private static final String DB_VERSION_KEY = "version"; @@ -155,6 +157,10 @@ public class TelephonyProvider extends ContentProvider s_urlMatcher.addURI("telephony", "carriers/preferapn/subId/*", URL_PREFERAPN_USING_SUBID); s_urlMatcher.addURI("telephony", "carriers/preferapn_no_update/subId/*", URL_PREFERAPN_NO_UPDATE_USING_SUBID); + s_urlMatcher.addURI("telephony", "carriers/preferapn/subIdImsi/#/*", + URL_PREFERAPN_USING_SUBID_IMSI); + s_urlMatcher.addURI("telephony", "carriers/preferapn_no_update/subIdImsi/#/*", + URL_PREFERAPN_USING_SUBID_IMSI); s_urlMatcher.addURI("telephony", "carriers/update_db", URL_UPDATE_DB); @@ -1635,6 +1641,28 @@ public class TelephonyProvider extends ContentProvider return apnId; } + private void setPreferredApnId(Long id, int subId, String imsi) { + SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putLong(COLUMN_APN_IMSI_ID + subId + imsi, id != null ? id.longValue() + : INVALID_APN_ID); + editor.apply(); + // remove saved apn if apnId is invalid + if (id == null || id.longValue() == INVALID_APN_ID) { + deletePreferredApn(subId); + } + } + + private long getPreferredApnId(int subId, String imsi, boolean checkApnSp) { + SharedPreferences sp = getContext().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE); + long apnId = sp.getLong(COLUMN_APN_IMSI_ID + subId + imsi, INVALID_APN_ID); + if (apnId == INVALID_APN_ID) { + // fallback + return getPreferredApnId(subId, checkApnSp); + } + return apnId; + } + private long getDefaultPreferredApnId() { long id = -1; String configPref = getContext().getResources().getString(R.string.config_preferred_apn, ""); @@ -1829,6 +1857,13 @@ public class TelephonyProvider extends ContentProvider break; } + case URL_PREFERAPN_USING_SUBID_IMSI: + final List<String> segments = url.getPathSegments(); + String imsi = segments.get(segments.size() - 1); + subId = Integer.parseInt(segments.get(segments.size() - 2)); + qb.appendWhere("_id = " + getPreferredApnId(subId, imsi, true)); + break; + case URL_SIMINFO: { qb.setTables(SIMINFO_TABLE); break; @@ -1897,6 +1932,7 @@ public class TelephonyProvider extends ContentProvider case URL_PREFERAPN_USING_SUBID: case URL_PREFERAPN_NO_UPDATE_USING_SUBID: + case URL_PREFERAPN_USING_SUBID_IMSI: case URL_PREFERAPN: case URL_PREFERAPN_NO_UPDATE: return "vnd.android.cursor.item/telephony-carrier"; @@ -2032,7 +2068,16 @@ public class TelephonyProvider extends ContentProvider } break; } - + case URL_PREFERAPN_USING_SUBID_IMSI: + final List<String> segments = url.getPathSegments(); + String imsi = segments.get(segments.size() - 1); + subId = Integer.parseInt(segments.get(segments.size() - 2)); + if (initialValues != null) { + if(initialValues.containsKey(COLUMN_APN_ID)) { + setPreferredApnId(initialValues.getAsLong(COLUMN_APN_ID), subId, imsi); + } + } + break; case URL_SIMINFO: { long id = db.insert(SIMINFO_TABLE, null, initialValues); result = ContentUris.withAppendedId(SubscriptionManager.CONTENT_URI, id); @@ -2165,6 +2210,11 @@ public class TelephonyProvider extends ContentProvider if ((match == URL_PREFERAPN) || (match == URL_PREFERAPN_USING_SUBID)) count = 1; break; } + case URL_PREFERAPN_USING_SUBID_IMSI: { + setPreferredApnId(-1L, subId, ""); + count = 1; + break; + } case URL_SIMINFO: { count = db.delete(SIMINFO_TABLE, where, whereArgs); @@ -2288,6 +2338,17 @@ public class TelephonyProvider extends ContentProvider } if (DBG) log("subIdString = " + subIdString + " subId = " + subId); } + case URL_PREFERAPN_USING_SUBID_IMSI: { + final List<String> segments = url.getPathSegments(); + String imsi = segments.get(segments.size() - 1); + subId = Integer.parseInt(segments.get(segments.size() - 2)); + if (values != null) { + if(values.containsKey(COLUMN_APN_ID)) { + setPreferredApnId(values.getAsLong(COLUMN_APN_ID), subId, imsi); + } + } + break; + } case URL_PREFERAPN: case URL_PREFERAPN_NO_UPDATE: |