use of com.ichi2.ui.CardBrowserSearchView in project Anki-Android by ankidroid.
the class CardBrowser method onCreateOptionsMenu.
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
Timber.d("onCreateOptionsMenu()");
mActionBarMenu = menu;
if (!mInMultiSelectMode) {
// restore drawer click listener and icon
restoreDrawerIcon();
getMenuInflater().inflate(R.menu.card_browser, menu);
mSaveSearchItem = menu.findItem(R.id.action_save_search);
// the searchview's query always starts empty.
mSaveSearchItem.setVisible(false);
mMySearchesItem = menu.findItem(R.id.action_list_my_searches);
JSONObject savedFiltersObj = getCol().get_config("savedFilters", (JSONObject) null);
mMySearchesItem.setVisible(savedFiltersObj != null && savedFiltersObj.length() > 0);
mSearchItem = menu.findItem(R.id.action_search);
mSearchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// SearchView doesn't support empty queries so we always reset the search when collapsing
mSearchTerms = "";
mSearchView.setQuery(mSearchTerms, false);
searchCards();
// invalidate options menu so that disappeared icons would appear again
supportInvalidateOptionsMenu();
mTempSearchQuery = null;
return true;
}
});
mSearchView = (CardBrowserSearchView) mSearchItem.getActionView();
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
if (mSearchView.shouldIgnoreValueChange()) {
return true;
}
mSaveSearchItem.setVisible(!TextUtils.isEmpty(newText));
mTempSearchQuery = newText;
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
onSearch();
mSearchView.clearFocus();
return true;
}
});
// Fixes #9010 - consistent search after drawer change calls supportInvalidateOptionsMenu (mTempSearchQuery)
if (!TextUtils.isEmpty(mTempSearchQuery) || !TextUtils.isEmpty(mSearchTerms)) {
// This calls mSearchView.setOnSearchClickListener
mSearchItem.expandActionView();
String toUse = !TextUtils.isEmpty(mTempSearchQuery) ? mTempSearchQuery : mSearchTerms;
mSearchView.setQuery(toUse, false);
}
mSearchView.setOnSearchClickListener(v -> {
// Provide SearchView with the previous search terms
mSearchView.setQuery(mSearchTerms, false);
});
} else {
// multi-select mode
getMenuInflater().inflate(R.menu.card_browser_multiselect, menu);
showBackIcon();
}
if (mActionBarMenu != null && mActionBarMenu.findItem(R.id.action_undo) != null) {
MenuItem undo = mActionBarMenu.findItem(R.id.action_undo);
undo.setVisible(getCol().undoAvailable());
undo.setTitle(getResources().getString(R.string.studyoptions_congrats_undo, getCol().undoName(getResources())));
}
// Maybe we were called from ACTION_PROCESS_TEXT.
// In that case we already fill in the search.
Intent intent = getIntent();
Compat compat = CompatHelper.getCompat();
if (compat.ACTION_PROCESS_TEXT.equals(intent.getAction())) {
CharSequence search = intent.getCharSequenceExtra(compat.EXTRA_PROCESS_TEXT);
if (search != null && search.length() != 0) {
Timber.i("CardBrowser :: Called with search intent: %s", search.toString());
mSearchView.setQuery(search, true);
intent.setAction(Intent.ACTION_DEFAULT);
}
}
mPreviewItem = menu.findItem(R.id.action_preview);
onSelectionChanged();
updatePreviewMenuItem();
return super.onCreateOptionsMenu(menu);
}
Aggregations