Saving scroll position when opening replies.

captchafix
Sietsem 11 years ago
parent 71ce93b625
commit e9817c9f1c
  1. 24
      Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java
  2. 30
      Clover/app/src/main/java/org/floens/chan/ui/fragment/PostRepliesFragment.java

@ -65,7 +65,7 @@ public class ThreadManager implements Loader.LoaderListener {
private final Activity activity;
private final ThreadManager.ThreadManagerListener threadManagerListener;
private final List<List<Post>> popupQueue = new ArrayList<>();
private final List<RepliesPopup> popupQueue = new ArrayList<>();
private PostRepliesFragment currentPopupFragment;
private int highlightedPost = -1;
private int lastPost = -1;
@ -381,6 +381,7 @@ public class ThreadManager implements Loader.LoaderListener {
}
public void showPostReplies(Post post) {
RepliesPopup l = new RepliesPopup();
List<Post> p = new ArrayList<>();
for (int no : post.repliesFrom) {
Post r = findPostById(no);
@ -388,9 +389,9 @@ public class ThreadManager implements Loader.LoaderListener {
p.add(r);
}
}
l.posts = p;
if (p.size() > 0) {
showPostsRepliesFragment(p);
showPostsRepliesFragment(l);
}
}
@ -445,8 +446,8 @@ public class ThreadManager implements Loader.LoaderListener {
post = findPostById(id);
if (post != null) {
List<Post> l = new ArrayList<>();
l.add(post);
RepliesPopup l = new RepliesPopup();
l.posts.add(post);
showPostsRepliesFragment(l);
}
}
@ -464,16 +465,16 @@ public class ThreadManager implements Loader.LoaderListener {
Utils.openLink(activity, linkable.value);
}
private void showPostsRepliesFragment(List<Post> list) {
private void showPostsRepliesFragment(RepliesPopup repliesPopup) {
// Post popups are now queued up, more than 32 popups on top of each
// other makes the system crash!
popupQueue.add(list);
popupQueue.add(repliesPopup);
if (currentPopupFragment != null) {
currentPopupFragment.dismissNoCallback();
}
PostRepliesFragment popup = PostRepliesFragment.newInstance(list, this);
PostRepliesFragment popup = PostRepliesFragment.newInstance(repliesPopup, this);
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
ft.add(popup, "postPopup");
@ -489,6 +490,7 @@ public class ThreadManager implements Loader.LoaderListener {
popupQueue.remove(popupQueue.size() - 1);
if (popupQueue.size() > 0) {
RepliesPopup pop = popupQueue.get(popupQueue.size() - 1);
PostRepliesFragment popup = PostRepliesFragment.newInstance(popupQueue.get(popupQueue.size() - 1), this);
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
@ -576,4 +578,10 @@ public class ThreadManager implements Loader.LoaderListener {
public void onScrollTo(Post post);
}
public static class RepliesPopup {
public List<Post> posts = new ArrayList<>();
public int listViewIndex;
public int listViewTop;
}
}

@ -23,6 +23,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
@ -31,10 +32,9 @@ import org.floens.chan.R;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Post;
import org.floens.chan.ui.view.PostView;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.ThemeHelper;
import java.util.List;
/**
* A DialogFragment that shows a list of posts. Use the newInstance method for
* instantiating.
@ -42,13 +42,13 @@ import java.util.List;
public class PostRepliesFragment extends DialogFragment {
private ListView listView;
private List<Post> posts;
private ThreadManager.RepliesPopup repliesPopup;
private ThreadManager manager;
private boolean callback = true;
public static PostRepliesFragment newInstance(List<Post> posts, ThreadManager manager) {
public static PostRepliesFragment newInstance(ThreadManager.RepliesPopup repliesPopup, ThreadManager manager) {
PostRepliesFragment fragment = new PostRepliesFragment();
fragment.posts = posts;
fragment.repliesPopup = repliesPopup;
fragment.manager = manager;
return fragment;
@ -108,7 +108,7 @@ public class PostRepliesFragment extends DialogFragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (posts == null) {
if (repliesPopup == null) {
// Restoring from background.
dismiss();
} else {
@ -139,8 +139,24 @@ public class PostRepliesFragment extends DialogFragment {
}
};
adapter.addAll(posts);
adapter.addAll(repliesPopup.posts);
listView.setAdapter(adapter);
listView.setSelectionFromTop(repliesPopup.listViewIndex, repliesPopup.listViewTop);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (repliesPopup != null) {
repliesPopup.listViewIndex = view.getFirstVisiblePosition();
View v = view.getChildAt(0);
repliesPopup.listViewTop = (v == null) ? 0 : v.getTop();
}
}
});
}
}
}

Loading…
Cancel
Save