package com.gzsll.hupu.ui.pmdetail;
import android.app.Activity;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gzsll.hupu.R;
import com.gzsll.hupu.bean.PmDetail;
import com.gzsll.hupu.components.storage.UserStorage;
import com.gzsll.hupu.ui.browser.BrowserActivity;
import com.gzsll.hupu.ui.content.ContentActivity;
import com.gzsll.hupu.ui.thread.list.ThreadListActivity;
import com.gzsll.hupu.ui.userprofile.UserProfileActivity;
import com.gzsll.hupu.widget.MyMovementMethod;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Created by sll on 2016/5/6.
*/
public class PmDetailAdapter extends RecyclerView.Adapter<PmDetailAdapter.ViewHolder> {
private UserStorage mUserStorage;
private Activity mActivity;
@Inject
public PmDetailAdapter(UserStorage mUserStorage, Activity mActivity) {
this.mUserStorage = mUserStorage;
this.mActivity = mActivity;
}
private static final int TYPE_USER = 1;
private static final int TYPE_OTHER = 2;
private List<PmDetail> mPmDetails = new ArrayList<>();
public void bind(List<PmDetail> pmDetails) {
mPmDetails = pmDetails;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
PmDetail detail = mPmDetails.get(position);
if (detail.puid.equals(mUserStorage.getUid())) {
return TYPE_USER;
} else {
return TYPE_OTHER;
}
}
@Override
public PmDetailAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_USER) {
return new ViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_list_pm_user, parent, false));
} else {
return new ViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_list_pm_other, parent, false));
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
PmDetail detail = mPmDetails.get(position);
holder.detail = detail;
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date(Long.valueOf(detail.create_time) * 1000);
holder.tvDate.setText(format.format(date));
if (!TextUtils.isEmpty(detail.header)) {
holder.ivUser.setImageURI(Uri.parse(detail.header));
}
holder.tvContent.setMovementMethod(MyMovementMethod.getInstance());
holder.tvContent.setText(a(detail.content));
}
@Override
public int getItemCount() {
return mPmDetails.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
PmDetail detail;
@BindView(R.id.tvDate)
TextView tvDate;
@BindView(R.id.ivUser)
SimpleDraweeView ivUser;
@BindView(R.id.pbReply)
ProgressBar pbReply;
@BindView(R.id.tvContent)
TextView tvContent;
@OnClick(R.id.ivUser)
void ivUserClick() {
UserProfileActivity.startActivity(mActivity, detail.puid);
}
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
private SpannableStringBuilder a(String content) {
Matcher matcher = Pattern.compile("<a.+?</a>", Pattern.CASE_INSENSITIVE).matcher(content);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
int i = 0;
while (matcher.find()) {
i = matcher.end();
String group = matcher.group();
spannableStringBuilder.append(content.substring(0, i - group.length()));
spannableStringBuilder.append(span(content.substring(i - group.length(), i)));
}
if (i <= 0) {
spannableStringBuilder.append(content);
} else {
spannableStringBuilder.append(content.substring(i));
}
return spannableStringBuilder;
}
private CharSequence span(String text) {
SpannableStringBuilder ssb = new SpannableStringBuilder(Html.fromHtml(text));
URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class);
for (final URLSpan span : spans) {
int start = ssb.getSpanStart(span);
int end = ssb.getSpanEnd(span);
ssb.removeSpan(span);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
handlerSpan(span);
}
}, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ssb;
}
private void handlerSpan(URLSpan span) {
String url = span.getURL();
if (TextUtils.isEmpty(url)) {
return;
}
Uri uri = Uri.parse(url);
switch (uri.getScheme()) {
case "kanqiu":
if (url.contains("topic")) {
String tid = uri.getLastPathSegment();
ContentActivity.startActivity(mActivity, "", tid, "", 1);
} else if (url.contains("board")) {
String boardId = uri.getLastPathSegment();
ThreadListActivity.startActivity(mActivity, boardId);
}
break;
case "app":
break;
case "http":
case "https":
BrowserActivity.startActivity(mActivity, url);
break;
}
}
}