Fix crash from Settings Search
Security Settings was returning a search indexable resource without an xml resource (in this case id = 0). Settings search did not handle this exception and crashed. This patch catches the exception, and adds a TODO to fix the indexing in security settings. Change-Id: Ic7f05c98d99cc45fbebbdc672c7e346c27daa0f0 Fixes: 67967367 Test: robotests
This commit is contained in:
@@ -834,6 +834,8 @@ public class SecuritySettings extends SettingsPreferenceFragment
|
||||
|
||||
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) {
|
||||
|
@@ -19,6 +19,7 @@ package com.android.settings.search.indexing;
|
||||
|
||||
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 @@ public class IndexDataConverter {
|
||||
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();
|
||||
}
|
||||
|
@@ -334,6 +334,17 @@ public class IndexDataConverterTest {
|
||||
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);
|
||||
|
Reference in New Issue
Block a user