diff options
author | Matthew Fritze <mfritze@google.com> | 2018-04-04 17:20:54 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-04-04 17:20:54 -0700 |
commit | 688ad64e0096ce334726d6724044262ce941696b (patch) | |
tree | 403a006c91c44d5b8da8070d40a23fcedfb624aa /src/com/android/settings/search | |
parent | 8a485f0ada4f887e7e54e7e2a4d5db9c575374fa (diff) | |
parent | acc93635c340fcea5333a490d5012a91b935897b (diff) | |
download | packages_apps_Settings-688ad64e0096ce334726d6724044262ce941696b.tar.gz packages_apps_Settings-688ad64e0096ce334726d6724044262ce941696b.tar.bz2 packages_apps_Settings-688ad64e0096ce334726d6724044262ce941696b.zip |
Merge "Fix crash in non-indexable keys collection" into pi-dev am: 66e6e637a4
am: acc93635c3
Change-Id: I78aab2e3b7bc6f621e2425a88f3787e29f6ec2ff
Diffstat (limited to 'src/com/android/settings/search')
-rw-r--r-- | src/com/android/settings/search/SettingsSearchIndexablesProvider.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java index 3ef1b8550a..b9134e5c98 100644 --- a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java +++ b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java @@ -41,6 +41,7 @@ import static android.provider.SearchIndexablesContract.INDEXABLES_RAW_COLUMNS; import static android.provider.SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS; import static android.provider.SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS; import static android.provider.SearchIndexablesContract.SITE_MAP_COLUMNS; + import static com.android.settings.dashboard.DashboardFragmentRegistry.CATEGORY_KEY_TO_PARENT_MAP; import android.content.Context; @@ -63,7 +64,16 @@ import java.util.Collection; import java.util.List; public class SettingsSearchIndexablesProvider extends SearchIndexablesProvider { + public static final boolean DEBUG = false; + + /** + * Flag for a system property which checks if we should crash if there are issues in the + * indexing pipeline. + */ + public static final String SYSPROP_CRASH_ON_ERROR = + "debug.com.android.settings.search.crash_on_error"; + private static final String TAG = "SettingsSearchProvider"; private static final Collection<String> INVALID_KEYS; @@ -183,7 +193,23 @@ public class SettingsSearchIndexablesProvider extends SearchIndexablesProvider { final long startTime = System.currentTimeMillis(); Indexable.SearchIndexProvider provider = DatabaseIndexingUtils.getSearchIndexProvider( clazz); - List<String> providerNonIndexableKeys = provider.getNonIndexableKeys(context); + + List<String> providerNonIndexableKeys; + try { + providerNonIndexableKeys = provider.getNonIndexableKeys(context); + } catch (Exception e) { + // Catch a generic crash. In the absence of the catch, the background thread will + // silently fail anyway, so we aren't losing information by catching the exception. + // We crash when the system property exists so that we can test if crashes need to + // be fixed. + // The gain is that if there is a crash in a specific controller, we don't lose all + // non-indexable keys, but we can still find specific crashes in development. + if (System.getProperty(SYSPROP_CRASH_ON_ERROR) != null) { + throw new RuntimeException(e); + } + Log.e(TAG, "Error trying to get non-indexable keys from: " + clazz.getName() , e); + continue; + } if (providerNonIndexableKeys == null || providerNonIndexableKeys.isEmpty()) { if (DEBUG) { |