细节修复、部分bug修复

This commit is contained in:
huangzhuanghua
2016-09-20 18:29:19 +08:00
parent 471afcf0be
commit 384af8a9db
34 changed files with 1176 additions and 1480 deletions

View File

@ -1,61 +1,41 @@
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.TokenUtils;
import com.gh.common.util.Utils;
import com.gh.common.view.Concern_LinearLayout;
import com.gh.gamecenter.adapter.ConcernAdapter;
import com.gh.gamecenter.adapter.ConcernRecommendAdapter;
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 ConcernAdapter concernAdapter;
private ConcernRecommendAdapter concernRecommendAdapter;
private RelativeLayout concern_rl_title;
private LinearLayout reuse_none_data;
private List<ConcernInfo> list;
private List<GameEntity> recommendList;
private List<GameEntity> concernList;
private ConcernManager concernManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -64,19 +44,10 @@ public class ConcernActivity extends BaseActivity implements OnClickListener {
view = (Concern_LinearLayout) View.inflate(this, R.layout.activity_concern, null);
init(view, "我的关注");
manager = new ConcernManager(getApplicationContext());
concernManager = new ConcernManager(getApplicationContext());
list = manager.getConcernGame();
if (list == null) {
list = new ArrayList<>();
}
recommendList = new ArrayList<>();
concernList = new ArrayList<>();
if (!list.isEmpty()) {
initConcernGame();
} else {
List<ConcernInfo> concernList = concernManager.getConcernGame();
if (concernList == null || concernList.isEmpty()) {
reuse_none_data.setVisibility(View.VISIBLE);
concern_rv_show.setVisibility(View.GONE);
}
@ -84,14 +55,42 @@ public class ConcernActivity extends BaseActivity implements OnClickListener {
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_show.setLayoutManager(new GridLayoutManager(this, 3));
concernAdapter = new ConcernAdapter(this);
concern_rv_show.setAdapter(concernAdapter);
concern_rv_recommend.setHasFixedSize(true);
concern_rv_recommend.setLayoutManager(new GridLayoutManager(this, 4));
concern_rv_recommend.setAdapter(new RecommendViewAdapter());
concernRecommendAdapter = new ConcernRecommendAdapter(this);
concern_rv_recommend.setAdapter(concernRecommendAdapter);
}
initRecommendGame();
@Override
public void loadEmpty() {
if (concernAdapter.getConcernList() == null
|| concernAdapter.getConcernList().isEmpty()) {
reuse_none_data.setVisibility(View.VISIBLE);
concern_rv_show.setVisibility(View.GONE);
}
if (concernRecommendAdapter.getRecommendGameList() == null
|| concernRecommendAdapter.getRecommendGameList().isEmpty()) {
concern_rl_title.setVisibility(View.GONE);
concern_rv_recommend.setVisibility(View.GONE);
} else {
if (concernRecommendAdapter.getRecommendGameList().size() < 4) {
concern_rv_recommend.setLayoutManager(new GridLayoutManager(
ConcernActivity.this, concernRecommendAdapter.getRecommendGameList().size()));
}
}
}
@Override
public void loadDone() {
concern_rl_title.setVisibility(View.VISIBLE);
concern_rv_recommend.setVisibility(View.VISIBLE);
int size = concernRecommendAdapter.getRecommendGameList().size();
concern_rv_recommend.setLayoutManager(new GridLayoutManager(this, size > 4 ? 4 : size));
concern_rv_recommend.getAdapter().notifyDataSetChanged();
}
@Override
@ -107,314 +106,32 @@ public class ConcernActivity extends BaseActivity implements OnClickListener {
// 关注事件
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<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
processingData(response);
}
}, null);
AppController.addToRequestQueue(recommendRequest, ConcernActivity.class);
}
private void processingData(JSONArray response) {
Type listType = new TypeToken<ArrayList<GameEntity>>() {}.getType();
Gson gson = new Gson();
List<GameEntity> list = gson.fromJson(response.toString(), listType);
recommendList.clear();
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<JSONObject> 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<JSONObject>() {
@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<JSONObject> data) {
List<GameEntity> 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));
}
concernList.clear();
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;
Utils.log("changed = " + changed.getGameId());
Utils.log("changed = " + changed.isConcern());
if (changed.isConcern()) {
for (GameEntity gameEntity : concernRecommendAdapter.getGameList()) {
if (changed.getGameId().equals(gameEntity.getId())) {
ConcernInfo concernInfo = new ConcernInfo();
concernInfo.setGameName(gameEntity.getName());
concernInfo.setConcern(true);
concernInfo.setIcon(gameEntity.getIcon());
concernInfo.setId(gameEntity.getId());
concernAdapter.getConcernList().add(concernInfo);
concernAdapter.getConcernGameList().add(gameEntity);
concernAdapter.notifyDataSetChanged();
}
}
}
concern_rv_show.getAdapter().notifyDataSetChanged();
}
private class ConcernViewHolder extends RecyclerView.ViewHolder {
private ImageView concern_item_icon;
private TextView concern_item_name, concern_item_btn;
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);
}
}
private class ConcernViewAdapter extends
RecyclerView.Adapter<ConcernViewHolder> {
@Override
public int getItemCount() {
return list.size();
}
@Override
public void onBindViewHolder(final 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.concern_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 删除关注表中的数据,并更新界面
DialogUtils.showCancelDialog(ConcernActivity.this, new DialogUtils.ConfiremListener() {
@Override
public void onConfirem() {
if (manager.findConcernById(list.get(holder.getPosition()).getId()) != null) {
ConcernInfo concernInfo = list.remove(holder.getPosition());
Map<String, Object> kv = new HashMap<>();
kv.put("状态", "取消关注");
DataUtils.onEvent(ConcernActivity.this, "游戏关注", concernInfo.getGameName(), kv);
Map<String, Object> map = new HashMap<>();
map.put("game", concernInfo.getGameName());
map.put("game_id", concernInfo.getId());
map.put("type", "取消关注");
DataCollectionManager.onEvent(ConcernActivity.this, "concern", map);
manager.deleteConcern(concernInfo.getId());
concernList.remove(holder.getPosition());
concern_rv_show.getAdapter().notifyItemRemoved(holder.getPosition());
if (list.isEmpty()) {
reuse_none_data.setVisibility(View.VISIBLE);
concern_rv_show.setVisibility(View.GONE);
}
holder.concern_item_btn.setClickable(false);
view.setClickable(false);
recommendList = new ArrayList<>();
initRecommendGame();
} else {
toast("取消失败,请稍后再试");
}
}
});
} else {
concernRecommendAdapter.getRecommendGameList().clear();
for (int i = 0, size = concernRecommendAdapter.getGameList().size(); i < size; i++) {
if (!concernManager.isConcern(concernRecommendAdapter.getGameList().get(i).getId())) {
concernRecommendAdapter.getRecommendGameList().add(concernRecommendAdapter.getGameList().get(i));
}
});
holder.itemView.setClickable(true);
holder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (concernList != null && !concernList.isEmpty()) {
GameEntity gameEntity = concernList.get(holder.getPosition());
Map<String, Object> map = new HashMap<>();
map.put("location", "关注列表");
map.put("game", gameEntity.getName());
map.put("game_id", gameEntity.getId());
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);
}
}
});
}
@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<String, Object> kv = new HashMap<>();
kv.put("状态", "关注");
DataUtils.onEvent(ConcernActivity.this, "游戏关注", 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(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<String, Object> map = new HashMap<>();
map.put("location", "热门游戏推荐");
map.put("game", gameEntity.getName());
map.put("game_id", gameEntity.getId());
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);
}
concernRecommendAdapter.notifyDataSetChanged();
}
}
private class RecommendViewAdapter extends RecyclerView.Adapter<RecommendViewHolder> {
@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
@ -428,35 +145,24 @@ public class ConcernActivity extends BaseActivity implements OnClickListener {
super.onResume();
Utils.log("isPause = " + isPause);
if (isPause) {
List<ConcernInfo> concernList = manager.getConcernGame();
List<ConcernInfo> concernList = concernManager.getConcernGame();
boolean isChanged = false;
if (concernList == null) {
if (list.size() != 0){
if (concernAdapter.getConcernList().size() != 0){
isChanged = true;
}
} else {
if (list.isEmpty()
|| concernList.size() > list.size()
|| concernList.size() < list.size()) {
if (concernAdapter.getConcernList() == null
|| concernAdapter.getConcernList().isEmpty()
|| concernList.size() > concernAdapter.getConcernList().size()
|| concernList.size() < concernAdapter.getConcernList().size()) {
isChanged = true;
}
}
Utils.log("isChanged = " + isChanged);
if (isChanged) {
list = concernList;
if (list == null) {
list = 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();
concernAdapter = new ConcernAdapter(this);
concern_rv_show.setAdapter(concernAdapter);
}
isPause = false;
}
@ -465,9 +171,9 @@ public class ConcernActivity extends BaseActivity implements OnClickListener {
@Override
protected void onDestroy() {
super.onDestroy();
String uuid = ConcernUtils.uuid(this);
String uuid = TokenUtils.getDeviceId(this);
JSONArray data = new JSONArray();
for (ConcernInfo concernInfo : manager.getConcernGame()) {
for (ConcernInfo concernInfo : concernManager.getConcernGame()) {
data.put(concernInfo.getId());
}
ConcernUtils.updateConcernData(Config.HOST + "v2d0/device/" + uuid + "/concern", data,
@ -485,11 +191,7 @@ public class ConcernActivity extends BaseActivity implements OnClickListener {
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;
}
}