Filter preferapnset results to only current carrier
Bug: 159772456
Test: atest TelephonyProviderTest
Change-Id: I29b2a143368e4732f67f59059ec281ae62b25a59
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 4966e5a..f976747 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -169,6 +169,9 @@
private static final int URL_FILTERED = 18;
private static final int URL_FILTERED_ID = 19;
private static final int URL_ENFORCE_MANAGED = 20;
+ // URL_PREFERAPNSET and URL_PREFERAPNSET_USING_SUBID return all APNs for the current
+ // carrier which have an apn_set_id equal to the preferred APN
+ // (if no preferred APN, or preferred APN has no set id, the query will return null)
private static final int URL_PREFERAPNSET = 21;
private static final int URL_PREFERAPNSET_USING_SUBID = 22;
private static final int URL_SIM_APN_LIST = 23;
@@ -3009,10 +3012,13 @@
// intentional fall through from above case
case URL_PREFERAPNSET: {
final int set = getPreferredApnSetId(subId);
- if (set != NO_APN_SET_ID) {
- constraints.add(APN_SET_ID + "=" + set);
+ if (set == NO_APN_SET_ID) {
+ return null;
}
- break;
+ constraints.add(APN_SET_ID + "=" + set);
+ qb.appendWhere(TextUtils.join(" AND ", constraints));
+ return getSubscriptionMatchingAPNList(qb, projectionIn, selection, selectionArgs,
+ sort, subId);
}
case URL_DPC: {
diff --git a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
index 18c8d08..e0f07bc 100644
--- a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
@@ -1298,20 +1298,35 @@
values3.put(Carriers.NUMERIC, TEST_OPERATOR);
values3.put(Carriers.APN_SET_ID, 1);
+ // values4 has a matching setId but it belongs to a different carrier
+ ContentValues values4 = new ContentValues();
+ final String apn4 = "fourthApnName";
+ final String name4 = "name4";
+ values4.put(Carriers.APN, apn4);
+ values4.put(Carriers.NAME, name4);
+ values4.put(Carriers.NUMERIC, "999888");
+ values4.put(Carriers.APN_SET_ID, 1);
+
// insert APNs
// we explicitly include subid, as SubscriptionManager.getDefaultSubscriptionId() returns -1
Log.d(TAG, "testPreferApnSetUrl: inserting contentValues=" + values1 + ", " + values2
- + ", " + values3);
+ + ", " + values3 + ", " + values4);
mContentResolver.insert(CONTENT_URI_WITH_SUBID, values1);
mContentResolver.insert(CONTENT_URI_WITH_SUBID, values2);
+ mContentResolver.insert(CONTENT_URI_WITH_SUBID, values4);
Uri uri = mContentResolver.insert(CONTENT_URI_WITH_SUBID, values3);
- // before there's a preferred APN set, assert that all APNs are returned
+ // verify all APNs were correctly inserted
final String[] testProjection = { Carriers.NAME };
Cursor cursor = mContentResolver.query(
+ Carriers.CONTENT_URI, testProjection, null, null, null);
+ assertEquals(4, cursor.getCount());
+
+ // preferapnset/subId returns null when there is no preferred APN
+ cursor = mContentResolver.query(
Uri.withAppendedPath(Carriers.CONTENT_URI, "preferapnset/subId/" + TEST_SUBID),
testProjection, null, null, null);
- assertEquals(3, cursor.getCount());
+ assertNull(cursor);
// set the APN from values3 (apn_set_id = 1) to the preferred APN
final String preferredApnIdString = uri.getLastPathSegment();
@@ -1326,6 +1341,7 @@
cursor = mContentResolver.query(
Uri.withAppendedPath(Carriers.CONTENT_URI, "preferapnset/subId/" + TEST_SUBID),
testProjection, null, null, null);
+ // values4 which was inserted with a different carrier is not included in the results
assertEquals(2, cursor.getCount());
cursor.moveToFirst();
assertEquals(name2, cursor.getString(0));