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