diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 46f1c527aa..138261fd3a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -144,6 +144,9 @@ + diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index a5920e1fa6..9f362d61ff 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -40,11 +40,9 @@ public class DownloadItemUtils { public static void initializeGameMap(Context context, ArrayMap> gameMap) { gameMap.clear(); - List list = DownloadManager.getInstance(context) - .getAll(); + List list = DownloadManager.getInstance(context).getAll(); for (int i = 0, size = list.size(); i < size; i++) { - ArrayMap map = gameMap.get(list.get(i) - .getName()); + ArrayMap map = gameMap.get(list.get(i).getName()); if (map == null) { map = new ArrayMap(); } @@ -147,7 +145,12 @@ public class DownloadItemUtils { downloadEntry = entryMap.get(entryMap.keyAt(0)); } - if (downloadEntry != null) { + String pluginPlatform = entity.getPluginPlatform(); + + if (downloadEntry != null && (pluginPlatform == null + || pluginPlatform.equals(PlatformUtils.getInstance(context) + .getPlatformName(downloadEntry.getMeta().get("platform"))))) { + labelList.setVisibility(View.GONE); game_progressbar.setVisibility(View.VISIBLE); game_ll_info.setVisibility(View.VISIBLE); @@ -304,6 +307,19 @@ public class DownloadItemUtils { } game_progressbar.setProgress((int) (downloadEntry .getPercent() * 10)); + } else { + labelList.setVisibility(View.VISIBLE); + game_progressbar.setVisibility(View.GONE); + game_ll_info.setVisibility(View.GONE); + if (entity.getApk() != null) { + if (entity.getPluginPlatform() != null) { + downloadBtn.setText("插件化"); + } else { + downloadBtn.setText("下载"); + } + downloadBtn.setBackgroundResource(R.drawable.textview_blue_style); + downloadBtn.setTextColor(0xFFFFFFFF); + } } } else { labelList.setVisibility(View.VISIBLE); @@ -729,7 +745,7 @@ public class DownloadItemUtils { meta.put("entrance", entrance); meta.put("location", "游戏详情:" + game.getName()); if (game.getPluginPlatform() != null) { - meta.put("PluginPlatform", PlatformUtils.getInstance(context).getPlatformName(game.getApk().get(0).getPlatform())); + meta.put("PluginPlatform", game.getPluginPlatform()); } entry.setMeta(meta); return entry; diff --git a/app/src/main/java/com/gh/gamecenter/PluginActivity.java b/app/src/main/java/com/gh/gamecenter/PluginActivity.java new file mode 100644 index 0000000000..39ff1a2456 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/PluginActivity.java @@ -0,0 +1,202 @@ +package com.gh.gamecenter; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.LinearLayout; + +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; +import com.gh.base.BaseActivity; +import com.gh.common.constant.Constants; +import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.PlatformUtils; +import com.gh.common.view.VerticalItemDecoration; +import com.gh.download.DataWatcher; +import com.gh.download.DownloadEntry; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.adapter.PluginAdapter; +import com.gh.gamecenter.adapter.SubjectAdapter; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.SubjectEntity; +import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBPWDismiss; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.game.Game1Fragment; + +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * Created by LGT on 2016/7/6. + */ +public class PluginActivity extends BaseActivity { + + private RecyclerView plugin_list; + private PluginAdapter adapter; + private ProgressBarCircularIndeterminate plugin_pb_loading; + private LinearLayout reuse_no_connection; + + private boolean isEverpause = false; + private boolean isDestroy = false; + + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (!isDestroy) { + if (msg.what == Constants.DOWNLOAD_ROLL) { + String name = (String) msg.obj; + if (adapter != null) { + LinkedBlockingQueue queue = adapter.getPlatformMap().get(name); + if (queue.size() > 1) { + queue.offer(queue.poll()); + Message msg2 = Message.obtain(); + msg2.obj = name; + msg2.what = Constants.DOWNLOAD_ROLL; + sendMessageDelayed(msg2, 3000); + } + } + } + } + } + }; + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged( + HashMap downloadingEntries) { + for (java.util.Map.Entry entry : downloadingEntries + .entrySet()) { + DownloadEntry downloadEntry = entry.getValue(); + + //特殊 插件化update + if (downloadEntry.getMeta().get("PluginPlatform") != null) { + Integer location = adapter.getLocationMap().get( + downloadEntry.getName() + " - " + downloadEntry.getMeta().get("PluginPlatform")); + if (location != null) { + int index = location; + GameEntity detailedEntity = getEntityByLocation(index); + + if (detailedEntity != null) { + DownloadItemUtils.processDate(detailedEntity, + downloadEntry, adapter.getPlatformMap(), handler, adapter, index, adapter.getStatusMap()); + } + } + } + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + View contentView = View.inflate(this, R.layout.activity_plugin, null); + + init(contentView, "插件化"); + + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + plugin_pb_loading.setVisibility(View.VISIBLE); + plugin_list.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + adapter = new PluginAdapter(PluginActivity.this, plugin_list, + plugin_pb_loading, reuse_no_connection); + plugin_list.setAdapter(adapter); + } + }); + + plugin_list.setHasFixedSize(true); + plugin_list.setLayoutManager(new LinearLayoutManager(this)); + adapter = new PluginAdapter(this, plugin_list, plugin_pb_loading, reuse_no_connection); + plugin_list.setAdapter(adapter); + plugin_list.addItemDecoration(new VerticalItemDecoration(this, 1)); + + } + + public void onEventMainThread(EBPWDismiss dismiss) { + if (adapter != null) { + adapter.getDismissEntity().setShow(false); + } + } + + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + if (reuse_no_connection.getVisibility() == View.VISIBLE) { + plugin_list.setVisibility(View.VISIBLE); + plugin_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + adapter = new PluginAdapter(this, plugin_list, plugin_pb_loading, reuse_no_connection); + plugin_list.setAdapter(adapter); + } + } + } + + //安装、卸载事件 + public void onEventMainThread(EBPackage busFour) { + //特殊 插件化 + String name = adapter.getNameMap().get(busFour.getPackageName()); + if (name != null) { + Integer location = adapter.getLocationMap().get(name); + if (location != null) { + if ("安装".equals(busFour.getType()) || "卸载".equals(busFour.getType())) { + List list = adapter.getPluginList(); + for (int i = 0, size = list.size(); i < size; i++) { + if (list.get(i).getApk().get(0).getPackageName() + .equals(busFour.getPackageName())) { + list.remove(i); + adapter.notifyItemRemoved(location); + break; + } + } + } + } + } + } + + private GameEntity getEntityByLocation(int position) { + return adapter.getPluginList().get(position); + } + + @Override + protected void onPause() { + super.onPause(); + isEverpause = true; + adapter.getStatusMap().clear(); + DownloadManager.getInstance(this).removeObserver(dataWatcher); + } + + @Override + protected void onResume() { + super.onResume(); + if (isEverpause) { + //修改游戏下载状态 + DownloadItemUtils.initializeGameMap(this, adapter.getGameMap()); + for (GameEntity entity : adapter.getPluginList()) { + entity.setEntryMap(adapter.getGameMap().get(entity.getName())); + } + adapter.notifyDataSetChanged(); + } + isEverpause = false; + DownloadManager.getInstance(this).addObserver(dataWatcher); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + isDestroy = true; + AppController.canclePendingRequests(PluginActivity.class); + plugin_list = null; + adapter = null; + plugin_pb_loading = null; + reuse_no_connection = null; + handler = null; + dataWatcher = null; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java index 9025ee05b4..07099ab958 100644 --- a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java @@ -3,74 +3,51 @@ package com.gh.gamecenter; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.v4.util.ArrayMap; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.LinearLayout; -import com.android.volley.NoConnectionError; -import com.android.volley.Response; -import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; 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.DownloadItemUtils; -import com.gh.common.util.TimestampUtils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; import com.gh.gamecenter.adapter.SubjectAdapter; -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.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPWDismiss; import com.gh.gamecenter.eventbus.EBPackage; -import com.gh.gamecenter.manager.GameManager; -import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import org.json.JSONArray; - -import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.concurrent.LinkedBlockingQueue; public class SubjectActivity extends BaseActivity { - private RecyclerView hotcard_list; + private RecyclerView subject_list; private SubjectAdapter adapter; - private LinearLayout hotcard_ll_loading; + private ProgressBarCircularIndeterminate subject_pb_loading; + private LinearLayout reuse_no_connection; - // 黄壮华 添加 记录信息的map 修改2015/8/15 - private ArrayMap locationMap; - private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; + private String id; private boolean isEverpause = false; private boolean isDestroy = false; - private ArrayMap statusMap; - - private DismissEntity dismissEntity; - private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (!isDestroy) { if (msg.what == Constants.DOWNLOAD_ROLL) { String name = (String) msg.obj; - if (platformMap != null) { - LinkedBlockingQueue queue = platformMap - .get(name); + if (adapter != null) { + LinkedBlockingQueue queue = adapter.getPlatformMap().get(name); if (queue.size() > 1) { queue.offer(queue.poll()); Message msg2 = Message.obtain(); @@ -86,7 +63,6 @@ public class SubjectActivity extends BaseActivity { // 黄壮华 添加观察者 修改2015/8/15 private DataWatcher dataWatcher = new DataWatcher() { - @Override public void onDataChanged( HashMap downloadingEntries) { @@ -94,16 +70,16 @@ public class SubjectActivity extends BaseActivity { .entrySet()) { DownloadEntry downloadEntry = entry.getValue(); - Integer location = locationMap.get(downloadEntry.getName()); + Integer location = adapter.getLocationMap().get(downloadEntry.getName()); if (location != null) { - int index = location.intValue(); + int index = location; GameEntity detailedEntity = adapter.getList().get(index); if (detailedEntity != null) { DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler, adapter, - index, statusMap); + downloadEntry, adapter.getPlatformMap(), handler, adapter, + index, adapter.getStatusMap()); } } @@ -113,108 +89,48 @@ public class SubjectActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - String id = getIntent().getStringExtra("id"); + id = getIntent().getStringExtra("id"); String name = getIntent().getStringExtra("name"); if (TextUtils.isEmpty(name)) { name = ""; } - View contentView = View.inflate(this, R.layout.activity_hotcard, null); + View contentView = View.inflate(this, R.layout.activity_subject, null); init(contentView, name); - dismissEntity = new DismissEntity(false); - - statusMap = new ArrayMap(); - locationMap = new ArrayMap(); - gameMap = new ArrayMap>(); - platformMap = new ArrayMap>(); - nameMap = new ArrayMap(); - - hotcard_list.setHasFixedSize(true); - hotcard_list.setLayoutManager(new LinearLayoutManager(this)); - - // 黄壮华 添加 初始化游戏状态 修改2015/8/21 - DownloadItemUtils.initializeGameMap(this, gameMap); - - // 黄壮华 传递引用 修改2015/8/15 - adapter = new SubjectAdapter(this, platformMap, statusMap, dismissEntity); - hotcard_list.setAdapter(adapter); - hotcard_list.addItemDecoration(new VerticalItemDecoration(this, 1)); - - addList(id); - - } - - private void addList(String id) { - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST - + "v1d50/game/column/" + id, Constants.GAME_CD), - new Response.Listener() { - - @Override - public void onResponse(JSONArray response) { - processingData(response); - } - - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接 - if (error.getClass().equals(NoConnectionError.class)) { - - } - } - - }); - AppController.addToRequestQueue(request, SubjectActivity.class); - } - - private void processingData(JSONArray response) { - Type listType = new TypeToken>() {}.getType(); - Gson gson = new Gson(); - GameManager manager = new GameManager(getApplicationContext()); - List gameList = gson.fromJson(response.toString(), listType); - if (gameList != null && !gameList.isEmpty()) { - for (GameEntity entity : gameList) { - // 黄壮华 初始化游戏状态 修改2015/8/15 - entity.setEntryMap(gameMap.get(entity.getName())); - for (ApkEntity apkEntity : entity.getApk()) { - manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), - entity.getId(), entity.getName())); - } + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + subject_pb_loading.setVisibility(View.VISIBLE); + subject_list.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + adapter = new SubjectAdapter(SubjectActivity.this, subject_list, + subject_pb_loading, reuse_no_connection, id); + subject_list.setAdapter(adapter); } - adapter.getList().addAll(gameList); - adapter.notifyItemRangeInserted(adapter.getList().size() - gameList.size(), gameList.size()); - } + }); - // 黄壮华 获取游戏位置信息 修改2015/8/15 - for (int i = 0, size = adapter.getList().size(); i < size; i++) { - GameEntity entity = adapter.getList().get(i); - locationMap.put(entity.getName(), i); - for (ApkEntity apkEntity : entity.getApk()) { - nameMap.put(apkEntity.getPackageName(), entity.getName()); - } - } + subject_list.setHasFixedSize(true); + subject_list.setLayoutManager(new LinearLayoutManager(this)); + adapter = new SubjectAdapter(this, subject_list, subject_pb_loading, reuse_no_connection, id); + subject_list.setAdapter(adapter); + subject_list.addItemDecoration(new VerticalItemDecoration(this, 1)); - hotcard_list.setVisibility(View.VISIBLE); - hotcard_ll_loading.setVisibility(View.GONE); } public void onEventMainThread(EBPWDismiss dismiss) { - if (dismissEntity != null) { - dismissEntity.setShow(false); + if (adapter != null) { + adapter.getDismissEntity().setShow(false); } } public void onEventMainThread(EBPackage busFour) { - String name = nameMap.get(busFour.getPackageName()); + String name = adapter.getNameMap().get(busFour.getPackageName()); if (name != null) { - int location = locationMap.get(name); + int location = adapter.getLocationMap().get(name); if ("安装".equals(busFour.getType())) { GameEntity entity = adapter.getList().get(location); for (ApkEntity apkEntity : entity.getApk()) { @@ -231,18 +147,29 @@ public class SubjectActivity extends BaseActivity { } } + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + if (reuse_no_connection.getVisibility() == View.VISIBLE) { + subject_list.setVisibility(View.VISIBLE); + subject_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + adapter = new SubjectAdapter(SubjectActivity.this, subject_list, + subject_pb_loading, reuse_no_connection, id); + subject_list.setAdapter(adapter); + } + } + } + @Override public void onResume() { super.onResume(); if (isEverpause) { // 黄壮华 添加 初始化游戏状态 修改2015/8/21 - DownloadItemUtils.initializeGameMap(this, gameMap); - List entities = new ArrayList(); + DownloadItemUtils.initializeGameMap(this, adapter.getGameMap()); for (GameEntity entity : adapter.getList()) { - entity.setEntryMap(gameMap.get(entity.getName())); - entities.add(entity); + entity.setEntryMap(adapter.getGameMap().get(entity.getName())); } - adapter.setList(entities); } isEverpause = false; DownloadManager.getInstance(getApplicationContext()).addObserver(dataWatcher); @@ -252,7 +179,7 @@ public class SubjectActivity extends BaseActivity { public void onPause() { super.onPause(); isEverpause = true; - statusMap.clear(); + adapter.getStatusMap().clear(); DownloadManager.getInstance(getApplicationContext()).removeObserver(dataWatcher); } @@ -261,15 +188,10 @@ public class SubjectActivity extends BaseActivity { super.onDestroy(); isDestroy = true; AppController.canclePendingRequests(SubjectActivity.class); - hotcard_list = null; + subject_list = null; adapter = null; - hotcard_ll_loading = null; - locationMap = null; - gameMap = null; - platformMap = null; - nameMap = null; - statusMap = null; - dismissEntity = null; + subject_pb_loading = null; + reuse_no_connection = null; handler = null; dataWatcher = null; } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java new file mode 100644 index 0000000000..303202c340 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java @@ -0,0 +1,290 @@ +package com.gh.gamecenter.adapter; + +import android.content.Context; +import android.content.Intent; +import android.support.v4.util.ArrayMap; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.android.volley.Response; +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.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.download.DownloadEntry; +import com.gh.gamecenter.GameDetailsActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; +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.game.GameFragment; +import com.gh.gamecenter.manager.ConcernManager; +import com.gh.gamecenter.manager.GameManager; +import com.gh.gamecenter.manager.PackageManager; +import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; +import com.google.gson.Gson; + +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * Created by LGT on 2016/7/6. + */ +public class PluginAdapter extends RecyclerView.Adapter { + + private Context context; + + private RecyclerView plugin_list; + private ProgressBarCircularIndeterminate plugin_pb_loading; + private LinearLayout reuse_no_connection; + + private List pluginList; + + private ArrayMap locationMap; + private ArrayMap> platformMap; + private ArrayMap> gameMap; + private ArrayMap nameMap; + private ArrayMap statusMap; + private DismissEntity dismissEntity; + + public PluginAdapter(Context context, + RecyclerView recyclerView, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout linearLayout) { + + this.context = context; + plugin_list = recyclerView; + plugin_pb_loading = pbLoading; + reuse_no_connection = linearLayout; + + pluginList = new ArrayList(); + + locationMap = new ArrayMap(); + platformMap = new ArrayMap>(); + gameMap = new ArrayMap>(); + nameMap = new ArrayMap(); + statusMap = new ArrayMap(); + dismissEntity = new DismissEntity(false); + + // 黄壮华 添加 初始化游戏状态 修改2015/8/21 + DownloadItemUtils.initializeGameMap(context, gameMap); + + new Thread(new Runnable() { + @Override + public void run() { + init(); + } + }).start(); + } + + private int count; + + //检查可以插件化的游戏 + private void init() { + ConcernManager concernManager = new ConcernManager(context); + List infos = concernManager.getInstalledGame(); + final int size = infos.size(); + final List list = new ArrayList(); + 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() { + @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) { + if (list.isEmpty()) { + plugin_list.setVisibility(View.GONE); + plugin_pb_loading.setVisibility(View.GONE); + reuse_no_connection.setVisibility(View.VISIBLE); + } else { + processingData(list); + } + } + } + }); + AppController.addToRequestQueue(request, GameFragment.class); + } + } + + private void processingData(List list) { + if (plugin_pb_loading != null && plugin_pb_loading.getVisibility() == View.VISIBLE) { + plugin_pb_loading.setVisibility(View.GONE); + } + if (list == null || list.isEmpty()) { + return; + } + ConcernManager concernManager = new ConcernManager(context); + PackageManager mPackageManager = new PackageManager(context); + List infos = concernManager.getInstalledGame(); + HashMap map; + GameEntity gameEntity; + for (ConcernInfo info : infos) { + map = info.getPackageNames(); + 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) { + for (String key : map.keySet()) { + if (map.get(key)) { + if (!mPackageManager.isSignature(key)) { + for (ApkEntity apkEntity : gameEntity.getApk()) { + if (apkEntity.getPackageName().equals(key)) { + GameEntity entity = gameEntity.clone(); + entity.setPluginPlatform( + PlatformUtils.getInstance(context).getPlatformName(apkEntity.getPlatform())); + ArrayList apkList = new ArrayList(); + 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(0, pluginList.size()); + initLocationMap(); + } + } + + private void initLocationMap() { + for (int i = 0; i < pluginList.size(); i++) { + GameEntity gameEntity = pluginList.get(i); + locationMap.put(gameEntity.getName() + " - " + gameEntity.getPluginPlatform(), i); + for (ApkEntity apkEntity : gameEntity.getApk()) { + nameMap.put(apkEntity.getPackageName(), gameEntity.getName() + " - " + gameEntity.getPluginPlatform()); + } + } + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.home_game_normal_item, parent, false); + return new GameNormalViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof GameNormalViewHolder) { + GameNormalViewHolder viewHolder = (GameNormalViewHolder) holder; + + final GameEntity entity = pluginList.get(position); + + viewHolder.home1_game_order.setVisibility(View.GONE); + + ImageUtils.getInstance(context).display(entity.getIcon(), viewHolder.gameThumb); + if (entity.getPluginPlatform() != null) { + viewHolder.gameNameAndSize.setText(entity.getName() + " - " + entity.getPluginPlatform()); + } else { + viewHolder.gameNameAndSize.setText(entity.getName()); + } + if (entity.getApk() == null || entity.getApk().isEmpty()) { + viewHolder.gameDes.setText(entity.getBrief()); + } else { + viewHolder.gameDes.setText(entity.getApk().get(0).getSize() + " | " + entity.getBrief()); + } + GameViewUtils.setLabelList(context, viewHolder.labelList, entity.getTag()); + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("gameId", entity.getId()); + intent.putExtra("entrance", "游戏-插件"); + context.startActivity(intent); + } + }); + + final int i = position; + + DownloadItemUtils.setOnClickListener(context, viewHolder.downloadBtn, + viewHolder.download_speed, viewHolder.download_percentage, entity, i, + PluginAdapter.this, + statusMap, platformMap, "游戏-插件", + dismissEntity, "主页:" + entity.getName()); + + DownloadItemUtils.updateItem(context, viewHolder.labelList, + viewHolder.game_progressbar, viewHolder.game_ll_info, viewHolder.download_speed, + viewHolder.download_percentage, viewHolder.downloadBtn, entity, platformMap, + statusMap); + } + } + + @Override + public int getItemCount() { + return pluginList.size(); + } + + public List getPluginList() { + return pluginList; + } + + public ArrayMap getLocationMap() { + return locationMap; + } + + public ArrayMap> getPlatformMap() { + return platformMap; + } + + public ArrayMap> getGameMap() { + return gameMap; + } + + public ArrayMap getNameMap() { + return nameMap; + } + + public ArrayMap getStatusMap() { + return statusMap; + } + + public DismissEntity getDismissEntity() { + return dismissEntity; + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java index be178c153e..a79c4c2e7a 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java @@ -7,20 +7,40 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; +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.DownloadItemUtils; import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; +import com.gh.common.util.TimestampUtils; +import com.gh.download.DownloadEntry; import com.gh.gamecenter.GameDetailsActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder; +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.manager.GameManager; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import org.json.JSONArray; + +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -40,37 +60,108 @@ public class SubjectAdapter extends RecyclerView.Adapter list; // 黄壮华 获取引用 修改2015/8/15 + private ArrayMap locationMap; private ArrayMap> platformMap; - + private ArrayMap> gameMap; + private ArrayMap nameMap; private ArrayMap statusMap; private DismissEntity dismissEntity; - // 黄壮华 获取引用 修改2015/8/15 public SubjectAdapter(Context context, - ArrayMap> pMap, - ArrayMap sMap, DismissEntity dEntity) { - - // 黄壮华 获取引用 修改2015/8/15 - platformMap = pMap; - statusMap = sMap; - dismissEntity = dEntity; + RecyclerView recyclerView, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout linearLayout, + String id) { this.context = context; + subject_list = recyclerView; + subject_pb_loading = pbLoading; + reuse_no_connection = linearLayout; + + locationMap = new ArrayMap(); + platformMap = new ArrayMap>(); + gameMap = new ArrayMap>(); + nameMap = new ArrayMap(); + statusMap = new ArrayMap(); + dismissEntity = new DismissEntity(false); + + // 黄壮华 添加 初始化游戏状态 修改2015/8/21 + DownloadItemUtils.initializeGameMap(context, gameMap); list = new ArrayList(); + + initList(id); } - public List getList() { - return list; + private void initList(String id) { + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( + TimestampUtils.addTimestamp(Config.HOST + + "v1d50/game/column/" + id, Constants.GAME_CD), + new Response.Listener() { + + @Override + public void onResponse(JSONArray response) { + processingData(response); + } + + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // 无网络连接 + if (error.getClass().equals(NoConnectionError.class) + || error.getClass().equals(TimeoutError.class)) { + if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { + subject_pb_loading.setVisibility(View.GONE); + } + Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); + subject_list.setVisibility(View.GONE); + reuse_no_connection.setVisibility(View.VISIBLE); + } + } + + }); + AppController.addToRequestQueue(request, SubjectActivity.class); } - public void setList(List list) { - this.list = list; - notifyDataSetChanged(); + private void processingData(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + GameManager manager = new GameManager(context); + List gameList = gson.fromJson(response.toString(), listType); + if (gameList != null && !gameList.isEmpty()) { + for (GameEntity entity : gameList) { + // 黄壮华 初始化游戏状态 修改2015/8/15 + entity.setEntryMap(gameMap.get(entity.getName())); + for (ApkEntity apkEntity : entity.getApk()) { + manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), + entity.getId(), entity.getName())); + } + } + list = gameList; + notifyItemRangeInserted(list.size() - gameList.size(), gameList.size()); + } + + // 黄壮华 获取游戏位置信息 修改2015/8/15 + for (int i = 0, size = list.size(); i < size; i++) { + GameEntity entity = list.get(i); + locationMap.put(entity.getName(), i); + for (ApkEntity apkEntity : entity.getApk()) { + nameMap.put(apkEntity.getPackageName(), entity.getName()); + } + } + + if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { + subject_pb_loading.setVisibility(View.GONE); + } } @Override @@ -78,124 +169,6 @@ public class SubjectAdapter extends RecyclerView.Adapter kv = new HashMap(); - kv.put("入口", "热门卡牌"); - DataUtils.onEvent(context, "游戏详情", entity.getName(), kv); - - AppController.put("GameEntity", entity); - Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("entrance", "热门卡牌"); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - }); - - DownloadItemUtils.setOnClickListener(context, holder.downloadBtn, - holder.download_speed, holder.download_percentage, - entity, position, this, - statusMap, platformMap, "热门卡牌", dismissEntity, "hotcard:" + 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); - } else if (viewHolder instanceof GameTestViewHolder) { - GameTestViewHolder holder = (GameTestViewHolder) viewHolder; - - final GameEntity entity = list.get(position); - - ImageUtils.getInstance(context).display(entity.getIcon(), - holder.gameThumb); - 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()); - } - holder.gameTestType.setText(entity.getTest().getType()); - if (entity.getTest().getStart() == 0) { - holder.gameTestTime.setVisibility(View.GONE); - } else { - holder.gameTestTime.setText(GameViewUtils.getGameTestDate(entity.getTest().getStart())); - } - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AppController.put("GameEntity", entity); - Intent intent = new Intent(context, - GameDetailsActivity.class); - intent.putExtra("entrance", "主页-新测卡牌"); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - }); - - if (entity.getApk() == null || entity.getApk().isEmpty()) { - holder.downloadBtn.setVisibility(View.GONE); - } else { - if (entity.getTest().getEnd() == 0) { - holder.downloadBtn.setVisibility(View.VISIBLE); - DownloadItemUtils.setOnClickListener(context, - holder.downloadBtn, holder.download_speed, - holder.download_percentage, entity, position, - SubjectAdapter.this, - statusMap, platformMap, "主页-新测卡牌", - dismissEntity, "主页:" + entity.getName()); - } else { - long endTime = Long.valueOf(entity.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, entity, position, - SubjectAdapter.this, statusMap, platformMap, - "主页-新测卡牌", dismissEntity, - "主页:" + 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); - } - - } - } - @Override public int getItemViewType(int position) { return position; @@ -203,21 +176,158 @@ public class SubjectAdapter extends RecyclerView.Adapter endTime) { + // 测试时间已过 + holder.downloadBtn.setVisibility(View.GONE); + } else { + // 测试时间未过 + holder.downloadBtn.setVisibility(View.VISIBLE); + DownloadItemUtils.setOnClickListener(context, + holder.downloadBtn, holder.download_speed, + holder.download_percentage, entity, position, + SubjectAdapter.this, statusMap, platformMap, + "主页-新测卡牌", dismissEntity, + "主页:" + 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); + } + + private void initGameNormalViewHolder(GameNormalViewHolder holder, int position) { + final GameEntity entity = list.get(position); + + ImageUtils.getInstance(context).display(entity.getIcon(), holder.gameThumb); + 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 kv = new HashMap(); + kv.put("入口", "热门卡牌"); + DataUtils.onEvent(context, "游戏详情", entity.getName(), kv); + + AppController.put("GameEntity", entity); + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("entrance", "热门卡牌"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + }); + + DownloadItemUtils.setOnClickListener(context, holder.downloadBtn, + holder.download_speed, holder.download_percentage, + entity, position, this, + statusMap, platformMap, "热门卡牌", dismissEntity, "hotcard:" + 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 List getList() { + return list; + } + + public ArrayMap getLocationMap() { + return locationMap; + } + + public ArrayMap> getPlatformMap() { + return platformMap; + } + + public ArrayMap> getGameMap() { + return gameMap; + } + + public ArrayMap getNameMap() { + return nameMap; + } + + public ArrayMap getStatusMap() { + return statusMap; + } + + public DismissEntity getDismissEntity() { + return dismissEntity; + } + } diff --git a/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.java b/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.java index 26d1d3aa20..ed8457f011 100644 --- a/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.java @@ -196,7 +196,6 @@ public class DownLoadManagerFragment extends Fragment { @Nullable public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (container != null) { container.removeView(view); } @@ -487,11 +486,14 @@ public class DownLoadManagerFragment extends Fragment { downloadmanager_rv_show.getAdapter().notifyItemRemoved( position); } - - EventBus.getDefault().post( - new EBDownloadDelete(entry.getName(), entry.getMeta() - .get("platform"), entry.getUrl())); - + EBDownloadDelete delete = new EBDownloadDelete(entry.getName(), + entry.getMeta().get("platform"), entry.getUrl()); + String PluginPlatform = entry.getMeta().get("PluginPlatform"); + if (PluginPlatform != null) { + delete.setPluginPlatform(PluginPlatform); + } + EventBus.getDefault().post(delete); + DownloadManager.getInstance(getActivity()).cancel( entry.getUrl()); } diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBDownloadDelete.java b/app/src/main/java/com/gh/gamecenter/eventbus/EBDownloadDelete.java index 00257145c2..6e7a25311c 100644 --- a/app/src/main/java/com/gh/gamecenter/eventbus/EBDownloadDelete.java +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBDownloadDelete.java @@ -5,6 +5,7 @@ public class EBDownloadDelete { private String name; private String platform; private String url; + private String PluginPlatform; public EBDownloadDelete(String name, String platform, String url) { super(); @@ -37,4 +38,12 @@ public class EBDownloadDelete { this.url = url; } + public String getPluginPlatform() { + return PluginPlatform; + } + + public void setPluginPlatform(String pluginPlatform) { + PluginPlatform = pluginPlatform; + } + } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java index b6eebd8983..a5b47fbb0c 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java @@ -13,20 +13,27 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; import com.gh.common.constant.Constants; import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.Utils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.DismissEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.SubjectEntity; import com.gh.gamecenter.eventbus.EBDownloadDelete; +import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPWDismiss; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.eventbus.EBUISwitch; import java.util.HashMap; import java.util.List; @@ -41,17 +48,25 @@ import de.greenrobot.event.EventBus; public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { private View view; - private RecyclerView mRecyclerView; + private RecyclerView recyclerview; + private SwipeRefreshLayout game_swipe_refresh; private Game1FragmentAdapter adapter; - private SwipeRefreshLayout mSwipeRefreshLayout; - private ProgressBarCircularIndeterminate mProgressBarCircularIndeterminate; + private LinearLayout reuse_no_connection; + private ProgressBarCircularIndeterminate game_pb_loading; + //下载用到的map private ArrayMap locationMap; - private ArrayMap statusMap; + private ArrayMap> gameMap; private ArrayMap> platformMap; + private ArrayMap nameMap; + private ArrayMap pluginNameMap; + private ArrayMap statusMap; private DismissEntity dismissEntity; + private int currentItem; + + private boolean isEverpause; private boolean isDestroy; private Handler handler = new Handler() { @@ -61,8 +76,7 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr if (msg.what == Constants.DOWNLOAD_ROLL) { String name = (String) msg.obj; if (platformMap != null) { - LinkedBlockingQueue queue = platformMap - .get(name); + LinkedBlockingQueue queue = platformMap.get(name); if (queue.size() > 1) { queue.offer(queue.poll()); Message msg2 = Message.obtain(); @@ -81,29 +95,221 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr @Override public void onDataChanged( HashMap downloadingEntries) { - for (Map.Entry entry : downloadingEntries.entrySet()) { - DownloadEntry downloadEntry = entry.getValue(); + if (!game_swipe_refresh.isRefreshing()) { + for (Map.Entry entry : downloadingEntries.entrySet()) { + DownloadEntry downloadEntry = entry.getValue(); - Integer location; - String PluginPlatform = downloadEntry.getMeta().get("PluginPlatform"); - if (PluginPlatform != null) { - location = locationMap.get(downloadEntry.getName() + " - " + PluginPlatform); - } else { - location = locationMap.get(downloadEntry.getName()); - } - if (location != null) { - int index = location.intValue(); - GameEntity detailedEntity = getEntityByLocation(index); + Integer location = locationMap.get(downloadEntry.getName()); + if (location != null) { + int index = location; + GameEntity detailedEntity = getEntityByLocation(index); - if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler, adapter, index, statusMap); + if (detailedEntity != null) { + DownloadItemUtils.processDate(detailedEntity, + downloadEntry, platformMap, handler, adapter, index, statusMap); + } + } + + //特殊 插件化update + if (downloadEntry.getMeta().get("PluginPlatform") != null) { + location = locationMap.get(downloadEntry.getName() + " - " + downloadEntry.getMeta().get("PluginPlatform")); + if (location != null) { + int index = location; + GameEntity detailedEntity = getEntityByLocation(index); + + if (detailedEntity != null) { + DownloadItemUtils.processDate(detailedEntity, + downloadEntry, platformMap, handler, adapter, index, statusMap); + } + } } } } } }; + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); + + locationMap = new ArrayMap(); + gameMap = new ArrayMap>(); + platformMap = new ArrayMap>(); + nameMap = new ArrayMap(); + pluginNameMap = new ArrayMap(); + statusMap = new ArrayMap(); + + dismissEntity = new DismissEntity(false); + + currentItem = 0; + + isEverpause = false; + isDestroy = false; + + //初始化gamemap + DownloadItemUtils.initializeGameMap(getActivity(), gameMap); + + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + handler.postDelayed(runnable, 1000); + } + }); + + game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.game_swipe_refresh); + game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); + game_swipe_refresh.setOnRefreshListener(this); + + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); + recyclerview.setHasFixedSize(true); + recyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); + adapter = new Game1FragmentAdapter(Game1Fragment.this, locationMap, gameMap, + platformMap, nameMap, pluginNameMap, recyclerview, game_swipe_refresh, reuse_no_connection, + statusMap, dismissEntity, game_pb_loading, false); + recyclerview.setAdapter(adapter); + recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); + + EventBus.getDefault().register(this); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + if(container != null){ + container.removeView(view); + } + return view; + } + + //下载被删除事件 + public void onEventMainThread(EBDownloadDelete busThree) { + LinkedBlockingQueue queue = platformMap.get(busThree.getName()); + if (queue != null) { + queue.remove(busThree.getPlatform()); + platformMap.put(busThree.getName(), queue); + } + Integer location = locationMap.get(busThree.getName()); + if (location != null) { + int index = location; + GameEntity detailedEntity = getEntityByLocation(index); + if (detailedEntity != null) { + if (TextUtils.isEmpty(busThree.getPlatform())) { + detailedEntity.getEntryMap().remove("官方版"); + } else { + detailedEntity.getEntryMap().remove(busThree.getPlatform()); + } + } + adapter.notifyItemChanged(index); + } + //特殊 插件化update + if (busThree.getPluginPlatform() != null) { + location = locationMap.get(busThree.getName() + " - " + busThree.getPluginPlatform()); + int index = location; + Utils.log(location); + GameEntity detailedEntity = getEntityByLocation(index); + if (detailedEntity != null) { + detailedEntity.setEntryMap(null); + } + adapter.notifyItemChanged(index); + } + } + + //版本选择框消失事件 + public void onEventMainThread(EBPWDismiss dismiss) { + if (dismissEntity != null) { + dismissEntity.setShow(false); + } + } + + //安装、卸载事件 + public void onEventMainThread(EBPackage busFour) { + String name = nameMap.get(busFour.getPackageName()); + if (name != null) { + Integer location = locationMap.get(name); + if (location != null) { + if ("安装".equals(busFour.getType())) { + GameEntity detailedEntity = getEntityByLocation(location); + for (ApkEntity apkEntity : detailedEntity.getApk()) { + if (apkEntity.getPackageName().equals( + busFour.getPackageName())) { + detailedEntity.getEntryMap().remove( + apkEntity.getPlatform()); + adapter.notifyItemChanged(location); + break; + } + } + } else if ("卸载".equals(busFour.getType())) { + adapter.notifyItemChanged(location); + } + } + } + //特殊 插件化 + name = pluginNameMap.get(busFour.getPackageName()); + if (name != null) { + Integer location = locationMap.get(name); + if (location != null) { + if ("安装".equals(busFour.getType()) || "卸载".equals(busFour.getType())) { + List list = adapter.getPluginList(); + for (int i = 0, size = list.size(); i < size; i++) { + if (list.get(i).getApk().get(0).getPackageName() + .equals(busFour.getPackageName())) { + list.remove(i); + adapter.notifyItemRemoved(location); + break; + } + } + } + } + } + } + + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + if (reuse_no_connection.getVisibility() == View.VISIBLE) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + handler.postDelayed(runnable, 1000); + } else if (adapter.isNetworkError()) { + adapter.setNetworkError(false); + adapter.notifyItemChanged(adapter.getItemCount() - 1); + adapter.load(); + } + } + } + + //Fragment界面切换事件 + public void onEventMainThread(EBUISwitch busNine) { + if ("MainActivity".equals(busNine.getFrom())) { + if (busNine.getPosition() != 0) { + adapter.stopAutoScroll(); + statusMap.clear(); + } + } else if ("GameFragment".equals(busNine.getFrom())) { + currentItem = busNine.getPosition(); + if (busNine.getPosition() == 0) { + adapter.startAutoScroll(); + if (game_pb_loading.getVisibility() == View.VISIBLE) { + adapter.load(); + } + } else { + adapter.stopAutoScroll(); + } + } + } + private GameEntity getEntityByLocation(int position) { List pluginList = adapter.getPluginList(); List subjectList = adapter.getSubjectList(); @@ -127,52 +333,50 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr } @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); - - isDestroy = false; - - locationMap = new ArrayMap(); - statusMap = new ArrayMap(); - platformMap = new ArrayMap>(); - - dismissEntity = new DismissEntity(false); - - mRecyclerView = (RecyclerView) view.findViewById(R.id.game_list); - - mSwipeRefreshLayout = (SwipeRefreshLayout) view - .findViewById(R.id.game_swipe_refresh); - mSwipeRefreshLayout.setColorSchemeResources(R.color.theme_colors); - mSwipeRefreshLayout.setOnRefreshListener(this); - - mProgressBarCircularIndeterminate = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); - mProgressBarCircularIndeterminate.setVisibility(View.GONE); - - mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - adapter = new Game1FragmentAdapter(getActivity(), locationMap, statusMap, - platformMap, dismissEntity, mSwipeRefreshLayout); - mRecyclerView.setAdapter(adapter); - mRecyclerView.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - - EventBus.getDefault().register(this); + public void onResume() { + super.onResume(); + if (isEverpause) { + //修改游戏下载状态 + DownloadItemUtils.initializeGameMap(getActivity(), gameMap); + for (SubjectEntity subjectEntity : adapter.getSubjectList()) { + for (GameEntity entity :subjectEntity.getData()) { + entity.setEntryMap(gameMap.get(entity.getName())); + } + } + for (GameEntity entity : adapter.getPluginList()) { + entity.setEntryMap(gameMap.get(entity.getName())); + } + adapter.notifyDataSetChanged(); + } + isEverpause = false; + DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); + if (currentItem == 0) { + adapter.startAutoScroll(); + } } - @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - if(container != null){ - container.removeView(view); + public void onPause() { + super.onPause(); + isEverpause = true; + statusMap.clear(); + DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); + if (currentItem == 0) { + adapter.stopAutoScroll(); } - return view; + } + + public boolean isEverpause() { + return isEverpause; } Runnable runnable = new Runnable() { @Override public void run() { - mSwipeRefreshLayout.setRefreshing(false); + adapter = new Game1FragmentAdapter(Game1Fragment.this, locationMap, gameMap, + platformMap, nameMap, pluginNameMap, recyclerview, game_swipe_refresh, reuse_no_connection, + statusMap, dismissEntity, game_pb_loading, true); + recyclerview.setAdapter(adapter); } }; @@ -181,46 +385,26 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr handler.postDelayed(runnable, 1000); } - public void onEventMainThread(EBPWDismiss dismiss) { - if (dismissEntity != null) { - dismissEntity.setShow(false); - } - } - - public void onEventMainThread(EBDownloadDelete busThree) { - LinkedBlockingQueue queue = platformMap.get(busThree.getName()); - if (queue != null) { - queue.remove(busThree.getPlatform()); - platformMap.put(busThree.getName(), queue); - } - Integer location = locationMap.get(busThree.getName()); - if (location != null) { - int index = location.intValue(); - GameEntity detailedEntity = getEntityByLocation(index); - if (TextUtils.isEmpty(busThree.getPlatform())) { - detailedEntity.getEntryMap().remove("官方版"); - } else { - detailedEntity.getEntryMap().remove(busThree.getPlatform()); - } - adapter.notifyItemChanged(index); - } - } - - @Override - public void onResume() { - super.onResume(); - DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); - } - - @Override - public void onPause() { - super.onPause(); - DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); - } - @Override public void onDestroy() { super.onDestroy(); isDestroy = true; + AppController.canclePendingRequests(Game1Fragment.class); + EventBus.getDefault().unregister(this); + view = null; + recyclerview = null; + adapter = null; + reuse_no_connection = null; + game_swipe_refresh = null; + game_pb_loading = null; + locationMap = null; + gameMap = null; + platformMap = null; + nameMap = null; + pluginNameMap = null; + statusMap = null; + dismissEntity = null; + handler = null; + dataWatcher = null; } } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java index 04acb909ae..0c9b12ed3a 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -1,6 +1,5 @@ package com.gh.gamecenter.game; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.support.v4.util.ArrayMap; @@ -21,6 +20,7 @@ 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; @@ -31,22 +31,27 @@ 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; @@ -74,61 +79,87 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter slideList; private List pluginList; private List subjectList; + private boolean isNetworkError; private boolean isSlideError; + private boolean isListError; + private boolean isRemove; private ArrayMap locationMap; - private ArrayMap statusMap; + private ArrayMap> gameMap; private ArrayMap> platformMap; + private ArrayMap nameMap; + private ArrayMap pluginNameMap; + private ArrayMap statusMap; private DismissEntity dismissEntity; - public Game1FragmentAdapter(Activity activity, - ArrayMap lMap, - ArrayMap sMap, - ArrayMap> pMap, - DismissEntity dEntity, - SwipeRefreshLayout swipeRefreshLayout) { + public Game1FragmentAdapter(Game1Fragment fragment, + ArrayMap lMap, + ArrayMap> gMap, + ArrayMap> pMap, + ArrayMap nMap, + ArrayMap pnMap, + RecyclerView rView, + SwipeRefreshLayout refreshLayout, + LinearLayout linearLayout, + ArrayMap sMap, + DismissEntity dEntity, + ProgressBarCircularIndeterminate pbLoading, + boolean isLoad) { - mActivity = activity; - mContext = activity; + this.fragment = fragment; + this.context = fragment.getActivity(); locationMap = lMap; - statusMap = sMap; + 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; - mSwipeRefreshLayout = swipeRefreshLayout; slideList = new ArrayList(); pluginList = new ArrayList(); subjectList = new ArrayList(); + isNetworkError = false; isSlideError = false; + isListError = false; + isRemove = false; - load(); + if (isLoad) { + load(); + } } public void load() { - new Thread(runnable){}.start(); + new Thread(new Runnable() { + @Override + public void run() { + initSlide(true); + initPlugin(); + } + }){}.start(); } - Runnable runnable = new Runnable() { - @Override - public void run() { - initSlide(true); - initPlugin(); - } - }; - private void initSlide(final boolean isFirst) { JsonArrayExtendedRequest slideRequest = new JsonArrayExtendedRequest( TimestampUtils.addTimestamp(Config.HOST + "v1d50/index/slides", @@ -142,7 +173,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter() { @Override @@ -175,30 +210,84 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter list = gson.fromJson(response.toString(), listType); if (list != null && !list.isEmpty()) { subjectList = list; - if (pluginList.isEmpty()) { - notifyItemRangeInserted(1, getItemCount() - 1); - } else { - int start = 2 + pluginList.size(); - notifyItemRangeInserted(start, getItemCount() - start); + GameManager manager = new GameManager(context); + for (SubjectEntity subjectEntity : subjectList) { + for (GameEntity gameEntity : subjectEntity.getData()) { + gameEntity.setEntryMap(gameMap.get(gameEntity.getName())); + for (ApkEntity apkEntity : gameEntity.getApk()) { + manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), + gameEntity.getId(), gameEntity.getName())); + } + } } + + 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(mContext); + ConcernManager concernManager = new ConcernManager(context); List infos = concernManager.getInstalledGame(); final int size = infos.size(); final List list = new ArrayList(); @@ -226,7 +315,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter infos = concernManager.getInstalledGame(); HashMap map; GameEntity gameEntity; @@ -252,11 +341,25 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter apkList = new ArrayList(); apkList.add(apkEntity); entity.setApk(apkList); pluginList.add(entity); + if (pluginList.size() == 3) { + 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(); + return; + } break; } } @@ -268,6 +371,14 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter 1 && position <= 1 + pluginList.size()) { - locationMap.put(pluginList.get(position - 2).getName() + " - " - + PlatformUtils.getInstance(mContext).getPlatformName( - pluginList.get(position - 2).getApk().get(0).getPlatform()), - position); + 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++) { - int offset = 1; + 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.getApk() != null && !gameEntity.getApk().isEmpty()) { locationMap.put(gameEntity.getName(), position); + for (ApkEntity apkEntity : gameEntity.getApk()) { + nameMap.put(apkEntity.getPackageName(), gameEntity.getName()); + } } break; } @@ -309,398 +425,6 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter offset && position <= subjectList.get(i).getData().size() + offset) { - gameEntity = subjectList.get(i).getData().get(position - offset - 1); - if (gameEntity.getTest() != null) { - initGameTest(holder, gameEntity, position - offset - 1, subjectList.get(i).getOrder()); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } - } - - private void initGameTest(GameTestViewHolder holder, GameEntity gameEntity, int i, boolean order) { - 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(mContext).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())); - } - - final GameEntity entity = gameEntity; - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AppController.put("GameEntity", entity); - Intent intent = new Intent(mContext, - GameDetailsActivity.class); - intent.putExtra("entrance", "主页-新测卡牌"); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - }); - - if (entity.getApk() == null || entity.getApk().isEmpty()) { - holder.downloadBtn.setVisibility(View.GONE); - } else { - if (entity.getTest().getEnd() == 0) { - holder.downloadBtn.setVisibility(View.VISIBLE); - DownloadItemUtils.setOnClickListener(mContext, - holder.downloadBtn, holder.download_speed, - holder.download_percentage, entity, i, - Game1FragmentAdapter.this, - statusMap, platformMap, "主页-新测卡牌", - dismissEntity, "主页:" + entity.getName()); - } else { - long endTime = Long.valueOf(entity.getTest().getEnd() - + "000"); - long todayTime = new Date().getTime(); - if (todayTime > endTime) { - // 测试时间已过 - holder.downloadBtn.setVisibility(View.GONE); - } else { - // 测试时间未过 - holder.downloadBtn.setVisibility(View.VISIBLE); - DownloadItemUtils.setOnClickListener(mContext, - holder.downloadBtn, holder.download_speed, - holder.download_percentage, entity, i, - Game1FragmentAdapter.this, statusMap, platformMap, - "主页-新测卡牌", dismissEntity, - "主页:" + entity.getName()); - } - } - } - - DownloadItemUtils.updateItem(mContext, holder.labelList, - holder.game_progressbar, holder.game_ll_info, holder.download_speed, - holder.download_percentage, holder.downloadBtn, entity, 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) { - gameEntity = subjectList.get(i).getData().get(position - offset - 1); - if (TextUtils.isEmpty(gameEntity.getImage()) && gameEntity.getTest() == null) { - initGameNormal(holder, gameEntity, position - offset - 1, subjectList.get(i).getOrder()); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } - } - - private void initGameNormal(GameNormalViewHolder holder, final GameEntity entity, int i, boolean order) { - 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(mContext).display(entity.getIcon(), - holder.gameThumb); - if (entity.getPluginPlatform() != null) { - holder.gameNameAndSize.setText(entity.getName() + " - " - + PlatformUtils.getInstance(mContext).getPlatformName(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(mContext, holder.labelList, entity.getTag()); - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (entity.getPluginPlatform() != null) { - Intent intent = new Intent(mContext, GameDetailsActivity.class); - intent.putExtra("gameId", entity.getId()); - intent.putExtra("entrance", "游戏-插件"); - mContext.startActivity(intent); - } else { - AppController.put("GameEntity", entity); - Intent intent = new Intent(mContext, GameDetailsActivity.class); - intent.putExtra("entrance", "游戏-插件"); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - } - }); - - DownloadItemUtils.setOnClickListener(mContext, holder.downloadBtn, - holder.download_speed, holder.download_percentage, entity, i, - Game1FragmentAdapter.this, - statusMap, platformMap, "游戏-插件", - dismissEntity, "主页:" + entity.getName()); - - DownloadItemUtils.updateItem(mContext, 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) { - gameEntity = subjectList.get(i).getData().get(position - offset - 1); - if (!TextUtils.isEmpty(gameEntity.getImage())) { - final GameEntity entity = gameEntity; - ImageUtils.getInstance(mContext).display(entity.getImage(), holder.image, -1); - holder.image.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - if ("game".equals(entity.getType())) { - Intent intent = new Intent(mContext, GameDetailsActivity.class); - intent.putExtra("gameId", entity.getId()); - intent.putExtra("entrance", "插件-大图"); - mContext.startActivity(intent); - } else if ("news".equals(entity.getType())) { - Intent intent = new Intent(mContext, NewsActivity.class); - intent.putExtra("newsId", entity.getId()); - intent.putExtra("entrance", "插件-大图"); - mContext.startActivity(intent); - } else if ("column".equals(entity.getType())) { - Intent intent = new Intent(mContext, SubjectActivity.class); - intent.putExtra("id", entity.getId()); -// intent.putExtra("name", entity.getName()); - mContext.startActivity(intent); - } - - } - }); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } - } - - public void initGameHeadViewHolder(GameHeadViewHolder holder, int position) { - if (!pluginList.isEmpty() && position == 1) { - holder.thumb.setVisibility(View.VISIBLE); - holder.thumb.setImageResource(R.drawable.home_plug_upgrade); - holder.title.setText("你有" + pluginList.size() + "个游戏可以升级插件版"); - holder.more.setText("全部"); - holder.link.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - return; - } - - int offset = 1; - if (!pluginList.isEmpty()) { - offset += 1 + pluginList.size(); - } - for (int i = 0, size = subjectList.size(); i < size; i++) { - 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(mContext, SubjectActivity.class); - intent.putExtra("id", subjectList.get(ii).getId()); - intent.putExtra("name", subjectList.get(ii).getName()); - mContext.startActivity(intent); - - } - }); - break; - } - offset = subjectList.get(i).getData().size() + offset + 1; - } - } - - 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) { - mSwipeRefreshLayout.setEnabled(false); - } else { - mSwipeRefreshLayout.setEnabled(true); - } - } - }); - autoScrollViewPager = viewPager; - } - - } - - private AutoScrollViewPager autoScrollViewPager; - - @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(mContext); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( - DisplayUtils.dip2px(mContext, 8), - DisplayUtils.dip2px(mContext, 8)); - lparams.bottomMargin = DisplayUtils.dip2px(mContext, 8); - 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(mContext, 8); - } - imageView.setLayoutParams(lparams); - viewHolder.viewpager_ll_hint.addView(imageView); - } - viewHolder.viewPager.setAdapter(new ImagePagerAdapter(mContext, 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); - } - } - @Override public int getItemCount() { int pluginSize = 0; @@ -715,7 +439,11 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter 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, 8), + DisplayUtils.dip2px(context, 8)); + lparams.bottomMargin = DisplayUtils.dip2px(context, 8); + 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, 8); + } + 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()); + break; + } + } + offset = subjectList.get(i).getData().size() + offset + 1; + } + } + + private void initGameTest(GameTestViewHolder holder, final GameEntity gameEntity, int i, boolean order) { + 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) { + AppController.put("GameEntity", gameEntity); + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("entrance", "游戏-插件"); + 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, "游戏-插件", + dismissEntity, "游戏:" + 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, + "游戏-插件", dismissEntity, + "游戏:" + 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) { + gameEntity = subjectList.get(i).getData().get(position - offset - 1); + 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()); + break; + } + } + offset = subjectList.get(i).getData().size() + offset + 1; + } + } + + private void initGameNormal(GameNormalViewHolder holder, final GameEntity entity, int i, boolean order) { + 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) { + if (entity.getPluginPlatform() != null) { + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("gameId", entity.getId()); + intent.putExtra("entrance", "游戏-插件"); + context.startActivity(intent); + } else { + AppController.put("GameEntity", entity); + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("entrance", "游戏-插件"); + 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, "游戏-插件", + dismissEntity, "主页:" + 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) { + gameEntity = subjectList.get(i).getData().get(position - offset - 1); + if (!TextUtils.isEmpty(gameEntity.getImage())) { + final GameEntity entity = gameEntity; + ImageUtils.getInstance(context).display(entity.getImage(), holder.image, -1); + holder.image.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if ("game".equals(entity.getType())) { + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("gameId", entity.getId()); + intent.putExtra("entrance", "插件-大图"); + context.startActivity(intent); + } else if ("news".equals(entity.getType())) { + Intent intent = new Intent(context, NewsActivity.class); + intent.putExtra("newsId", entity.getId()); + intent.putExtra("entrance", "插件-大图"); + context.startActivity(intent); + } else if ("column".equals(entity.getType())) { + Intent intent = new Intent(context, SubjectActivity.class); + intent.putExtra("id", entity.getId()); +// 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.thumb.setVisibility(View.VISIBLE); + holder.thumb.setImageResource(R.drawable.home_plug_upgrade); + holder.title.setText("你有" + pluginList.size() + "个游戏可以升级插件版"); + holder.link.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + context.startActivity(new Intent(context, PluginActivity.class)); + } + }); + return; + } + + int offset = 1; + if (!pluginList.isEmpty()) { + offset += 1 + pluginList.size(); + } + for (int i = 0, size = subjectList.size(); i < size; i++) { + 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 getPluginList() { @@ -766,4 +923,12 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter getSubjectList() { return subjectList; } + + public boolean isNetworkError() { + return isNetworkError; + } + + public void setNetworkError(boolean networkError) { + isNetworkError = networkError; + } } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java index 53fc53169a..9ece18e33b 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2Fragment.java @@ -2,133 +2,279 @@ package com.gh.gamecenter.game; import android.os.Bundle; import android.os.Handler; +import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.util.ArrayMap; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.AppController; +import com.gh.common.constant.Constants; import com.gh.common.util.DownloadItemUtils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntry; import com.gh.download.DownloadManager; import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.DismissEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.SubjectEntity; +import com.gh.gamecenter.eventbus.EBDownloadDelete; +import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBPWDismiss; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.eventbus.EBUISwitch; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.LinkedBlockingQueue; +import de.greenrobot.event.EventBus; + /** * Created by khy on 2016/6/28. */ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { - private View view; - private RecyclerView mRecyclerView; - private Game2FragmentAdapter game2FragmentAdapter; - private SwipeRefreshLayout mSwipeRefreshLayout; - private ProgressBarCircularIndeterminate mProgressBarCircularIndeterminate; + private View view; + private RecyclerView recyclerview; + private SwipeRefreshLayout game_swipe_refresh; + private Game2FragmentAdapter adapter; + private LinearLayout reuse_no_connection; + private ProgressBarCircularIndeterminate game_pb_loading; + + //下载用到的map private ArrayMap locationMap; private ArrayMap> gameMap; private ArrayMap> platformMap; private ArrayMap nameMap; private ArrayMap statusMap; + private DismissEntity dismissEntity; - private boolean isEverpause = false; - DataWatcher dataWatcher = new DataWatcher() { + private boolean isEverpause; + private boolean isDestroy; + + private Handler handler = new Handler() { @Override - public void onDataChanged(HashMap downloadingEntries) { - for (Map.Entry stringDownloadEntryEntry : downloadingEntries.entrySet()) { - DownloadEntry value = stringDownloadEntryEntry.getValue(); - Integer integer = locationMap.get(value.getName()); - if (integer!=null){ - int i = integer.intValue(); - GameEntity gameEntity = initListPosition(i); - if (gameEntity != null) { - DownloadItemUtils.processDate(gameEntity, value, platformMap, handler, game2FragmentAdapter, i, statusMap); + public void handleMessage(Message msg) { + if (!isDestroy) { + if (msg.what == Constants.DOWNLOAD_ROLL) { + String name = (String) msg.obj; + if (platformMap != null) { + LinkedBlockingQueue queue = platformMap.get(name); + if (queue.size() > 1) { + queue.offer(queue.poll()); + Message msg2 = Message.obtain(); + msg2.obj = name; + msg2.what = Constants.DOWNLOAD_ROLL; + sendMessageDelayed(msg2, 3000); + } } } } } }; - private GameEntity initListPosition(int position) { - List list = game2FragmentAdapter.getList(); - int offset = 0; - for (int i = 0; i < list.size(); i++) { - if (position > offset && position <= list.get(i).getData().size() + offset) { - return list.get(i).getData().get(position - offset - 1); - } - offset = offset + list.get(i).getData().size(); - } - return null; - } + DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(HashMap downloadingEntries) { + if (!game_swipe_refresh.isRefreshing()) { + for (Map.Entry stringDownloadEntryEntry : downloadingEntries.entrySet()) { + DownloadEntry downloadEntry = stringDownloadEntryEntry.getValue(); + Integer location = locationMap.get(downloadEntry.getName()); + if (location != null) { + int index = location; + GameEntity detailedEntity = getEntityByLocation(index); + + if (detailedEntity != null) { + DownloadItemUtils.processDate(detailedEntity, + downloadEntry, platformMap, handler, adapter, index, statusMap); + } + } + } + } + } + }; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); + locationMap = new ArrayMap(); gameMap = new ArrayMap>(); platformMap = new ArrayMap>(); nameMap = new ArrayMap(); statusMap = new ArrayMap(); + dismissEntity = new DismissEntity(false); - view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); - mRecyclerView = (RecyclerView) view.findViewById(R.id.game_list); + isEverpause = false; + isDestroy = false; - mSwipeRefreshLayout = (SwipeRefreshLayout) view - .findViewById(R.id.game_swipe_refresh); - mSwipeRefreshLayout.setColorSchemeResources(R.color.theme_colors); - mSwipeRefreshLayout.setOnRefreshListener(this); + //初始化gamemap + DownloadItemUtils.initializeGameMap(getActivity(), gameMap); - mProgressBarCircularIndeterminate = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); - mProgressBarCircularIndeterminate.setVisibility(View.GONE); - mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - game2FragmentAdapter = new Game2FragmentAdapter(getActivity(), this,locationMap,gameMap,platformMap,nameMap,statusMap,true,dismissEntity); - mRecyclerView.setAdapter(game2FragmentAdapter); + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); + reuse_no_connection.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + handler.postDelayed(runnable, 1000); + } + }); - mRecyclerView.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); + game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.game_swipe_refresh); + game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); + game_swipe_refresh.setOnRefreshListener(this); + + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); + recyclerview.setHasFixedSize(true); + recyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); + adapter = new Game2FragmentAdapter(Game2Fragment.this, locationMap, gameMap, + platformMap, nameMap, recyclerview, game_swipe_refresh, reuse_no_connection, + statusMap, dismissEntity, game_pb_loading, false); + recyclerview.setAdapter(adapter); + recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); + + EventBus.getDefault().register(this); } @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { if (container != null) { container.removeView(view); } return view; } - private Handler handler = new Handler(); - - Runnable runnable = new Runnable() { - @Override - public void run() { - mSwipeRefreshLayout.setRefreshing(false); + //下载被删除事件 + public void onEventMainThread(EBDownloadDelete busThree) { + LinkedBlockingQueue queue = platformMap.get(busThree.getName()); + if (queue != null) { + queue.remove(busThree.getPlatform()); + platformMap.put(busThree.getName(), queue); } - }; + Integer location = locationMap.get(busThree.getName()); + if (location != null) { + int index = location; + GameEntity detailedEntity = getEntityByLocation(index); + if (detailedEntity != null) { + if (TextUtils.isEmpty(busThree.getPlatform())) { + detailedEntity.getEntryMap().remove("官方版"); + } else { + detailedEntity.getEntryMap().remove(busThree.getPlatform()); + } + } + adapter.notifyItemChanged(index); + } + } - @Override - public void onRefresh() { - handler.postDelayed(runnable, 1000); + //版本选择框消失事件 + public void onEventMainThread(EBPWDismiss dismiss) { + if (dismissEntity != null) { + dismissEntity.setShow(false); + } + } + + //安装、卸载事件 + public void onEventMainThread(EBPackage busFour) { + String name = nameMap.get(busFour.getPackageName()); + if (name != null) { + Integer location = locationMap.get(name); + if (location != null) { + if ("安装".equals(busFour.getType())) { + GameEntity detailedEntity = getEntityByLocation(location); + for (ApkEntity apkEntity : detailedEntity.getApk()) { + if (apkEntity.getPackageName().equals( + busFour.getPackageName())) { + detailedEntity.getEntryMap().remove( + apkEntity.getPlatform()); + adapter.notifyItemChanged(location); + break; + } + } + } else if ("卸载".equals(busFour.getType())) { + adapter.notifyItemChanged(location); + } + } + } + } + + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + if (reuse_no_connection.getVisibility() == View.VISIBLE) { + game_swipe_refresh.setRefreshing(true); + recyclerview.setVisibility(View.VISIBLE); + game_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + handler.postDelayed(runnable, 1000); + } + } + } + + //Fragment界面切换事件 + public void onEventMainThread(EBUISwitch busNine) { + if ("MainActivity".equals(busNine.getFrom())) { + if (busNine.getPosition() != 0) { + statusMap.clear(); + } + } else if ("GameFragment".equals(busNine.getFrom())) { + if (busNine.getPosition() == 1) { + if (game_pb_loading.getVisibility() == View.VISIBLE) { + adapter.load(); + } + } + } + } + + private GameEntity getEntityByLocation(int position) { + List list = adapter.getSubectList(); + int offset = 0; + for (int i = 0; i < list.size(); i++) { + if (position > offset && position <= list.get(i).getData().size() + offset) { + return list.get(i).getData().get(position - offset - 1); + } + offset = list.get(i).getData().size() + offset + 1; + } + return null; } @Override public void onResume() { super.onResume(); + if (isEverpause) { + //修改游戏下载状态 + DownloadItemUtils.initializeGameMap(getActivity(), gameMap); + for (SubjectEntity subjectEntity : adapter.getSubectList()) { + for (GameEntity entity :subjectEntity.getData()) { + entity.setEntryMap(gameMap.get(entity.getName())); + } + } + adapter.notifyDataSetChanged(); + } + isEverpause = false; DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); } @@ -139,4 +285,45 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr statusMap.clear(); DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); } + + public boolean isEverpause() { + return isEverpause; + } + + Runnable runnable = new Runnable() { + @Override + public void run() { + adapter = new Game2FragmentAdapter(Game2Fragment.this, locationMap, gameMap, + platformMap, nameMap, recyclerview, game_swipe_refresh, reuse_no_connection, + statusMap, dismissEntity, game_pb_loading, true); + recyclerview.setAdapter(adapter); + } + }; + + @Override + public void onRefresh() { + handler.postDelayed(runnable, 1000); + } + + @Override + public void onDestroy() { + super.onDestroy(); + isDestroy = true; + AppController.canclePendingRequests(Game2Fragment.class); + EventBus.getDefault().unregister(this); + view = null; + recyclerview = null; + adapter = null; + reuse_no_connection = null; + game_swipe_refresh = null; + game_pb_loading = null; + locationMap = null; + gameMap = null; + platformMap = null; + nameMap = null; + statusMap = null; + dismissEntity = null; + handler = null; + dataWatcher = null; + } } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java index ca2ecb4c90..cd26b25217 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java @@ -2,34 +2,42 @@ package com.gh.gamecenter.game; import android.content.Context; import android.content.Intent; -import android.support.v4.app.FragmentActivity; import android.support.v4.util.ArrayMap; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; +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.DownloadItemUtils; import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; -import com.gh.common.util.TimestampUtils; +import com.gh.common.util.Utils; import com.gh.download.DownloadEntry; import com.gh.gamecenter.GameDetailsActivity; import com.gh.gamecenter.NewsActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.SubjectActivity; 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.GameInfo; +import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.DismissEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.SubjectEntity; +import com.gh.gamecenter.manager.GameManager; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -46,105 +54,195 @@ import java.util.concurrent.LinkedBlockingQueue; * Created by khy on 2016/6/28. */ public class Game2FragmentAdapter extends RecyclerView.Adapter { - private final static int ITEM_XINCE = 100;//游戏布局2 - private final static int ITEM = 101;//游戏布局1 - private final static int ITEM_HEAD = 102;//专题头部 - private final static int ITEM_PIC = 103;//大图布局 - private List subjectList = new ArrayList(); - private Context mContext; + + private class ITEM_TYPE { + public final static int HEAD = 100;// 专题头部 + public final static int GAME_NORMAL = 101;// 游戏布局1 + public final static int GAME_TEST = 102;// 游戏布局2 + public final static int IMAGE = 103;// 大图布局 + } + + private Game2Fragment fragment; + private Context context; + + private RecyclerView recyclerview; + private SwipeRefreshLayout game_swipe_refresh; + private LinearLayout reuse_no_connection; + private ProgressBarCircularIndeterminate game_pb_loading; + + private List subjectList; + private ArrayMap locationMap; private ArrayMap> gameMap; private ArrayMap> platformMap; private ArrayMap nameMap; private ArrayMap statusMap; + private DismissEntity dismissEntity; - public Game2FragmentAdapter(FragmentActivity activity, Game2Fragment game2Fragment, ArrayMap locationMap - , ArrayMap> gameMap, ArrayMap> platformMap - , ArrayMap nameMap, ArrayMap statusMap, boolean b, DismissEntity dismissEntity) { - this.mContext = activity; - this.locationMap = locationMap; - this.gameMap = gameMap; - this.platformMap = platformMap; - this.nameMap = nameMap; - this.statusMap = statusMap; - this.dismissEntity = dismissEntity; - LoadData2(); + public Game2FragmentAdapter(Game2Fragment fragment, + ArrayMap lMap, + ArrayMap> gMap, + ArrayMap> pMap, + ArrayMap nMap, + RecyclerView rView, + SwipeRefreshLayout refreshLayout, + LinearLayout linearLayout, + ArrayMap sMap, + DismissEntity dEntity, + ProgressBarCircularIndeterminate pbLoading, + boolean isLoad) { + this.fragment = fragment; + this.context = fragment.getActivity(); + locationMap = lMap; + gameMap = gMap; + platformMap = pMap; + nameMap = nMap; + recyclerview = rView; + game_swipe_refresh = refreshLayout; + reuse_no_connection = linearLayout; + game_pb_loading = pbLoading; + statusMap = sMap; + dismissEntity = dEntity; + + subjectList = new ArrayList(); + + if (isLoad) { + load(); + } } - private void LoadData2() { - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST + "v1d50/game/tuijian", - Constants.GAME_CD), new Response.Listener() { - + public void load() { + new Thread(new Runnable() { @Override - public void onResponse(JSONArray response) { - Type listType = new TypeToken>() { - }.getType(); - Gson gson = new Gson(); - subjectList = gson.fromJson(response.toString(), listType); - notifyDataSetChanged(); - initLocationMap(); + public void run() { + initSubjectList(); } + }).start(); + } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { + private void initSubjectList() { + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(Config.HOST + "v1d50/game/tuijian", + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { - } + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + List list = gson.fromJson(response.toString(), listType); + if (list != null && !list.isEmpty()) { + subjectList = list; + GameManager manager = new GameManager(context); + for (SubjectEntity subjectEntity : subjectList) { + for (GameEntity gameEntity : subjectEntity.getData()) { + gameEntity.setEntryMap(gameMap.get(gameEntity.getName())); + for (ApkEntity apkEntity : gameEntity.getApk()) { + manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), + gameEntity.getId(), gameEntity.getName())); + } + } + } - }); - AppController.addToRequestQueue(request, GameFragment.class); + if (!fragment.isHidden() && !fragment.isEverpause()) { + notifyItemRangeInserted(0, getItemCount()); + } 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); + } + + } + }, + 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); + } + Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); + recyclerview.setVisibility(View.GONE); + reuse_no_connection.setVisibility(View.VISIBLE); + } + } + }); + AppController.addToRequestQueue(request, Game1Fragment.class); } private void initLocationMap() { locationMap.clear(); - int count = 0; if (!subjectList.isEmpty()) { - SubjectEntity subjectEntity; - for (int i = 0, size = subjectList.size(); i < size; i++) { - subjectEntity = subjectList.get(i); - count += 1 + subjectEntity.getData().size(); - } + int count = getItemCount(); + GameEntity gameEntity; + int offset; for (int position = 0; position < count; position++) { - int offset = 0; - GameEntity gameEntity; + offset = 0; 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); - locationMap.put(gameEntity.getName(), position); + 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; } } - } + Utils.log(locationMap.toString()); + } + @Override + public int getItemCount() { + int subjectSize = 0; + if (!subjectList.isEmpty()) { + for (int i = 0; i < subjectList.size(); i++) { + SubjectEntity subjectEntity = subjectList.get(i); + subjectSize += subjectEntity.getData().size() + 1; + } + } + return subjectSize; } @Override public int getItemViewType(int position) { - GameEntity gameEntity; if (!subjectList.isEmpty()) { int offset = 0; + GameEntity gameEntity; for (int i = 0; i < subjectList.size(); i++) { if (position == offset) { - return ITEM_HEAD; + return ITEM_TYPE.HEAD; } if (position > offset && position <= subjectList.get(i).getData().size() + offset) { gameEntity = subjectList.get(i).getData().get(position - offset - 1); if (!TextUtils.isEmpty(gameEntity.getImage())) { - return ITEM_PIC; + return ITEM_TYPE.IMAGE; } if (gameEntity.getTest() != null) { - return ITEM_XINCE; + return ITEM_TYPE.GAME_TEST; } - return ITEM; + return ITEM_TYPE.GAME_NORMAL; } - offset = offset + subjectList.get(i).getData().size() + 1; + offset = subjectList.get(i).getData().size() + offset + 1; } } return -1; @@ -152,118 +250,151 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter offset && position <= subjectList.get(i).getData().size() + offset) { - gameEntity = subjectList.get(i).getData().get(position - offset - 1); - if (TextUtils.isEmpty(gameEntity.getImage()) && gameEntity.getTest() == null) { - initGameNormal(viewHolder, gameEntity, position - offset - 1, subjectList.get(i).getOrder()); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } - + initGameNormalViewHolder((GameNormalViewHolder) holder, position); } else if (holder instanceof GameTestViewHolder) { - GameTestViewHolder viewHolder = (GameTestViewHolder) holder; - int offset = 0; - 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) { - initGameTest(viewHolder, gameEntity, position - offset - 1, subjectList.get(i).getOrder()); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } + initGameTestViewHolder((GameTestViewHolder) holder, position); } else if (holder instanceof GameImageViewHolder) { - GameImageViewHolder viewHolder = (GameImageViewHolder) holder; - int offset = 0; - 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 (!TextUtils.isEmpty(gameEntity.getImage())) { - final GameEntity entity = gameEntity; - ImageUtils.getInstance(mContext).display(entity.getImage(), viewHolder.image, -1); - viewHolder.image.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - if ("game".equals(entity.getType())) { - Intent intent = new Intent(mContext, GameDetailsActivity.class); - intent.putExtra("gameId", entity.getId()); - intent.putExtra("entrance", "插件-大图"); - mContext.startActivity(intent); - } else if ("news".equals(entity.getType())) { - Intent intent = new Intent(mContext, NewsActivity.class); - intent.putExtra("newsId", entity.getId()); - intent.putExtra("entrance", "插件-大图"); - mContext.startActivity(intent); - } - - } - }); - break; - } - } - offset = subjectList.get(i).getData().size() + offset + 1; - } + initGameImageViewHolder((GameImageViewHolder) holder, position); } - } - private void initGameTest(GameTestViewHolder holder, GameEntity gameEntity, int i, boolean order) { + private void initGameHeadViewHolder(GameHeadViewHolder holder, int position) { + int offset = 0; + for (int i = 0; i < subjectList.size(); i++) { + 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 void initGameNormalViewHolder(GameNormalViewHolder holder, int position) { + int offset = 0; + 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 (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()); + break; + } + } + offset = subjectList.get(i).getData().size() + offset + 1; + } + } + + private void initGameNormal(GameNormalViewHolder holder, GameEntity entity, int i, boolean order) { + 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); + 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()); + + final GameEntity gameInfoEntity = entity; + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AppController.put("GameEntity", gameInfoEntity); + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("entrance", "游戏-推荐"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + }); + DownloadItemUtils.setOnClickListener(context, holder.downloadBtn, + holder.download_speed, holder.download_percentage, entity, i, + Game2FragmentAdapter.this, + statusMap, platformMap, "游戏-推荐", + dismissEntity, "主页:" + 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); + } + + private void initGameTestViewHolder(GameTestViewHolder holder, int position) { + int offset = 0; + 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()); + break; + } + } + offset = subjectList.get(i).getData().size() + offset + 1; + } + } + + private void initGameTest(GameTestViewHolder holder, final GameEntity gameEntity, int i, boolean order) { if (order) { holder.home2_game_order.setVisibility(View.VISIBLE); - holder.home2_game_order.setText(i + ""); + holder.home2_game_order.setText((i + 1) + ""); } else { holder.home2_game_order.setVisibility(View.GONE); } - ImageUtils.getInstance(mContext).display(gameEntity.getIcon(), - holder.gameThumb); + 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.gameDes.setText(gameEntity.getApk().get(0).getSize() + " | " + gameEntity.getBrief()); } holder.gameTestType.setText(gameEntity.getTest().getType()); if (gameEntity.getTest().getStart() == 0) { @@ -272,28 +403,30 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter endTime) { @@ -302,69 +435,62 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter offset && position <= subjectList.get(i).getData().size() + offset) { + gameEntity = subjectList.get(i).getData().get(position - offset - 1); + if (!TextUtils.isEmpty(gameEntity.getImage())) { + final GameEntity entity = gameEntity; + ImageUtils.getInstance(context).display(entity.getImage(), holder.image, -1); + holder.image.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if ("game".equals(entity.getType())) { + Intent intent = new Intent(context, GameDetailsActivity.class); + intent.putExtra("gameId", entity.getId()); + intent.putExtra("entrance", "插件-大图"); + context.startActivity(intent); + } else if ("news".equals(entity.getType())) { + Intent intent = new Intent(context, NewsActivity.class); + intent.putExtra("newsId", entity.getId()); + intent.putExtra("entrance", "插件-大图"); + context.startActivity(intent); + } else if ("column".equals(entity.getType())) { + Intent intent = new Intent(context, SubjectActivity.class); + intent.putExtra("id", entity.getId()); +// intent.putExtra("name", entity.getName()); + context.startActivity(intent); + } + + } + }); + break; + } } + offset = subjectList.get(i).getData().size() + offset + 1; } - return dataSize; } - - public List getList() { + public List getSubectList() { return subjectList; } diff --git a/app/src/main/java/com/gh/gamecenter/game/Game3Fragment.java b/app/src/main/java/com/gh/gamecenter/game/Game3Fragment.java index e93b1f365d..88a49d68aa 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game3Fragment.java @@ -34,9 +34,7 @@ import com.gh.gamecenter.eventbus.EBPWDismiss; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBUISwitch; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.concurrent.LinkedBlockingQueue; import de.greenrobot.event.EventBus; @@ -102,7 +100,7 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { Integer location = locationMap.get(downloadEntry.getName()); if (location != null) { - int index = location.intValue(); + int index = location; GameEntity detailedEntity = adapter.getList().get(index); if (detailedEntity != null) { @@ -134,20 +132,9 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { isEverpause = false; isDestroy = false; - game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.game_swipe_refresh); - game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); - game_swipe_refresh.setOnRefreshListener(this); - - recyclerview = (RecyclerView) view.findViewById(R.id.game_list); - recyclerview.setHasFixedSize(true); - layoutManager = new LinearLayoutManager(getActivity()); - recyclerview.setLayoutManager(layoutManager); - // 黄壮华 添加 初始化游戏状态 修改2015/8/21 DownloadItemUtils.initializeGameMap(getActivity(), gameMap); - game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); reuse_no_connection.setOnClickListener(new View.OnClickListener() { @Override @@ -160,6 +147,16 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { } }); + game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.game_swipe_refresh); + game_swipe_refresh.setColorSchemeResources(R.color.theme_colors); + game_swipe_refresh.setOnRefreshListener(this); + + game_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.game_pb_loading); + + recyclerview = (RecyclerView) view.findViewById(R.id.game_list); + recyclerview.setHasFixedSize(true); + layoutManager = new LinearLayoutManager(getActivity()); + recyclerview.setLayoutManager(layoutManager); // 黄壮华 传递引用 修改2015/8/15 adapter = new Game3FragmentAdapter(Game3Fragment.this, locationMap, gameMap, platformMap, nameMap, recyclerview, @@ -196,6 +193,7 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { return view; } + //下载被删除事件 public void onEventMainThread(EBDownloadDelete busThree) { LinkedBlockingQueue queue = platformMap.get(busThree.getName()); if (queue != null) { @@ -203,9 +201,8 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { platformMap.put(busThree.getName(), queue); } Integer location = locationMap.get(busThree.getName()); - if (location != null) { - int index = location.intValue(); + int index = location; GameEntity detailedEntity = adapter.getList().get(index); if (TextUtils.isEmpty(busThree.getPlatform())) { @@ -217,12 +214,14 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { } } + //版本选择框消失事件 public void onEventMainThread(EBPWDismiss dismiss) { if (dismissEntity != null) { dismissEntity.setShow(false); } } + //安装、卸载事件 public void onEventMainThread(EBPackage busFour) { String name = nameMap.get(busFour.getPackageName()); if (name != null) { @@ -242,6 +241,7 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { } } + //连接上网络事件 public void onEventMainThread(EBNetworkState busNetworkState) { if (busNetworkState.isNetworkConnected()) { if (reuse_no_connection.getVisibility() == View.VISIBLE) { @@ -260,12 +260,15 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { public void onEventMainThread(EBUISwitch busNine) { if ("MainActivity".equals(busNine.getFrom())) { - if (busNine.getPosition() != 1) { + if (busNine.getPosition() != 0) { statusMap.clear(); } - } else if ("GameFragment".equals(busNine.getFrom()) && busNine.getPosition() == 2 - && game_pb_loading.getVisibility() == View.VISIBLE) { - adapter.load(); + } else if ("GameFragment".equals(busNine.getFrom())) { + if (busNine.getPosition() == 2) { + if (game_pb_loading.getVisibility() == View.VISIBLE) { + adapter.load(); + } + } } } @@ -279,12 +282,10 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { if (isEverpause) { // 黄壮华 添加 初始化游戏状态 修改2015/8/20 DownloadItemUtils.initializeGameMap(getActivity(), gameMap); - List entities = new ArrayList(); for (GameEntity entity : adapter.getList()) { entity.setEntryMap(gameMap.get(entity.getName())); - entities.add(entity); } - adapter.setList(entities); + adapter.notifyDataSetChanged(); } isEverpause = false; DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); diff --git a/app/src/main/java/com/gh/gamecenter/game/Game3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/Game3FragmentAdapter.java index 6cd5308d20..07b2bd70fc 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game3FragmentAdapter.java @@ -68,9 +68,8 @@ import java.util.concurrent.LinkedBlockingQueue; public class Game3FragmentAdapter extends RecyclerView.Adapter { - private Context context; - private Game3Fragment fragment; + private Context context; private RecyclerView recyclerView; private SwipeRefreshLayout game_swipe_refresh; @@ -88,7 +87,6 @@ public class Game3FragmentAdapter extends private ArrayMap> gameMap; private ArrayMap> platformMap; private ArrayMap nameMap; - private ArrayMap statusMap; private DismissEntity dismissEntity; @@ -106,14 +104,13 @@ public class Game3FragmentAdapter extends ProgressBarCircularIndeterminate pbLoading, boolean isLoad) { - // 黄壮华 获取引用 修改2015/8/15 + this.fragment = fment; + this.context = fment.getActivity(); locationMap = lMap; gameMap = gMap; platformMap = pMap; nameMap = nMap; - statusMap = sMap; - recyclerView = rView; game_swipe_refresh = swipeRefreshLayout; reuse_no_connection = linearLayout; @@ -121,9 +118,6 @@ public class Game3FragmentAdapter extends dismissEntity = dEntity; - fragment = fment; - context = fment.getActivity(); - isRemove = false; isLoading = false; isNetworkError = false; @@ -136,16 +130,14 @@ public class Game3FragmentAdapter extends } public void load() { - new Thread(runnable){}.start(); + new Thread(new Runnable() { + @Override + public void run() { + addList(0); + } + }){}.start(); } - Runnable runnable = new Runnable() { - @Override - public void run() { - addList(0); - } - }; - public void addList(final int offset) { if (isLoading) { return; @@ -173,11 +165,13 @@ public class Game3FragmentAdapter extends if (error.getClass().equals(NoConnectionError.class) || error.getClass().equals(TimeoutError.class)) { if (offset == 0) { - if (game_swipe_refresh.isRefreshing()) { + 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); + } recyclerView.setVisibility(View.GONE); - game_pb_loading.setVisibility(View.GONE); reuse_no_connection.setVisibility(View.VISIBLE); } else { Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); @@ -188,7 +182,7 @@ public class Game3FragmentAdapter extends } }); - AppController.addToRequestQueue(request, GameFragment.class); + AppController.addToRequestQueue(request, Game3Fragment.class); } private void processingData(JSONArray response, int offset) { @@ -228,7 +222,7 @@ public class Game3FragmentAdapter extends notifyDataSetChanged(); } - if (offset == 0 && game_swipe_refresh.isRefreshing()) { + if (game_swipe_refresh != null && game_swipe_refresh.isRefreshing()) { game_swipe_refresh.setRefreshing(false); } @@ -293,8 +287,7 @@ public class Game3FragmentAdapter extends private void initGameNormalViewHolder(GameNormalViewHolder holder, final GameEntity entity, int position) { entity.getApk().get(0).setPlatform("local_plugin"); - ImageUtils.getInstance(context).display(entity.getIcon(), - holder.gameThumb); + ImageUtils.getInstance(context).display(entity.getIcon(), holder.gameThumb); holder.gameNameAndSize.setText(entity.getName()); if (entity.getApk() == null || entity.getApk().isEmpty()) { holder.gameDes.setText(entity.getBrief()); @@ -364,11 +357,6 @@ public class Game3FragmentAdapter extends return list; } - public void setList(List list) { - this.list = list; - notifyDataSetChanged(); - } - public boolean isRemove() { return isRemove; } diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragment.java b/app/src/main/java/com/gh/gamecenter/game/GameFragment.java index 0aa21becbd..d5aab3e88d 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragment.java @@ -30,7 +30,6 @@ import android.widget.TextView; import com.gh.common.constant.Config; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; -import com.gh.common.util.Utils; import com.gh.download.DownloadManager; import com.gh.gamecenter.ConcernActivity; import com.gh.gamecenter.DownloadManagerActivity; @@ -59,9 +58,14 @@ import de.greenrobot.event.EventBus; public class GameFragment extends Fragment implements OnClickListener, OnPageChangeListener { - private View view, slideLine; + private View view; + private View slideLine; private ViewPager viewPager; - private TextView jingpinText, zuixinText, danjiText, downloadHint, searchHint; + private TextView jingpinText; + private TextView zuixinText; + private TextView danjiText; + private TextView downloadHint; + private TextView searchHint; private RelativeLayout.LayoutParams rparams; private int width; @@ -69,6 +73,12 @@ public class GameFragment extends Fragment implements OnClickListener, private String hint; + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("currentItem", currentItem); + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -79,15 +89,12 @@ public class GameFragment extends Fragment implements OnClickListener, SharedPreferences sp = getActivity().getSharedPreferences( Config.PREFERENCE, Context.MODE_PRIVATE); - LinearLayout home_actionbar = (LinearLayout) view - .findViewById(R.id.home_actionbar); - LayoutParams params = new LayoutParams( - LayoutParams.MATCH_PARENT, sp.getInt("actionbar_height", - DisplayUtils.dip2px(getActivity(), 48))); + LinearLayout home_actionbar = (LinearLayout) view.findViewById(R.id.home_actionbar); + LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, + sp.getInt("actionbar_height", DisplayUtils.dip2px(getActivity(), 48))); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - int top = DisplayUtils.getInternalDimensionSize(getResources(), - "status_bar_height"); + int top = DisplayUtils.getInternalDimensionSize(getResources(), "status_bar_height"); home_actionbar.setPadding(0, top, 0, 0); params.height += top; } @@ -108,8 +115,7 @@ public class GameFragment extends Fragment implements OnClickListener, danjiText.setOnClickListener(this); DisplayMetrics outMetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay() - .getMetrics(outMetrics); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); width = outMetrics.widthPixels / 3; rparams = new RelativeLayout.LayoutParams(width / 2, DisplayUtils.dip2px(getActivity(), 2)); @@ -118,13 +124,28 @@ public class GameFragment extends Fragment implements OnClickListener, viewPager.setAdapter(new FragmentAdapter(getChildFragmentManager())); viewPager.addOnPageChangeListener(this); - rparams.leftMargin = width / 4; - slideLine.setLayoutParams(rparams); - jingpinText.setClickable(false); - zuixinText.setClickable(true); - danjiText.setClickable(true); + currentItem = 0; - currentItem = viewPager.getCurrentItem(); + if (savedInstanceState != null) { + currentItem = savedInstanceState.getInt("currentItem"); + } + viewPager.setCurrentItem(currentItem); + + rparams.leftMargin = width * currentItem + width / 4; + slideLine.setLayoutParams(rparams); + if (currentItem == 0) { + jingpinText.setClickable(false); + zuixinText.setClickable(true); + danjiText.setClickable(true); + } else if (currentItem == 1) { + jingpinText.setClickable(true); + zuixinText.setClickable(false); + danjiText.setClickable(true); + } else { + jingpinText.setClickable(true); + zuixinText.setClickable(true); + danjiText.setClickable(false); + } EventBus.getDefault().register(this); @@ -206,12 +227,10 @@ public class GameFragment extends Fragment implements OnClickListener, public FragmentAdapter(FragmentManager fm) { super(fm); - } @Override public Fragment getItem(int position) { - if (position == 0) { return new Game1Fragment(); } else if (position == 1) { @@ -307,14 +326,12 @@ public class GameFragment extends Fragment implements OnClickListener, } public void updateRedDot(int type) { - int downloadSize = DownloadManager.getInstance(getActivity()).getAll() - .size(); + int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (type == 1 && downloadSize == 0) { downloadHint.setVisibility(View.VISIBLE); downloadHint.setText((downloadSize + type) + ""); int width = DisplayUtils.dip2px(getActivity(), 12); - RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams( - width, width); + RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams(width, width); rparams.topMargin = DisplayUtils.dip2px(getActivity(), 8); rparams.rightMargin = DisplayUtils.dip2px(getActivity(), 2); rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); @@ -325,8 +342,7 @@ public class GameFragment extends Fragment implements OnClickListener, downloadHint.setVisibility(View.VISIBLE); downloadHint.setText(""); int width = DisplayUtils.dip2px(getActivity(), 10); - RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams( - width, width); + RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams(width, width); rparams.topMargin = DisplayUtils.dip2px(getActivity(), 8); rparams.rightMargin = DisplayUtils.dip2px(getActivity(), 3); rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); @@ -343,12 +359,10 @@ public class GameFragment extends Fragment implements OnClickListener, private void popUpOverflow(View view) { Rect frame = new Rect(); - getActivity().getWindow().getDecorView() - .getWindowVisibleDisplayFrame(frame); + getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int xOffset = DisplayUtils.dip2px(getActivity(), 5); - int yOffset = frame.top + DisplayUtils.dip2px(getActivity(), 48) - + xOffset; + int yOffset = frame.top + DisplayUtils.dip2px(getActivity(), 48) + xOffset; View popView = View.inflate(getActivity(), R.layout.menu_popwindow, null); @@ -361,8 +375,7 @@ public class GameFragment extends Fragment implements OnClickListener, popWindow.setBackgroundDrawable(getResources().getDrawable( R.drawable.shape)); - popWindow.showAtLocation(view, Gravity.TOP | Gravity.RIGHT, xOffset, - yOffset); + popWindow.showAtLocation(view, Gravity.TOP | Gravity.RIGHT, xOffset, yOffset); } @@ -401,7 +414,6 @@ public class GameFragment extends Fragment implements OnClickListener, } else { if (currentItem != viewPager.getCurrentItem()) { currentItem = viewPager.getCurrentItem(); - Utils.log("currentItem = " + currentItem); EventBus.getDefault().post(new EBUISwitch("GameFragment", currentItem)); } } @@ -439,18 +451,15 @@ public class GameFragment extends Fragment implements OnClickListener, @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); - FragmentTransaction transaction = getChildFragmentManager() - .beginTransaction(); + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); List list = getChildFragmentManager().getFragments(); if (list != null) { if (hidden) { - for (Fragment fragment : getChildFragmentManager() - .getFragments()) { + for (Fragment fragment : getChildFragmentManager().getFragments()) { transaction.hide(fragment); } } else { - for (Fragment fragment : getChildFragmentManager() - .getFragments()) { + for (Fragment fragment : getChildFragmentManager().getFragments()) { transaction.show(fragment); } } diff --git a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java index 08c380bb97..5cbc68b929 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java @@ -257,7 +257,7 @@ public class News1FragmentAdapter extends RecyclerView.Adapter - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_plugin.xml b/app/src/main/res/layout/activity_plugin.xml new file mode 100644 index 0000000000..f256da19ac --- /dev/null +++ b/app/src/main/res/layout/activity_plugin.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_subject.xml b/app/src/main/res/layout/activity_subject.xml new file mode 100644 index 0000000000..a123042a59 --- /dev/null +++ b/app/src/main/res/layout/activity_subject.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/home_game_head_item.xml b/app/src/main/res/layout/home_game_head_item.xml index 8a59a81839..467aafe119 100644 --- a/app/src/main/res/layout/home_game_head_item.xml +++ b/app/src/main/res/layout/home_game_head_item.xml @@ -47,7 +47,7 @@ android:id="@+id/head_more" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="更多" + android:text="全部" android:textColor="@color/theme_colors" android:textSize="13sp" />