diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index abdffd00f2..9a96bd5fc6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -40,6 +40,7 @@ import java.util.List; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.widget.SearchView; import androidx.constraintlayout.widget.Group; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Observer; @@ -61,6 +62,7 @@ public class FragmentFolders extends FragmentBase { private FloatingActionButton fab; private long account; + private boolean searching = false; private AdapterFolder adapter; private Boolean show_hidden = null; @@ -328,17 +330,55 @@ public class FragmentFolders extends FragmentBase { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_folders, menu); + + final MenuItem menuSearch = menu.findItem(R.id.menu_search); + menuSearch.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + searching = true; + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + searching = false; + return true; + } + }); + if (searching) + menuSearch.expandActionView(); + + final SearchView searchView = (SearchView) menuSearch.getActionView(); + searchView.setQueryHint(getString(R.string.title_search_device)); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + searching = false; + menuSearch.collapseActionView(); + FragmentMessages.search(getContext(), getViewLifecycleOwner(), getFragmentManager(), -1, query); + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + return false; + } + }); + super.onCreateOptionsMenu(menu, inflater); } @Override public void onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_search).setVisible(account < 0); + MenuItem item = menu.findItem(R.id.menu_show_hidden); if (show_hidden != null) { item.setTitle(show_hidden ? R.string.title_hide_folders : R.string.title_show_folders); item.setIcon(show_hidden ? R.drawable.baseline_visibility_off_24 : R.drawable.baseline_visibility_24); } item.setVisible(show_hidden != null); + super.onPrepareOptionsMenu(menu); } diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 99e9915157..3bc0af293d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -80,6 +80,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -1672,40 +1673,7 @@ public class FragmentMessages extends FragmentBase { public boolean onQueryTextSubmit(String query) { searching = false; menuSearch.collapseActionView(); - - if (Helper.isPro(getContext())) { - Bundle args = new Bundle(); - args.putLong("folder", folder); - args.putString("search", query); - - new SimpleTask() { - @Override - protected Void onExecute(Context context, Bundle args) { - DB.getInstance(context).message().resetSearch(); - return null; - } - - @Override - protected void onExecuted(Bundle args, Void data) { - FragmentMessages fragment = new FragmentMessages(); - fragment.setArguments(args); - - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("search"); - fragmentTransaction.commit(); - } - - @Override - protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); - } - }.execute(FragmentMessages.this, args, "messages:resetsearch"); - } else { - FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); - fragmentTransaction.commit(); - } - + search(getContext(), getViewLifecycleOwner(), getFragmentManager(), folder, query); return true; } @@ -2504,6 +2472,43 @@ public class FragmentMessages extends FragmentBase { return super.onCreateAnimation(transit, enter, nextAnim); } + static void search( + final Context context, final LifecycleOwner owner, final FragmentManager manager, + long folder, String query) { + if (Helper.isPro(context)) { + Bundle args = new Bundle(); + args.putLong("folder", folder); + args.putString("search", query); + + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) { + DB.getInstance(context).message().resetSearch(); + return null; + } + + @Override + protected void onExecuted(Bundle args, Void data) { + FragmentMessages fragment = new FragmentMessages(); + fragment.setArguments(args); + + FragmentTransaction fragmentTransaction = manager.beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, fragment).addToBackStack("search"); + fragmentTransaction.commit(); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, owner, ex); + } + }.execute(context, owner, args, "search:reset"); + } else { + FragmentTransaction fragmentTransaction = manager.beginTransaction(); + fragmentTransaction.replace(R.id.content_frame, new FragmentPro()).addToBackStack("pro"); + fragmentTransaction.commit(); + } + } + private class MoreResult { boolean seen; boolean unseen; diff --git a/app/src/main/res/menu/menu_folders.xml b/app/src/main/res/menu/menu_folders.xml index 46f6e9eedf..f6fa0d4b3e 100644 --- a/app/src/main/res/menu/menu_folders.xml +++ b/app/src/main/res/menu/menu_folders.xml @@ -1,6 +1,14 @@ + + +