From 434e755dce229e11c40f997779f130d313ba77f4 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 16 May 2022 13:49:15 +0200 Subject: [PATCH] Fixed search interaction (2) --- .../eu/faircode/email/FragmentAnswers.java | 38 +++++++++++++++---- .../eu/faircode/email/FragmentContacts.java | 38 +++++++++++++++---- .../eu/faircode/email/FragmentFolders.java | 37 +++++++++++++----- .../java/eu/faircode/email/FragmentRules.java | 38 +++++++++++++++---- 4 files changed, 118 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentAnswers.java b/app/src/main/java/eu/faircode/email/FragmentAnswers.java index 490cab2474..77b55fd295 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAnswers.java +++ b/app/src/main/java/eu/faircode/email/FragmentAnswers.java @@ -57,6 +57,7 @@ import java.util.Objects; public class FragmentAnswers extends FragmentBase { private boolean cards; + private View view; private RecyclerView rvAnswer; private ContentLoadingProgressBar pbWait; private Group grpReady; @@ -79,7 +80,7 @@ public class FragmentAnswers extends FragmentBase { setSubtitle(R.string.menu_answers); setHasOptionsMenu(true); - View view = inflater.inflate(R.layout.fragment_answers, container, false); + view = inflater.inflate(R.layout.fragment_answers, container, false); // Get controls rvAnswer = view.findViewById(R.id.rvAnswer); @@ -228,15 +229,34 @@ public class FragmentAnswers extends FragmentBase { SearchView searchView = (SearchView) menuSearch.getActionView(); searchView.setQueryHint(getString(R.string.title_rules_search_hint)); - if (!TextUtils.isEmpty(searching)) { - menuSearch.expandActionView(); - searchView.setQuery(searching, true); - } + final String search = searching; + view.post(new RunnableEx("answers:search") { + @Override + public void delegate() { + if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + return; + + if (TextUtils.isEmpty(search)) + menuSearch.collapseActionView(); + else { + menuSearch.expandActionView(); + searchView.setQuery(search, true); + } + } + }); + + getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroyed() { + menuSearch.collapseActionView(); + getViewLifecycleOwner().getLifecycle().removeObserver(this); + } + }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { - if (getView() != null && menuSearch.isActionViewExpanded()) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { searching = newText; adapter.search(newText); } @@ -245,8 +265,10 @@ public class FragmentAnswers extends FragmentBase { @Override public boolean onQueryTextSubmit(String query) { - searching = query; - adapter.search(query); + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } return true; } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentContacts.java b/app/src/main/java/eu/faircode/email/FragmentContacts.java index ee9fd57ce0..bb81286061 100644 --- a/app/src/main/java/eu/faircode/email/FragmentContacts.java +++ b/app/src/main/java/eu/faircode/email/FragmentContacts.java @@ -77,6 +77,7 @@ import ezvcard.property.FormattedName; import ezvcard.property.RawProperty; public class FragmentContacts extends FragmentBase { + private View view; private RecyclerView rvContacts; private ContentLoadingProgressBar pbWait; private Group grpReady; @@ -116,7 +117,7 @@ public class FragmentContacts extends FragmentBase { setSubtitle(junk ? R.string.title_blocked_senders : R.string.menu_contacts); setHasOptionsMenu(true); - View view = inflater.inflate(R.layout.fragment_contacts, container, false); + view = inflater.inflate(R.layout.fragment_contacts, container, false); // Get controls rvContacts = view.findViewById(R.id.rvContacts); @@ -206,15 +207,34 @@ public class FragmentContacts extends FragmentBase { SearchView searchView = (SearchView) menuSearch.getActionView(); searchView.setQueryHint(getString(R.string.title_search)); - if (!TextUtils.isEmpty(searching)) { - menuSearch.expandActionView(); - searchView.setQuery(searching, true); - } + final String search = searching; + view.post(new RunnableEx("contacts:search") { + @Override + public void delegate() { + if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + return; + + if (TextUtils.isEmpty(search)) + menuSearch.collapseActionView(); + else { + menuSearch.expandActionView(); + searchView.setQuery(search, true); + } + } + }); + + getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroyed() { + menuSearch.collapseActionView(); + getViewLifecycleOwner().getLifecycle().removeObserver(this); + } + }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { - if (getView() != null && menuSearch.isActionViewExpanded()) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { searching = newText; adapter.search(newText); } @@ -223,8 +243,10 @@ public class FragmentContacts extends FragmentBase { @Override public boolean onQueryTextSubmit(String query) { - searching = query; - adapter.search(query); + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } return true; } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 7f9d7e8ed1..ac6a0da44e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -604,17 +604,34 @@ public class FragmentFolders extends FragmentBase { SearchView searchView = (SearchView) menuSearch.getActionView(); searchView.setQueryHint(getString(R.string.title_search)); - if (TextUtils.isEmpty(searching)) - menuSearch.collapseActionView(); - else { - menuSearch.expandActionView(); - searchView.setQuery(searching, true); - } + final String search = searching; + view.post(new RunnableEx("folders:search") { + @Override + public void delegate() { + if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + return; + + if (TextUtils.isEmpty(search)) + menuSearch.collapseActionView(); + else { + menuSearch.expandActionView(); + searchView.setQuery(search, true); + } + } + }); + + getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroyed() { + menuSearch.collapseActionView(); + getViewLifecycleOwner().getLifecycle().removeObserver(this); + } + }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { - if (getView() != null && menuSearch.isActionViewExpanded()) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { searching = newText; adapter.search(newText); } @@ -623,8 +640,10 @@ public class FragmentFolders extends FragmentBase { @Override public boolean onQueryTextSubmit(String query) { - searching = query; - adapter.search(query); + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } return true; } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentRules.java b/app/src/main/java/eu/faircode/email/FragmentRules.java index 324fab04bc..69ef477c7b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRules.java +++ b/app/src/main/java/eu/faircode/email/FragmentRules.java @@ -75,6 +75,7 @@ public class FragmentRules extends FragmentBase { private boolean cards; + private View view; private RecyclerView rvRule; private ContentLoadingProgressBar pbWait; private Group grpReady; @@ -109,7 +110,7 @@ public class FragmentRules extends FragmentBase { setSubtitle(R.string.title_edit_rules); setHasOptionsMenu(true); - View view = inflater.inflate(R.layout.fragment_rules, container, false); + view = inflater.inflate(R.layout.fragment_rules, container, false); // Get controls rvRule = view.findViewById(R.id.rvRule); @@ -223,15 +224,34 @@ public class FragmentRules extends FragmentBase { SearchView searchView = (SearchView) menuSearch.getActionView(); searchView.setQueryHint(getString(R.string.title_rules_search_hint)); - if (!TextUtils.isEmpty(searching)) { - menuSearch.expandActionView(); - searchView.setQuery(searching, true); - } + final String search = searching; + view.post(new RunnableEx("rules:search") { + @Override + public void delegate() { + if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + return; + + if (TextUtils.isEmpty(search)) + menuSearch.collapseActionView(); + else { + menuSearch.expandActionView(); + searchView.setQuery(search, true); + } + } + }); + + getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() { + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroyed() { + menuSearch.collapseActionView(); + getViewLifecycleOwner().getLifecycle().removeObserver(this); + } + }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { - if (getView() != null && menuSearch.isActionViewExpanded()) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { searching = newText; adapter.search(newText); } @@ -240,8 +260,10 @@ public class FragmentRules extends FragmentBase { @Override public boolean onQueryTextSubmit(String query) { - searching = query; - adapter.search(query); + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + searching = query; + adapter.search(query); + } return true; } });