Files
assistant-android/app/src/main/java/com/gh/gamecenter/adapter/ConcernRecommendAdapter.java
2016-10-14 18:36:55 +08:00

223 lines
6.9 KiB
Java

package com.gh.gamecenter.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.gh.base.AppController;
import com.gh.common.constant.Config;
import com.gh.common.util.DataUtils;
import com.gh.common.util.GameUtils;
import com.gh.common.util.ImageUtils;
import com.gh.gamecenter.ConcernActivity;
import com.gh.gamecenter.MainActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.adapter.viewholder.ConcernViewHolder;
import com.gh.gamecenter.db.info.ConcernInfo;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.listener.OnCallBackListener;
import com.gh.gamecenter.manager.ConcernManager;
import com.gh.gamecenter.manager.DataCollectionManager;
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.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by LGT on 2016/9/20.
*/
public class ConcernRecommendAdapter extends RecyclerView.Adapter<ConcernViewHolder> {
private Context context;
private OnCallBackListener listener;
private List<GameEntity> gameList;
private List<GameEntity> recommendGameList;
private ConcernManager concernManager;
public ConcernRecommendAdapter(ConcernActivity activity) {
this.context = activity;
this.listener = activity;
gameList = new ArrayList<>();
concernManager = new ConcernManager(context);
init();
}
private int count;
private void addCount() {
synchronized (ConcernRecommendAdapter.class) {
count++;
}
}
private void init() {
// 获取已安装游戏的digest
List<ConcernInfo> installedList = concernManager.getInstalledGame();
final int size = installedList.size();
count = 0;
for (ConcernInfo concernInfo : installedList) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "game/" + concernInfo.getId() + "/digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Gson gson = new Gson();
GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class);
gameList.add(gameEntity);
addCount();
if (count == size) {
initRecommendGame();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
addCount();
if (count == size) {
initRecommendGame();
}
}
});
AppController.addToRequestQueue(request, ConcernActivity.TAG);
}
}
private void initRecommendGame() {
JsonArrayExtendedRequest recommendRequest = new JsonArrayExtendedRequest(
Config.HOST + "game/remenkapai",
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Type listType = new TypeToken<ArrayList<GameEntity>>() {}.getType();
Gson gson = new Gson();
ArrayList<GameEntity> list = gson.fromJson(response.toString(), listType);
for (GameEntity gameEntity : list) {
for (int i = 0, size = gameList.size(); i < size; i++) {
if (gameEntity.getId().equals(gameList.get(i).getId())) {
break;
} else if (i + 1 == size) {
gameList.add(gameEntity);
}
}
}
if (gameList.size() != 0) {
recommendGameList = new ArrayList<>();
for (int i = 0, sizei = gameList.size(); i < sizei; i++) {
if (!concernManager.isConcern(gameList.get(i).getId())) {
recommendGameList.add(gameList.get(i));
}
}
}
if (recommendGameList != null && recommendGameList.size() != 0) {
listener.loadDone();
}
}
}, null);
AppController.addToRequestQueue(recommendRequest, ConcernActivity.TAG);
}
@Override
public ConcernViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.concern_item, parent, false);
return new ConcernViewHolder(view);
}
@Override
public void onBindViewHolder(final ConcernViewHolder holder, int position) {
GameEntity gameEntity = recommendGameList.get(position);
ImageUtils.getInstance(context).display(
gameEntity.getIcon(), holder.concern_item_icon);
holder.concern_item_name.setText(gameEntity.getName());
holder.concern_item_concern.setText("关注");
holder.concern_item_concern.setBackgroundResource(R.drawable.textview_blue_style);
holder.concern_item_concern.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 添加关注到表,并更新当前界面,插入一个关注
GameEntity gameEntity = recommendGameList.remove(holder.getPosition());
notifyItemRemoved(holder.getPosition());
// notifyDataSetChanged();
holder.concern_item_concern.setClickable(false);
holder.itemView.setClickable(false);
Map<String, Object> kv = new HashMap<>();
kv.put("状态", "关注");
DataUtils.onEvent(context, "游戏关注", gameEntity.getName(), kv);
Map<String, Object> map = new HashMap<>();
map.put("game", gameEntity.getName());
map.put("game_id", gameEntity.getId());
map.put("type", "关注");
DataCollectionManager.onEvent(context, "concern", map);
concernManager.addByEntity(gameEntity);
Toast.makeText(context, "关注成功", Toast.LENGTH_SHORT).show();
listener.loadEmpty();
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GameEntity gameEntity = recommendGameList.get(holder.getPosition());
Map<String, Object> kv = new HashMap<>();
kv.put("名字", gameEntity.getName());
kv.put("位置", String.valueOf(holder.getPosition() + 1));
DataUtils.onEvent(context, "点击", "我的关注-推荐", kv);
Map<String, Object> map = new HashMap<>();
map.put("location", "推荐");
map.put("page", "我的关注");
map.put("game", gameEntity.getName());
map.put("game_id", gameEntity.getId());
DataCollectionManager.onEvent(context, "click-item", map);
GameUtils.startGameDetailActivity(context, gameEntity, "(我的关注-推荐)");
}
});
}
@Override
public int getItemCount() {
if (recommendGameList == null) {
return 0;
}
return recommendGameList.size();
}
public List<GameEntity> getRecommendGameList() {
if (recommendGameList == null) {
recommendGameList = new ArrayList<>();
}
return recommendGameList;
}
public List<GameEntity> getGameList() {
return gameList;
}
}