From 377956046bf928f01bb34ae590d48c78eb00544d Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 5 Feb 2020 13:37:36 +0100 Subject: [PATCH] Auto expand on folder search --- .../java/eu/faircode/email/AdapterFolder.java | 50 +++++++++++++++---- .../faircode/email/FragmentDialogFolder.java | 32 +++++++++--- 2 files changed, 64 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 84f3fb93a9..dc887f0016 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -29,6 +29,7 @@ import android.graphics.Color; import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.provider.Settings; import android.text.SpannableString; import android.text.TextUtils; @@ -865,17 +866,46 @@ public class AdapterFolder extends RecyclerView.Adapter= 0); + } + }); + } + + interface ISearchResult { + void onFound(int pos, boolean hasNext); - return pos; + void onNotFound(); } private List getHierarchical(List parents, int indentation) { diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java index ce40c72f40..719ec89087 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java @@ -23,7 +23,6 @@ import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.text.Editable; -import android.text.TextUtils; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; @@ -87,9 +86,18 @@ public class FragmentDialogFolder extends FragmentDialogBase { public void onTextChanged(CharSequence s, int start, int before, int count) { result = 0; String query = s.toString().toLowerCase(); - int pos = adapter.search(query, result); - llm.scrollToPositionWithOffset(pos, 0); - ibNext.setEnabled(!TextUtils.isEmpty(query)); + adapter.search(query, result, new AdapterFolder.ISearchResult() { + @Override + public void onFound(int pos, boolean hasNext) { + ibNext.setEnabled(hasNext); + llm.scrollToPositionWithOffset(pos, 0); + } + + @Override + public void onNotFound() { + ibNext.setEnabled(false); + } + }); } @Override @@ -103,10 +111,18 @@ public class FragmentDialogFolder extends FragmentDialogBase { public void onClick(View v) { result++; String query = etSearch.getText().toString(); - int pos = adapter.search(query, result); - llm.scrollToPositionWithOffset(pos, 0); - if (pos == adapter.search(query, result + 1)) - result = 0; + adapter.search(query, result, new AdapterFolder.ISearchResult() { + @Override + public void onFound(int pos, boolean hasNext) { + ibNext.setEnabled(hasNext); + llm.scrollToPositionWithOffset(pos, 0); + } + + @Override + public void onNotFound() { + ibNext.setEnabled(false); + } + }); } });