Merge "Fix crash in non-indexable keys collection" into pi-dev am: 66e6e637a4

am: acc93635c3

Change-Id: I78aab2e3b7bc6f621e2425a88f3787e29f6ec2ff
This commit is contained in:
Matthew Fritze
2018-04-04 17:20:54 -07:00
committed by android-build-merger
4 changed files with 57 additions and 2 deletions

View File

@@ -47,6 +47,9 @@ public class AmbientDisplayAlwaysOnPreferenceController extends TogglePreference
@Override
public int getAvailabilityStatus() {
if (mConfig == null) {
mConfig = new AmbientDisplayConfiguration(mContext);
}
return isAvailable(mConfig) ? AVAILABLE : DISABLED_UNSUPPORTED;
}

View File

@@ -81,6 +81,9 @@ public class AmbientDisplayNotificationsPreferenceController extends
@Override
public int getAvailabilityStatus() {
if (mConfig == null) {
mConfig = new AmbientDisplayConfiguration(mContext);
}
return mConfig.pulseOnNotificationAvailable() ? AVAILABLE : DISABLED_UNSUPPORTED;
}

View File

@@ -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) {