Files
assistant-android/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java

372 lines
14 KiB
Java

package com.gh.gamecenter.message;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import com.gh.base.OnRequestCallBackListener;
import com.gh.common.util.CommentUtils;
import com.gh.common.util.EntranceUtils;
import com.gh.common.util.ImageUtils;
import com.gh.common.util.QQUtils;
import com.gh.gamecenter.GameDetailActivity;
import com.gh.gamecenter.NewsDetailActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.SubjectActivity;
import com.gh.gamecenter.WebActivity;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.entity.MessageKeFuEntity;
import com.gh.gamecenter.eventbus.EBUISwitch;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.google.gson.Gson;
import com.lightgame.adapter.BaseRecyclerAdapter;
import com.lightgame.utils.Utils;
import org.greenrobot.eventbus.EventBus;
import org.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.HttpException;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import static com.gh.gamecenter.message.MessageFragment.EB_KEFUMARKREADCOUNT;
/**
* Created by khy on 2017/4/10.
* 消息-客服适配器
*/
public class KeFuFragmentAdapter extends BaseRecyclerAdapter<ViewHolder> {
private OnRequestCallBackListener mCallBackListener;
private List<MessageKeFuEntity> mKeFuList;
private List<String> mReceiveIds;
private int mCurMarkCount;
private boolean isRemove;
private boolean isNetworkError;
private boolean isLoaded;
public KeFuFragmentAdapter(Context context, OnRequestCallBackListener listener) {
super(context);
this.mCallBackListener = listener;
mReceiveIds = new ArrayList<>();
mKeFuList = new ArrayList<>();
mCurMarkCount = 0;
}
public void loadData(final int offset) {
isLoaded = false;
RetrofitManager.getInstance(mContext).getApi()
.getMessageKeFuData(offset, 20)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<List<MessageKeFuEntity>>() {
@Override
public void onResponse(List<MessageKeFuEntity> response) {
super.onResponse(response);
if (response.size() > 0) {
for (MessageKeFuEntity keFuEntity : response) {
if (!keFuEntity.isReceive()) {
mReceiveIds.add(keFuEntity.getId());
}
}
if (response.size() < 20) {
isRemove = true;
}
if (offset == 0) {
mCallBackListener.loadDone();
}
mKeFuList.addAll(response);
// if (!fragment.isHidden() && !fragment.isEverPause()) {
// notifyItemRangeInserted(mKeFuList.size() - response.size(), response.size());
// } else {
notifyDataSetChanged();
// }
if (mReceiveIds.size() > 0) {
postDataReceive();
}
} else {
isRemove = true;
if (mKeFuList.size() == 0) {
mCallBackListener.loadEmpty();
}
}
isLoaded = true;
}
@Override
public void onFailure(HttpException e) {
isLoaded = true;
if (offset == 0) {
mCallBackListener.loadError();
} else {
isNetworkError = true;
notifyItemChanged(getItemCount() - 1);
}
}
});
}
private void postDataReceive() {
String ids = new Gson().toJson(mReceiveIds);
final RequestBody body = RequestBody.create(MediaType.parse("application/json"), ids);
RetrofitManager.getInstance(mContext).getApi()
.postKeFuDataReceive(body)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(new Response<ResponseBody>() {
@Override
public void onResponse(ResponseBody response) {
super.onResponse(response);
mReceiveIds.clear();
}
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
}
});
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {
View view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false);
return new FooterViewHolder(view);
} else {
View view = mLayoutInflater.inflate(R.layout.message_kefu_item, parent, false);
return new KeFuViewHolder(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof KeFuViewHolder) {
MessageKeFuEntity keFuEntity = mKeFuList.get(position);
KeFuViewHolder viewHolder = (KeFuViewHolder) holder;
initKeFuViewHolder(viewHolder, keFuEntity, position);
} else if (holder instanceof FooterViewHolder) {
FooterViewHolder viewHolder = (FooterViewHolder) holder;
initFooterViewHolder(viewHolder);
}
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) {
return 0;
} else {
return 1;
}
}
@Override
public int getItemCount() {
if (mKeFuList.size() == 0) {
return 0;
}
return mKeFuList.size() + 1;
}
private void initFooterViewHolder(FooterViewHolder viewHolder) {
viewHolder.initItemPadding();
if (isNetworkError) {
viewHolder.loading.setVisibility(View.GONE);
viewHolder.hint.setText(R.string.loading_failed_retry);
viewHolder.itemView.setClickable(true);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isNetworkError = false;
notifyItemChanged(getItemCount() - 1);
loadData(mKeFuList.size());
}
});
} else if (isRemove) {
viewHolder.loading.setVisibility(View.GONE);
viewHolder.hint.setText(R.string.loading_complete);
viewHolder.itemView.setClickable(false);
viewHolder.lineLeft.setVisibility(View.VISIBLE);
viewHolder.lineRight.setVisibility(View.VISIBLE);
} else {
viewHolder.loading.setVisibility(View.VISIBLE);
viewHolder.hint.setText(R.string.loading);
viewHolder.itemView.setClickable(false);
}
}
private void initKeFuViewHolder(KeFuViewHolder viewHolder, final MessageKeFuEntity keFuEntity, final int position) {
viewHolder.content.setText(Html.fromHtml(keFuEntity.getMessage()));
if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) {
viewHolder.suggestion.setVisibility(View.VISIBLE);
viewHolder.suggestion.setText(keFuEntity.getSuggestion());
} else {
viewHolder.suggestion.setVisibility(View.GONE);
}
if (keFuEntity.isRead()) {
viewHolder.readHint.setVisibility(View.GONE);
} else {
viewHolder.readHint.setVisibility(View.VISIBLE);
}
if (keFuEntity.getLink() != null && !TextUtils.isEmpty(keFuEntity.getLink().getDocument())) {
viewHolder.skip.setText(keFuEntity.getLink().getDocument());
viewHolder.skip.setVisibility(View.VISIBLE);
} else {
viewHolder.skip.setVisibility(View.GONE);
}
MessageKeFuEntity.ServiceEntity serviceEntity = keFuEntity.getServiceEntity();
viewHolder.kefuName.setText(R.string.kefu_default_name);
if (serviceEntity != null) {
String name = serviceEntity.getName();
if (!TextUtils.isEmpty(name)) {
viewHolder.kefuName.setText(name);
}
ImageUtils.Companion.display(viewHolder.kefuIcon, serviceEntity.getIcon());
}
CommentUtils.setCommentTime(viewHolder.time, keFuEntity.getTime());
if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) {
StringBuffer suggest = new StringBuffer();
suggest.append("反馈原文:");
suggest.append(keFuEntity.getSuggestion());
viewHolder.suggestion.setVisibility(View.VISIBLE);
viewHolder.suggestion.setText(suggest);
} else {
viewHolder.suggestion.setVisibility(View.GONE);
}
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (keFuEntity.getLink() != null) {
onReadControl(keFuEntity, position);
}
}
});
viewHolder.skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (keFuEntity.getLink() == null || keFuEntity.getLink().getType() == null) {
Utils.toast(mContext, "数据请求失败");
return;
}
switch (keFuEntity.getLink().getType()) {
case "游戏":
if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) {
GameDetailActivity.startGameDetailActivity(mContext, keFuEntity.getLink().getId(), "");
}
break;
case "QQ号":
if (!TextUtils.isEmpty(keFuEntity.getLink().getQq())) {
QQUtils.startQQSession(mContext, keFuEntity.getLink().getQq());
}
break;
case "web":
if (!TextUtils.isEmpty(keFuEntity.getLink().getUrl())) {
mContext.startActivity(WebActivity.getIntentByUrl(mContext, keFuEntity.getLink().getUrl()));
}
break;
case "QQ群":
if (!TextUtils.isEmpty(keFuEntity.getLink().getKey())) {
QQUtils.joinQQGroup(mContext, keFuEntity.getLink().getKey());
}
break;
case "新闻":
if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) {
Intent intent2 = new Intent(mContext, NewsDetailActivity.class);
intent2.putExtra(EntranceUtils.KEY_ENTRANCE, "(消息-公告)");
intent2.putExtra(EntranceUtils.KEY_NEWSID, keFuEntity.getLink().getId());
mContext.startActivity(intent2);
}
break;
case "专题":
if (!TextUtils.isEmpty(keFuEntity.getLink().getId())) {
SubjectActivity.startSubjectActivity(mContext, keFuEntity.getLink().getId()
, null, false, "(消息-客服)");
}
break;
}
onReadControl(keFuEntity, position);
}
});
}
private void onReadControl(MessageKeFuEntity keFuEntity, int position) {
if (!keFuEntity.isRead()) {
mCurMarkCount++;
keFuEntity.setRead(true);
notifyItemChanged(position);
JSONArray array = new JSONArray();
array.put(keFuEntity.getId());
RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString());
postMarkRead(body);
}
EventBus.getDefault().post(new EBUISwitch(EB_KEFUMARKREADCOUNT, mCurMarkCount));
}
private void postMarkRead(final RequestBody body) {
RetrofitManager.getInstance(mContext)
.getApi()
.postMarkKeFuRead(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<ResponseBody>() {
@Override
public void onResponse(ResponseBody response) {
super.onResponse(response);
}
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
}
});
}
public boolean isLoaded() {
return isLoaded;
}
public boolean isRemove() {
return isRemove;
}
}