mirror of
https://github.com/M66B/FairEmail.git
synced 2026-01-05 04:19:21 +01:00
Auto expand on folder search
This commit is contained in:
@@ -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<AdapterFolder.ViewHolder
|
||||
diff.dispatchUpdatesTo(this);
|
||||
}
|
||||
|
||||
public int search(String query, int result) {
|
||||
int pos = 0;
|
||||
if (!TextUtils.isEmpty(query))
|
||||
for (int i = 0; i < items.size(); i++)
|
||||
if (items.get(i).getDisplayName(context).toLowerCase().contains(query.toLowerCase())) {
|
||||
pos = i;
|
||||
if (--result < 0)
|
||||
break;
|
||||
}
|
||||
public void search(String query, final int result, final ISearchResult intf) {
|
||||
if (TextUtils.isEmpty(query)) {
|
||||
intf.onNotFound();
|
||||
return;
|
||||
}
|
||||
|
||||
return pos;
|
||||
// Expand all
|
||||
for (TupleFolderEx folder : all)
|
||||
folder.collapsed = false;
|
||||
set(all);
|
||||
|
||||
// Delay search until after expanding
|
||||
new Handler().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int pos = -1;
|
||||
int next = -1;
|
||||
int count = result + 1;
|
||||
for (int i = 0; i < items.size(); i++)
|
||||
if (items.get(i).getDisplayName(context).toLowerCase().contains(query.toLowerCase())) {
|
||||
count--;
|
||||
if (count == 0)
|
||||
pos = i;
|
||||
else if (count < 0) {
|
||||
next = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pos < 0)
|
||||
intf.onNotFound();
|
||||
else
|
||||
intf.onFound(pos, next >= 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
interface ISearchResult {
|
||||
void onFound(int pos, boolean hasNext);
|
||||
|
||||
void onNotFound();
|
||||
}
|
||||
|
||||
private List<TupleFolderEx> getHierarchical(List<TupleFolderEx> parents, int indentation) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user