Auto expand on folder search

pull/174/head
M66B 6 years ago
parent 9c9cadfbd6
commit 377956046b

@ -29,6 +29,7 @@ import android.graphics.Color;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings; import android.provider.Settings;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.TextUtils; import android.text.TextUtils;
@ -865,17 +866,46 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
diff.dispatchUpdatesTo(this); diff.dispatchUpdatesTo(this);
} }
public int search(String query, int result) { public void search(String query, final int result, final ISearchResult intf) {
int pos = 0; if (TextUtils.isEmpty(query)) {
if (!TextUtils.isEmpty(query)) intf.onNotFound();
return;
}
// 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++) for (int i = 0; i < items.size(); i++)
if (items.get(i).getDisplayName(context).toLowerCase().contains(query.toLowerCase())) { if (items.get(i).getDisplayName(context).toLowerCase().contains(query.toLowerCase())) {
count--;
if (count == 0)
pos = i; pos = i;
if (--result < 0) else if (count < 0) {
next = i;
break; break;
} }
}
if (pos < 0)
intf.onNotFound();
else
intf.onFound(pos, next >= 0);
}
});
}
interface ISearchResult {
void onFound(int pos, boolean hasNext);
return pos; void onNotFound();
} }
private List<TupleFolderEx> getHierarchical(List<TupleFolderEx> parents, int indentation) { private List<TupleFolderEx> getHierarchical(List<TupleFolderEx> parents, int indentation) {

@ -23,7 +23,6 @@ import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -87,9 +86,18 @@ public class FragmentDialogFolder extends FragmentDialogBase {
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
result = 0; result = 0;
String query = s.toString().toLowerCase(); String query = s.toString().toLowerCase();
int pos = adapter.search(query, result); adapter.search(query, result, new AdapterFolder.ISearchResult() {
@Override
public void onFound(int pos, boolean hasNext) {
ibNext.setEnabled(hasNext);
llm.scrollToPositionWithOffset(pos, 0); llm.scrollToPositionWithOffset(pos, 0);
ibNext.setEnabled(!TextUtils.isEmpty(query)); }
@Override
public void onNotFound() {
ibNext.setEnabled(false);
}
});
} }
@Override @Override
@ -103,10 +111,18 @@ public class FragmentDialogFolder extends FragmentDialogBase {
public void onClick(View v) { public void onClick(View v) {
result++; result++;
String query = etSearch.getText().toString(); String query = etSearch.getText().toString();
int pos = adapter.search(query, result); adapter.search(query, result, new AdapterFolder.ISearchResult() {
@Override
public void onFound(int pos, boolean hasNext) {
ibNext.setEnabled(hasNext);
llm.scrollToPositionWithOffset(pos, 0); llm.scrollToPositionWithOffset(pos, 0);
if (pos == adapter.search(query, result + 1)) }
result = 0;
@Override
public void onNotFound() {
ibNext.setEnabled(false);
}
});
} }
}); });

Loading…
Cancel
Save