diff --git a/Chan/src/org/floens/chan/fragment/PostRepliesFragment.java b/Chan/src/org/floens/chan/fragment/PostRepliesFragment.java index 49fc830b..6d17d34e 100644 --- a/Chan/src/org/floens/chan/fragment/PostRepliesFragment.java +++ b/Chan/src/org/floens/chan/fragment/PostRepliesFragment.java @@ -97,7 +97,17 @@ public class PostRepliesFragment extends DialogFragment { postView = new PostView(getActivity()); } - postView.setPost(getItem(position), manager); + final Post p = getItem(position); + + postView.setPost(p, manager); + postView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + manager.closeAllPostFragments(); + dismiss(); + manager.scrollToPost(p); + } + }); return postView; } diff --git a/Chan/src/org/floens/chan/fragment/ThreadFragment.java b/Chan/src/org/floens/chan/fragment/ThreadFragment.java index bfb49334..2719c860 100644 --- a/Chan/src/org/floens/chan/fragment/ThreadFragment.java +++ b/Chan/src/org/floens/chan/fragment/ThreadFragment.java @@ -15,6 +15,7 @@ import org.floens.chan.utils.LoadView; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -22,7 +23,11 @@ import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout.LayoutParams; import android.widget.ListView; +import android.widget.TextView; +import com.android.volley.NetworkError; +import com.android.volley.NoConnectionError; +import com.android.volley.ServerError; import com.android.volley.VolleyError; public class ThreadFragment extends Fragment implements ThreadManager.ThreadManagerListener { @@ -164,11 +169,36 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana postAdapter.setEndOfLine(true); } else { if (container != null) { - container.setView(threadManager.getLoadErrorTextView(error)); + container.setView(getLoadErrorTextView(error)); } } } + /** + * Returns an TextView containing the appropriate error message + * @param error + * @return + */ + public TextView getLoadErrorTextView(VolleyError error) { + String errorMessage = ""; + + if ((error instanceof NoConnectionError) || (error instanceof NetworkError)) { + errorMessage = getActivity().getString(R.string.thread_load_failed_network); + } else if (error instanceof ServerError) { + errorMessage = getActivity().getString(R.string.thread_load_failed_server); + } else { + errorMessage = getActivity().getString(R.string.thread_load_failed_parsing); + } + + TextView view = new TextView(getActivity()); + view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + view.setText(errorMessage); + view.setTextSize(24f); + view.setGravity(Gravity.CENTER); + + return view; + } + @Override public void onOPClicked(Post post) { baseActivity.onOPClicked(post); @@ -176,13 +206,20 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana @Override public void onThumbnailClicked(Post source) { - if (isDetached() || postAdapter == null) return; - - ImageViewActivity.setAdapter(postAdapter, source.no); - - Intent intent = new Intent(baseActivity, ImageViewActivity.class); - baseActivity.startActivity(intent); - baseActivity.overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + if (postAdapter != null) { + ImageViewActivity.setAdapter(postAdapter, source.no); + + Intent intent = new Intent(baseActivity, ImageViewActivity.class); + baseActivity.startActivity(intent); + baseActivity.overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + } + } + + @Override + public void onScrollTo(Post post) { + if (postAdapter != null) { + postAdapter.scrollToPost(post); + } } } diff --git a/Chan/src/org/floens/chan/manager/ThreadManager.java b/Chan/src/org/floens/chan/manager/ThreadManager.java index e5b8f867..e12c9f77 100644 --- a/Chan/src/org/floens/chan/manager/ThreadManager.java +++ b/Chan/src/org/floens/chan/manager/ThreadManager.java @@ -31,15 +31,9 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.net.Uri; import android.text.TextUtils; -import android.view.Gravity; import android.widget.CheckBox; -import android.widget.LinearLayout.LayoutParams; -import android.widget.TextView; import android.widget.Toast; -import com.android.volley.NetworkError; -import com.android.volley.NoConnectionError; -import com.android.volley.ServerError; import com.android.volley.VolleyError; /** @@ -214,29 +208,8 @@ public class ThreadManager implements Loader.LoaderListener { handleLinkableSelected(linkable); } - /** - * Returns an TextView containing the appropriate error message - * @param error - * @return - */ - public TextView getLoadErrorTextView(VolleyError error) { - String errorMessage = ""; - - if ((error instanceof NoConnectionError) || (error instanceof NetworkError)) { - errorMessage = activity.getString(R.string.thread_load_failed_network); - } else if (error instanceof ServerError) { - errorMessage = activity.getString(R.string.thread_load_failed_server); - } else { - errorMessage = activity.getString(R.string.thread_load_failed_parsing); - } - - TextView view = new TextView(activity); - view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - view.setText(errorMessage); - view.setTextSize(24f); - view.setGravity(Gravity.CENTER); - - return view; + public void scrollToPost(Post post) { + threadManagerListener.onScrollTo(post); } private void copyToClipboard(String comment) { @@ -329,7 +302,7 @@ public class ThreadManager implements Loader.LoaderListener { } if (p.size() > 0) { - showPostsReplies(p); + showPostsRepliesFragment(p); } } @@ -386,7 +359,7 @@ public class ThreadManager implements Loader.LoaderListener { if (post != null) { List l = new ArrayList(); l.add(post); - showPostsReplies(l); + showPostsRepliesFragment(l); } } } catch(NumberFormatException e) { @@ -402,7 +375,7 @@ public class ThreadManager implements Loader.LoaderListener { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(linkable.value))); } - private void showPostsReplies(List list) { + private void showPostsRepliesFragment(List list) { // Post popups are now queued up, more than 32 popups on top of each other makes the system crash! popupQueue.add(list); @@ -510,5 +483,6 @@ public class ThreadManager implements Loader.LoaderListener { public void onThreadLoadError(VolleyError error); public void onOPClicked(Post post); public void onThumbnailClicked(Post post); + public void onScrollTo(Post post); } }