diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 062bfc576b2..c081ef9af1e 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -173,6 +173,8 @@ public class ManageApplications extends InstrumentedFragment private static final String EXTRA_HAS_BRIDGE = "hasBridge"; private static final String EXTRA_FILTER_TYPE = "filterType"; @VisibleForTesting + static final String EXTRA_SEARCH_QUERY = "search_query"; + @VisibleForTesting static final String EXTRA_EXPAND_SEARCH_VIEW = "expand_search_view"; // attributes used as keys when passing values to AppInfoDashboardFragment activity @@ -253,6 +255,8 @@ public class ManageApplications extends InstrumentedFragment // Whether or not search view is expanded. @VisibleForTesting boolean mExpandSearch; + @VisibleForTesting + CharSequence mPreQuery; private View mRootView; private Spinner mFilterSpinner; @@ -358,6 +362,7 @@ public class ManageApplications extends InstrumentedFragment mFilterType = savedInstanceState.getInt(EXTRA_FILTER_TYPE, AppFilterRegistry.FILTER_APPS_ALL); mExpandSearch = savedInstanceState.getBoolean(EXTRA_EXPAND_SEARCH_VIEW); + mPreQuery = savedInstanceState.getCharSequence(EXTRA_SEARCH_QUERY); } mInvalidSizeStr = activity.getText(R.string.invalid_size_value); @@ -544,6 +549,7 @@ public class ManageApplications extends InstrumentedFragment outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem); if (mSearchView != null) { outState.putBoolean(EXTRA_EXPAND_SEARCH_VIEW, !mSearchView.isIconified()); + outState.putCharSequence(EXTRA_SEARCH_QUERY, mSearchView.getQuery()); } if (mApplications != null) { outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries); @@ -683,6 +689,9 @@ public class ManageApplications extends InstrumentedFragment if (mExpandSearch) { searchMenuItem.expandActionView(); } + if (!TextUtils.isEmpty(mPreQuery)) { + mSearchView.setQuery(mPreQuery, true); + } } updateOptionsMenu(); diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java index da17f1143bb..ec4f8f2e8b6 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java @@ -188,6 +188,24 @@ public class ManageApplicationsTest { verify(searchMenu).expandActionView(); } + @Test + public void onCreateOptionsMenu_hasPreQuery_shouldSetQuery() { + final SearchView searchView = mock(SearchView.class); + final MenuItem searchMenu = mock(MenuItem.class); + final MenuItem helpMenu = mock(MenuItem.class); + when(searchMenu.getActionView()).thenReturn(searchView); + when(mMenu.findItem(R.id.search_app_list_menu)).thenReturn(searchMenu); + when(mMenu.add(anyInt() /* groupId */, anyInt() /* itemId */, anyInt() /* order */, + anyInt() /* titleRes */)).thenReturn(helpMenu); + doReturn("Test").when(mFragment).getText(anyInt() /* resId */); + doNothing().when(mFragment).updateOptionsMenu(); + + mFragment.mPreQuery = "test"; + mFragment.onCreateOptionsMenu(mMenu, mock(MenuInflater.class)); + + verify(searchView).setQuery("test", true); + } + @Test public void onQueryTextChange_shouldFilterSearchInApplicationsAdapter() { final ManageApplications.ApplicationsAdapter adapter = @@ -518,6 +536,38 @@ public class ManageApplicationsTest { assertThat(bundle.getBoolean(ManageApplications.EXTRA_EXPAND_SEARCH_VIEW)).isFalse(); } + @Test + public void onSaveInstanceState_noSearchView_shouldNotSaveQuery() { + final Bundle bundle = new Bundle(); + ReflectionHelpers.setField(mFragment, "mResetAppsHelper", mock(ResetAppsHelper.class)); + ReflectionHelpers.setField(mFragment, "mFilter", mock(AppFilterItem.class)); + ReflectionHelpers.setField(mFragment, "mApplications", + mock(ManageApplications.ApplicationsAdapter.class)); + + mFragment.onSaveInstanceState(bundle); + + assertThat(bundle.containsKey(ManageApplications.EXTRA_SEARCH_QUERY)).isFalse(); + } + + @Test + public void onSaveInstanceState_searchViewSet_shouldSaveQuery() { + final SearchView searchView = mock(SearchView.class); + final Bundle bundle = new Bundle(); + ReflectionHelpers.setField(mFragment, "mResetAppsHelper", mock(ResetAppsHelper.class)); + ReflectionHelpers.setField(mFragment, "mFilter", mock(AppFilterItem.class)); + ReflectionHelpers.setField(mFragment, "mApplications", + mock(ManageApplications.ApplicationsAdapter.class)); + ReflectionHelpers.setField(mFragment, "mSearchView", searchView); + when(searchView.isIconified()).thenReturn(true); + when(searchView.getQuery()).thenReturn("test"); + + mFragment.onSaveInstanceState(bundle); + + assertThat(bundle.containsKey(ManageApplications.EXTRA_SEARCH_QUERY)).isTrue(); + assertThat(bundle.getCharSequence(ManageApplications.EXTRA_SEARCH_QUERY)) + .isEqualTo("test"); + } + @Test public void createHeader_batteryListType_hasCorrectItems() { ReflectionHelpers.setField(mFragment, "mListType", ManageApplications.LIST_TYPE_HIGH_POWER);