Files
assistant-android/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java
2016-07-07 14:59:23 +08:00

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;
}
}