From b9bc730e4f757c70d4a785b3f0e1fd0fbafb30ea Mon Sep 17 00:00:00 2001 From: Floens Date: Sat, 23 Jul 2016 19:55:12 +0200 Subject: [PATCH] Only pause pins on 404 network errors, not all errors. Fix issue with the ThreadStatusCell not updating correctly on error status changes. Fix crash on clicking up/down when no thread is loaded. Abstract the volley error to abstract the message needed and if it's a 404. --- .../java/org/floens/chan/chan/ChanLoader.java | 7 +- .../core/exception/ChanLoaderException.java | 64 +++++++++++++++++++ .../chan/core/manager/WatchManager.java | 22 +++---- .../chan/core/presenter/ThreadPresenter.java | 7 +- .../org/floens/chan/test/TestActivity.java | 5 +- .../floens/chan/ui/adapter/PostAdapter.java | 18 ++++-- .../floens/chan/ui/cell/ThreadStatusCell.java | 3 + .../ui/controller/ViewThreadController.java | 2 +- .../floens/chan/ui/layout/ThreadLayout.java | 25 ++------ Clover/app/src/main/res/values/strings.xml | 3 +- 10 files changed, 103 insertions(+), 53 deletions(-) create mode 100644 Clover/app/src/main/java/org/floens/chan/core/exception/ChanLoaderException.java diff --git a/Clover/app/src/main/java/org/floens/chan/chan/ChanLoader.java b/Clover/app/src/main/java/org/floens/chan/chan/ChanLoader.java index 29e420dd..74cdee35 100644 --- a/Clover/app/src/main/java/org/floens/chan/chan/ChanLoader.java +++ b/Clover/app/src/main/java/org/floens/chan/chan/ChanLoader.java @@ -25,6 +25,7 @@ import com.android.volley.VolleyError; import org.floens.chan.Chan; import org.floens.chan.core.database.DatabaseManager; +import org.floens.chan.core.exception.ChanLoaderException; import org.floens.chan.core.model.ChanThread; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Post; @@ -241,8 +242,10 @@ public class ChanLoader implements Response.ErrorListener, Response.Listener { private String highlightedPostId; private int highlightedPostNo = -1; private String highlightedPostTripcode; - private int selectedPost; + private int selectedPost = -1; private int lastSeenIndicatorPosition = -1; private boolean bound; @@ -213,19 +213,23 @@ public class PostAdapter extends RecyclerView.Adapter { highlightedPostId = null; highlightedPostNo = -1; highlightedPostTripcode = null; + selectedPost = -1; lastSeenIndicatorPosition = -1; + error = null; bound = false; } public void showError(String error) { this.error = error; if (showStatusView()) { - RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(getItemCount() - 1); - // Recyclerview did not sync yet - if (viewHolder instanceof StatusViewHolder) { - ThreadStatusCell threadStatusCell = ((StatusViewHolder) viewHolder).threadStatusCell; - threadStatusCell.setError(error); - threadStatusCell.update(); + final int childCount = recyclerView.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = recyclerView.getChildAt(i); + if (child instanceof ThreadStatusCell) { + ThreadStatusCell threadStatusCell = (ThreadStatusCell) child; + threadStatusCell.setError(error); + threadStatusCell.update(); + } } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java index 602d21bc..0cf4b0ad 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/ThreadStatusCell.java @@ -83,6 +83,9 @@ public class ThreadStatusCell extends LinearLayout implements View.OnClickListen public void setError(String error) { this.error = error; + if (error == null) { + schedule(); + } } public boolean update() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java index 71c773c3..3f483976 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java @@ -120,7 +120,7 @@ public class ViewThreadController extends ThreadController implements ThreadLayo setPinIconState(); // Update title if (message.pin.loadable == loadable) { - threadLayout.getPresenter().refreshUI(); + onShowPosts(); } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java index 48fcb578..52c54a84 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java @@ -40,17 +40,11 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; -import com.android.volley.AuthFailureError; -import com.android.volley.NetworkError; -import com.android.volley.ParseError; -import com.android.volley.ServerError; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; - import org.floens.chan.Chan; import org.floens.chan.R; import org.floens.chan.controller.Controller; import org.floens.chan.core.database.DatabaseManager; +import org.floens.chan.core.exception.ChanLoaderException; import org.floens.chan.core.model.ChanThread; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Post; @@ -69,8 +63,6 @@ import org.floens.chan.utils.AndroidUtils; import java.util.List; -import javax.net.ssl.SSLException; - import static org.floens.chan.ui.theme.ThemeHelper.theme; import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; import static org.floens.chan.utils.AndroidUtils.getString; @@ -221,17 +213,8 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T } @Override - public void showError(VolleyError error) { - String errorMessage; - if (error.getCause() instanceof SSLException) { - errorMessage = getContext().getString(R.string.thread_load_failed_ssl); - } else if (error instanceof NetworkError || error instanceof TimeoutError || error instanceof ParseError || error instanceof AuthFailureError) { - errorMessage = getContext().getString(R.string.thread_load_failed_network); - } else if (error instanceof ServerError) { - errorMessage = getContext().getString(R.string.thread_load_failed_server); - } else { - errorMessage = getContext().getString(R.string.thread_load_failed_parsing); - } + public void showError(ChanLoaderException error) { + String errorMessage = getString(error.getErrorMessage()); if (visible == Visible.THREAD) { threadListLayout.showError(errorMessage); @@ -343,7 +326,7 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T public void scrollTo(int displayPosition, boolean smooth) { if (postPopupHelper.isOpen()) { postPopupHelper.scrollTo(displayPosition, smooth); - } else { + } else if (visible == Visible.THREAD) { threadListLayout.scrollTo(displayPosition, smooth); } } diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 19d2c7e4..259461a5 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -158,7 +158,8 @@ along with this program. If not, see . HTTPS error Network error API parse error - 404 not found + Server error + 404 not found Tap to refresh Loading Loading in %1$d