diff --git a/app/src/main/java/eu/faircode/email/FragmentAnswers.java b/app/src/main/java/eu/faircode/email/FragmentAnswers.java index a90cc8c9e0..9f54b908b2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAnswers.java +++ b/app/src/main/java/eu/faircode/email/FragmentAnswers.java @@ -271,25 +271,26 @@ public class FragmentAnswers extends FragmentBase { } }); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextChange(String newText) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = newText; - adapter.search(newText); + if (searchView != null) + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextChange(String newText) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = newText; + adapter.search(newText); + } + return true; } - return true; - } - @Override - public boolean onQueryTextSubmit(String query) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = query; - adapter.search(query); + @Override + public boolean onQueryTextSubmit(String query) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } + return true; } - return true; - } - }); + }); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); String sort = prefs.getString("answer_sort", "order"); diff --git a/app/src/main/java/eu/faircode/email/FragmentContacts.java b/app/src/main/java/eu/faircode/email/FragmentContacts.java index 7840f17aa9..d4e7a08ce1 100644 --- a/app/src/main/java/eu/faircode/email/FragmentContacts.java +++ b/app/src/main/java/eu/faircode/email/FragmentContacts.java @@ -374,25 +374,26 @@ public class FragmentContacts extends FragmentBase { } }); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextChange(String newText) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = newText; - adapter.search(newText); + if (searchView != null) + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextChange(String newText) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = newText; + adapter.search(newText); + } + return true; } - return true; - } - @Override - public boolean onQueryTextSubmit(String query) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = query; - adapter.search(query); + @Override + public boolean onQueryTextSubmit(String query) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } + return true; } - return true; - } - }); + }); super.onCreateOptionsMenu(menu, inflater); } diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index daa693ce6f..beee656a95 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -669,25 +669,26 @@ public class FragmentFolders extends FragmentBase { } }); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextChange(String newText) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = newText; - adapter.search(newText); + if (searchView != null) + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextChange(String newText) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = newText; + adapter.search(newText); + } + return true; } - return true; - } - @Override - public boolean onQueryTextSubmit(String query) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = query; - adapter.search(query); + @Override + public boolean onQueryTextSubmit(String query) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } + return true; } - return true; - } - }); + }); LayoutInflater infl = LayoutInflater.from(getContext()); ImageButton ibSearch = (ImageButton) infl.inflate(R.layout.action_button, null); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index e1cf276d01..0739c238db 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -336,127 +336,130 @@ public class FragmentOptions extends FragmentBase { } }; - searchView.setOnSuggestionListener(onSuggestionListener); + if (searchView != null) + searchView.setOnSuggestionListener(onSuggestionListener); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - searching = query; + if (searchView != null) + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + searching = query; - CursorAdapter adapter = searchView.getSuggestionsAdapter(); - if (adapter != null && adapter.getCount() > 0) - onSuggestionListener.onSuggestionClick(0); + CursorAdapter adapter = searchView.getSuggestionsAdapter(); + if (adapter != null && adapter.getCount() > 0) + onSuggestionListener.onSuggestionClick(0); - return false; - } - - @Override - public boolean onQueryTextChange(String newText) { - if (newText != null) - newText = newText.trim(); - searching = newText; - suggest(newText); - return false; - } + return false; + } - private void suggest(String query) { - Bundle args = new Bundle(); - args.putString("query", query); + @Override + public boolean onQueryTextChange(String newText) { + if (newText != null) + newText = newText.trim(); + searching = newText; + suggest(newText); + return false; + } - new SimpleTask() { - @Override - protected SuggestData onExecute(Context context, Bundle args) { - if (TextUtils.isEmpty(args.getString("query"))) - return data; + private void suggest(String query) { + Bundle args = new Bundle(); + args.putString("query", query); - return (data == null ? getSuggestData(context) : data); - } + new SimpleTask() { + @Override + protected SuggestData onExecute(Context context, Bundle args) { + if (TextUtils.isEmpty(args.getString("query"))) + return data; - @Override - protected void onExecuted(Bundle args, SuggestData result) { - data = result; - _suggest(args.getString("query")); - } + return (data == null ? getSuggestData(context) : data); + } - @Override - protected void onException(Bundle args, Throwable ex) { - Log.w(ex); - try { - // Fallback to UI thread (Android 5.1.1) - data = getSuggestData(getContext()); + @Override + protected void onExecuted(Bundle args, SuggestData result) { + data = result; _suggest(args.getString("query")); - } catch (Throwable exex) { - Log.unexpectedError(getParentFragmentManager(), exex); } - } - - private SuggestData getSuggestData(Context context) { - SuggestData data = new SuggestData(); - data.titles = new String[TAB_PAGES.length]; - data.views = new View[TAB_PAGES.length]; - LayoutInflater inflater = LayoutInflater.from(context); - for (int tab = 0; tab < TAB_PAGES.length; tab++) { - data.titles[tab] = context.getString(PAGE_TITLES[tab]); - data.views[tab] = inflater.inflate(TAB_PAGES[tab], null); + @Override + protected void onException(Bundle args, Throwable ex) { + Log.w(ex); + try { + // Fallback to UI thread (Android 5.1.1) + data = getSuggestData(getContext()); + _suggest(args.getString("query")); + } catch (Throwable exex) { + Log.unexpectedError(getParentFragmentManager(), exex); + } } - return data; - } - }.serial().execute(FragmentOptions.this, args, "option:suggest"); - } + private SuggestData getSuggestData(Context context) { + SuggestData data = new SuggestData(); + data.titles = new String[TAB_PAGES.length]; + data.views = new View[TAB_PAGES.length]; - private void _suggest(String query) { - MatrixCursor cursor = new MatrixCursor(new String[]{"_id", "tab", "resid", "title"}); + LayoutInflater inflater = LayoutInflater.from(context); + for (int tab = 0; tab < TAB_PAGES.length; tab++) { + data.titles[tab] = context.getString(PAGE_TITLES[tab]); + data.views[tab] = inflater.inflate(TAB_PAGES[tab], null); + } - if (data != null && - query != null && query.length() > 1) { - int id = 0; - for (int tab = 0; tab < TAB_PAGES.length; tab++) - id = getSuggestions(query.toLowerCase(), id, tab, data.titles[tab], data.views[tab], cursor); + return data; + } + }.serial().execute(FragmentOptions.this, args, "option:suggest"); } - searchView.setSuggestionsAdapter(new SimpleCursorAdapter( - searchView.getContext(), - R.layout.spinner_item1_dropdown, - cursor, - new String[]{"title"}, - new int[]{android.R.id.text1}, - 0 - )); - searchView.getSuggestionsAdapter().notifyDataSetChanged(); - } + private void _suggest(String query) { + MatrixCursor cursor = new MatrixCursor(new String[]{"_id", "tab", "resid", "title"}); - private int getSuggestions(String query, int id, int tab, String title, View view, MatrixCursor cursor) { - if (view == null || - ("nosuggest".equals(view.getTag()) && !BuildConfig.DEBUG)) - return id; - else if (view instanceof ViewGroup) { - ViewGroup group = (ViewGroup) view; - for (int i = 0; i <= group.getChildCount(); i++) - id = getSuggestions(query, id, tab, title, group.getChildAt(i), cursor); - } else if (view instanceof TextView) { - String description = ((TextView) view).getText().toString(); - if (description.toLowerCase().contains(query)) { - description = description - .replace("%%", "%") - .replaceAll("%([0-9]\\$)?[sd]", "#"); - String text = view.getContext().getString(R.string.title_title_description, title, description); - cursor.newRow() - .add(id++) - .add(tab) - .add(view.getId()) - .add(text); + if (data != null && + query != null && query.length() > 1) { + int id = 0; + for (int tab = 0; tab < TAB_PAGES.length; tab++) + id = getSuggestions(query.toLowerCase(), id, tab, data.titles[tab], data.views[tab], cursor); } + + searchView.setSuggestionsAdapter(new SimpleCursorAdapter( + searchView.getContext(), + R.layout.spinner_item1_dropdown, + cursor, + new String[]{"title"}, + new int[]{android.R.id.text1}, + 0 + )); + searchView.getSuggestionsAdapter().notifyDataSetChanged(); } - return id; - } - }); + private int getSuggestions(String query, int id, int tab, String title, View view, MatrixCursor cursor) { + if (view == null || + ("nosuggest".equals(view.getTag()) && !BuildConfig.DEBUG)) + return id; + else if (view instanceof ViewGroup) { + ViewGroup group = (ViewGroup) view; + for (int i = 0; i <= group.getChildCount(); i++) + id = getSuggestions(query, id, tab, title, group.getChildAt(i), cursor); + } else if (view instanceof TextView) { + String description = ((TextView) view).getText().toString(); + if (description.toLowerCase().contains(query)) { + description = description + .replace("%%", "%") + .replaceAll("%([0-9]\\$)?[sd]", "#"); + String text = view.getContext().getString(R.string.title_title_description, title, description); + cursor.newRow() + .add(id++) + .add(tab) + .add(view.getId()) + .add(text); + } + } + + return id; + } + }); if (!TextUtils.isEmpty(saved)) { menuSearch.expandActionView(); - searchView.setQuery(saved, false); + if (searchView != null) + searchView.setQuery(saved, false); } getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() { diff --git a/app/src/main/java/eu/faircode/email/FragmentRules.java b/app/src/main/java/eu/faircode/email/FragmentRules.java index 1e5599cdb0..47af1e5a06 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRules.java +++ b/app/src/main/java/eu/faircode/email/FragmentRules.java @@ -349,25 +349,26 @@ public class FragmentRules extends FragmentBase { } }); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextChange(String newText) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = newText; - adapter.search(newText); + if (searchView != null) + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextChange(String newText) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = newText; + adapter.search(newText); + } + return true; } - return true; - } - @Override - public boolean onQueryTextSubmit(String query) { - if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { - searching = query; - adapter.search(query); + @Override + public boolean onQueryTextSubmit(String query) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } + return true; } - return true; - } - }); + }); MenuCompat.setGroupDividerEnabled(menu, true);