Files
assistant-android/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java
2016-07-19 17:33:57 +08:00

1036 lines
46 KiB
Java

package com.gh.gamecenter.game;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.support.v4.util.ArrayMap;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
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.DisplayUtils;
import com.gh.common.util.DownloadItemUtils;
import com.gh.common.util.GameViewUtils;
import com.gh.common.util.ImageUtils;
import com.gh.common.util.PlatformUtils;
import com.gh.common.util.TimestampUtils;
import com.gh.common.view.AutoScrollViewPager;
import com.gh.download.DownloadEntry;
import com.gh.gamecenter.GameDetailsActivity;
import com.gh.gamecenter.NewsActivity;
import com.gh.gamecenter.PluginActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.SubjectActivity;
import com.gh.gamecenter.adapter.ImagePagerAdapter;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
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.ConcernInfo;
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.SlideEntity;
import com.gh.gamecenter.entity.SubjectEntity;
import com.gh.gamecenter.manager.ConcernManager;
import com.gh.gamecenter.manager.GameManager;
import com.gh.gamecenter.manager.PackageManager;
import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import org.json.JSONObject;
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;
/**
* Created by LGT on 2016/7/1.
*/
public class Game1FragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private class ITEM_TYPE {
public static final int slide = 0;// 滚动图
public static final int head = 1;// 专题头部
public static final int game_normal_type = 2;// 游戏布局1
public static final int game_test_type = 3;// 游戏布局2
public static final int image = 4;// 大图布局
public static final int footer_view = 5;// 加载布局
}
private Game1Fragment fragment;
private Context context;
private RecyclerView recyclerview;
private SwipeRefreshLayout game_swipe_refresh;
private LinearLayout reuse_no_connection;
private ProgressBarCircularIndeterminate game_pb_loading;
private List<SlideEntity> slideList;
private List<GameEntity> pluginList;
private List<SubjectEntity> subjectList;
private int pluginSize;
private boolean isNetworkError;
private boolean isSlideError;
private boolean isListError;
private boolean isRemove;
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> pluginNameMap;
private ArrayMap<String, String> statusMap;
private DismissEntity dismissEntity;
public Game1FragmentAdapter(Game1Fragment fragment,
ArrayMap<String, Integer> lMap,
ArrayMap<String, ArrayMap<String, DownloadEntry>> gMap,
ArrayMap<String, LinkedBlockingQueue<String>> pMap,
ArrayMap<String, String> nMap,
ArrayMap<String, String> pnMap,
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;
pluginNameMap = pnMap;
recyclerview = rView;
game_swipe_refresh = refreshLayout;
reuse_no_connection = linearLayout;
game_pb_loading = pbLoading;
statusMap = sMap;
dismissEntity = dEntity;
slideList = new ArrayList<SlideEntity>();
pluginList = new ArrayList<GameEntity>();
subjectList = new ArrayList<SubjectEntity>();
pluginSize = 0;
isNetworkError = false;
isSlideError = false;
isListError = false;
isRemove = false;
if (isLoad) {
load();
}
}
public void load() {
new Thread(new Runnable() {
@Override
public void run() {
initSlide(true);
initPlugin();
}
}){}.start();
}
private void initSlide(final boolean isFirst) {
JsonArrayExtendedRequest slideRequest = new JsonArrayExtendedRequest(
TimestampUtils.addTimestamp(Config.HOST + "v1d50/index/slides",
Constants.GAME_CD), new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Type listType = new TypeToken<ArrayList<SlideEntity>>() {}.getType();
Gson gson = new Gson();
slideList = gson.fromJson(response.toString(), listType);
if (slideList != null && !slideList.isEmpty()) {
notifyItemChanged(0);
}
if (isFirst) {
initSubjectList();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 无网络连接
if (error.getClass().equals(NoConnectionError.class)
|| error.getClass().equals(TimeoutError.class)) {
isSlideError = true;
if (!isFirst) {
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
notifyItemChanged(0);
} else {
showView();
}
}
if (isFirst) {
initSubjectList();
}
}
});
AppController.addToRequestQueue(slideRequest, Game1Fragment.class);
}
private void initSubjectList() {
JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(
TimestampUtils.addTimestamp(Config.HOST + "v1d50/game/chajian",
Constants.GAME_CD),
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);
SubjectEntity subjectEntity;
GameEntity gameEntity;
for (int j = 0; j < subjectList.size(); j++) {
subjectEntity = subjectList.get(j);
if (subjectEntity.getData().size() == 1
&& !TextUtils.isEmpty(subjectEntity.getData().get(0).getImage())){
subjectList.remove(j);
continue;
}
for (int i = 0; i < subjectEntity.getData().size(); i++) {
gameEntity = subjectEntity.getData().get(i);
if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()) {
gameEntity.setEntryMap(gameMap.get(gameEntity.getName()));
for (ApkEntity apkEntity : gameEntity.getApk()) {
manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(),
gameEntity.getId(), gameEntity.getName()));
}
} else if (TextUtils.isEmpty(gameEntity.getId())) {
if (TextUtils.isEmpty(gameEntity.getType())
|| TextUtils.isEmpty(gameEntity.getLink())
|| TextUtils.isEmpty(gameEntity.getName())
|| TextUtils.isEmpty(gameEntity.getImage())) {
subjectEntity.getData().remove(i);
i--;
}
}
}
}
if (!fragment.isHidden() && !fragment.isEverpause()) {
if (pluginList.isEmpty()) {
notifyItemRangeInserted(1, getItemCount() - 2);
} else {
int start = 2 + pluginList.size();
notifyItemRangeInserted(start, getItemCount() - start - 1);
}
} 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);
}
isRemove = true;
notifyItemRemoved(getItemCount() - 1);
}
},
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);
}
isListError = true;
isNetworkError = true;
showView();
}
}
});
AppController.addToRequestQueue(request, Game1Fragment.class);
}
private void showView() {
if (isSlideError && isListError) {
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
recyclerview.setVisibility(View.GONE);
game_pb_loading.setVisibility(View.GONE);
reuse_no_connection.setVisibility(View.VISIBLE);
} else if (isSlideError) {
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
notifyItemChanged(0);
} else if (isListError) {
Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show();
notifyItemChanged(getItemCount() - 1);
}
}
private int count;
//检查可以插件化的游戏
private void initPlugin() {
ConcernManager concernManager = new ConcernManager(context);
List<ConcernInfo> infos = concernManager.getInstalledGame();
final int size = infos.size();
final List<GameEntity> list = new ArrayList<GameEntity>();
count = 0;
for (ConcernInfo info : infos) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/" + info.getId() + "/digest", Constants.GAME_CD),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Gson gson = new Gson();
GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class);
list.add(gameEntity);
count++;
if (count == size) {
processingData(list);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
count++;
if (count == size) {
processingData(list);
}
}
});
AppController.addToRequestQueue(request, Game1Fragment.class);
}
}
private void processingData(List<GameEntity> list) {
if (list == null || list.isEmpty()) {
return;
}
ConcernManager concernManager = new ConcernManager(context);
PackageManager mPackageManager = new PackageManager(context);
List<ConcernInfo> infos = concernManager.getInstalledGame();
HashMap<String, Boolean> map;
GameEntity gameEntity;
for (ConcernInfo info : infos) {
for (int i = 0, size = list.size(); i < size; i++) {
gameEntity = list.get(i);
if (gameEntity.getId().equals(info.getId())
&& gameEntity.getTag() != null && gameEntity.getTag().size() != 0
&& gameEntity.getApk() != null) {
map = info.getPackageNames();
for (String key : map.keySet()) {
if (map.get(key) && !mPackageManager.isSignature(key)) {
pluginSize++;
if (pluginList.size() < 3) {
for (ApkEntity apkEntity : gameEntity.getApk()) {
if (apkEntity.getPackageName().equals(key)) {
GameEntity entity = gameEntity.clone();
entity.setPluginPlatform(
PlatformUtils.getInstance(context).getPlatformName(apkEntity.getPlatform()));
ArrayList<ApkEntity> apkList = new ArrayList<ApkEntity>();
apkList.add(apkEntity);
entity.setApk(apkList);
pluginList.add(entity);
break;
}
}
}
}
}
break;
}
}
}
if (!pluginList.isEmpty()) {
GameManager manager = new GameManager(context);
for (GameEntity gEntity : pluginList) {
gEntity.setEntryMap(gameMap.get(gEntity.getName()));
for (ApkEntity aEntity : gEntity.getApk()) {
manager.addOrUpdate(new GameInfo(aEntity.getPackageName(),
gEntity.getId(), gEntity.getName()));
}
}
notifyItemRangeInserted(1, pluginList.size() + 1);
initLocationMap();
}
}
private void initLocationMap() {
locationMap.clear();
int count = getItemCount();
if (!pluginList.isEmpty()) {
for (int position = 0; position < count; position++) {
if (position > 1 && position <= 1 + pluginList.size()) {
GameEntity gameEntity = pluginList.get(position - 2);
locationMap.put(gameEntity.getName() + " - " + gameEntity.getPluginPlatform(), position);
for (ApkEntity apkEntity : gameEntity.getApk()) {
pluginNameMap.put(apkEntity.getPackageName(), gameEntity.getName() + " - " + gameEntity.getPluginPlatform());
}
}
}
}
if (!subjectList.isEmpty()) {
int offset;
GameEntity gameEntity;
for (int position = 0; position < count; position++) {
offset = 1;
if (!pluginList.isEmpty()) {
offset += 1 + pluginList.size();
}
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;
}
}
}
}
@Override
public int getItemCount() {
int pluginSize = 0;
if (!pluginList.isEmpty()) {
pluginSize += 1 + pluginList.size();
}
int subjectSize = 0;
if (!subjectList.isEmpty()) {
SubjectEntity subjectEntity;
for (int i = 0, size = subjectList.size(); i < size; i++) {
subjectEntity = subjectList.get(i);
subjectSize += 1 + subjectEntity.getData().size();
}
}
if (isRemove) {
return 1 + pluginSize + subjectSize;
} else {
return 1 + pluginSize + subjectSize + 1;
}
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return ITEM_TYPE.slide;
}
if (!pluginList.isEmpty()) {
if (position == 1) {
return ITEM_TYPE.head;
}
if (position > 1 && position <= 1 + pluginList.size()) {
return ITEM_TYPE.game_normal_type;
}
}
int offset = 1;
if (!pluginList.isEmpty()) {
offset += 1 + pluginList.size();
}
GameEntity gameEntity;
for (int i = 0, size = subjectList.size(); i < size; i++) {
// if (position == offset) {
// return ITEM_TYPE.head;
// }
if (position >= offset && position <= subjectList.get(i).getData().size() + offset) {
int index = position -offset-1;
if (index<0){
index = 0;
}
gameEntity = subjectList.get(i).getData().get(index);
if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())){
return ITEM_TYPE.image;
}else if (position == offset){
return ITEM_TYPE.head;
}
if (position == offset+1&&!TextUtils.isEmpty(subjectList.get(i).getData().get(0).getImage())){
return ITEM_TYPE.head;
}
if (!TextUtils.isEmpty(gameEntity.getImage())) {
return ITEM_TYPE.image;
}
if (gameEntity.getTest() != null) {
return ITEM_TYPE.game_test_type;
}
return ITEM_TYPE.game_normal_type;
}
offset = subjectList.get(i).getData().size() + offset + 1;
}
return ITEM_TYPE.footer_view;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE.slide) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.plugin1_autoscrollviewpager_viewholder, parent, false);
DisplayMetrics outMetrics = new DisplayMetrics();
fragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, (int) (outMetrics.widthPixels / 16f * 7f));
view.setLayoutParams(params);
return new AutoScrollViewpagerViewHolder(view);
} else 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.game_normal_type) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.home_game_normal_item, parent, false);
return new GameNormalViewHolder(view);
} else if (viewType == ITEM_TYPE.game_test_type) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.home_game_test_item, parent, false);
return new GameTestViewHolder(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 {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.refresh_footerview, parent, false);
return new FooterViewHolder(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof AutoScrollViewpagerViewHolder) {
AutoScrollViewpagerViewHolder viewHolder = (AutoScrollViewpagerViewHolder) holder;
if (isSlideError) {
viewHolder.viewpager_tv_failure.setVisibility(View.VISIBLE);
viewHolder.viewPager.setVisibility(View.GONE);
viewHolder.viewpager_ll_hint.setVisibility(View.GONE);
} else {
viewHolder.viewpager_tv_failure.setVisibility(View.GONE);
viewHolder.viewPager.setVisibility(View.VISIBLE);
viewHolder.viewpager_ll_hint.setVisibility(View.VISIBLE);
}
if (slideList.size() > 0) {
int currentItem = 0;
if (viewHolder.viewPager.getAdapter() != null) {
currentItem = viewHolder.viewPager.getCurrentItem();
}
viewHolder.viewpager_ll_hint.removeAllViews();
for (int i = 0, size = slideList.size(); i < size; i++) {
ImageView imageView = new ImageView(context);
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
DisplayUtils.dip2px(context, 6),
DisplayUtils.dip2px(context, 6));
lparams.bottomMargin = DisplayUtils.dip2px(context, 6);
if (i == currentItem) {
imageView.setImageResource(R.drawable.oval_hint_dn);
} else {
imageView.setImageResource(R.drawable.oval_hint_up);
}
if (i != 0) {
lparams.leftMargin = DisplayUtils.dip2px(context, 6);
}
imageView.setLayoutParams(lparams);
viewHolder.viewpager_ll_hint.addView(imageView);
}
viewHolder.viewPager.setAdapter(new ImagePagerAdapter(context, slideList, true));
viewHolder.viewPager.setCurrentItem(currentItem);
viewHolder.viewPager.setInterval(3000);
viewHolder.viewPager.startAutoScroll();
}
} else if (holder instanceof GameHeadViewHolder) {
initGameHeadViewHolder((GameHeadViewHolder) holder, position);
} else if (holder instanceof GameImageViewHolder) {
initGameImageViewHolder((GameImageViewHolder) holder, position);
} else if (holder instanceof GameNormalViewHolder){
initGameNormalViewHolder((GameNormalViewHolder) holder, position);
} else if (holder instanceof GameTestViewHolder) {
initGameTestViewHolder((GameTestViewHolder) holder, position);
} else if (holder instanceof FooterViewHolder) {
initFooterViewHolder((FooterViewHolder) holder);
}
}
private void initGameTestViewHolder(GameTestViewHolder holder, int position) {
int offset = 1;
if (!pluginList.isEmpty()) {
offset += 1 + pluginList.size();
}
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(), subjectList.get(i).getName());
break;
}
}
offset = subjectList.get(i).getData().size() + offset + 1;
}
}
private void initGameTest(GameTestViewHolder holder, final GameEntity gameEntity,
final int i, boolean order, final String name) {
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) {
Map<String, Object> kv = new HashMap<String, Object>();
kv.put("名字", gameEntity.getName());
kv.put("位置", i + 1);
DataUtils.onEvent(context, "点击", "游戏-插件-" + name, kv);
AppController.put("GameEntity", gameEntity);
Intent intent = new Intent(context, GameDetailsActivity.class);
intent.putExtra("entrance", "游戏-插件-" + name);
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,
Game1FragmentAdapter.this,
statusMap, platformMap, "游戏-插件-" + name,
dismissEntity, "游戏-插件-" + name + ":" + 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,
Game1FragmentAdapter.this, statusMap, platformMap,
"游戏-插件-" + name, dismissEntity,
"游戏-插件-" + name + ":" + 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 initGameNormalViewHolder(GameNormalViewHolder holder, int position) {
GameEntity gameEntity;
if (!pluginList.isEmpty() && position > 1 && position <= 1 + pluginList.size()) {
gameEntity = pluginList.get(position - 2);
initGameNormal(holder, gameEntity, position - 2, false, "插件化");
return;
}
int offset = 1;
if (!pluginList.isEmpty()) {
offset += 1 + pluginList.size();
}
for (int i = 0, size = subjectList.size(); i < size; i++) {
if (position > offset && position <= subjectList.get(i).getData().size() + offset) {
int index = position -offset-1;
if (index<0){
index = 0;
}
gameEntity = subjectList.get(i).getData().get(index);
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(), subjectList.get(i).getName());
break;
}
}
offset = subjectList.get(i).getData().size() + offset + 1;
}
}
private void initGameNormal(GameNormalViewHolder holder, final GameEntity entity,
final int i, final boolean order, final String name) {
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);
if (entity.getPluginPlatform() != null) {
holder.gameNameAndSize.setText(entity.getName() + " - " + entity.getPluginPlatform());
} else {
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("名字", entity.getName());
kv.put("位置", i + 1);
DataUtils.onEvent(context, "点击", "游戏-插件-" + name, kv);
if (entity.getPluginPlatform() != null) {
Intent intent = new Intent(context, GameDetailsActivity.class);
intent.putExtra("gameId", entity.getId());
intent.putExtra("entrance", "游戏-插件-" + name);
context.startActivity(intent);
} else {
AppController.put("GameEntity", entity);
Intent intent = new Intent(context, GameDetailsActivity.class);
intent.putExtra("entrance", "游戏-插件-" + name);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
});
DownloadItemUtils.setOnClickListener(context, holder.downloadBtn,
holder.download_speed, holder.download_percentage, entity, i,
Game1FragmentAdapter.this,
statusMap, platformMap, "游戏-插件-" + name,
dismissEntity, "游戏-插件-" + name + ":" + 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 void initGameImageViewHolder(GameImageViewHolder holder, int position) {
int offset = 1;
if (!pluginList.isEmpty()) {
offset += 1 + pluginList.size();
}
GameEntity gameEntity;
for (int i = 0, size = subjectList.size(); i < size; i++) {
if (position >= offset && position <= subjectList.get(i).getData().size() + offset) {
int index = position - offset - 1;
if (index<0){
index = 0;
}
gameEntity = subjectList.get(i).getData().get(index);
if (position == offset && !TextUtils.isEmpty(gameEntity.getImage())) {
final GameEntity entity = gameEntity;
final String name = subjectList.get(i).getName();
final int ii = index;
String tag = entity.getImage();
holder.image.setTag(tag);
ImageUtils.getInstance(context).display(entity.getImage(), holder.image, 1, context);//默认应该设置占位符,防止图片混乱
holder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Map<String, Object> kv = new HashMap<String, Object>();
kv.put("名字", entity.getName());
kv.put("位置", ii + 1);
DataUtils.onEvent(context, "点击", "游戏-插件-" + name, kv);
if ("game".equals(entity.getType())) {
Intent intent = new Intent(context, GameDetailsActivity.class);
intent.putExtra("gameId", entity.getLink());
intent.putExtra("entrance", "游戏-插件-" + name);
context.startActivity(intent);
} else if ("news".equals(entity.getType())) {
Intent intent = new Intent(context, NewsActivity.class);
intent.putExtra("newsId", entity.getLink());
intent.putExtra("entrance", "游戏-插件-" + name);
context.startActivity(intent);
} else if ("column".equals(entity.getType())) {
Intent intent = new Intent(context, SubjectActivity.class);
intent.putExtra("id", entity.getLink());
intent.putExtra("name", entity.getName());
context.startActivity(intent);
}
}
});
break;
}
}
offset = subjectList.get(i).getData().size() + offset + 1;
}
}
public void initGameHeadViewHolder(GameHeadViewHolder holder, int position) {
if (!pluginList.isEmpty() && position == 1) {
holder.headTop.setVisibility(View.VISIBLE);
holder.title.setTextColor(Color.parseColor("#1ba4fc"));
holder.thumb.setVisibility(View.VISIBLE);
holder.thumb.setImageResource(R.drawable.home_plug_upgrade);
holder.title.setText("你有" + pluginSize + "个游戏可以升级插件版");
if (pluginSize <= 3) {
holder.link.setVisibility(View.GONE);
} else {
holder.link.setVisibility(View.VISIBLE);
holder.link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(context, PluginActivity.class));
}
});
}
return;
}
int offset = 1;
GameEntity gameEntity;
if (!pluginList.isEmpty()) {
offset += 1 + pluginList.size();
}
for (int i = 0, size = subjectList.size(); i < size; i++) {
if (position >= offset && position <= subjectList.get(i).getData().size() + offset){
int index = position - offset - 1;
if (index < 0){
index = 0;
}
gameEntity = subjectList.get(i).getData().get(index);
if (position == offset && TextUtils.isEmpty(gameEntity.getImage()) || position == offset+1&&!TextUtils.isEmpty(subjectList.get(i).getData().get(0).getImage())) {
holder.thumb.setVisibility(View.GONE);
holder.title.setText(subjectList.get(i).getName());
holder.title.setTextColor(Color.BLACK);
if (TextUtils.isEmpty(subjectList.get(i).getData().get(0).getImage())){
holder.headTop.setVisibility(View.VISIBLE);
}else {
holder.headTop.setVisibility(View.GONE);
}
final int ii = i;
if (subjectList.get(i).getData().size()>=Integer.parseInt(subjectList.get(i).getMore())){
holder.link.setVisibility(View.GONE);
}else {
holder.link.setVisibility(View.VISIBLE);
}
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());
intent.putExtra("order",subjectList.get(ii).getOrder());
context.startActivity(intent);
}
});
}
}
// 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 AutoScrollViewPager autoScrollViewPager;
public class AutoScrollViewpagerViewHolder extends RecyclerView.ViewHolder {
private AutoScrollViewPager viewPager;
private LinearLayout viewpager_ll_hint;
private TextView viewpager_tv_failure;
public AutoScrollViewpagerViewHolder(View v) {
super(v);
viewpager_tv_failure = (TextView) v.findViewById(R.id.viewpager_tv_failure);
viewpager_tv_failure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isSlideError = false;
notifyItemChanged(0);
initSlide(false);
}
});
viewpager_ll_hint = (LinearLayout) v.findViewById(R.id.viewpager_ll_hint);
viewPager = (AutoScrollViewPager) v.findViewById(R.id.view_pager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
for (int i = 0, size = viewpager_ll_hint
.getChildCount(); i < size; i++) {
if (i == position % size) {
((ImageView) viewpager_ll_hint.getChildAt(i))
.setImageResource(R.drawable.oval_hint_dn);
} else {
((ImageView) viewpager_ll_hint.getChildAt(i))
.setImageResource(R.drawable.oval_hint_up);
}
}
}
@Override
public void onPageScrolled(int position,
float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
// 解决viewpager和SwipeRefreshLayout滑动冲突
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
game_swipe_refresh.setEnabled(false);
} else {
game_swipe_refresh.setEnabled(true);
}
}
});
autoScrollViewPager = viewPager;
}
}
private void initFooterViewHolder(FooterViewHolder holder) {
if (isNetworkError) {
holder.footerview_progressbar.setVisibility(View.GONE);
holder.footerview_tv_loading.setText("加载失败,点击重试");
holder.itemView.setClickable(true);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isNetworkError = false;
notifyItemChanged(getItemCount() - 1);
initSubjectList();
}
});
} else {
holder.footerview_progressbar.setVisibility(View.VISIBLE);
holder.footerview_tv_loading.setText("加载中...");
holder.itemView.setClickable(false);
}
}
public void startAutoScroll() {
if (autoScrollViewPager != null) {
autoScrollViewPager.startAutoScroll();
}
}
public void stopAutoScroll() {
if (autoScrollViewPager != null) {
autoScrollViewPager.stopAutoScroll();
}
}
public List<GameEntity> getPluginList() {
return pluginList;
}
public List<SubjectEntity> getSubjectList() {
return subjectList;
}
public boolean isNetworkError() {
return isNetworkError;
}
public void setNetworkError(boolean networkError) {
isNetworkError = networkError;
}
}