package com.gh.gamecenter; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.android.volley.Response; import com.android.volley.VolleyError; import com.gh.base.AppController; import com.gh.base.BaseActivity; import com.gh.common.constant.Config; import com.gh.common.constant.Constants; import com.gh.common.util.ConcernUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.TimestampUtils; import com.gh.common.util.Utils; import com.gh.common.view.Concern_LinearLayout; import com.gh.gamecenter.db.info.ConcernInfo; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.eventbus.EBConcernChanged; import com.gh.gamecenter.manager.ConcernManager; import com.gh.gamecenter.manager.DataCollectionManager; 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; public class ConcernActivity extends BaseActivity implements OnClickListener { private Concern_LinearLayout view; private RecyclerView concern_rv_show, concern_rv_recommend; private ConcernManager manager; private RelativeLayout concern_rl_title; private LinearLayout reuse_none_data; private List list; private List recommendList; private List concernList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view = (Concern_LinearLayout) View.inflate(this, R.layout.activity_concern, null); init(view, "我的关注"); manager = new ConcernManager(getApplicationContext()); list = manager.getConcernGame(); if (list == null) { list = new ArrayList<>(); } recommendList = new ArrayList<>(); concernList = new ArrayList<>(); if (!list.isEmpty()) { initConcernGame(); } else { reuse_none_data.setVisibility(View.VISIBLE); concern_rv_show.setVisibility(View.GONE); } concern_rl_title.setOnClickListener(this); concern_rv_show.setHasFixedSize(true); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); concern_rv_show.setLayoutManager(gridLayoutManager); concern_rv_show.setAdapter(new ConcernViewAdapter()); concern_rv_recommend.setLayoutManager(new GridLayoutManager(this, 4)); concern_rv_recommend.setAdapter(new RecommendViewAdapter()); initRecommendGame(); } @Override public void onClick(View v) { if (v == concern_rl_title) { if (concern_rv_recommend.getVisibility() == View.VISIBLE) { view.hideRecyclerView(); } else { view.showRecyclerView(); } } } // 关注事件 public void onEventMainThread(EBConcernChanged changed) { } private void initRecommendGame() { JsonArrayExtendedRequest recommendRequest = new JsonArrayExtendedRequest( TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/remenkapai", Constants.GAME_CD), new Response.Listener() { @Override public void onResponse(JSONArray response) { processingData(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); AppController.addToRequestQueue(recommendRequest, ConcernActivity.class); } private void processingData(JSONArray response) { Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); List list = gson.fromJson(response.toString(), listType); for (int i = 0, size = list.size(); i < size; i++) { if (!manager.isConcern(list.get(i).getId())) { recommendList.add(list.get(i)); } } if (!recommendList.isEmpty()) { concern_rl_title.setVisibility(View.VISIBLE); concern_rv_recommend.setVisibility(View.VISIBLE); concern_rv_recommend.setLayoutManager(new GridLayoutManager(this, recommendList.size() > 4 ? 4 : recommendList.size())); concern_rv_recommend.getAdapter().notifyDataSetChanged(); } } private int cCount; private void addConcernCount() { synchronized (ConcernActivity.class) { cCount++; } } private void initConcernGame() { final List result = new ArrayList<>(); final int count = list.size(); cCount = 0; for (int i = 0, size = list.size(); i < size; i++) { JsonObjectExtendedRequest concernObjectRequest = new JsonObjectExtendedRequest( TimestampUtils.addTimestamp( Config.HOST + "v2d0/game/" + list.get(i).getId() + "/digest", Constants.GAME_CD), new Response.Listener() { @Override public void onResponse(JSONObject response) { addConcernCount(); result.add(response); if (cCount == count) { processingConcernGame(result); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { addConcernCount(); if (cCount == count) { processingConcernGame(result); } } }); AppController.addToRequestQueue(concernObjectRequest, ConcernActivity.class); } } private void processingConcernGame(List data) { List gameList = new ArrayList<>(); Gson gson = new Gson(); for (int i = 0; i < data.size(); i++) { gameList.add(gson.fromJson(data.get(i).toString(), GameEntity.class)); } for (int i = 0, sizei = list.size(); i < sizei; i++) { for (int j = 0, sizej = gameList.size(); j < sizej; j++) { if (list.get(i).getId().equals(gameList.get(j).getId())) { concernList.add(gameList.get(j)); break; } } } concern_rv_show.getAdapter().notifyDataSetChanged(); } private class ConcernViewHolder extends RecyclerView.ViewHolder implements OnClickListener { private ImageView concern_item_icon; private TextView concern_item_name, concern_item_btn; private View view; public ConcernViewHolder(View convertView) { super(convertView); concern_item_icon = (ImageView) convertView.findViewById(R.id.concern_item_icon); concern_item_name = (TextView) convertView.findViewById(R.id.concern_item_name); concern_item_btn = (TextView) convertView.findViewById(R.id.concern_item_btn); concern_item_btn.setOnClickListener(this); convertView.setOnClickListener(this); view = convertView; } @Override public void onClick(View v) { final int position = getPosition(); if (v == concern_item_btn) { // 删除关注表中的数据,并更新界面 DialogUtils.showCancelDialog(ConcernActivity.this, new DialogUtils.ConfiremListener() { @Override public void onConfirem() { if (manager.findConcernById(list.get(position).getId()) != null) { ConcernInfo concernInfo = list.remove(position); Map kv = new HashMap<>(); kv.put("状态", "取消关注"); DataUtils.onEvent(ConcernActivity.this, "游戏关注", concernInfo.getGameName(), kv); Map map = new HashMap<>(); map.put("game", concernInfo.getGameName()); map.put("type", "取消关注"); map.put("createdOn", System.currentTimeMillis() / 1000); DataCollectionManager.onEvent(ConcernActivity.this, "concern", map); manager.deleteConcern(concernInfo.getId()); concernList.remove(position); concern_rv_show.getAdapter().notifyItemRemoved(position); if (list.isEmpty()) { reuse_none_data.setVisibility(View.VISIBLE); concern_rv_show.setVisibility(View.GONE); } concern_item_btn.setClickable(false); view.setClickable(false); recommendList = new ArrayList<>(); initRecommendGame(); } else { toast("取消失败,请稍后再试"); } } }); } else { if (concernList != null && !concernList.isEmpty()) { GameEntity gameEntity = concernList.get(position); Map map = new HashMap<>(); map.put("location", "关注列表"); map.put("createOn", System.currentTimeMillis() / 1000); map.put("game", gameEntity.getName()); map.put("page", "我的关注"); DataCollectionManager.onEvent(ConcernActivity.this, "click-item", map); AppController.put("GameEntity", gameEntity); Intent intent = new Intent(ConcernActivity.this, GameDetailActivity.class); intent.putExtra("entrance", "我的关注-列表"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } } } } private class ConcernViewAdapter extends RecyclerView.Adapter { @Override public int getItemCount() { return list.size(); } @Override public void onBindViewHolder(ConcernViewHolder holder, int position) { ConcernInfo concernEntity = list.get(position); ImageUtils.getInstance(getApplicationContext()).display( concernEntity.getIcon(), holder.concern_item_icon); holder.concern_item_name.setText(concernEntity.getGameName()); holder.concern_item_btn.setText("取消关注"); holder.concern_item_btn.setBackgroundResource(R.drawable.textview_cancel_style); holder.concern_item_btn.setClickable(true); holder.view.setClickable(true); } @Override public ConcernViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) { View view = LayoutInflater.from(viewGroup.getContext()).inflate( R.layout.concern_item, viewGroup, false); return new ConcernViewHolder(view); } } private class RecommendViewHolder extends RecyclerView.ViewHolder implements OnClickListener { private ImageView concern_item_icon; private TextView concern_item_name, concern_item_btn; private View view; public RecommendViewHolder(View convertView) { super(convertView); concern_item_icon = (ImageView) convertView.findViewById(R.id.concern_item_icon); concern_item_name = (TextView) convertView.findViewById(R.id.concern_item_name); concern_item_btn = (TextView) convertView.findViewById(R.id.concern_item_btn); concern_item_btn.setOnClickListener(this); convertView.setOnClickListener(this); view = convertView; } @Override public void onClick(View v) { int position = getPosition(); if (v == concern_item_btn) { // 添加关注到表,并更新当前界面,插入一个关注 GameEntity gameEntity = recommendList.get(position); Map kv = new HashMap<>(); kv.put("状态", "关注"); DataUtils.onEvent(ConcernActivity.this, "游戏关注", gameEntity.getName(), kv); Map map = new HashMap<>(); map.put("game", gameEntity.getName()); map.put("type", "关注"); map.put("createdOn", System.currentTimeMillis() / 1000); DataCollectionManager.onEvent(ConcernActivity.this, "concern", map); manager.addByEntity(gameEntity); ConcernInfo concernEntity = new ConcernInfo(); concernEntity.setGameName(gameEntity.getName()); concernEntity.setConcern(true); concernEntity.setIcon(gameEntity.getIcon()); concernEntity.setId(gameEntity.getId()); list.add(concernEntity); if (list.size() == 1) { reuse_none_data.setVisibility(View.GONE); concern_rv_show.setVisibility(View.VISIBLE); } concern_rv_show.getAdapter().notifyItemInserted(list.size() - 1); concernList.add(recommendList.remove(position)); if (recommendList.isEmpty()) { concern_rl_title.setVisibility(View.GONE); concern_rv_recommend.setVisibility(View.GONE); } else { if (recommendList.size() < 4) { concern_rv_recommend.setLayoutManager(new GridLayoutManager( ConcernActivity.this, recommendList.size())); } concern_rv_recommend.getAdapter().notifyItemRemoved(position); } concern_item_btn.setClickable(false); view.setClickable(false); toast("关注成功"); } else { GameEntity gameEntity = recommendList.get(position); Map map = new HashMap<>(); map.put("location", "热门游戏推荐"); map.put("createOn", System.currentTimeMillis() / 1000); map.put("game", gameEntity.getName()); map.put("page", "我的关注"); DataCollectionManager.onEvent(ConcernActivity.this, "click-item", map); AppController.put("GameEntity", gameEntity); Intent intent = new Intent(ConcernActivity.this, GameDetailActivity.class); intent.putExtra("entrance", "我的关注-推荐"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } } } private class RecommendViewAdapter extends RecyclerView.Adapter { @Override public int getItemCount() { return recommendList.size(); } @Override public void onBindViewHolder(RecommendViewHolder holder, int position) { GameEntity gameEntity = recommendList.get(position); ImageUtils.getInstance(getApplicationContext()).display( gameEntity.getIcon(), holder.concern_item_icon); holder.concern_item_name.setText(gameEntity.getName()); holder.concern_item_btn.setText("关注"); holder.concern_item_btn.setBackgroundResource(R.drawable.textview_blue_style); holder.concern_item_btn.setClickable(true); holder.view.setClickable(true); } @Override public RecommendViewHolder onCreateViewHolder(ViewGroup viewGroup, int type) { View view = LayoutInflater.from(viewGroup.getContext()).inflate( R.layout.concern_item, viewGroup, false); return new RecommendViewHolder(view); } } private boolean isPause = false; @Override protected void onPause() { super.onPause(); isPause = true; } @Override protected void onResume() { super.onResume(); Utils.log("isPause = " + isPause); if (isPause) { List concernList = manager.getConcernGame(); boolean isChanged = false; if (concernList == null) { if (list.size() != 0){ isChanged = true; } } else { if (list.isEmpty() || concernList.size() > list.size() || concernList.size() < list.size()) { isChanged = true; } } Utils.log("isChanged = " + isChanged); if (isChanged) { list = concernList; if (list == null) { list = new ArrayList<>(); } concernList = new ArrayList<>(); if (!list.isEmpty()) { reuse_none_data.setVisibility(View.GONE); concern_rv_show.setVisibility(View.VISIBLE); initConcernGame(); } else { reuse_none_data.setVisibility(View.VISIBLE); concern_rv_show.setVisibility(View.GONE); } recommendList = new ArrayList<>(); initRecommendGame(); } isPause = false; } } @Override protected void onDestroy() { super.onDestroy(); String uuid = ConcernUtils.uuid(this); JSONArray data = new JSONArray(); for (ConcernInfo concernInfo : manager.getConcernGame()) { data.put(concernInfo.getId()); } ConcernUtils.updateConcernData(Config.HOST + "v2d0/device/" + uuid + "/concern", data, new ConcernUtils.DownJsonListener() { @Override public void downSucced(String str) { Utils.log("更新设备关注游戏成功"); } @Override public void downFailed() { Utils.log("更新设备关注游戏失败"); } }); view = null; concern_rv_show = null; concern_rv_recommend = null; manager = null; concern_rl_title = null; reuse_none_data = null; list = null; recommendList = null; concernList = null; } }