1036 lines
46 KiB
Java
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;
|
|
}
|
|
}
|