341 lines
14 KiB
Java
341 lines
14 KiB
Java
package com.gh.gamecenter.adapter;
|
||
|
||
import android.annotation.SuppressLint;
|
||
import android.content.Context;
|
||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||
import androidx.recyclerview.widget.RecyclerView;
|
||
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||
import android.text.Html;
|
||
import android.text.Spanned;
|
||
import android.text.TextUtils;
|
||
import android.view.MotionEvent;
|
||
import android.view.View;
|
||
import android.view.ViewGroup;
|
||
|
||
import com.gh.base.OnRequestCallBackListener;
|
||
import com.gh.common.util.DisplayUtils;
|
||
import com.gh.common.util.ImageUtils;
|
||
import com.gh.common.util.LibaoUtils;
|
||
import com.gh.common.util.PlatformUtils;
|
||
import com.gh.common.util.StringUtils;
|
||
import com.gh.common.view.DownloadProgressBar;
|
||
import com.gh.gamecenter.GameDetailActivity;
|
||
import com.gh.gamecenter.R;
|
||
import com.gh.gamecenter.SuggestionActivity;
|
||
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
||
import com.gh.gamecenter.adapter.viewholder.LibaoDetailContentViewHolder;
|
||
import com.gh.gamecenter.adapter.viewholder.LibaoDetailTopViewHolder;
|
||
import com.gh.gamecenter.entity.GameEntity;
|
||
import com.gh.gamecenter.entity.LibaoDetailEntity;
|
||
import com.gh.gamecenter.entity.LibaoEntity;
|
||
import com.gh.gamecenter.entity.LibaoStatusEntity;
|
||
import com.gh.gamecenter.entity.MeEntity;
|
||
import com.gh.gamecenter.entity.UserDataLibaoEntity;
|
||
import com.gh.gamecenter.retrofit.Response;
|
||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||
import com.gh.gamecenter.suggest.SuggestType;
|
||
import com.lightgame.adapter.BaseRecyclerAdapter;
|
||
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
import java.util.Locale;
|
||
|
||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||
import io.reactivex.schedulers.Schedulers;
|
||
import retrofit2.HttpException;
|
||
|
||
/**
|
||
* Created by khy on 2016/12/13.
|
||
*/
|
||
public class LibaoDetailAdapter extends BaseRecyclerAdapter<ViewHolder> {
|
||
|
||
public static final int LIBAO_MAX_LINES = 3;
|
||
private OnRequestCallBackListener mOnRequestCallBackListener;
|
||
private OnCodeScrollListener mOnCodeScrollListener;
|
||
|
||
private DownloadProgressBar mDownloadPb;
|
||
|
||
private LibaoEntity mLibaoEntity;
|
||
private LibaoDetailEntity mLibaoDetailEntity;
|
||
private GameEntity mGameEntity;
|
||
|
||
private String mEntrance;
|
||
private final int TYPE_FOOTER = 100;
|
||
|
||
public LibaoDetailAdapter(Context context, OnRequestCallBackListener onRequestCallBackListener,
|
||
OnCodeScrollListener onCodeScrollListener, LibaoEntity libaoEntity,
|
||
DownloadProgressBar downloadPb, String entrance) {
|
||
super(context);
|
||
mOnRequestCallBackListener = onRequestCallBackListener;
|
||
mOnCodeScrollListener = onCodeScrollListener;
|
||
mLibaoEntity = libaoEntity;
|
||
mDownloadPb = downloadPb;
|
||
mEntrance = entrance;
|
||
}
|
||
|
||
public void setGameEntity(GameEntity gameEntity) {
|
||
mGameEntity = gameEntity;
|
||
}
|
||
|
||
public GameEntity getGameEntity() {
|
||
return mGameEntity;
|
||
}
|
||
|
||
public void addLibaoDetail(Context context, boolean isExistGameData) {
|
||
RetrofitManager.getInstance(context).getApi().getLibaoDetail(mLibaoEntity.getId())
|
||
.subscribeOn(Schedulers.io())
|
||
.observeOn(AndroidSchedulers.mainThread())
|
||
.subscribe(new Response<LibaoDetailEntity>() {
|
||
@Override
|
||
public void onResponse(LibaoDetailEntity response) {
|
||
mLibaoDetailEntity = response;
|
||
if (isExistGameData) {
|
||
MeEntity userData = response.getMe();
|
||
if (mLibaoEntity.isActive()) { // 以active判断礼包入口 true 为存号箱入口
|
||
// 合并userData数据
|
||
mLibaoEntity.setMe(userData);
|
||
}
|
||
mOnRequestCallBackListener.loadDone(); // 回调 检查领取状态(是否可以重复领取/重复淘号)
|
||
notifyDataSetChanged();
|
||
} else {
|
||
mOnRequestCallBackListener.loadEmpty();
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onFailure(HttpException e) {
|
||
if (e != null && e.code() == 404) {
|
||
mOnRequestCallBackListener.loadEmpty();
|
||
} else {
|
||
mOnRequestCallBackListener.loadError();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
@Override
|
||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||
View view;
|
||
switch (viewType) {
|
||
case 0:
|
||
view = mLayoutInflater.inflate(R.layout.libaodetail_item_top, parent, false);
|
||
return new LibaoDetailTopViewHolder(view);
|
||
case TYPE_FOOTER:
|
||
view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false);
|
||
return new FooterViewHolder(view);
|
||
default:
|
||
view = mLayoutInflater.inflate(R.layout.libaodetail_item_content, parent, false);
|
||
return new LibaoDetailContentViewHolder(view);
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||
if (holder instanceof LibaoDetailTopViewHolder) {
|
||
initLibaoDetailTop((LibaoDetailTopViewHolder) holder);
|
||
} else if (holder instanceof LibaoDetailContentViewHolder) {
|
||
initLibaoDetailContent((LibaoDetailContentViewHolder) holder, position);
|
||
} else if (holder instanceof FooterViewHolder) {
|
||
FooterViewHolder viewHolder = (FooterViewHolder) holder;
|
||
viewHolder.initItemPadding();
|
||
viewHolder.loading.setVisibility(View.GONE);
|
||
viewHolder.hint.setText(R.string.libao_suggestion_hint);
|
||
|
||
viewHolder.itemView.setOnClickListener(v ->
|
||
SuggestionActivity.startSuggestionActivity(mContext,
|
||
SuggestType.normal, "libao",
|
||
StringUtils.buildString(mLibaoEntity.getGame().getName(), ",",
|
||
mLibaoEntity.getName(), "有问题:")));
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public int getItemViewType(int position) {
|
||
if (position == getItemCount() - 1) {
|
||
return TYPE_FOOTER;
|
||
}
|
||
return position;
|
||
}
|
||
|
||
@Override
|
||
public int getItemCount() {
|
||
if (mLibaoDetailEntity != null && mLibaoEntity != null) return 3; // top + content + bottom
|
||
return 0;
|
||
}
|
||
|
||
@SuppressLint("ClickableViewAccessibility")
|
||
private void initLibaoDetailTop(LibaoDetailTopViewHolder holder) {
|
||
|
||
if (TextUtils.isEmpty(mLibaoEntity.getDes())) { // 由动态进来的数据不存咋des字段
|
||
mLibaoEntity.setDes(mLibaoDetailEntity.getDes());
|
||
}
|
||
|
||
holder.itemView.setOnClickListener(v -> {
|
||
if (mGameEntity != null) {
|
||
GameDetailActivity.startGameDetailActivity(mContext, mGameEntity, mEntrance);
|
||
}
|
||
});
|
||
|
||
ImageUtils.display(holder.libaoGameIcon, mLibaoEntity.getIcon());
|
||
holder.libaoName.setText(mLibaoEntity.getName());
|
||
if (TextUtils.isEmpty(mLibaoEntity.getPlatform())) {
|
||
holder.libaoGameName.setText(mLibaoEntity.getGame().getName());
|
||
} else {
|
||
holder.libaoGameName.setText((mLibaoEntity.getGame().getName() + " - " +
|
||
PlatformUtils.getInstance(mContext).getPlatformName(mLibaoEntity.getPlatform())));
|
||
}
|
||
|
||
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
|
||
linearLayoutManager.setStackFromEnd(true);
|
||
holder.libaoCodeRv.setLayoutManager(linearLayoutManager);
|
||
|
||
int count = (int) (((float) mLibaoEntity.getAvailable() / (float) mLibaoEntity.getTotal()) * 100);
|
||
Spanned content = null;
|
||
String status = mLibaoEntity.getBeforeStatus();
|
||
if ("coming".equals(status) || "finish".equals(status) || TextUtils.isEmpty(status)) {
|
||
content = Html.fromHtml("剩余:--");
|
||
} else if ("ling".equals(status) || "linged".equals(status)) {
|
||
content = Html.fromHtml(StringUtils.buildString("剩余:", "<font color=\"#06D0A8\">", count + "%", "</font>"));
|
||
} else if ("tao".equals(status) || "taoed".equals(status)) {
|
||
content = Html.fromHtml(StringUtils.buildString("剩余:", String.valueOf(count), "%"));
|
||
} else if ("used_up".equals(status)) {
|
||
content = Html.fromHtml("剩余:0% ");
|
||
}
|
||
|
||
//已领取或已淘号
|
||
if (mLibaoEntity.getMe() != null && mLibaoEntity.getMe().getUserDataLibaoList() != null
|
||
&& mLibaoEntity.getMe().getUserDataLibaoList().size() > 0) {
|
||
List<UserDataLibaoEntity> userDataLibaoList = mLibaoEntity.getMe().getUserDataLibaoList();
|
||
LibaoUtils.initLibaoBtn(mContext, holder.libaoCopyBtn, mLibaoEntity,
|
||
mLibaoDetailEntity.getInstallRequired(), this,
|
||
StringUtils.buildString(mEntrance, "+(礼包详情[", mLibaoEntity.getName(), "])"));
|
||
holder.libaoDes.setText(content);
|
||
|
||
holder.libaoCodeRv.setVisibility(View.VISIBLE);
|
||
holder.libaoCodeRv.setAdapter(new LiBaoCodeAdapter(mContext, userDataLibaoList));
|
||
ViewGroup.LayoutParams params = holder.libaoCodeRv.getLayoutParams();
|
||
if (userDataLibaoList.size() <= LIBAO_MAX_LINES) {
|
||
params.height = userDataLibaoList.size() * DisplayUtils.dip2px(mContext, 40);
|
||
} else {
|
||
params.height = LIBAO_MAX_LINES * DisplayUtils.dip2px(mContext, 40);
|
||
}
|
||
holder.libaoCodeRv.setLayoutParams(params);
|
||
|
||
holder.libaoCodeRv.setOnTouchListener((v, event) -> {
|
||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||
mOnCodeScrollListener.isScroll(false);
|
||
} else if (event.getAction() == MotionEvent.ACTION_UP) {
|
||
mOnCodeScrollListener.isScroll(true);
|
||
}
|
||
return false;
|
||
});
|
||
return;
|
||
}
|
||
|
||
holder.libaoDes.setText(content);
|
||
|
||
if (mLibaoEntity.getStatus() != null && mLibaoDetailEntity != null) {
|
||
LibaoUtils.initLibaoBtn(mContext, holder.libaoCopyBtn, mLibaoEntity,
|
||
mLibaoDetailEntity.getInstallRequired(), this,
|
||
StringUtils.buildString(mEntrance, "+(礼包详情[", mLibaoEntity.getName(), "])"));
|
||
}
|
||
|
||
// 判断按钮状态是否为空(礼包详情进入),重新获取
|
||
if (TextUtils.isEmpty(status)) {
|
||
LibaoUtils.getLibaoStatus(mContext, mLibaoEntity.getId(), new LibaoUtils.PostLibaoListener() {
|
||
@Override
|
||
public void postSucceed(Object response) {
|
||
List<LibaoStatusEntity> statusList = (List<LibaoStatusEntity>) response;
|
||
if (statusList.size() != 0) {
|
||
mLibaoEntity.setStatus(statusList.get(0).getStatus());
|
||
mLibaoEntity.setAvailable(statusList.get(0).getAvailable());
|
||
mLibaoEntity.setTotal(statusList.get(0).getTotal());
|
||
notifyItemChanged(0);
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void postFailed(Throwable error) {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
private void initLibaoDetailContent(LibaoDetailContentViewHolder holder, int position) {
|
||
|
||
if (mLibaoEntity.getContent() != null) {
|
||
holder.mLibaodetailContentLl.setVisibility(View.VISIBLE);
|
||
holder.mLibaodetailContent.setText(Html.fromHtml(mLibaoEntity.getContent()));
|
||
}
|
||
if (mLibaoDetailEntity != null) {
|
||
holder.mLibaodetailTimeLl.setVisibility(View.VISIBLE);
|
||
if (mLibaoDetailEntity.getInstallRequired()) {
|
||
Spanned content;
|
||
if (TextUtils.isEmpty(mLibaoEntity.getPlatform())) {
|
||
content = Html.fromHtml(mContext.getString(R.string.libao_install_hint, mLibaoEntity.getGame().getName()));
|
||
} else {
|
||
content = Html.fromHtml(mContext.getString(R.string.libao_install_hint_platform, mLibaoEntity.getGame().getName(),
|
||
PlatformUtils.getInstance(mContext).getPlatformName(mLibaoEntity.getPlatform())));
|
||
}
|
||
holder.mLibaodetailCondition.setVisibility(View.VISIBLE);
|
||
holder.mLibaodetailCondition.setText(content);
|
||
}
|
||
if (mLibaoDetailEntity.getTime() != null) {
|
||
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm", Locale.CHINA);
|
||
String start = format.format((mLibaoDetailEntity.getTime().getStart() * 1000));
|
||
String end = format.format((mLibaoDetailEntity.getTime().getEnd() * 1000));
|
||
|
||
holder.mLibaodetailTimeStart.setText(StringUtils.buildString("开始时间:", start));
|
||
holder.mLibaodetailTimeEnd.setText(StringUtils.buildString("截止时间:", end));
|
||
}
|
||
|
||
}
|
||
if (mLibaoDetailEntity.getDes() != null && position == getItemCount() - 2) {
|
||
holder.mLibaodetailDesLl.setVisibility(View.VISIBLE);
|
||
holder.mLibaodetailDes.setText(Html.fromHtml(mLibaoDetailEntity.getDes()));
|
||
}
|
||
}
|
||
|
||
public LibaoEntity getLibaoEntity() {
|
||
return mLibaoEntity;
|
||
}
|
||
|
||
public void setLibaoEntity(LibaoEntity libaoEntity) {
|
||
mLibaoEntity = libaoEntity;
|
||
}
|
||
|
||
public LibaoDetailEntity getLibaoDetailEntity() {
|
||
return mLibaoDetailEntity;
|
||
}
|
||
|
||
public void initLibaoCode(UserDataLibaoEntity userDataLibaoEntity) {
|
||
MeEntity userData = mLibaoEntity.getMe();
|
||
if (userData == null) {
|
||
userData = new MeEntity();
|
||
mLibaoEntity.setMe(userData);
|
||
}
|
||
|
||
List<UserDataLibaoEntity> userDataLibaoList = userData.getUserDataLibaoList();
|
||
if (userDataLibaoList == null) {
|
||
userDataLibaoList = new ArrayList<>();
|
||
userData.setUserDataLibaoList(userDataLibaoList);
|
||
}
|
||
userDataLibaoList.add(userDataLibaoEntity);
|
||
notifyItemChanged(0);
|
||
|
||
mOnRequestCallBackListener.loadDone(userDataLibaoEntity);
|
||
}
|
||
|
||
// 点击立即安装打开下载页面,如果只有一个包 直接下载
|
||
public void openDownload(String platform) {
|
||
mDownloadPb.setTag(platform);
|
||
mDownloadPb.performClick();
|
||
}
|
||
|
||
public interface OnCodeScrollListener {
|
||
void isScroll(boolean isScroll);
|
||
}
|
||
}
|