diff --git a/src/com/android/settings/intelligence/search/indexing/DatabaseIndexingManager.java b/src/com/android/settings/intelligence/search/indexing/DatabaseIndexingManager.java
index d335b8c..0053f14 100644
--- a/src/com/android/settings/intelligence/search/indexing/DatabaseIndexingManager.java
+++ b/src/com/android/settings/intelligence/search/indexing/DatabaseIndexingManager.java
@@ -17,6 +17,7 @@
 package com.android.settings.intelligence.search.indexing;
 
 import static com.android.settings.intelligence.search.query.DatabaseResultTask.SELECT_COLUMNS;
+import static com.android.settings.intelligence.search.indexing.IndexDatabaseHelper.IndexColumns.DATA_AUTHORITY;
 import static com.android.settings.intelligence.search.indexing.IndexDatabaseHelper.IndexColumns.DATA_PACKAGE;
 import static com.android.settings.intelligence.search.indexing.IndexDatabaseHelper.IndexColumns.CLASS_NAME;
 import static com.android.settings.intelligence.search.indexing.IndexDatabaseHelper.IndexColumns.DATA_ENTRIES;
@@ -220,6 +221,7 @@
             values.put(DATA_ENTRIES, dataRow.entries);
             values.put(DATA_KEYWORDS, dataRow.spaceDelimitedKeywords);
             values.put(DATA_PACKAGE, dataRow.packageName);
+            values.put(DATA_AUTHORITY, dataRow.authority);
             values.put(CLASS_NAME, dataRow.className);
             values.put(SCREEN_TITLE, dataRow.screenTitle);
             values.put(INTENT_ACTION, dataRow.intentAction);
@@ -241,7 +243,7 @@
      * All rows which are disabled but no longer a non-indexable key will become enabled.
      *
      * @param database         The database to validate.
-     * @param nonIndexableKeys A map between package name and the set of non-indexable keys for it.
+     * @param nonIndexableKeys A map between authority and the set of non-indexable keys for it.
      */
     @VisibleForTesting
     void updateDataInDatabase(SQLiteDatabase database,
@@ -255,17 +257,17 @@
         final ContentValues enabledToDisabledValue = new ContentValues();
         enabledToDisabledValue.put(ENABLED, 0);
 
-        String packageName;
+        String authority;
         // TODO Refactor: Move these two loops into one method.
         while (enabledResults.moveToNext()) {
-            packageName = enabledResults.getString(enabledResults.getColumnIndexOrThrow(
-                    IndexDatabaseHelper.IndexColumns.DATA_PACKAGE));
+            authority = enabledResults.getString(enabledResults.getColumnIndexOrThrow(
+                    DATA_AUTHORITY));
             final String key = enabledResults.getString(enabledResults.getColumnIndexOrThrow(
-                    IndexDatabaseHelper.IndexColumns.DATA_KEY_REF));
-            final Set<String> packageKeys = nonIndexableKeys.get(packageName);
+                    DATA_KEY_REF));
+            final Set<String> authorityKeys = nonIndexableKeys.get(authority);
 
             // The indexed item is set to Enabled but is now non-indexable
-            if (packageKeys != null && packageKeys.contains(key)) {
+            if (authorityKeys != null && authorityKeys.contains(key)) {
                 final String whereClause = getKeyWhereClause(key);
                 database.update(TABLE_PREFS_INDEX, enabledToDisabledValue, whereClause, null);
             }
@@ -279,17 +281,17 @@
         disabledToEnabledValue.put(ENABLED, 1);
 
         while (disabledResults.moveToNext()) {
-            packageName = disabledResults.getString(disabledResults.getColumnIndexOrThrow(
-                    IndexDatabaseHelper.IndexColumns.DATA_PACKAGE));
+            authority = disabledResults.getString(disabledResults.getColumnIndexOrThrow(
+                    DATA_AUTHORITY));
 
             final String key = disabledResults.getString(disabledResults.getColumnIndexOrThrow(
-                    IndexDatabaseHelper.IndexColumns.DATA_KEY_REF));
-            final Set<String> packageKeys = nonIndexableKeys.get(packageName);
+                    DATA_KEY_REF));
+            final Set<String> authorityKeys = nonIndexableKeys.get(authority);
 
             // The indexed item is set to Disabled but is no longer non-indexable.
