417 lines
13 KiB
Java
417 lines
13 KiB
Java
package com.gh.gamecenter.adapter;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.support.v4.util.ArrayMap;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.Toast;
|
|
|
|
import com.android.volley.NoConnectionError;
|
|
import com.android.volley.Response;
|
|
import com.android.volley.TimeoutError;
|
|
import com.android.volley.VolleyError;
|
|
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
|
|
import com.gh.base.AppController;
|
|
import com.gh.common.constant.Config;
|
|
import com.gh.common.constant.Constants;
|
|
import com.gh.common.util.DataUtils;
|
|
import com.gh.common.util.DownloadItemUtils;
|
|
import com.gh.common.util.GameViewUtils;
|
|
import com.gh.common.util.ImageUtils;
|
|
import com.gh.common.util.TimestampUtils;
|
|
import com.gh.download.DownloadEntry;
|
|
import com.gh.gamecenter.GameDetailsActivity;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.SubjectActivity;
|
|
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
|
import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder;
|
|
import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder;
|
|
import com.gh.gamecenter.db.info.GameInfo;
|
|
import com.gh.gamecenter.entity.ApkEntity;
|
|
import com.gh.gamecenter.entity.DismissEntity;
|
|
import com.gh.gamecenter.entity.GameEntity;
|
|
import com.gh.gamecenter.manager.GameManager;
|
|
import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
|
import org.json.JSONArray;
|
|
|
|
import java.lang.reflect.Type;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
|
/**
|
|
*
|
|
* @author 温冠超
|
|
* @email 294299195@qq.com
|
|
* @date 2015-8-8
|
|
* @update 2015-8-11
|
|
* @des 首页插件fragment适配器
|
|
*/
|
|
public class SubjectAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
|
|
private Context context;
|
|
|
|
private RecyclerView subject_list;
|
|
private ProgressBarCircularIndeterminate subject_pb_loading;
|
|
private LinearLayout reuse_no_connection;
|
|
|
|
private List<GameEntity> list;
|
|
private boolean order;
|
|
private static final int FOOTER_ITEM = 101;
|
|
private boolean isLoaded;
|
|
|
|
// 黄壮华 获取引用 修改2015/8/15
|
|
private ArrayMap<String, Integer> locationMap;
|
|
private ArrayMap<String, LinkedBlockingQueue<String>> platformMap;
|
|
private ArrayMap<String, ArrayMap<String, DownloadEntry>> gameMap;
|
|
private ArrayMap<String, String> nameMap;
|
|
private ArrayMap<String, String> statusMap;
|
|
|
|
private DismissEntity dismissEntity;
|
|
|
|
private int page = 1;
|
|
private boolean isRemove;
|
|
private boolean isNetworkError;
|
|
private int per_page = 20;
|
|
private String id;
|
|
|
|
public SubjectAdapter(Context context,
|
|
RecyclerView recyclerView,
|
|
ProgressBarCircularIndeterminate pbLoading,
|
|
LinearLayout linearLayout,
|
|
String id,boolean order) {
|
|
this.order = order;
|
|
|
|
this.context = context;
|
|
subject_list = recyclerView;
|
|
subject_pb_loading = pbLoading;
|
|
reuse_no_connection = linearLayout;
|
|
|
|
locationMap = new ArrayMap<String, Integer>();
|
|
platformMap = new ArrayMap<String, LinkedBlockingQueue<String>>();
|
|
gameMap = new ArrayMap<String, ArrayMap<String, DownloadEntry>>();
|
|
nameMap = new ArrayMap<String, String>();
|
|
statusMap = new ArrayMap<String, String>();
|
|
dismissEntity = new DismissEntity(false);
|
|
|
|
// 黄壮华 添加 初始化游戏状态 修改2015/8/21
|
|
DownloadItemUtils.initializeGameMap(context, gameMap);
|
|
|
|
list = new ArrayList<GameEntity>();
|
|
isLoaded = false;
|
|
isNetworkError = false;
|
|
this.id = id;
|
|
|
|
initList(page);
|
|
}
|
|
|
|
public void initList(final int page) {
|
|
isLoaded =false;
|
|
JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(
|
|
TimestampUtils.addTimestamp(Config.HOST
|
|
+ "v1d50/game/column/" + id +"?page="+ page, Constants.GAME_CD),
|
|
new Response.Listener<JSONArray>() {
|
|
|
|
@Override
|
|
public void onResponse(JSONArray response) {
|
|
processingData(response);
|
|
}
|
|
|
|
}, new Response.ErrorListener() {
|
|
|
|
@Override
|
|
public void onErrorResponse(VolleyError error) {
|
|
// 无网络连接
|
|
if (error.getClass().equals(NoConnectionError.class)
|
|
|| error.getClass().equals(TimeoutError.class)) {
|
|
if (page == 1){
|
|
if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) {
|
|
subject_pb_loading.setVisibility(View.GONE);
|
|
}
|
|
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
|
|
subject_list.setVisibility(View.GONE);
|
|
reuse_no_connection.setVisibility(View.VISIBLE);
|
|
}else {
|
|
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
|
|
isNetworkError = true;
|
|
notifyDataSetChanged();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
});
|
|
AppController.addToRequestQueue(request, SubjectActivity.class);
|
|
}
|
|
|
|
private void processingData(JSONArray response) {
|
|
Type listType = new TypeToken<ArrayList<GameEntity>>() {}.getType();
|
|
Gson gson = new Gson();
|
|
GameManager manager = new GameManager(context);
|
|
List<GameEntity> gameList = gson.fromJson(response.toString(), listType);
|
|
if (gameList != null && !gameList.isEmpty()) {
|
|
for (GameEntity entity : gameList) {
|
|
// 黄壮华 初始化游戏状态 修改2015/8/15
|
|
entity.setEntryMap(gameMap.get(entity.getName()));
|
|
for (ApkEntity apkEntity : entity.getApk()) {
|
|
manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(),
|
|
entity.getId(), entity.getName()));
|
|
}
|
|
}
|
|
list.addAll(gameList);
|
|
|
|
notifyItemRangeInserted(list.size() - gameList.size(), gameList.size());
|
|
}
|
|
|
|
// 黄壮华 获取游戏位置信息 修改2015/8/15
|
|
for (int i = 0, size = list.size(); i < size; i++) {
|
|
GameEntity entity = list.get(i);
|
|
locationMap.put(entity.getName(), i);
|
|
for (ApkEntity apkEntity : entity.getApk()) {
|
|
nameMap.put(apkEntity.getPackageName(), entity.getName());
|
|
}
|
|
}
|
|
|
|
if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) {
|
|
subject_pb_loading.setVisibility(View.GONE);
|
|
}
|
|
if (list.isEmpty() || gameList.size() < 20) {
|
|
isRemove = true;
|
|
notifyDataSetChanged();
|
|
}
|
|
isLoaded = true;
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
if (list.size()<1){
|
|
return 0;
|
|
}
|
|
return list.size()+1;
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
if (list.size() == position) {
|
|
return FOOTER_ITEM;
|
|
}
|
|
return position;
|
|
}
|
|
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
|
|
if (i == FOOTER_ITEM){
|
|
View view = LayoutInflater.from(viewGroup.getContext()).inflate(
|
|
R.layout.refresh_footerview, viewGroup, false);
|
|
return new FooterViewHolder(view);
|
|
}
|
|
if (list.get(i).getTest() != null) {
|
|
View view = LayoutInflater.from(viewGroup.getContext()).inflate(
|
|
R.layout.home_game_test_item, viewGroup, false);
|
|
return new GameTestViewHolder(view);
|
|
} else {
|
|
View view = LayoutInflater.from(viewGroup.getContext()).inflate(
|
|
R.layout.home_game_normal_item, viewGroup, false);
|
|
return new GameNormalViewHolder(view);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
|
|
if (viewHolder instanceof GameNormalViewHolder) {
|
|
initGameNormalViewHolder((GameNormalViewHolder) viewHolder, position);
|
|
} else if (viewHolder instanceof GameTestViewHolder) {
|
|
initGameTestViewHolder((GameTestViewHolder) viewHolder, position);
|
|
} else if (viewHolder instanceof FooterViewHolder){
|
|
initFooterViewHolder((FooterViewHolder) viewHolder);
|
|
}
|
|
}
|
|
|
|
private void initFooterViewHolder(FooterViewHolder viewHolder) {
|
|
if (isNetworkError) {
|
|
viewHolder.footerview_progressbar.setVisibility(View.GONE);
|
|
viewHolder.footerview_tv_loading.setText("加载失败,点击重试");
|
|
viewHolder.itemView.setClickable(true);
|
|
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
isNetworkError = false;
|
|
notifyDataSetChanged();
|
|
initList(list.size()/per_page+1);
|
|
}
|
|
});
|
|
} else if (isRemove) {
|
|
viewHolder.footerview_progressbar.setVisibility(View.GONE);
|
|
viewHolder.footerview_tv_loading.setText("加载完毕");
|
|
viewHolder.itemView.setClickable(false);
|
|
} else {
|
|
viewHolder.footerview_progressbar.setVisibility(View.VISIBLE);
|
|
viewHolder.footerview_tv_loading.setText("加载中...");
|
|
viewHolder.itemView.setClickable(false);
|
|
}
|
|
}
|
|
|
|
private void initGameTestViewHolder(GameTestViewHolder holder, int position) {
|
|
if (order) {
|
|
holder.home2_game_order.setVisibility(View.VISIBLE);
|
|
holder.home2_game_order.setText((position + 1) + "");
|
|
} else {
|
|
holder.home2_game_order.setVisibility(View.GONE);
|
|
}
|
|
|
|
final GameEntity entity = list.get(position);
|
|
|
|
ImageUtils.getInstance(context).display(entity.getIcon(), holder.gameThumb);
|
|
holder.gameNameAndSize.setText(entity.getName());
|
|
if (entity.getApk() == null || entity.getApk().isEmpty()) {
|
|
holder.gameDes.setText(entity.getBrief());
|
|
} else {
|
|
holder.gameDes.setText(entity.getApk().get(0).getSize() + " | " + entity.getBrief());
|
|
}
|
|
holder.gameTestType.setText(entity.getTest().getType());
|
|
if (entity.getTest().getStart() == 0) {
|
|
holder.gameTestTime.setVisibility(View.GONE);
|
|
} else {
|
|
holder.gameTestTime.setText(GameViewUtils.getGameTestDate(entity.getTest().getStart()));
|
|
}
|
|
|
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
AppController.put("GameEntity", entity);
|
|
Intent intent = new Intent(context,
|
|
GameDetailsActivity.class);
|
|
intent.putExtra("entrance", "主页-新测卡牌");
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
context.startActivity(intent);
|
|
}
|
|
});
|
|
|
|
if (entity.getApk() == null || entity.getApk().isEmpty()) {
|
|
holder.downloadBtn.setVisibility(View.GONE);
|
|
} else {
|
|
if (entity.getTest().getEnd() == 0) {
|
|
holder.downloadBtn.setVisibility(View.VISIBLE);
|
|
DownloadItemUtils.setOnClickListener(context,
|
|
holder.downloadBtn, holder.download_speed,
|
|
holder.download_percentage, entity, position,
|
|
SubjectAdapter.this,
|
|
statusMap, platformMap, "主页-新测卡牌",
|
|
dismissEntity, "主页:" + entity.getName());
|
|
} else {
|
|
long endTime = Long.valueOf(entity.getTest().getEnd()
|
|
+ "000");
|
|
long todayTime = new Date().getTime();
|
|
if (todayTime > endTime) {
|
|
// 测试时间已过
|
|
holder.downloadBtn.setVisibility(View.GONE);
|
|
} else {
|
|
// 测试时间未过
|
|
holder.downloadBtn.setVisibility(View.VISIBLE);
|
|
DownloadItemUtils.setOnClickListener(context,
|
|
holder.downloadBtn, holder.download_speed,
|
|
holder.download_percentage, entity, position,
|
|
SubjectAdapter.this, statusMap, platformMap,
|
|
"主页-新测卡牌", dismissEntity,
|
|
"主页:" + entity.getName());
|
|
}
|
|
}
|
|
}
|
|
|
|
DownloadItemUtils.updateItem(context, holder.labelList,
|
|
holder.game_progressbar, holder.game_ll_info, holder.download_speed,
|
|
holder.download_percentage, holder.downloadBtn, entity, platformMap,
|
|
statusMap);
|
|
}
|
|
|
|
private void initGameNormalViewHolder(GameNormalViewHolder holder, int position) {
|
|
if (order) {
|
|
holder.home1_game_order.setVisibility(View.VISIBLE);
|
|
holder.home1_game_order.setText((position + 1) + "");
|
|
} else {
|
|
holder.home1_game_order.setVisibility(View.GONE);
|
|
}
|
|
|
|
final GameEntity entity = list.get(position);
|
|
|
|
ImageUtils.getInstance(context).display(entity.getIcon(), holder.gameThumb);
|
|
holder.gameNameAndSize.setText(entity.getName());
|
|
if (entity.getApk() == null || entity.getApk().isEmpty()) {
|
|
holder.gameDes.setText(entity.getBrief());
|
|
} else {
|
|
holder.gameDes.setText(entity.getApk().get(0).getSize() + " | " + entity.getBrief());
|
|
}
|
|
|
|
GameViewUtils.setLabelList(context, holder.labelList, entity.getTag());
|
|
|
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
|
|
Map<String, Object> kv = new HashMap<String, Object>();
|
|
kv.put("入口", "热门卡牌");
|
|
DataUtils.onEvent(context, "游戏详情", entity.getName(), kv);
|
|
|
|
AppController.put("GameEntity", entity);
|
|
Intent intent = new Intent(context, GameDetailsActivity.class);
|
|
intent.putExtra("entrance", "热门卡牌");
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
context.startActivity(intent);
|
|
}
|
|
});
|
|
|
|
DownloadItemUtils.setOnClickListener(context, holder.downloadBtn,
|
|
holder.download_speed, holder.download_percentage,
|
|
entity, position, this,
|
|
statusMap, platformMap, "热门卡牌", dismissEntity, "hotcard:" + entity.getName());
|
|
|
|
DownloadItemUtils.updateItem(context, holder.labelList,
|
|
holder.game_progressbar, holder.game_ll_info,
|
|
holder.download_speed, holder.download_percentage,
|
|
holder.downloadBtn, entity, platformMap, statusMap);
|
|
}
|
|
|
|
public List<GameEntity> getList() {
|
|
return list;
|
|
}
|
|
|
|
public ArrayMap<String, Integer> getLocationMap() {
|
|
return locationMap;
|
|
}
|
|
|
|
public ArrayMap<String, LinkedBlockingQueue<String>> getPlatformMap() {
|
|
return platformMap;
|
|
}
|
|
|
|
public ArrayMap<String, ArrayMap<String, DownloadEntry>> getGameMap() {
|
|
return gameMap;
|
|
}
|
|
|
|
public ArrayMap<String, String> getNameMap() {
|
|
return nameMap;
|
|
}
|
|
|
|
public ArrayMap<String, String> getStatusMap() {
|
|
return statusMap;
|
|
}
|
|
|
|
public DismissEntity getDismissEntity() {
|
|
return dismissEntity;
|
|
}
|
|
|
|
public boolean isLoaded(){
|
|
return isLoaded;
|
|
}
|
|
|
|
}
|