From ba184ea3b4a2d0443a69518ecd174346919ca7a3 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 16 Mar 2019 18:10:56 +0000 Subject: [PATCH] Added local contacts search --- .../eu/faircode/email/AdapterContact.java | 38 ++++++++++++++---- .../eu/faircode/email/FragmentContacts.java | 40 +++++++++++++++++++ app/src/main/res/menu/menu_contacts.xml | 7 ++++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterContact.java b/app/src/main/java/eu/faircode/email/AdapterContact.java index da2bf5e8c6..cd87e11054 100644 --- a/app/src/main/java/eu/faircode/email/AdapterContact.java +++ b/app/src/main/java/eu/faircode/email/AdapterContact.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.res.ColorStateList; import android.net.Uri; import android.os.Bundle; +import android.text.TextUtils; import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; @@ -49,7 +50,9 @@ public class AdapterContact extends RecyclerView.Adapter items = new ArrayList<>(); + private String search = null; + private List all = new ArrayList<>(); + private List selected = new ArrayList<>(); private static NumberFormat nf = NumberFormat.getNumberInstance(); @@ -121,7 +124,7 @@ public class AdapterContact extends RecyclerView.Adapter contacts) { Log.i("Set contacts=" + contacts.size()); - DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(items, contacts), false); + all = contacts; - items = contacts; + List items; + if (TextUtils.isEmpty(search)) + items = all; + else { + items = new ArrayList<>(); + String query = search.toLowerCase().trim(); + for (EntityContact contact : contacts) + if (contact.email.toLowerCase().contains(query) || + (contact.name != null && contact.name.toLowerCase().contains(query))) + items.add(contact); + } + + DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(selected, items), false); + + selected = items; diff.dispatchUpdatesTo(new ListUpdateCallback() { @Override @@ -235,6 +252,11 @@ public class AdapterContact extends RecyclerView.Adapter prev = new ArrayList<>(); private List next = new ArrayList<>(); @@ -271,12 +293,12 @@ public class AdapterContact extends RecyclerView.Adapter>() { @Override @@ -97,9 +105,41 @@ public class FragmentContacts extends FragmentBase { Shortcuts.update(getContext(), getViewLifecycleOwner()); } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString("fair:search", search); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_contacts, menu); + + MenuItem menuSearch = menu.findItem(R.id.menu_search); + SearchView searchView = (SearchView) menuSearch.getActionView(); + + if (!TextUtils.isEmpty(search)) { + menuSearch.expandActionView(); + searchView.setQuery(search, true); + searchView.clearFocus(); + } + + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + search = query; + adapter.search(query); + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + search = newText; + adapter.search(newText); + return true; + } + }); + super.onCreateOptionsMenu(menu, inflater); } diff --git a/app/src/main/res/menu/menu_contacts.xml b/app/src/main/res/menu/menu_contacts.xml index 4a5716ff02..e00a338844 100644 --- a/app/src/main/res/menu/menu_contacts.xml +++ b/app/src/main/res/menu/menu_contacts.xml @@ -2,6 +2,13 @@ + +