package com.sun.bingo.adapter;
import android.content.Context;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.framework.dialog.ToastTip;
import com.sun.bingo.R;
import com.sun.bingo.control.BmobControl;
import com.sun.bingo.control.NavigateManager;
import com.sun.bingo.control.manager.ImageManager;
import com.sun.bingo.model.BingoEntity;
import com.sun.bingo.model.UserEntity;
import com.sun.bingo.ui.activity.MainActivity;
import com.sun.bingo.ui.activity.UserInfoActivity;
import com.sun.bingo.util.NetWorkUtil;
import com.sun.bingo.util.ShareUtil;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.listener.DeleteListener;
import cn.bmob.v3.listener.UpdateListener;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private List<BingoEntity> mEntities;
private UserEntity mineEntity;
private int type = HANDLE_NORMAL;
public static final int HANDLE_NORMAL = 0;
public static final int HANDLE_CANCEL_FAVORITE = 1;
private static final int TYPE_LIST = 0;
private static final int TYPE_FOOT_VIEW = 1;
private ImageManager mImageManager;
private BmobControl mControl;
private View footView;
public RecyclerViewAdapter(Context context) {
this.mContext = context;
}
public RecyclerViewAdapter(Context context, List<BingoEntity> entities) {
this(context);
this.mEntities = entities;
mineEntity = BmobUser.getCurrentUser(context, UserEntity.class);
mImageManager = new ImageManager(context);
mControl = new BmobControl(context, mineEntity);
}
public void setHandleType(int type) {
this.type = type;
}
@Override
public int getItemCount() {
return mEntities.size() + 1;
}
@Override
public int getItemViewType(int position) {
if (position + 1 == getItemCount()) {
return TYPE_FOOT_VIEW;
} else {
return TYPE_LIST;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
switch (viewType) {
case TYPE_LIST:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_layout, parent, false);
viewHolder = new ListViewHolder(view);
break;
case TYPE_FOOT_VIEW:
footView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_footview_layout, parent, false);
footView.setVisibility(View.GONE);
viewHolder = new FootViewHolder(footView);
break;
default:
viewHolder = new ListViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_layout, parent, false));
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ListViewHolder) {
final ListViewHolder viewHolder = (ListViewHolder) holder;
final BingoEntity entity = mEntities.get(position);
final UserEntity userEntity = entity.getUserEntity();
final int mPosition = position;
if (userEntity != null && !TextUtils.isEmpty(userEntity.getUserAvatar())) {
mImageManager.loadCircleImage(userEntity.getUserAvatar(), viewHolder.ivUserAvatar);
} else {
mImageManager.loadCircleResImage(R.drawable.ic_user_avatar, viewHolder.ivUserAvatar);
}
if (TextUtils.isEmpty(entity.getTitle())) {
viewHolder.tvTitle.setText(entity.getDescribe());
viewHolder.tvDes.setVisibility(View.GONE);
} else {
viewHolder.tvTitle.setText(entity.getTitle());
if (TextUtils.isEmpty(entity.getDescribe())) {
viewHolder.tvDes.setVisibility(View.GONE);
} else {
viewHolder.tvDes.setVisibility(View.VISIBLE);
viewHolder.tvDes.setText(entity.getDescribe());
}
}
if (entity.getFavoriteUserIds() != null && entity.getFavoriteUserIds().size() > 0) {
viewHolder.tvFavoriteCount.setVisibility(View.VISIBLE);
viewHolder.tvFavoriteCount.setText(entity.getFavoriteUserIds().size() + "");
if (mineEntity.getFavoriteList() != null && mineEntity.getFavoriteList().indexOf(entity.getObjectId()) >= 0) {
viewHolder.ivFavorite.setImageResource(R.drawable.ic_favorite);
} else {
viewHolder.ivFavorite.setImageResource(R.drawable.ic_not_favorite);
}
} else {
viewHolder.tvFavoriteCount.setVisibility(View.GONE);
viewHolder.ivFavorite.setImageResource(R.drawable.ic_not_favorite);
}
if (entity.getImageList() != null && entity.getImageList().size() > 0) {
viewHolder.ivImageCover.setVisibility(View.VISIBLE);
mImageManager.loadUrlImage(entity.getImageList().get(0), viewHolder.ivImageCover);
} else {
viewHolder.ivImageCover.setVisibility(View.GONE);
}
viewHolder.ivUserAvatar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (entity.getUserEntity() != null) {
NavigateManager.gotoUserInfoActivity(mContext, entity.getUserEntity());
}
}
});
viewHolder.llFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mControl.favoriteBingo(entity, new UpdateListener() {
@Override
public void onSuccess() {
notifyDataSetChanged();
}
@Override
public void onFailure(int i, String s) {
}
});
}
});
viewHolder.rlRootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (NetWorkUtil.isLinkAvailable(entity.getWebsite())) {
NavigateManager.gotoBingoDetailActivity(mContext, entity);
}
}
});
}
}
public void setLoadMoreViewText(String text) {
if (footView == null) return;
((TextView) ButterKnife.findById(footView, R.id.tv_loading_more)).setText(text);
notifyItemChanged(getItemCount());
}
public void setLoadMoreViewVisibility(int visibility) {
if (footView == null) return;
footView.setVisibility(visibility);
notifyItemChanged(getItemCount());
}
public boolean isLoadMoreShown() {
if (footView == null) return false;
return footView.isShown();
}
public String getLoadMoreViewText() {
if (footView == null) return "";
return ((TextView) ButterKnife.findById(footView, R.id.tv_loading_more)).getText().toString();
}
/**
* 弹出菜单
*/
private void showPopMenu(View ancho, final int position) {
mineEntity = BmobUser.getCurrentUser(mContext, UserEntity.class);
final BingoEntity entity = mEntities.get(position);
List<String> favoriteList = mineEntity.getFavoriteList();
PopupMenu popupMenu = new PopupMenu(mContext, ancho);
popupMenu.getMenuInflater().inflate(R.menu.item_pop_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.pop_favorite:
return true;
case R.id.pop_share_sina:
if (mContext instanceof MainActivity) {
MainActivity mainActivity = (MainActivity) mContext;
mainActivity.sendMultiMessageToSina(entity);
} else if (mContext instanceof UserInfoActivity) {
UserInfoActivity userInfoActivity = (UserInfoActivity) mContext;
userInfoActivity.sendMultiMessageToSina(entity);
}
break;
case R.id.pop_share:
ShareUtil.share(mContext, entity.getDescribe() + entity.getWebsite() + "\n[来自" + mContext.getString(R.string.app_name) + "的分享,下载地址:https://fir.im/Bingo]");
return true;
case R.id.pop_delete:
new MaterialDialog.Builder(mContext)
.content("确认删除该Bingo么?")
.contentColor(mContext.getResources().getColor(R.color.font_black_3))
.positiveText(R.string.ok)
.negativeText(R.string.cancel)
.negativeColor(mContext.getResources().getColor(R.color.font_black_3))
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
deleteMyBingo(position);
}
@Override
public void onNegative(MaterialDialog dialog) {
}
})
.show();
break;
}
return false;
}
});
if (type == HANDLE_CANCEL_FAVORITE || (favoriteList != null && favoriteList.indexOf(entity.getObjectId()) >= 0)) {
MenuItem menuItem = popupMenu.getMenu().findItem(R.id.pop_favorite);
menuItem.setTitle("取消收藏");
}
MenuItem menuItem = popupMenu.getMenu().findItem(R.id.pop_delete);
if (entity.getUserId().equals(mineEntity.getObjectId())) {
menuItem.setVisible(true);
} else {
menuItem.setVisible(false);
}
popupMenu.show();
}
/**
* 删除我的Bingo
*/
private void deleteMyBingo(final int position) {
BingoEntity entity = mEntities.get(position);
entity.delete(mContext, new DeleteListener() {
@Override
public void onSuccess() {
ToastTip.show("删除成功");
mEntities.remove(position);
notifyDataSetChanged();
}
@Override
public void onFailure(int i, String s) {
ToastTip.show("删除失败");
}
});
}
static class ListViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.iv_image_cover)
ImageView ivImageCover;
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.iv_user_avatar)
ImageView ivUserAvatar;
@BindView(R.id.ll_title_user)
RelativeLayout llTitleUser;
@BindView(R.id.tv_des)
TextView tvDes;
@BindView(R.id.tv_tag_from)
TextView tvTagFrom;
@BindView(R.id.tv_favorite_count)
TextView tvFavoriteCount;
@BindView(R.id.iv_favorite)
ImageView ivFavorite;
@BindView(R.id.rl_root_view)
RelativeLayout rlRootView;
@BindView(R.id.ll_favorite)
LinearLayout llFavorite;
public ListViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
static class FootViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_loading_more)
TextView tvLoadingMore;
public FootViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}