diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 822a60d..26a9ecb 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -834,6 +834,8 @@
 
     private static class SecuritySearchIndexProvider extends BaseSearchIndexProvider {
 
+        // TODO (b/68001777) Refactor indexing to include all XML and block other settings.
+
         @Override
         public List<SearchIndexableResource> getXmlResourcesToIndex(
                 Context context, boolean enabled) {
diff --git a/src/com/android/settings/fuelgauge/FakeUid.java b/src/com/android/settings/fuelgauge/FakeUid.java
index 253dc02..2c3e3cf 100644
--- a/src/com/android/settings/fuelgauge/FakeUid.java
+++ b/src/com/android/settings/fuelgauge/FakeUid.java
@@ -154,6 +154,11 @@
     }
 
     @Override
+    public Timer getWifiScanTimer() {
+        return null;
+    }
+
+    @Override
     public int getWifiScanBackgroundCount(int which)  {
         return 0;
     }
@@ -169,6 +174,11 @@
     }
 
     @Override
+    public Timer getWifiScanBackgroundTimer() {
+        return null;
+    }
+
+    @Override
     public long getWifiBatchedScanTime(int csphBin, long elapsedRealtimeUs, int which) {
         return 0;
     }
diff --git a/src/com/android/settings/search/indexing/IndexDataConverter.java b/src/com/android/settings/search/indexing/IndexDataConverter.java
index 487132b..8010db9 100644
--- a/src/com/android/settings/search/indexing/IndexDataConverter.java
+++ b/src/com/android/settings/search/indexing/IndexDataConverter.java
@@ -19,6 +19,7 @@
 
 import android.annotation.Nullable;
 import android.content.Context;
+import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.provider.SearchIndexableData;
 import android.provider.SearchIndexableResource;
@@ -307,9 +308,11 @@
                 resourceIndexData.add(headerBuilder.build(mContext));
             }
         } catch (XmlPullParserException e) {
-            throw new RuntimeException("Error parsing PreferenceScreen", e);
+            Log.w(LOG_TAG, "XML Error parsing PreferenceScreen: ", e);
         } catch (IOException e) {
-            throw new RuntimeException("Error parsing PreferenceScreen", e);
+            Log.w(LOG_TAG, "IO Error parsing PreferenceScreen: " , e);
+        } catch (Resources.NotFoundException e ) {
+            Log.w(LOG_TAG, "Resoucre not found error parsing PreferenceScreen: ", e);
         } finally {
             if (parser != null) parser.close();
         }
diff --git a/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java b/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java
index cac6f3a..1612036 100644
--- a/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java
+++ b/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java
@@ -334,6 +334,17 @@
         assertThat(nonTitlePref.enabled).isTrue();
     }
 
+    @Test
+    public void testResourceWithoutXml_shouldNotCrash() {
+        final SearchIndexableResource resource = getFakeResource(0);
+        final PreIndexData preIndexData = new PreIndexData();
+        preIndexData.dataToUpdate.add(resource);
+
+        List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
+
+        assertThat(indexData).isEmpty();
+    }
+
     private void assertDisplaySetting(IndexData row, String title, String summaryOn,
             String summaryOff, String key) {
         assertThat(row.normalizedTitle).isEqualTo(title);
