From 0db08433c758ab0efca673917a804da4273d40a4 Mon Sep 17 00:00:00 2001 From: Florens Douwes Date: Thu, 31 Jul 2014 21:30:04 +0200 Subject: [PATCH] Added tap to scroll when filtering a thread. --- .../chan/core/manager/ThreadManager.java | 6 +-- .../floens/chan/ui/activity/BaseActivity.java | 2 + .../chan/ui/activity/BoardActivity.java | 10 ++++- .../floens/chan/ui/adapter/PostAdapter.java | 37 +++++++++++++------ .../chan/ui/fragment/ThreadFragment.java | 10 ++++- 5 files changed, 48 insertions(+), 17 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java index 6e286351..7e55f1a1 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java @@ -225,8 +225,8 @@ public class ThreadManager implements Loader.LoaderListener { } public void onPostClicked(Post post) { - if (loader != null && (loader.getLoadable().isBoardMode() || loader.getLoadable().isCatalogMode())) { - threadManagerListener.onOPClicked(post); + if (loader != null) { + threadManagerListener.onPostClicked(post); } } @@ -581,7 +581,7 @@ public class ThreadManager implements Loader.LoaderListener { public void onThreadLoadError(VolleyError error); - public void onOPClicked(Post post); + public void onPostClicked(Post post); public void onThumbnailClicked(Post post); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java index 5c6becce..8321bb34 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java @@ -93,6 +93,8 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene abstract public void onThreadLoaded(Loadable loadable, List posts); + abstract public void onSetFilter(String filter); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardActivity.java index b24c5e73..7d657fcc 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardActivity.java @@ -68,6 +68,7 @@ public class BoardActivity extends BaseActivity implements AdapterView.OnItemSel private boolean ignoreNextOnItemSelected = false; private Spinner boardSpinner; private BoardSpinnerAdapter spinnerAdapter; + private SearchView searchView; private MenuItem searchMenuItem; private boolean searchBoard; @@ -190,7 +191,7 @@ public class BoardActivity extends BaseActivity implements AdapterView.OnItemSel searchMenuItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) searchMenuItem.getActionView(); + searchView = (SearchView) searchMenuItem.getActionView(); searchView.setQueryHint(getString(R.string.search_hint)); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override @@ -223,6 +224,13 @@ public class BoardActivity extends BaseActivity implements AdapterView.OnItemSel return true; } + @Override + public void onSetFilter(String filter) { + if (searchView != null) { + searchView.setQuery("", true); + } + } + @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java index 5bc6d957..54874724 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java @@ -73,6 +73,7 @@ public class PostAdapter extends BaseAdapter implements Filterable { private long lastViewedTime = 0; private String loadMessage = null; private String filter = ""; + private int pendingScrollToPost = -1; public PostAdapter(Context activity, ThreadManager threadManager, AbsListView listView, PostAdapterListener listener) { context = activity; @@ -183,6 +184,16 @@ public class PostAdapter extends BaseAdapter implements Filterable { } notifyDataSetChanged(); listener.onFilterResults(filter, ((List) results.values).size(), TextUtils.isEmpty(filter)); + if (pendingScrollToPost >= 0) { + final int to = pendingScrollToPost; + pendingScrollToPost = -1; + listView.post(new Runnable() { + @Override + public void run() { + scrollToPost(to); + } + }); + } } }; } @@ -247,19 +258,23 @@ public class PostAdapter extends BaseAdapter implements Filterable { } public void scrollToPost(int no) { - notifyDataSetChanged(); + if (isFiltering()) { + pendingScrollToPost = no; + } else { + notifyDataSetChanged(); - synchronized (lock) { - for (int i = 0; i < displayList.size(); i++) { - if (displayList.get(i).no == no) { - if (Math.abs(i - listView.getFirstVisiblePosition()) > 20 || listView.getChildCount() == 0) { - listView.setSelection(i); - } else { - ScrollerRunnable r = new ScrollerRunnable(listView); - r.start(i); - } + synchronized (lock) { + for (int i = 0; i < displayList.size(); i++) { + if (displayList.get(i).no == no) { + if (Math.abs(i - listView.getFirstVisiblePosition()) > 20 || listView.getChildCount() == 0) { + listView.setSelection(i); + } else { + ScrollerRunnable r = new ScrollerRunnable(listView); + r.start(i); + } - break; + break; + } } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java index ea0e55b8..127921e7 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.os.Bundle; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; @@ -162,8 +163,13 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana } @Override - public void onOPClicked(Post post) { - baseActivity.onOPClicked(post); + public void onPostClicked(Post post) { + if (loadable.isBoardMode() || loadable.isCatalogMode()) { + baseActivity.onOPClicked(post); + } else if (loadable.isThreadMode() && !TextUtils.isEmpty(lastFilter)) { + baseActivity.onSetFilter(""); + postAdapter.scrollToPost(post.no); + } } @Override