@Provides @Singleton public ActionViewResolver provideActionViewResolver() { ActionViewResolver resolver = mock(ActionViewResolver.class); when(resolver.getActionView(any(MenuItem.class))).thenReturn(searchView); return resolver; }
@Provides @Singleton public ActionViewResolver provideActionViewResolver() { return new ActionViewResolver(); }
@Override public boolean onCreateOptionsMenu(Menu menu) { if (mIsMultiPane) { getMenuInflater().inflate(R.menu.menu_item_compact, menu); } if (isSearchable()) { getMenuInflater().inflate(R.menu.menu_search, menu); MenuItem menuSearch = menu.findItem(R.id.menu_search); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) mActionViewResolver.getActionView(menuSearch); searchView.setSearchableInfo(searchManager.getSearchableInfo( new ComponentName(this, SearchActivity.class))); searchView.setIconified(true); searchView.setQuery("", false); } return super.onCreateOptionsMenu(menu); }
@Test public void testSearchView() { SearchView searchView = (SearchView) actionViewResolver.getActionView(mock(MenuItem.class)); verify(searchView, atLeastOnce()).setOnSearchClickListener(searchViewClickListener.capture()); verify(searchView, atLeastOnce()).setOnCloseListener(searchViewCloseListener.capture()); searchViewClickListener.getAllValues() .get(searchViewClickListener.getAllValues().size() - 1) .onClick(searchView); assertFalse(((FavoriteFragment) fragment).startActionMode(null)); SearchView.OnCloseListener closeListener = searchViewCloseListener.getAllValues() .get(searchViewCloseListener.getAllValues().size() - 1); closeListener.onClose(); assertEquals(2, adapter.getItemCount()); ((FavoriteFragment) fragment).filter("ask"); verify(favoriteManager, times(2)).attach(observerCaptor.capture(), any()); when(favoriteManager.getSize()).thenReturn(1); when(favoriteManager.getItem(eq(0))).thenReturn(new TestFavorite( "2", "http://example.com", "ask HN", System.currentTimeMillis())); observerCaptor.getValue().onChanged(); assertEquals(1, adapter.getItemCount()); reset(searchView); closeListener.onClose(); verify(searchView).setQuery(eq(FavoriteActivity.EMPTY_QUERY), eq(true)); }
@Before public void setUp() { MockitoAnnotations.initMocks(this); TestApplication.applicationGraph.inject(this); reset(favoriteManager); reset(userServices); reset(keyDelegate); reset(actionViewResolver.getActionView(mock(MenuItem.class))); controller = Robolectric.buildActivity(TestFavoriteActivity.class); when(favoriteManager.getSize()).thenReturn(2); when(favoriteManager.getItem(eq(0))).thenReturn(new TestFavorite( "1", "http://example.com", "title", System.currentTimeMillis())); when(favoriteManager.getItem(eq(1))).thenReturn(new TestFavorite( "2", "http://example.com", "ask HN", System.currentTimeMillis())); activity = controller.create().postCreate(null).start().resume().visible().get(); // skip menu due to search view recyclerView = (RecyclerView) activity.findViewById(R.id.recycler_view); adapter = recyclerView.getAdapter(); shadowAdapter = customShadowOf(adapter); fragment = activity.getSupportFragmentManager().findFragmentById(android.R.id.list); verify(keyDelegate).attach(any(Activity.class)); verify(favoriteManager).attach(observerCaptor.capture(), any()); }
private void createSearchView(MenuItem menuSearch) { final SearchView searchView = (SearchView) mActionViewResolver.getActionView(menuSearch); searchView.setQueryHint(getString(R.string.hint_search_saved_stories)); searchView.setSearchableInfo(((SearchManager) getActivity() .getSystemService(Context.SEARCH_SERVICE)) .getSearchableInfo(getActivity().getComponentName())); searchView.setIconified(!mSearchViewExpanded); searchView.setQuery(mFilter, false); searchView.setOnSearchClickListener(v -> { mSearchViewExpanded = true; v.requestFocus(); }); searchView.setOnCloseListener(() -> { // trigger a dummy empty search intent, as empty query does not get submitted searchView.setQuery(FavoriteActivity.EMPTY_QUERY, true); return false; }); }