diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index cce9607..07dfbd0 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -147,7 +147,8 @@
     private static final int URL_DPC = 16;
     private static final int URL_DPC_ID = 17;
     private static final int URL_FILTERED = 18;
-    private static final int URL_ENFORCE_MANAGED = 19;
+    private static final int URL_FILTERED_ID = 19;
+    private static final int URL_ENFORCE_MANAGED = 20;
 
 
     private static final String TAG = "TelephonyProvider";
@@ -364,6 +365,9 @@
         // Only called by Settings app, DcTracker and other telephony components to get APN list
         // according to whether DPC records are enforced.
         s_urlMatcher.addURI("telephony", "carriers/filtered", URL_FILTERED);
+        // Only called by Settings app, DcTracker and other telephony components to get a
+        // single APN according to whether DPC records are enforced.
+        s_urlMatcher.addURI("telephony", "carriers/filtered/#", URL_FILTERED_ID);
         // Only Called by DevicePolicyManager to enforce DPC records.
         s_urlMatcher.addURI("telephony", "carriers/enforce_managed", URL_ENFORCE_MANAGED);
 
@@ -2161,12 +2165,13 @@
         }
     }
 
-    boolean isCallingFromSystemUid() {
-        return mInjector.binderGetCallingUid() == Process.SYSTEM_UID;
+    boolean isCallingFromSystemOrPhoneUid() {
+        return mInjector.binderGetCallingUid() == Process.SYSTEM_UID ||
+                mInjector.binderGetCallingUid() == Process.PHONE_UID;
     }
 
-    void ensureCallingFromSystemUid(String message) {
-        if (!isCallingFromSystemUid()) {
+    void ensureCallingFromSystemOrPhoneUid(String message) {
+        if (!isCallingFromSystemOrPhoneUid()) {
             throw new SecurityException(message);
         }
     }
@@ -2252,12 +2257,16 @@
             }
 
             case URL_DPC: {
-                ensureCallingFromSystemUid("URL_DPC called from non SYSTEM_UID.");
+                ensureCallingFromSystemOrPhoneUid("URL_DPC called from non SYSTEM_UID.");
                 // DPC query only returns DPC records.
                 constraints.add(IS_OWNED_BY_DPC);
                 break;
             }
 
+            case URL_FILTERED_ID: {
+                constraints.add("_id = " + url.getLastPathSegment());
+            }
+            //intentional fall through from above case
             case URL_FILTERED: {
                 if(isManagedApnEnforced()) {
                     // If enforced, return DPC records only.
@@ -2270,7 +2279,8 @@
             }
 
             case URL_ENFORCE_MANAGED: {
-                ensureCallingFromSystemUid("URL_ENFORCE_MANAGED called from non SYSTEM_UID.");
+                ensureCallingFromSystemOrPhoneUid(
+                        "URL_ENFORCE_MANAGED called from non SYSTEM_UID.");
                 MatrixCursor cursor = new MatrixCursor(new String[]{ENFORCED_KEY});
                 cursor.addRow(new Object[]{isManagedApnEnforced() ? 1 : 0});
                 return cursor;
@@ -2345,6 +2355,7 @@
             return "vnd.android.cursor.dir/telephony-carrier";
 
         case URL_ID:
+        case URL_FILTERED_ID:
             return "vnd.android.cursor.item/telephony-carrier";
 
         case URL_PREFERAPN_USING_SUBID:
@@ -2546,7 +2557,7 @@
             }
 
             case URL_DPC: {
-                ensureCallingFromSystemUid("URL_DPC called from non SYSTEM_UID.");
+                ensureCallingFromSystemOrPhoneUid("URL_DPC called from non SYSTEM_UID.");
 
                 ContentValues values;
                 if (initialValues != null) {
@@ -2708,7 +2719,7 @@
             }
 
             case URL_DPC_ID: {
-                ensureCallingFromSystemUid("URL_DPC_ID called from non SYSTEM_UID.");
+                ensureCallingFromSystemOrPhoneUid("URL_DPC_ID called from non SYSTEM_UID.");
 
                 // Only delete if owned by DPC.
                 count = db.delete(CARRIERS_TABLE, "(" + _ID + "=?)" + " and " + IS_OWNED_BY_DPC,
@@ -2869,7 +2880,7 @@
 
             case URL_DPC_ID:
             {
-                ensureCallingFromSystemUid("URL_DPC_ID called from non SYSTEM_UID.");
+                ensureCallingFromSystemOrPhoneUid("URL_DPC_ID called from non SYSTEM_UID.");
 
                 if (where != null || whereArgs != null) {
                     throw new UnsupportedOperationException(
@@ -2882,7 +2893,8 @@
             }
 
             case URL_ENFORCE_MANAGED: {
-                ensureCallingFromSystemUid("URL_ENFORCE_MANAGED called from non SYSTEM_UID.");
+                ensureCallingFromSystemOrPhoneUid(
+                        "URL_ENFORCE_MANAGED called from non SYSTEM_UID.");
                 if (values != null) {
                     if (values.containsKey(ENFORCED_KEY)) {
                         setManagedApnEnforced(values.getAsBoolean(ENFORCED_KEY));
diff --git a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
index 7fd7f61..df331db 100644
--- a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
@@ -467,9 +467,9 @@
     /**
      * Test URL_ENFORCE_MANAGED and URL_FILTERED works correctly.
      * Verify that when enforce is set true via URL_ENFORCE_MANAGED, only DPC records are returned
-     * for URL_FILTERED.
+     * for URL_FILTERED and URL_FILTERED_ID.
      * Verify that when enforce is set false via URL_ENFORCE_MANAGED, only non-DPC records
-     * are returned for URL_FILTERED.
+     * are returned for URL_FILTERED and URL_FILTERED_ID.
      */
     @Test
     @SmallTest
@@ -522,6 +522,17 @@
         assertEquals(othersRecordId, cursorNotEnforced.getInt(0));
         assertEquals(Carriers.OWNED_BY_OTHERS, cursorNotEnforced.getInt(1));
 
+        // Verify that URL_FILTERED_ID cannot get DPC record.
+        Cursor cursorNotEnforcedDpc = mContentResolver.query(Uri.withAppendedPath(URI_FILTERED,
+                Integer.toString(dpcRecordId)), null, null, null, null);
+        assertNotNull(cursorNotEnforcedDpc);
+        assertTrue(cursorNotEnforcedDpc.getCount() == 0);
+        // Verify that URL_FILTERED_ID can get non-DPC record.
+        Cursor cursorNotEnforcedOthers = mContentResolver.query(Uri.withAppendedPath(URI_FILTERED,
+                Integer.toString(othersRecordId)), null, null, null, null);
+        assertNotNull(cursorNotEnforcedOthers);
+        assertTrue(cursorNotEnforcedOthers.getCount() == 1);
+
         // Set enforced = true.
         enforceManagedValue.put(ENFORCED_KEY, true);
         Log.d(TAG, "testEnforceManagedUri Updating enforced = true: "
@@ -545,6 +556,17 @@
         assertEquals(dpcRecordId, cursorEnforced.getInt(0));
         assertEquals(Carriers.OWNED_BY_DPC, cursorEnforced.getInt(1));
 
+        // Verify that URL_FILTERED_ID can get DPC record.
+        cursorNotEnforcedDpc = mContentResolver.query(Uri.withAppendedPath(URI_FILTERED,
+                Integer.toString(dpcRecordId)), null, null, null, null);
+        assertNotNull(cursorNotEnforcedDpc);
+        assertTrue(cursorNotEnforcedDpc.getCount() == 1);
+        // Verify that URL_FILTERED_ID cannot get non-DPC record.
+        cursorNotEnforcedOthers = mContentResolver.query(Uri.withAppendedPath(URI_FILTERED,
+                Integer.toString(othersRecordId)), null, null, null, null);
+        assertNotNull(cursorNotEnforcedOthers);
+        assertTrue(cursorNotEnforcedOthers.getCount() == 0);
+
         // Delete testing records.
         int numRowsDeleted = mContentResolver.delete(URI_TELEPHONY, selection, selectionArgs);
         assertEquals(1, numRowsDeleted);
@@ -750,19 +772,19 @@
 
     /**
      * Verify that SecurityException is thrown if URL_DPC, URL_FILTERED and
-     * URL_ENFORCE_MANAGED is accessed from non-SYSTEM_UID.
+     * URL_ENFORCE_MANAGED is accessed from neither SYSTEM_UID nor PHONE_UID.
      */
     @Test
     @SmallTest
     public void testAccessURLDPCThrowSecurityExceptionFromOtherUid() {
-        mTelephonyProviderTestable.fakeCallingUid(Process.SYSTEM_UID + 1);
+        mTelephonyProviderTestable.fakeCallingUid(Process.SYSTEM_UID + 123456);
 
         // Test insert().
         ContentValues contentValuesDPC = new ContentValues();
         try {
             mContentResolver.insert(URI_DPC, contentValuesDPC);
             assertFalse("SecurityException should be thrown when URI_DPC is called from"
-                    + " non-SYSTEM_UID", true);
+                    + " neither SYSTEM_UID nor PHONE_UID", true);
         } catch (SecurityException e) {
             // Should catch SecurityException.
         }
@@ -772,15 +794,15 @@
             mContentResolver.query(URI_DPC,
                     new String[]{}, "", new String[]{}, null);
             assertFalse("SecurityException should be thrown when URI_DPC is called from"
-                    + " non-SYSTEM_UID", true);
+                    + " neither SYSTEM_UID nor PHONE_UID", true);
         } catch (SecurityException e) {
             // Should catch SecurityException.
         }
         try {
             mContentResolver.query(URI_ENFORCE_MANAGED,
             new String[]{}, "", new String[]{}, null);
-            assertFalse("SecurityException should be thrown when URI_ENFORCE_MANAGED is called "
-                + "from non-SYSTEM_UID", true);
+            assertFalse("SecurityException should be thrown when URI_ENFORCE_MANAGED is "
+                    + "called from neither SYSTEM_UID nor PHONE_UID", true);
         } catch (SecurityException e) {
             // Should catch SecurityException.
         }
@@ -792,7 +814,7 @@
                     Uri.parse(URI_DPC + "/1"),
                     contentValuesDPCUpdate, "", new String[]{});
             assertFalse("SecurityException should be thrown when URI_DPC is called"
-                    + " from non-SYSTEM_UID", true);
+                    + " from neither SYSTEM_UID nor PHONE_UID", true);
         } catch (SecurityException e) {
             // Should catch SecurityException.
         }
@@ -800,7 +822,7 @@
             mContentResolver.update(URI_ENFORCE_MANAGED, contentValuesDPCUpdate,
                     "", new String[]{});
             assertFalse("SecurityException should be thrown when URI_DPC is called"
-                    + " from non-SYSTEM_UID", true);
+                    + " from neither SYSTEM_UID nor PHONE_UID", true);
         } catch (SecurityException e) {
             // Should catch SecurityException.
         }
@@ -810,7 +832,7 @@
             mContentResolver.delete(
                     Uri.parse(URI_DPC + "/0"), "", new String[]{});
             assertFalse("SecurityException should be thrown when URI_DPC is called"
-                    + " from non-SYSTEM_UID", true);
+                    + " from neither SYSTEM_UID nor PHONE_UID", true);
         } catch (SecurityException e) {
             // Should catch SecurityException.
         }
