package name.caiyao.microreader.ui.adapter;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.support.v7.widget.CardView;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import name.caiyao.microreader.R;
import name.caiyao.microreader.api.util.UtilRequest;
import name.caiyao.microreader.bean.weiboVideo.WeiboVideoBlog;
import name.caiyao.microreader.config.Config;
import name.caiyao.microreader.ui.activity.VideoActivity;
import name.caiyao.microreader.ui.activity.VideoWebViewActivity;
import name.caiyao.microreader.utils.DBUtils;
import name.caiyao.microreader.utils.ImageLoader;
import name.caiyao.microreader.utils.SharePreferenceUtil;
import okhttp3.ResponseBody;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by 蔡小木 on 2016/4/29 0029.
*/
public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHolder> {
private ArrayList<WeiboVideoBlog> gankVideoItems;
private Context mContext;
public VideoAdapter(Context context, ArrayList<WeiboVideoBlog> gankVideoItems) {
this.gankVideoItems = gankVideoItems;
this.mContext = context;
}
@Override
public VideoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new VideoViewHolder(LayoutInflater.from(mContext).inflate(R.layout.video_item, parent, false));
}
@Override
public void onBindViewHolder(final VideoViewHolder holder, int position) {
final WeiboVideoBlog weiboVideoBlog = gankVideoItems.get(position);
final String title = weiboVideoBlog.getBlog().getText().replaceAll("&[a-zA-Z]{1,10};", "").replaceAll(
"<[^>]*>", "");
if (DBUtils.getDB(mContext).isRead(Config.VIDEO, weiboVideoBlog.getBlog().getPageInfo().getVideoUrl(), 1))
holder.tvTitle.setTextColor(Color.GRAY);
else
holder.tvTitle.setTextColor(Color.BLACK);
ImageLoader.loadImage(mContext, weiboVideoBlog.getBlog().getPageInfo().getVideoPic(), holder.mIvVideo);
holder.tvTitle.setText(title);
holder.tvTime.setText(weiboVideoBlog.getBlog().getCreateTime());
holder.btnVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(mContext, holder.btnVideo);
popupMenu.getMenuInflater().inflate(R.menu.pop_menu, popupMenu.getMenu());
popupMenu.getMenu().removeItem(R.id.pop_fav);
final boolean isRead = DBUtils.getDB(mContext).isRead(Config.VIDEO, weiboVideoBlog.getBlog().getPageInfo().getVideoUrl(), 1);
if (!isRead)
popupMenu.getMenu().findItem(R.id.pop_unread).setTitle(R.string.common_set_read);
else
popupMenu.getMenu().findItem(R.id.pop_unread).setTitle(R.string.common_set_unread);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.pop_unread:
if (isRead) {
DBUtils.getDB(mContext).insertHasRead(Config.VIDEO, weiboVideoBlog.getBlog().getPageInfo().getVideoUrl(), 0);
holder.tvTitle.setTextColor(Color.BLACK);
} else {
DBUtils.getDB(mContext).insertHasRead(Config.VIDEO, weiboVideoBlog.getBlog().getPageInfo().getVideoUrl(), 1);
holder.tvTitle.setTextColor(Color.GRAY);
}
break;
case R.id.pop_share:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, title + " " + weiboVideoBlog.getBlog().getPageInfo().getVideoUrl() + mContext.getString(R.string.share_tail));
shareIntent.setType("text/plain");
//设置分享列表的标题,并且每次都显示分享列表
mContext.startActivity(Intent.createChooser(shareIntent, mContext.getString(R.string.share)));
break;
}
return true;
}
});
popupMenu.show();
}
});
holder.cvVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DBUtils.getDB(mContext).insertHasRead(Config.VIDEO, weiboVideoBlog.getBlog().getPageInfo().getVideoUrl(), 1);
holder.tvTitle.setTextColor(Color.GRAY);
VideoAdapter.this.getPlayUrl(weiboVideoBlog, title);
}
});
}
private void getPlayUrl(final WeiboVideoBlog weiboVideoBlog, final String title) {
final ProgressDialog progressDialog = new ProgressDialog(mContext);
progressDialog.setMessage(mContext.getString(R.string.fragment_video_get_url));
progressDialog.show();
UtilRequest.getUtilApi().getVideoUrl(weiboVideoBlog.getBlog().getPageInfo().getVideoUrl())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (progressDialog.isShowing()) {
e.printStackTrace();
progressDialog.dismiss();
Toast.makeText(mContext, "视频解析失败!", Toast.LENGTH_SHORT).show();
mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(weiboVideoBlog.getBlog().getPageInfo().getVideoUrl())));
}
}
@Override
public void onNext(ResponseBody responseBody) {
//防止停止后继续执行
if (progressDialog.isShowing()) {
progressDialog.dismiss();
try {
String shareUrl = weiboVideoBlog.getBlog().getPageInfo().getVideoUrl();
String url = responseBody.string();
if (TextUtils.isEmpty(shareUrl)) {
Toast.makeText(mContext, "播放地址为空", Toast.LENGTH_SHORT).show();
return;
}
Log.i("TAG", shareUrl);
Log.i("TAG", url);
if (url.contains("http")) {
mContext.startActivity(new Intent(mContext, VideoActivity.class)
.putExtra("url", url)
.putExtra("shareUrl", shareUrl)
.putExtra("title", title));
} else {
if (SharePreferenceUtil.isUseLocalBrowser(mContext))
mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(shareUrl)));
else
mContext.startActivity(new Intent(mContext, VideoWebViewActivity.class)
.putExtra("url", shareUrl));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
@Override
public int getItemCount() {
return gankVideoItems.size();
}
public class VideoViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.tv_time)
TextView tvTime;
@BindView(R.id.cv_video)
CardView cvVideo;
@BindView(R.id.iv_video)
ImageView mIvVideo;
@BindView(R.id.btn_video)
Button btnVideo;
public VideoViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}