-            // We do not enable keys when packageKeys is null because it means the keys came
-            // from an unrecognized package and therefore should not be surfaced as results.
-            if (packageKeys != null && !packageKeys.contains(key)) {
+            // We do not enable keys when authorityKeys is null because it means the keys came
+            // from an unrecognized authority and therefore should not be surfaced as results.
+            if (authorityKeys != null && !authorityKeys.contains(key)) {
                 final String whereClause = getKeyWhereClause(key);
                 database.update(TABLE_PREFS_INDEX, disabledToEnabledValue, whereClause, null);
             }
diff --git a/src/com/android/settings/intelligence/search/indexing/IndexData.java b/src/com/android/settings/intelligence/search/indexing/IndexData.java
index d178344..904deaf 100644
--- a/src/com/android/settings/intelligence/search/indexing/IndexData.java
+++ b/src/com/android/settings/intelligence/search/indexing/IndexData.java
@@ -38,6 +38,7 @@
      * @see SearchIndexableData#iconResId
      */
     public final String packageName;
+    public final String authority;
     public final String locale;
     public final String updatedTitle;
     public final String normalizedTitle;
@@ -87,6 +88,7 @@
         spaceDelimitedKeywords = normalizeKeywords(builder.mKeywords);
         intentAction = builder.mIntentAction;
         packageName = builder.mPackageName;
+        authority = builder.mAuthority;
         intentTargetPackage = builder.mIntentTargetPackage;
         intentTargetClass = builder.mIntentTargetClass;
         enabled = builder.mEnabled;
@@ -155,6 +157,7 @@
         private String mChildClassName;
         private String mScreenTitle;
         private String mPackageName;
+        private String mAuthority;
         private int mIconResId;
         private String mKeywords;
         private String mIntentAction;
@@ -213,6 +216,11 @@
             return this;
         }
 
