Some of the AmbientDisplay preference controllers were crashing when their isAvailable methods were being called by their fragment's search index providers, which meant that the entire collection of non-indexable keys failed. Thus, all search results were showing up. In the case of a secondary user, they were able to see developer options which crashed settings when clicked. There are two issues addressed in this cl. 1. Fix the crashes so the non-indexable keys collection works 2. Contain each fragment's collection, so that if a fragment does crash, the damage is minimized. Part 1 is checking that the config in isAvailable is not null, and creating one if so. Part 2 is fixed by surrounding the collection of non-indexable keys in a try-catch, with an option in the catch to re-throw the error if a system property is set. Thus, in a new pre-submit instrumentation test, we can and docheck if any of the fragments crash when collecting non-indexable keys. Change-Id: I820bd9cb2649aa6faff7f82fcf575a62e41dc4fc Fixes: 77486668 Test: atest NonIndexableCrashTest, robotests
To build the tests you can use the following command at the root of your android source tree $ make SettingsUnitTests The test apk then needs to be installed onto your test device via for example $ adb install -r out/target/product/shamu/data/app/SettingsUnitTests/SettingsUnitTests.apk To run all tests: $ adb shell am instrument -w com.android.settings.tests.unit/android.support.test.runner.AndroidJUnitRunner To run all tests in a specific class: $ adb shell am instrument -w -e class com.android.settings.<class> com.android.settings.tests.unit/android.support.test.runner.AndroidJUnitRunner To run a specific test: $ adb shell am instrument -w -e class com.android.settings.<class>#<test> com.android.settings.tests.unit/android.support.test.runner.AndroidJUnitRunner More general information can be found at http://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html