diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java
index c627ea5..647219b 100644
--- a/src/com/android/settings/search2/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search2/DatabaseIndexingManager.java
@@ -33,6 +33,7 @@
 import android.provider.SearchIndexableData;
 import android.provider.SearchIndexableResource;
 import android.provider.SearchIndexablesContract;
+import android.support.annotation.DrawableRes;
 import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -525,8 +526,6 @@
             final int count = cursor.getCount();
             if (count > 0) {
                 while (cursor.moveToNext()) {
-                    final int providerRank = cursor.getInt(COLUMN_INDEX_XML_RES_RANK);
-                    // TODO remove provider rank
                     final int xmlResId = cursor.getInt(COLUMN_INDEX_XML_RES_RESID);
 
                     final String className = cursor.getString(COLUMN_INDEX_XML_RES_CLASS_NAME);
@@ -720,7 +719,6 @@
             final AttributeSet attrs = Xml.asAttributeSet(parser);
 
             final String screenTitle = XmlParserUtils.getDataTitle(context, attrs);
-
             String key = XmlParserUtils.getDataKey(context, attrs);
 
             String title;
@@ -730,10 +728,11 @@
             String keywords;
             String headerKeywords;
             String childFragment;
+            @DrawableRes
+            int iconResId;
             ResultPayload payload;
             boolean enabled;
             final String fragmentName = sir.className;
-            final int iconResId = sir.iconResId;
             final int rank = sir.rank;
             final String intentAction = sir.intentAction;
             final String intentTargetPackage = sir.intentTargetPackage;
@@ -784,6 +783,7 @@
                 key = XmlParserUtils.getDataKey(context, attrs);
                 enabled = ! nonIndexableKeys.contains(key);
                 keywords = XmlParserUtils.getDataKeywords(context, attrs);
+                iconResId = XmlParserUtils.getDataIcon(context, attrs);
 
                 if (isHeaderUnique && TextUtils.equals(headerTitle, title)) {
                     isHeaderUnique = false;
@@ -853,7 +853,6 @@
             List<String> nonIndexableKeys) {
 
         final String className = sir.className;
-        final int iconResId = sir.iconResId;
         final int rank = sir.rank;
 
         if (provider == null) {
@@ -881,7 +880,7 @@
                         .setEntries(raw.entries)
                         .setClassName(className)
                         .setScreenTitle(raw.screenTitle)
-                        .setIconResId(iconResId)
+                        .setIconResId(raw.iconResId)
                         .setRank(rank)
                         .setIntentAction(raw.intentAction)
                         .setIntentTargetPackage(raw.intentTargetPackage)
@@ -907,7 +906,6 @@
                     continue;
                 }
 
-                item.iconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
                 item.className = (TextUtils.isEmpty(item.className)) ? className : item.className;
 
                 indexFromResource(database, localeStr, item, nonIndexableKeys);
diff --git a/src/com/android/settings/search2/SearchViewHolder.java b/src/com/android/settings/search2/SearchViewHolder.java
index 67653e0..1175fcb 100644
--- a/src/com/android/settings/search2/SearchViewHolder.java
+++ b/src/com/android/settings/search2/SearchViewHolder.java
@@ -69,11 +69,9 @@
             AppSearchResult appResult = (AppSearchResult) result;
             PackageManager pm = fragment.getActivity().getPackageManager();
             iconView.setImageDrawable(appResult.info.loadIcon(pm));
-        } else if (result.icon != null) {
-            iconView.setImageDrawable(result.icon);
-            // TODO set color of icon
         } else {
-            iconView.setBackgroundResource(R.drawable.empty_icon);
+            // Valid even when result.icon is null.
+            iconView.setImageDrawable(result.icon);
         }
 
         bindBreadcrumbView(result);
diff --git a/src/com/android/settings/search2/XmlParserUtils.java b/src/com/android/settings/search2/XmlParserUtils.java
index 90b1c1f..17f1743 100644
--- a/src/com/android/settings/search2/XmlParserUtils.java
+++ b/src/com/android/settings/search2/XmlParserUtils.java
@@ -71,6 +71,14 @@
         return getData(context, attrs, R.styleable.Preference, R.styleable.Preference_keywords);
     }
 
+    public static int getDataIcon(Context context, AttributeSet attrs) {
+        final TypedArray ta = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.Preference);
+        final int dataIcon = ta.getResourceId(com.android.internal.R.styleable.Icon_icon, 0);
+        ta.recycle();
+        return dataIcon;
+    }
+
     /**
      * Returns the fragment name if this preference launches a child fragment.
      */
@@ -80,17 +88,9 @@
     }
 
     private static String getData(Context context, AttributeSet set, int[] attrs, int resId) {
-        final TypedArray sa = context.obtainStyledAttributes(set, attrs);
-        final TypedValue tv = sa.peekValue(resId);
-
-        CharSequence data = null;
-        if (tv != null && tv.type == TypedValue.TYPE_STRING) {
-            if (tv.resourceId != 0) {
-                data = context.getText(tv.resourceId);
-            } else {
-                data = tv.string;
-            }
-        }
+        final TypedArray ta = context.obtainStyledAttributes(set, attrs);
+        String data = ta.getString(resId);
+        ta.recycle();
         return (data != null) ? data.toString() : null;
     }
 
diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
index cc7e4ec..51cd484 100644
--- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
@@ -82,7 +82,7 @@
     }
 
     @Test
-    public void testConstructor_MembersNotNull() {
+    public void testConstructor_membersNotNull() {
         assertThat(mHolder.titleView).isNotNull();
         assertThat(mHolder.summaryView).isNotNull();
         assertThat(mHolder.iconView).isNotNull();
@@ -90,8 +90,8 @@
     }
 
     @Test
-    public void testBindViewElements_AllUpdated() {
-        SearchResult result = getSearchResult();
+    public void testBindViewElements_allUpdated() {
+        SearchResult result = getSearchResult(TITLE, SUMMARY, mIcon);
         mHolder.onBind(mFragment, result);
         mHolder.itemView.performClick();
 
@@ -110,6 +110,14 @@
     }
 
     @Test
+    public void testBindViewIcon_nullIcon_imageDrawableIsNull() {
+        final SearchResult result = getSearchResult(TITLE, SUMMARY, null);
+        mHolder.onBind(mFragment, result);
+
+        assertThat(mHolder.iconView.getDrawable()).isNull();
+    }
+
+    @Test
     public void testBindViewElements_emptySummary_hideSummaryView() {
         final SearchResult result = new Builder()
                 .addTitle(TITLE)
@@ -155,15 +163,15 @@
         assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.GONE);
     }
 
-    private SearchResult getSearchResult() {
+    private SearchResult getSearchResult(String title, String summary, Drawable icon) {
         Builder builder = new Builder();
-        builder.addTitle(TITLE)
-                .addSummary(SUMMARY)
+        builder.addTitle(title)
+                .addSummary(summary)
                 .addRank(1)
                 .addPayload(new IntentPayload(
                         new Intent().setComponent(new ComponentName("pkg", "class"))))
                 .addBreadcrumbs(new ArrayList<>())
-                .addIcon(mIcon);
+                .addIcon(icon);
 
         return builder.build();
     }
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index 0a8326d..b76feff1 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -99,6 +99,7 @@
     private final String screenTitle = "screen title";
     private final String className = "class name";
     private final int iconResId = 0xff;
+    private final int noIcon = 0;
     private final String action = "action";
     private final String targetPackage = "target package";
     private final String targetClass = "target class";
@@ -388,7 +389,7 @@
         // Class Name
         assertThat(cursor.getString(11)).isEqualTo(className);
         // Icon
-        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+        assertThat(cursor.getInt(12)).isEqualTo(noIcon);
         // Intent Action
         assertThat(cursor.getString(13)).isEqualTo(action);
         // Target Package
@@ -442,7 +443,7 @@
         // Class Name
         assertThat(cursor.getString(11)).isEqualTo(className);
         // Icon
-        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+        assertThat(cursor.getInt(12)).isEqualTo(noIcon);
         // Intent Action
         assertThat(cursor.getString(13)).isEqualTo(action);
         // Target Package
@@ -496,7 +497,7 @@
         // Class Name
         assertThat(cursor.getString(11)).isEqualTo(className);
         // Icon
-        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+        assertThat(cursor.getInt(12)).isEqualTo(noIcon);
         // Intent Action
         assertThat(cursor.getString(13)).isEqualTo(action);
         // Target Package
@@ -515,6 +516,18 @@
         assertThat(cursor.getBlob(20)).isNull();
     }
 
+    @Test
+    public void testAddResource_iconAddedFromXml() {
+        SearchIndexableResource resource = getFakeResource(R.xml.connected_devices);
+        mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>());
+
+        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
+        cursor.moveToPosition(0);
+
+        // Icon
+        assertThat(cursor.getInt(12)).isNotEqualTo(noIcon);
+    }
+
     // Tests for the flow: IndexOneResource -> IndexFromProvider -> IndexFromResource ->
     //                     UpdateOneRowWithFilteredData -> UpdateOneRow
 
@@ -565,7 +578,7 @@
         assertThat(cursor.getString(11))
                 .isEqualTo("com.android.settings.display.ScreenZoomSettings");
         // Icon
-        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+        assertThat(cursor.getInt(12)).isEqualTo(noIcon);
         // Intent Action
         assertThat(cursor.getString(13)).isNull();
         // Target Package
@@ -630,7 +643,7 @@
         assertThat(cursor.getString(11))
                 .isEqualTo("com.android.settings.display.ScreenZoomSettings");
         // Icon
-        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
+        assertThat(cursor.getInt(12)).isEqualTo(noIcon);
         // Intent Action
         assertThat(cursor.getString(13)).isNull();
         // Target Package
