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.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))
public void search(String query, final int result, final ISearchResult intf) {
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++)
if (items.get(i).getDisplayName(context).toLowerCase().contains(query.toLowerCase())) {
count--;
if (count == 0)
pos = i;
if (--result < 0)
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);
return pos;
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);
adapter.search(query, result, new AdapterFolder.ISearchResult() {
@Override
public void onFound(int pos, boolean hasNext) {
ibNext.setEnabled(hasNext);
llm.scrollToPositionWithOffset(pos, 0);
ibNext.setEnabled(!TextUtils.isEmpty(query));
}
@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);
adapter.search(query, result, new AdapterFolder.ISearchResult() {
@Override
public void onFound(int pos, boolean hasNext) {
ibNext.setEnabled(hasNext);
llm.scrollToPositionWithOffset(pos, 0);
if (pos == adapter.search(query, result + 1))
result = 0;
}
@Override
public void onNotFound() {
ibNext.setEnabled(false);
}
});
}
});

Loading…
Cancel
Save