Add thread load error layout

filtering
Floens 10 years ago
parent ead819eeb4
commit aaeb4833ac
  1. 1
      Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java
  2. 79
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java
  3. 6
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java
  4. 23
      Clover/app/src/main/res/layout/layout_thread_error.xml
  5. 2
      Clover/app/src/main/res/values/strings.xml

@ -113,6 +113,7 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
@Override
public void onChanLoaderError(VolleyError error) {
// TODO show error in status view is content is shown
threadPresenterCallback.showError(error);
}

@ -23,8 +23,16 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
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;
import org.floens.chan.R;
@ -43,16 +51,28 @@ import org.floens.chan.utils.AndroidUtils;
import java.util.List;
import javax.net.ssl.SSLException;
/**
* Wrapper around ThreadListLayout, so that it cleanly manages between loadbar and listview.
*/
public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPresenterCallback, PostPopupHelper.PostPopupHelperCallback {
public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPresenterCallback, PostPopupHelper.PostPopupHelperCallback, View.OnClickListener {
private enum Visible {
LOADING,
THREAD,
ERROR;
}
private ThreadLayoutCallback callback;
private ThreadPresenter presenter;
private ThreadPresenter presenter;
private ThreadListLayout threadListLayout;
private LinearLayout errorLayout;
private TextView errorText;
private Button errorRetryButton;
private PostPopupHelper postPopupHelper;
private boolean visible;
private Visible visible;
public ThreadLayout(Context context) {
super(context);
@ -77,7 +97,22 @@ public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPres
postPopupHelper = new PostPopupHelper(getContext(), presenter, this);
switchVisible(false);
errorLayout = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.layout_thread_error, this, false);
errorText = (TextView) errorLayout.findViewById(R.id.text);
errorText.setTypeface(AndroidUtils.ROBOTO_MEDIUM);
errorRetryButton = (Button) errorLayout.findViewById(R.id.button);
errorRetryButton.setOnClickListener(this);
switchVisible(Visible.LOADING);
}
@Override
public void onClick(View v) {
if (v == errorRetryButton) {
presenter.requestData();
}
}
public void setCallback(ThreadLayoutCallback callback) {
@ -90,20 +125,32 @@ public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPres
@Override
public void showPosts(ChanThread thread) {
threadListLayout.showPosts(thread, !visible);
switchVisible(true);
threadListLayout.showPosts(thread, visible != Visible.THREAD);
switchVisible(Visible.THREAD);
callback.onShowPosts();
}
@Override
public void showError(VolleyError error) {
switchVisible(true);
threadListLayout.showError(error);
switchVisible(Visible.ERROR);
String errorMessage;
if (error.getCause() instanceof SSLException) {
errorMessage = getContext().getString(R.string.thread_load_failed_ssl);
} else if ((error instanceof NoConnectionError) || (error instanceof NetworkError)) {
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);
}
errorText.setText(errorMessage);
}
@Override
public void showLoading() {
switchVisible(false);
switchVisible(Visible.LOADING);
}
public void showPostInfo(String info) {
@ -187,10 +234,20 @@ public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPres
return postPopupHelper.isOpen();
}
private void switchVisible(boolean visible) {
private void switchVisible(Visible visible) {
if (this.visible != visible) {
this.visible = visible;
setView(visible ? threadListLayout : null);
switch (visible) {
case LOADING:
setView(null);
break;
case THREAD:
setView(threadListLayout);
break;
case ERROR:
setView(errorLayout);
break;
}
}
}

@ -23,8 +23,6 @@ import android.view.View;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.android.volley.VolleyError;
import org.floens.chan.core.model.ChanThread;
import org.floens.chan.core.model.Post;
import org.floens.chan.core.model.PostImage;
@ -94,10 +92,6 @@ public class ThreadListLayout extends RelativeLayout {
postAdapter.setThread(thread);
}
public void showError(VolleyError error) {
}
public ThumbnailView getThumbnail(PostImage postImage) {
ThumbnailView thumbnail = null;
for (int i = 0; i < listView.getChildCount(); i++) {

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/text"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="16dp"/>
<Button
android:id="@+id/button"
android:text="@string/thread_load_failed_retry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</LinearLayout>

@ -75,7 +75,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="thread_load_failed_ssl">HTTPS error</string>
<string name="thread_load_failed_network">No network</string>
<string name="thread_load_failed_parsing">Server inaccessible</string>
<string name="thread_load_failed_parsing">API parse error</string>
<string name="thread_load_failed_server">404 not found</string>
<string name="thread_load_end_of_line">No more posts</string>
<string name="thread_not_specified">Select a thread</string>

Loading…
Cancel
Save