summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/search
diff options
context:
space:
mode:
authorMatthew Fritze <mfritze@google.com>2018-04-04 17:20:54 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-04-04 17:20:54 -0700
commit688ad64e0096ce334726d6724044262ce941696b (patch)
tree403a006c91c44d5b8da8070d40a23fcedfb624aa /src/com/android/settings/search
parent8a485f0ada4f887e7e54e7e2a4d5db9c575374fa (diff)
parentacc93635c340fcea5333a490d5012a91b935897b (diff)
downloadpackages_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.java28
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) {