+        public Builder setAuthority(String authority) {
+            mAuthority = authority;
+            return this;
+        }
+
         public Builder setIconResId(int iconResId) {
             mIconResId = iconResId;
             return this;
diff --git a/src/com/android/settings/intelligence/search/indexing/IndexDataConverter.java b/src/com/android/settings/intelligence/search/indexing/IndexDataConverter.java
index f2e133a..bd53596 100644
--- a/src/com/android/settings/intelligence/search/indexing/IndexDataConverter.java
+++ b/src/com/android/settings/intelligence/search/indexing/IndexDataConverter.java
@@ -20,11 +20,11 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
-import android.os.AsyncTask;
 import android.provider.SearchIndexableData;
 import android.provider.SearchIndexableResource;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.Nullable;
+import androidx.collection.ArraySet;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -42,7 +42,6 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -74,25 +73,32 @@
      */
     public List<IndexData> convertPreIndexDataToIndexData(PreIndexData preIndexData) {
         final long startConversion = System.currentTimeMillis();
-        final List<SearchIndexableData> indexableData = preIndexData.getDataToUpdate();
+        final Map<String, List<SearchIndexableData>> indexableDataMap =
+                preIndexData.getDataToUpdate();
         final Map<String, Set<String>> nonIndexableKeys = preIndexData.getNonIndexableKeys();
         final List<IndexData> indexData = new ArrayList<>();
 
-        for (SearchIndexableData data : indexableData) {
-            if (data instanceof SearchIndexableRaw) {
-                final SearchIndexableRaw rawData = (SearchIndexableRaw) data;
-                final Set<String> rawNonIndexableKeys = nonIndexableKeys.get(
-                        rawData.intentTargetPackage);
-                final IndexData convertedRaw = convertRaw(mContext, rawData, rawNonIndexableKeys);
-                if (convertedRaw != null) {
-                    indexData.add(convertedRaw);
+        for (Map.Entry<String, List<SearchIndexableData>> entry : indexableDataMap.entrySet()) {
+            final String authority = entry.getKey();
+            final List<SearchIndexableData> indexableData = entry.getValue();
+
+            for (SearchIndexableData data : indexableData) {
+                if (data instanceof SearchIndexableRaw) {
+                    final SearchIndexableRaw rawData = (SearchIndexableRaw) data;
+                    final Set<String> rawNonIndexableKeys = nonIndexableKeys.get(authority);
+                    final IndexData convertedRaw = convertRaw(mContext, authority, rawData,
+                            rawNonIndexableKeys);
+                    if (convertedRaw != null) {
+                        indexData.add(convertedRaw);
+                    }
+                } else if (data instanceof SearchIndexableResource) {
+                    final SearchIndexableResource sir = (SearchIndexableResource) data;
+                    final Set<String> resourceNonIndexableKeys =
+                            getNonIndexableKeysForResource(nonIndexableKeys, authority);
+                    final List<IndexData> resourceData = convertResource(sir, authority,
+                            resourceNonIndexableKeys);
+                    indexData.addAll(resourceData);
                 }
-            } else if (data instanceof SearchIndexableResource) {
-                final SearchIndexableResource sir = (SearchIndexableResource) data;
-                final Set<String> resourceNonIndexableKeys =
-                        getNonIndexableKeysForResource(nonIndexableKeys, sir.packageName);
-                final List<IndexData> resourceData = convertResource(sir, resourceNonIndexableKeys);
-                indexData.addAll(resourceData);
             }
         }
 
@@ -150,10 +156,10 @@
      * and there is some data sanitization in the conversion.
      */
     @Nullable
-    private IndexData convertRaw(Context context, SearchIndexableRaw raw,
+    private IndexData convertRaw(Context context, String authority, SearchIndexableRaw raw,
             Set<String> nonIndexableKeys) {
         if (TextUtils.isEmpty(raw.key)) {
-            Log.w(TAG, "Skipping null key for raw indexable " + raw.packageName + "/" + raw.title);
+            Log.w(TAG, "Skipping null key for raw indexable " + authority + "/" + raw.title);
             return null;
         }
         // A row is enabled if it does not show up as an nonIndexableKey
@@ -172,6 +178,7 @@
                 .setIntentTargetClass(raw.intentTargetClass)
                 .setEnabled(enabled)
                 .setPackageName(raw.packageName)
+                .setAuthority(authority)
                 .setKey(raw.key);
 
         return builder.build(context);
@@ -184,7 +191,7 @@
      *
      * TODO (b/33577327) simplify this method.
      */
-    private List<IndexData> convertResource(SearchIndexableResource sir,
+    private List<IndexData> convertResource(SearchIndexableResource sir, String authority,
             Set<String> nonIndexableKeys) {
         final Context context = sir.context;
         XmlResourceParser parser = null;
@@ -244,6 +251,7 @@
                     .setKeywords(headerKeywords)
                     .setClassName(sir.className)
                     .setPackageName(sir.packageName)
+                    .setAuthority(authority)
                     .setIntentAction(sir.intentAction)
                     .setIntentTargetPackage(sir.intentTargetPackage)
                     .setIntentTargetClass(sir.intentTargetClass)
@@ -285,6 +293,7 @@
                         .setScreenTitle(screenTitle)
                         .setIconResId(iconResId)
                         .setPackageName(sir.packageName)
+                        .setAuthority(authority)
                         .setIntentAction(sir.intentAction)
                         .setIntentTargetPackage(sir.intentTargetPackage)
                         .setIntentTargetClass(sir.intentTargetClass)
@@ -352,9 +361,8 @@
     }
 
     private Set<String> getNonIndexableKeysForResource(Map<String, Set<String>> nonIndexableKeys,
-            String packageName) {
-        return nonIndexableKeys.containsKey(packageName)
-                ? nonIndexableKeys.get(packageName)
-                : new HashSet<String>();
+            String authority) {
+        final Set<String> result = nonIndexableKeys.get(authority);
+        return result != null ? result : new ArraySet<>();
     }
 }
diff --git a/src/com/android/settings/intelligence/search/indexing/IndexDatabaseHelper.java b/src/com/android/settings/intelligence/search/indexing/IndexDatabaseHelper.java
index 51cc221..cc90d21 100644
--- a/src/com/android/settings/intelligence/search/indexing/IndexDatabaseHelper.java
+++ b/src/com/android/settings/intelligence/search/indexing/IndexDatabaseHelper.java
@@ -37,7 +37,7 @@
     private static final String TAG = "IndexDatabaseHelper";
 
     private static final String DATABASE_NAME = "search_index.db";
-    private static final int DATABASE_VERSION = 119;
+    private static final int DATABASE_VERSION = 120;
 
     @VisibleForTesting
     static final String SHARED_PREFS_TAG = "indexing_manager";
@@ -61,6 +61,7 @@
         String DATA_ENTRIES = "data_entries";
         String DATA_KEYWORDS = "data_keywords";
         String DATA_PACKAGE = "package";
+        String DATA_AUTHORITY = "authority";
         String CLASS_NAME = "class_name";
         String SCREEN_TITLE = "screen_title";
         String INTENT_ACTION = "intent_action";
@@ -111,6 +112,8 @@
                     ", " +
                     IndexColumns.DATA_PACKAGE +
                     ", " +
+                    IndexColumns.DATA_AUTHORITY +
+                    ", " +
                     IndexColumns.SCREEN_TITLE +
                     ", " +
                     IndexColumns.CLASS_NAME +
diff --git a/src/com/android/settings/intelligence/search/indexing/PreIndexData.java b/src/com/android/settings/intelligence/search/indexing/PreIndexData.java
index 8f8ce07..7ea03fd 100644
--- a/src/com/android/settings/intelligence/search/indexing/PreIndexData.java
+++ b/src/com/android/settings/intelligence/search/indexing/PreIndexData.java
@@ -32,12 +32,12 @@
  */
 public class PreIndexData {
 
-    private final List<SearchIndexableData> mDataToUpdate;
+    private final Map<String, List<SearchIndexableData>> mDataToUpdate;
     private final Map<String, Set<String>> mNonIndexableKeys;
     private final List<Pair<String, String>> mSiteMapPairs;
 
     public PreIndexData() {
-        mDataToUpdate = new ArrayList<>();
+        mDataToUpdate = new HashMap<>();
         mNonIndexableKeys = new HashMap<>();
         mSiteMapPairs = new ArrayList<>();
     }
@@ -46,7 +46,7 @@
         return mNonIndexableKeys;
     }
 
-    public List<SearchIndexableData> getDataToUpdate() {
+    public Map<String, List<SearchIndexableData>> getDataToUpdate() {
         return mDataToUpdate;
     }
 
@@ -58,8 +58,17 @@
         mNonIndexableKeys.put(authority, keys);
     }
 
-    public void addDataToUpdate(List<? extends SearchIndexableData> data) {
-        mDataToUpdate.addAll(data);
+    public void addDataToUpdate(String authority, List<? extends SearchIndexableData> data) {
+        if (data.isEmpty()) {
+            return;
+        }
+
+        List<SearchIndexableData> indexableData = mDataToUpdate.get(authority);
+        if (indexableData == null) {
+            mDataToUpdate.put(authority, new ArrayList<>(data));
+        } else {
+            indexableData.addAll(data);
+        }
     }
 
     public void addSiteMapPairs(List<Pair<String, String>> siteMapPairs) {
diff --git a/src/com/android/settings/intelligence/search/indexing/PreIndexDataCollector.java b/src/com/android/settings/intelligence/search/indexing/PreIndexDataCollector.java
index 1dbc9e1..a859113 100644
--- a/src/com/android/settings/intelligence/search/indexing/PreIndexDataCollector.java
+++ b/src/com/android/settings/intelligence/search/indexing/PreIndexDataCollector.java
@@ -111,12 +111,14 @@
             final Context context = mContext.createPackageContext(packageName, 0);
 
             final Uri uriForResources = buildUriForXmlResources(authority);
-            mIndexData.addDataToUpdate(getIndexablesForXmlResourceUri(context, packageName,
-                    uriForResources, SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS));
+            mIndexData.addDataToUpdate(authority, getIndexablesForXmlResourceUri(
+                    context, packageName, uriForResources,
+                    SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS));
 
             final Uri uriForRawData = buildUriForRawData(authority);
-            mIndexData.addDataToUpdate(getIndexablesForRawDataUri(context, packageName,
-                    uriForRawData, SearchIndexablesContract.INDEXABLES_RAW_COLUMNS));
+            mIndexData.addDataToUpdate(authority, getIndexablesForRawDataUri(
+                    context, packageName, uriForRawData,
+                    SearchIndexablesContract.INDEXABLES_RAW_COLUMNS));
 
             final Uri uriForSiteMap = buildUriForSiteMap(authority);
             mIndexData.addSiteMapPairs(getSiteMapFromProvider(context, uriForSiteMap));
diff --git a/src/com/android/settings/intelligence/search/query/DatabaseResultTask.java b/src/com/android/settings/intelligence/search/query/DatabaseResultTask.java
index 93bc261..07f9863 100644
--- a/src/com/android/settings/intelligence/search/query/DatabaseResultTask.java
+++ b/src/com/android/settings/intelligence/search/query/DatabaseResultTask.java
@@ -63,6 +63,7 @@
             IndexColumns.ICON,
             IndexColumns.INTENT_ACTION,
             IndexColumns.DATA_PACKAGE,
+            IndexColumns.DATA_AUTHORITY,
             IndexColumns.INTENT_TARGET_PACKAGE,
             IndexColumns.INTENT_TARGET_CLASS,
             IndexColumns.DATA_KEY_REF,
