From c55f9f5625b35daca9e3d99acea22a50be648dff Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Wed, 10 May 2017 11:45:57 -0700 Subject: [PATCH] Fix crash when activity not attached after search index finishes. When search indexing completes, check for valid activity before proceeding with further operations. Change-Id: I7c72aa358574f79e2184d60bc9d0241595ea5d3b Fix: 38198223 Test: make RunSettingsRoboTests --- .../settings/search2/SearchFragment.java | 3 +++ .../settings/search2/SearchFragmentTest.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/com/android/settings/search2/SearchFragment.java b/src/com/android/settings/search2/SearchFragment.java index 5ee22b57f28..2a5c9610082 100644 --- a/src/com/android/settings/search2/SearchFragment.java +++ b/src/com/android/settings/search2/SearchFragment.java @@ -291,6 +291,9 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O */ @Override public void onIndexingFinished() { + if (getActivity() == null) { + return; + } if (mShowingSavedQuery) { mSavedQueryController.loadSavedQueries(); } else { diff --git a/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java index 2296370c327..2e91ec66f8e 100644 --- a/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java +++ b/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java @@ -349,4 +349,21 @@ public class SearchFragmentTest { verify(fragment.mSavedQueryController).loadSavedQueries(); } + + @Test + public void onIndexingFinished_noActivity_shouldNotCrash() { + ActivityController activityController = + Robolectric.buildActivity(SearchActivity.class); + activityController.setup(); + SearchFragment fragment = (SearchFragment) spy(activityController.get().getFragmentManager() + .findFragmentById(R.id.main_content)); + when(mFeatureFactory.searchFeatureProvider.isIndexingComplete(any(Context.class))) + .thenReturn(true); + fragment.mQuery = "bright"; + ReflectionHelpers.setField(fragment, "mLoaderManager", null); + ReflectionHelpers.setField(fragment, "mHost", null); + + fragment.onIndexingFinished(); + // no crash + } }