From 73fa4dd87e8caa4dfee86fca5a23d07624af2b0c Mon Sep 17 00:00:00 2001 From: Florens Douwes Date: Mon, 24 Feb 2014 17:38:48 +0100 Subject: [PATCH] When viewing images, the list in the background will scroll to the post containing the viewed image. --- .../org/floens/chan/adapter/PostAdapter.java | 15 +++++++++- .../floens/chan/fragment/ThreadFragment.java | 16 +++------- .../imageview/activity/ImageViewActivity.java | 29 +++++++++++++------ 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/Chan/src/org/floens/chan/adapter/PostAdapter.java b/Chan/src/org/floens/chan/adapter/PostAdapter.java index 4a474a98..31651a3d 100644 --- a/Chan/src/org/floens/chan/adapter/PostAdapter.java +++ b/Chan/src/org/floens/chan/adapter/PostAdapter.java @@ -13,6 +13,7 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; @@ -20,13 +21,15 @@ import android.widget.TextView; public class PostAdapter extends BaseAdapter { private final Context activity; private final ThreadManager threadManager; + private final ListView listView; private boolean endOfLine; private int count = 0; private final List postList = new ArrayList(); - public PostAdapter(Context activity, ThreadManager threadManager) { + public PostAdapter(Context activity, ThreadManager threadManager, ListView listView) { this.activity = activity; this.threadManager = threadManager; + this.listView = listView; } @Override @@ -101,6 +104,16 @@ public class PostAdapter extends BaseAdapter { notifyDataSetChanged(); } + + public void scrollToPost(Post post) { + for (int i = 0; i < postList.size(); i++) { + if (postList.get(i) == post) { + listView.smoothScrollToPosition(i); + + break; + } + } + } } diff --git a/Chan/src/org/floens/chan/fragment/ThreadFragment.java b/Chan/src/org/floens/chan/fragment/ThreadFragment.java index f9ae26a6..fab38315 100644 --- a/Chan/src/org/floens/chan/fragment/ThreadFragment.java +++ b/Chan/src/org/floens/chan/fragment/ThreadFragment.java @@ -1,6 +1,5 @@ package org.floens.chan.fragment; -import java.util.ArrayList; import java.util.List; import org.floens.chan.R; @@ -96,9 +95,10 @@ public class ThreadFragment extends Fragment implements ThreadListener { if (!shown) { shown = true; - postAdapter = new PostAdapter(baseActivity, threadManager); - listView = new ListView(baseActivity); + + postAdapter = new PostAdapter(baseActivity, threadManager, listView); + listView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); listView.setAdapter(postAdapter); listView.setSelectionFromTop(loadable.listViewIndex, loadable.listViewTop); @@ -147,15 +147,7 @@ public class ThreadFragment extends Fragment implements ThreadListener { public void onThumbnailClicked(Post source) { if (isDetached() || postAdapter == null) return; - ArrayList withImages = new ArrayList(); - - for (Post post : postAdapter.getList()) { - if (post.hasImage){ - withImages.add(post); - } - } - - ImageViewActivity.setPosts(withImages, source.no); + ImageViewActivity.setAdapter(postAdapter, source.no); Intent intent = new Intent(baseActivity, ImageViewActivity.class); baseActivity.startActivity(intent); diff --git a/Chan/src/org/floens/chan/imageview/activity/ImageViewActivity.java b/Chan/src/org/floens/chan/imageview/activity/ImageViewActivity.java index 23d8b500..63d4e6dc 100644 --- a/Chan/src/org/floens/chan/imageview/activity/ImageViewActivity.java +++ b/Chan/src/org/floens/chan/imageview/activity/ImageViewActivity.java @@ -3,6 +3,7 @@ package org.floens.chan.imageview.activity; import java.util.ArrayList; import org.floens.chan.R; +import org.floens.chan.adapter.PostAdapter; import org.floens.chan.imageview.ImageSaver; import org.floens.chan.imageview.adapter.ImageViewAdapter; import org.floens.chan.model.Post; @@ -21,7 +22,7 @@ import android.view.Window; * and then start the activity with startActivity() */ public class ImageViewActivity extends Activity implements ViewPager.OnPageChangeListener { - private static ArrayList imagePosts; + private static PostAdapter postAdapter; private static int selectedId = -1; private ImageViewAdapter adapter; @@ -33,8 +34,8 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang * @param other the posts to get image data from * @param selected the no that the user clicked on */ - public static void setPosts(ArrayList other, int selected) { - imagePosts = other; + public static void setAdapter(PostAdapter adapter, int selected) { + postAdapter = adapter; selectedId = selected; } @@ -46,19 +47,26 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang super.onCreate(savedInstanceState); - if (imagePosts != null) { - setContentView(R.layout.image_pager); + if (postAdapter != null) { + // Get the posts with images + ArrayList imagePosts = new ArrayList(); + for (Post post : postAdapter.getList()) { + if (post.hasImage){ + imagePosts.add(post); + } + } + // Setup our pages and adapter + setContentView(R.layout.image_pager); ViewPager viewPager = (ViewPager) findViewById(R.id.image_pager); - adapter = new ImageViewAdapter(getFragmentManager(), this); adapter.addToList(imagePosts); - viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(this); progressData = new boolean[imagePosts.size()]; + // Select the right image for (int i = 0; i < imagePosts.size(); i++) { if (imagePosts.get(i).no == selectedId) { viewPager.setCurrentItem(i); @@ -66,8 +74,6 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang break; } } - - imagePosts = null; } else { Log.e("Chan", "Posts in imageview list was null"); finish(); @@ -78,6 +84,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang public void finish() { super.finish(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + postAdapter = null; } @Override @@ -136,6 +143,10 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang getActionBar().setTitle(text); } + + if (postAdapter != null) { + postAdapter.scrollToPost(post); + } } @Override