498 lines
22 KiB
Java
498 lines
22 KiB
Java
package com.gh.gamecenter.game;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.support.v4.util.ArrayMap;
|
|
import android.support.v4.widget.SwipeRefreshLayout;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.text.TextUtils;
|
|
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.util.DownloadItemUtils;
|
|
import com.gh.common.util.GameViewUtils;
|
|
import com.gh.common.util.ImageUtils;
|
|
import com.gh.common.util.Utils;
|
|
import com.gh.download.DownloadEntry;
|
|
import com.gh.gamecenter.GameDetailsActivity;
|
|
import com.gh.gamecenter.NewsActivity;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.SubjectActivity;
|
|
import com.gh.gamecenter.adapter.viewholder.GameHeadViewHolder;
|
|
import com.gh.gamecenter.adapter.viewholder.GameImageViewHolder;
|
|
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.entity.SubjectEntity;
|
|
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.List;
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
|
/**
|
|
* Created by khy on 2016/6/28.
|
|
*/
|
|
public class Game2FragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
|
|
private class ITEM_TYPE {
|
|
public final static int HEAD = 100;// 专题头部
|
|
public final static int GAME_NORMAL = 101;// 游戏布局1
|
|
public final static int GAME_TEST = 102;// 游戏布局2
|
|
public final static int IMAGE = 103;// 大图布局
|
|
}
|
|
|
|
private Game2Fragment fragment;
|
|
private Context context;
|
|
|
|
private RecyclerView recyclerview;
|
|
private SwipeRefreshLayout game_swipe_refresh;
|
|
private LinearLayout reuse_no_connection;
|
|
private ProgressBarCircularIndeterminate game_pb_loading;
|
|
|
|
private List<SubjectEntity> subjectList;
|
|
|
|
private ArrayMap<String, Integer> locationMap;
|
|
private ArrayMap<String, ArrayMap<String, DownloadEntry>> gameMap;
|
|
private ArrayMap<String, LinkedBlockingQueue<String>> platformMap;
|
|
private ArrayMap<String, String> nameMap;
|
|
private ArrayMap<String, String> statusMap;
|
|
|
|
private DismissEntity dismissEntity;
|
|
|
|
public Game2FragmentAdapter(Game2Fragment fragment,
|
|
ArrayMap<String, Integer> lMap,
|
|
ArrayMap<String, ArrayMap<String, DownloadEntry>> gMap,
|
|
ArrayMap<String, LinkedBlockingQueue<String>> pMap,
|
|
ArrayMap<String, String> nMap,
|
|
RecyclerView rView,
|
|
SwipeRefreshLayout refreshLayout,
|
|
LinearLayout linearLayout,
|
|
ArrayMap<String, String> sMap,
|
|
DismissEntity dEntity,
|
|
ProgressBarCircularIndeterminate pbLoading,
|
|
boolean isLoad) {
|
|
|
|
this.fragment = fragment;
|
|
this.context = fragment.getActivity();
|
|
locationMap = lMap;
|
|
gameMap = gMap;
|
|
platformMap = pMap;
|
|
nameMap = nMap;
|
|
recyclerview = rView;
|
|
game_swipe_refresh = refreshLayout;
|
|
reuse_no_connection = linearLayout;
|
|
game_pb_loading = pbLoading;
|
|
statusMap = sMap;
|
|
dismissEntity = dEntity;
|
|
|
|
subjectList = new ArrayList<SubjectEntity>();
|
|
|
|
if (isLoad) {
|
|
load();
|
|
}
|
|
}
|
|
|
|
public void load() {
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
initSubjectList();
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
private void initSubjectList() {
|
|
JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(Config.HOST + "v1d50/game/tuijian",
|
|
new Response.Listener<JSONArray>() {
|
|
@Override
|
|
public void onResponse(JSONArray response) {
|
|
|
|
Type listType = new TypeToken<ArrayList<SubjectEntity>>() {}.getType();
|
|
Gson gson = new Gson();
|
|
List<SubjectEntity> list = gson.fromJson(response.toString(), listType);
|
|
if (list != null && !list.isEmpty()) {
|
|
subjectList = list;
|
|
GameManager manager = new GameManager(context);
|
|
for (SubjectEntity subjectEntity : subjectList) {
|
|
for (GameEntity gameEntity : subjectEntity.getData()) {
|
|
gameEntity.setEntryMap(gameMap.get(gameEntity.getName()));
|
|
for (ApkEntity apkEntity : gameEntity.getApk()) {
|
|
manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(),
|
|
gameEntity.getId(), gameEntity.getName()));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!fragment.isHidden() && !fragment.isEverpause()) {
|
|
notifyItemRangeInserted(0, getItemCount());
|
|
} else {
|
|
notifyDataSetChanged();
|
|
}
|
|
|
|
initLocationMap();
|
|
}
|
|
|
|
if (game_swipe_refresh != null && game_swipe_refresh.isRefreshing()) {
|
|
game_swipe_refresh.setRefreshing(false);
|
|
}
|
|
|
|
if (game_pb_loading != null && game_pb_loading.getVisibility() == View.VISIBLE) {
|
|
game_pb_loading.setVisibility(View.GONE);
|
|
}
|
|
|
|
}
|
|
},
|
|
new Response.ErrorListener() {
|
|
@Override
|
|
public void onErrorResponse(VolleyError error) {
|
|
// 无网络连接和访问超时
|
|
if (error.getClass().equals(NoConnectionError.class)
|
|
|| error.getClass().equals(TimeoutError.class)) {
|
|
if (game_swipe_refresh != null && game_swipe_refresh.isRefreshing()) {
|
|
game_swipe_refresh.setRefreshing(false);
|
|
}
|
|
if (game_pb_loading != null && game_pb_loading.getVisibility() == View.VISIBLE) {
|
|
game_pb_loading.setVisibility(View.GONE);
|
|
}
|
|
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
|
|
recyclerview.setVisibility(View.GONE);
|
|
reuse_no_connection.setVisibility(View.VISIBLE);
|
|
}
|
|
}
|
|
});
|
|
AppController.addToRequestQueue(request, Game1Fragment.class);
|
|
}
|
|
|
|
private void initLocationMap() {
|
|
locationMap.clear();
|
|
|
|
if (!subjectList.isEmpty()) {
|
|
int count = getItemCount();
|
|
GameEntity gameEntity;
|
|
int offset;
|
|
for (int position = 0; position < count; position++) {
|
|
offset = 0;
|
|
for (int i = 0, size = subjectList.size(); i < size; i++) {
|
|
if (position > offset && position <= subjectList.get(i).getData().size() + offset) {
|
|
gameEntity = subjectList.get(i).getData().get(position - offset - 1);
|
|
if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()) {
|
|
locationMap.put(gameEntity.getName(), position);
|
|
for (ApkEntity apkEntity : gameEntity.getApk()) {
|
|
nameMap.put(apkEntity.getPackageName(), gameEntity.getName());
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
offset = subjectList.get(i).getData().size() + offset + 1;
|
|
}
|
|
}
|
|
}
|
|
Utils.log(locationMap.toString());
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
int subjectSize = 0;
|
|
if (!subjectList.isEmpty()) {
|
|
for (int i = 0; i < subjectList.size(); i++) {
|
|
SubjectEntity subjectEntity = subjectList.get(i);
|
|
subjectSize += subjectEntity.getData().size() + 1;
|
|
}
|
|
}
|
|
return subjectSize;
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
if (!subjectList.isEmpty()) {
|
|
int offset = 0;
|
|
GameEntity gameEntity;
|
|
for (int i = 0; i < subjectList.size(); i++) {
|
|
if (position == offset) {
|
|
return ITEM_TYPE.HEAD;
|
|
}
|
|
if (position > offset && position <= subjectList.get(i).getData().size() + offset) {
|
|
gameEntity = subjectList.get(i).getData().get(position - offset - 1);
|
|
if (!TextUtils.isEmpty(gameEntity.getImage())) {
|
|
return ITEM_TYPE.IMAGE;
|
|
}
|
|
if (gameEntity.getTest() != null) {
|
|
return ITEM_TYPE.GAME_TEST;
|
|
}
|
|
return ITEM_TYPE.GAME_NORMAL;
|
|
}
|
|
offset = subjectList.get(i).getData().size() + offset + 1;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
if (viewType == ITEM_TYPE.HEAD) {
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.home_game_head_item, parent, false);
|
|
return new GameHeadViewHolder(view);
|
|
} else if (viewType == ITEM_TYPE.IMAGE) {
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.home_game_image_item, parent, false);
|
|
return new GameImageViewHolder(view);
|
|
} else if (viewType == ITEM_TYPE.GAME_TEST) {
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.home_game_test_item, parent, false);
|
|
return new GameTestViewHolder(view);
|
|
} else {
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.home_game_normal_item, parent, false);
|
|
return new GameNormalViewHolder(view);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
|
if (holder instanceof GameHeadViewHolder) {
|
|
initGameHeadViewHolder((GameHeadViewHolder) holder, position);
|
|
} else if (holder instanceof GameNormalViewHolder) {
|
|
initGameNormalViewHolder((GameNormalViewHolder) holder, position);
|
|
} else if (holder instanceof GameTestViewHolder) {
|
|
initGameTestViewHolder((GameTestViewHolder) holder, position);
|
|
} else if (holder instanceof GameImageViewHolder) {
|
|
initGameImageViewHolder((GameImageViewHolder) holder, position);
|
|
}
|
|
}
|
|
|
|
private void initGameHeadViewHolder(GameHeadViewHolder holder, int position) {
|
|
int offset = 0;
|
|
for (int i = 0; i < subjectList.size(); i++) {
|
|
if (position == offset) {
|
|
holder.thumb.setVisibility(View.GONE);
|
|
holder.title.setText(subjectList.get(i).getName());
|
|
final int ii = i;
|
|
holder.link.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
Intent intent = new Intent(context, SubjectActivity.class);
|
|
intent.putExtra("id", subjectList.get(ii).getId());
|
|
intent.putExtra("name", subjectList.get(ii).getName());
|
|
context.startActivity(intent);
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
offset = subjectList.get(i).getData().size() + offset + 1;
|
|
}
|
|
}
|
|
|
|
private void initGameNormalViewHolder(GameNormalViewHolder holder, int position) {
|
|
int offset = 0;
|
|
GameEntity gameEntity;
|
|
for (int i = 0, size = subjectList.size(); i < size; i++) {
|
|
if (position > offset && position <= subjectList.get(i).getData().size() + offset) {
|
|
gameEntity = subjectList.get(i).getData().get(position - offset - 1);
|
|
if (TextUtils.isEmpty(gameEntity.getImage()) && gameEntity.getTest() == null) {
|
|
int order = position - offset - 1;
|
|
if (subjectList.get(i).getData().get(0).getImage() != null) {
|
|
order--;
|
|
}
|
|
initGameNormal(holder, gameEntity, order, subjectList.get(i).getOrder());
|
|
break;
|
|
}
|
|
}
|
|
offset = subjectList.get(i).getData().size() + offset + 1;
|
|
}
|
|
}
|
|
|
|
private void initGameNormal(GameNormalViewHolder holder, GameEntity entity, int i, boolean order) {
|
|
if (order) {
|
|
holder.home1_game_order.setVisibility(View.VISIBLE);
|
|
holder.home1_game_order.setText((i + 1) + "");
|
|
} else {
|
|
holder.home1_game_order.setVisibility(View.GONE);
|
|
}
|
|
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());
|
|
|
|
final GameEntity gameInfoEntity = entity;
|
|
|
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
AppController.put("GameEntity", gameInfoEntity);
|
|
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, i,
|
|
Game2FragmentAdapter.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 initGameTestViewHolder(GameTestViewHolder holder, int position) {
|
|
int offset = 0;
|
|
GameEntity gameEntity;
|
|
for (int i = 0, size = subjectList.size(); i < size; i++) {
|
|
if (position > offset && position <= subjectList.get(i).getData().size() + offset) {
|
|
gameEntity = subjectList.get(i).getData().get(position - offset - 1);
|
|
if (gameEntity.getTest() != null) {
|
|
int order = position - offset - 1;
|
|
if (subjectList.get(i).getData().get(0).getImage() != null) {
|
|
order--;
|
|
}
|
|
initGameTest(holder, gameEntity, order, subjectList.get(i).getOrder());
|
|
break;
|
|
}
|
|
}
|
|
offset = subjectList.get(i).getData().size() + offset + 1;
|
|
}
|
|
}
|
|
|
|
private void initGameTest(GameTestViewHolder holder, final GameEntity gameEntity, int i, boolean order) {
|
|
if (order) {
|
|
holder.home2_game_order.setVisibility(View.VISIBLE);
|
|
holder.home2_game_order.setText((i + 1) + "");
|
|
} else {
|
|
holder.home2_game_order.setVisibility(View.GONE);
|
|
}
|
|
ImageUtils.getInstance(context).display(gameEntity.getIcon(), holder.gameThumb);
|
|
holder.gameNameAndSize.setText(gameEntity.getName());
|
|
if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) {
|
|
holder.gameDes.setText(gameEntity.getBrief());
|
|
} else {
|
|
holder.gameDes.setText(gameEntity.getApk().get(0).getSize() + " | " + gameEntity.getBrief());
|
|
}
|
|
holder.gameTestType.setText(gameEntity.getTest().getType());
|
|
if (gameEntity.getTest().getStart() == 0) {
|
|
holder.gameTestTime.setVisibility(View.GONE);
|
|
} else {
|
|
holder.gameTestTime.setText(GameViewUtils.getGameTestDate(gameEntity.getTest().getStart()));
|
|
}
|
|
|
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
AppController.put("GameEntity", gameEntity);
|
|
Intent intent = new Intent(context, GameDetailsActivity.class);
|
|
intent.putExtra("entrance", "主页-新测卡牌");
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
context.startActivity(intent);
|
|
}
|
|
});
|
|
|
|
if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) {
|
|
holder.downloadBtn.setVisibility(View.GONE);
|
|
} else {
|
|
if (gameEntity.getTest().getEnd() == 0) {
|
|
holder.downloadBtn.setVisibility(View.VISIBLE);
|
|
DownloadItemUtils.setOnClickListener(context,
|
|
holder.downloadBtn, holder.download_speed,
|
|
holder.download_percentage, gameEntity, i,
|
|
Game2FragmentAdapter.this,
|
|
statusMap, platformMap, "游戏-推荐",
|
|
dismissEntity, "游戏:" + gameEntity.getName());
|
|
} else {
|
|
long endTime = Long.valueOf(gameEntity.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, gameEntity, i,
|
|
Game2FragmentAdapter.this, statusMap, platformMap,
|
|
"游戏-推荐", dismissEntity,
|
|
"游戏:" + gameEntity.getName());
|
|
}
|
|
}
|
|
}
|
|
|
|
DownloadItemUtils.updateItem(context, holder.labelList,
|
|
holder.game_progressbar, holder.game_ll_info, holder.download_speed,
|
|
holder.download_percentage, holder.downloadBtn, gameEntity, platformMap,
|
|
statusMap);
|
|
}
|
|
|
|
private void initGameImageViewHolder(GameImageViewHolder holder, int position) {
|
|
int offset = 0;
|
|
GameEntity gameEntity;
|
|
for (int i = 0, size = subjectList.size(); i < size; i++) {
|
|
if (position > offset && position <= subjectList.get(i).getData().size() + offset) {
|
|
gameEntity = subjectList.get(i).getData().get(position - offset - 1);
|
|
if (!TextUtils.isEmpty(gameEntity.getImage())) {
|
|
final GameEntity entity = gameEntity;
|
|
ImageUtils.getInstance(context).display(entity.getImage(), holder.image, -1);
|
|
holder.image.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
|
|
if ("game".equals(entity.getType())) {
|
|
Intent intent = new Intent(context, GameDetailsActivity.class);
|
|
intent.putExtra("gameId", entity.getId());
|
|
intent.putExtra("entrance", "插件-大图");
|
|
context.startActivity(intent);
|
|
} else if ("news".equals(entity.getType())) {
|
|
Intent intent = new Intent(context, NewsActivity.class);
|
|
intent.putExtra("newsId", entity.getId());
|
|
intent.putExtra("entrance", "插件-大图");
|
|
context.startActivity(intent);
|
|
} else if ("column".equals(entity.getType())) {
|
|
Intent intent = new Intent(context, SubjectActivity.class);
|
|
intent.putExtra("id", entity.getId());
|
|
// intent.putExtra("name", entity.getName());
|
|
context.startActivity(intent);
|
|
}
|
|
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
offset = subjectList.get(i).getData().size() + offset + 1;
|
|
}
|
|
}
|
|
|
|
public List<SubjectEntity> getSubectList() {
|
|
return subjectList;
|
|
}
|
|
|
|
}
|