package org.wikipedia.page.linkpreview;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.wikipedia.R;
import butterknife.BindView;
import butterknife.ButterKnife;
public class LinkPreviewErrorView extends LinearLayout {
@BindView(R.id.view_link_preview_error_icon) ImageView icon;
@BindView(R.id.view_link_preview_error_text) TextView textView;
public interface Callback {
void onAddToList();
void onDismiss();
}
@Nullable private Callback callback;
@NonNull private OverlayViewAddToListCallback addToListCallback = new OverlayViewAddToListCallback();
@NonNull private OverlayViewDismissCallback dismissCallback = new OverlayViewDismissCallback();
public LinkPreviewErrorView(Context context) {
this(context, null);
}
public LinkPreviewErrorView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public LinkPreviewErrorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
inflate(context, R.layout.view_link_preview_error, this);
ButterKnife.bind(this);
}
public void setCallback(@Nullable Callback callback) {
this.callback = callback;
}
@NonNull OverlayViewAddToListCallback addToListCallback() {
return addToListCallback;
}
@NonNull OverlayViewDismissCallback dismissCallback() {
return dismissCallback;
}
public void setError(@Nullable Throwable caught) {
LinkPreviewErrorType errorType = LinkPreviewErrorType.get(caught);
icon.setImageDrawable(ContextCompat.getDrawable(getContext(), errorType.icon()));
// HACK: This message is delivered in one piece in a link preview but as a separate primary
// message and subtitle in the full page view. Figure out a good way to handle this.
if (errorType == LinkPreviewErrorType.OFFLINE) {
String message = getResources().getString(R.string.page_offline_notice_cannot_load_while_offline)
+ " " + getResources().getString(R.string.page_offline_notice_add_to_reading_list);
textView.setText(message);
} else {
textView.setText(getContext().getResources().getString(errorType.text()));
}
}
private class OverlayViewAddToListCallback implements LinkPreviewOverlayView.Callback {
@Override public void onPrimaryClick() {
if (callback != null) {
callback.onAddToList();
}
}
@Override public void onSecondaryClick() {
}
}
private class OverlayViewDismissCallback implements LinkPreviewOverlayView.Callback {
@Override public void onPrimaryClick() {
if (callback != null) {
callback.onDismiss();
}
}
@Override public void onSecondaryClick() {
}
}
}