diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c30fd6ea9e..c59f647585 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -146,6 +146,9 @@ + diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index c27e088204..240b863abd 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -4,6 +4,8 @@ import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.text.Html; +import android.text.Spanned; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; @@ -162,8 +164,139 @@ public class DialogUtils { dialog.show(); } + public static void showSuccessDialog(Context context) { + final Dialog dialog = new Dialog(context); + View view = View.inflate(context, R.layout.gamedetails_attention_dialog, null); + TextView title = (TextView) view.findViewById(R.id.dialog_title); + title.setText("关注成功"); + TextView confirm = (TextView) view.findViewById(R.id.dialog_confirm); + confirm.setText("我知道了"); + confirm.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + TextView message = (TextView) view.findViewById(R.id.dialog_message); + message.setText("游戏的最新动态消息会优先提醒您,包括攻略、资讯、开服信息、开测信息以及最新的插件。"); + view.findViewById(R.id.dialog_rl_cancel).setVisibility(View.GONE); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + public static void showCancelDialog(Context context, final ConfiremListener listener) { + final Dialog dialog = new Dialog(context); + View view = View.inflate(context, R.layout.gamedetails_attention_dialog, null); + TextView title = (TextView) view.findViewById(R.id.dialog_title); + title.setText("取消关注"); + TextView cancel = (TextView) view.findViewById(R.id.dialog_cancel); + cancel.setText("取消"); + cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + TextView message = (TextView) view.findViewById(R.id.dialog_message); + + Spanned content = Html + .fromHtml("取消关注游戏后,您将无法及时收到游戏的攻略资讯等最新动态提醒,您确定取消吗?"); + message.setText(content); + + view.findViewById(R.id.dialog_rl_confirm).setVisibility(View.VISIBLE); + view.findViewById(R.id.dialog_confirm).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + if (listener != null) { + listener.onConfirem(); + } + } + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + public static void showPluginDialog(Context context, final ConfiremListener cListener, + final DismissListener dListener) { + final Dialog dialog = new Dialog(context); + View view = View.inflate(context, R.layout.search_history_delete_dialog, null); + TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); + title.setText("插件化安装"); + TextView content = (TextView) view + .findViewById(R.id.delete_dialog_message); + Spanned spanned = Html.fromHtml("您将进行插件化安装以实现插件功能,此过程将" + + "卸载" + "当前使用的版本并" + + "安装插件版本" + "。"); + content.setText(spanned); + + TextView cancel = (TextView) view + .findViewById(R.id.delete_dialog_cancel); + cancel.setText("取消"); + cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + TextView confirm = (TextView) view + .findViewById(R.id.delete_dialog_confirm); + confirm.setText("确定"); + confirm.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + if (cListener != null) { + cListener.onConfirem(); + } + } + }); + + if (dListener != null) { + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + dListener.onDismiss(); + } + }); + } + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + public static void showDisclaimerDialog(Context context, String content) { + final Dialog disclaimerDialog = new Dialog(context); + View view = View.inflate(context, R.layout.setting_disclaimer_dialog, null); + TextView title = (TextView) view + .findViewById(R.id.disclaimer_dialog_title); + title.setText("免责声明"); + TextView message = (TextView) view + .findViewById(R.id.disclaimer_dialog_message); + Spanned spanned = Html.fromHtml(content); + message.setText(spanned); + view.findViewById(R.id.disclaimer_dialog_confirm).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + disclaimerDialog.dismiss(); + } + }); + disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + disclaimerDialog.setContentView(view); + disclaimerDialog.show(); + } + public interface ConfiremListener{ void onConfirem(); } + public interface DismissListener{ + void onDismiss(); + } + } 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..c4824dbc10 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); @@ -524,7 +540,6 @@ public class DownloadItemUtils { map.put("platform", PlatformUtils.getInstance(context) .getPlatformName(entity.getApk().get(0).getPlatform())); map.put("status", "开始"); - map.put("isPlugin", "true"); map.put("location", "游戏详情:" + entity.getName()); map.put("from", entrance); map.put("network", NetworkUtils.getConnectedType(context)); @@ -729,7 +744,8 @@ 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()); + meta.put("isPlugin", "true"); } entry.setMeta(meta); return entry; diff --git a/app/src/main/java/com/gh/common/view/DownloadDialog.java b/app/src/main/java/com/gh/common/view/DownloadDialog.java index d3c57aaea3..f37e443e38 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -1,6 +1,5 @@ package com.gh.common.view; -import android.app.Dialog; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; @@ -16,8 +15,6 @@ import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; -import android.text.Html; -import android.text.Spanned; import android.text.TextUtils; import android.util.SparseArray; import android.view.Gravity; @@ -26,7 +23,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; @@ -177,7 +173,7 @@ public class DownloadDialog { gameName = game.getName(); gameIcon = game.getIcon(); - gameId = game.getIcon(); + gameId = game.getId(); if (game.getTag() == null || game.getTag().isEmpty()) { gameType = "normal"; } else { @@ -354,7 +350,7 @@ public class DownloadDialog { } private ArrayList sortApk(String gameId, List apkList) { - DownloadEntry downloadEntry = null; + DownloadEntry downloadEntry; ArrayList list = new ArrayList(); List installedList = new ArrayList(); List doneList = new ArrayList(); @@ -513,35 +509,9 @@ public class DownloadDialog { // 显示插件化 private void showPluginDialog(final ApkEntity apkEntity, final RecyclerViewAdapter adapter, final int location) { - final Dialog dialog = new Dialog(context); - View view = View.inflate(context, - R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("插件化安装"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - Spanned spanned = Html.fromHtml("您将进行插件化安装以实现插件功能,此过程将" - + "卸载" + "当前使用的版本并" - + "安装插件版本" + "。"); - content.setText(spanned); - - TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); - cancel.setText("取消"); - cancel.setOnClickListener(new OnClickListener() { + DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - TextView confirm = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - confirm.setText("确定"); - confirm.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - + public void onConfirem() { Map kv6 = new HashMap(); kv6.put("操作", "点击插件化安装完成"); DataUtils.onEvent(context, "插件化", gameName, kv6); @@ -557,11 +527,7 @@ public class DownloadDialog { context.startActivity(PackageUtils.getUninstallIntent(context, path)); } } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); + }, null); } private class RecyclerViewAdapter extends @@ -820,8 +786,7 @@ public class DownloadDialog { HashMap meta = new HashMap(); meta.put("ETag", apkEntity.getEtag()); meta.put("icon", gameIcon); - meta.put( - "platform", apkEntity.getPlatform()); + meta.put("platform", apkEntity.getPlatform()); meta.put("gameId", gameId); meta.put("entrance", entrance); meta.put("location", mlocation); diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java index 65e15552c8..40ee569af9 100644 --- a/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/GameDetailsActivity.java @@ -1,7 +1,5 @@ package com.gh.gamecenter; -import android.app.Dialog; -import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -11,14 +9,11 @@ import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.util.ArrayMap; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; -import android.text.Html; -import android.text.Spanned; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; -import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; @@ -420,14 +415,33 @@ public class GameDetailsActivity extends BaseFragmentActivity implements top_tv_attention .setBackgroundResource(R.drawable.border_red_bg); top_tv_attention.setTextColor(0xffbc2132); - showSuccessDialog(); + + DialogUtils.showSuccessDialog(this); } else { Map kv2 = new HashMap(); kv2.put("点击", "取消关注"); - DataUtils.onEvent(GameDetailsActivity.this, "插件数据", - entity.getName(), kv2); + DataUtils.onEvent(GameDetailsActivity.this, "插件数据", entity.getName(), kv2); - showCancelDialog(); + DialogUtils.showCancelDialog(this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + Map kv = new HashMap(); + kv.put("状态", "取消关注"); + DataUtils.onEvent(GameDetailsActivity.this, "游戏关注", entity.getName(), kv); + + Map map = new HashMap(); + map.put("game", entity.getName()); + map.put("type", "关注"); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(GameDetailsActivity.this, "concern", map); + + concernManager.deleteConcern(entity.getId()); + + top_tv_attention.setText("关注"); + top_tv_attention.setBackgroundResource(R.drawable.textview_red_style); + top_tv_attention.setTextColor(0xffffffff); + } + }); } break; case R.id.gamedetails_tv_download: @@ -624,108 +638,10 @@ public class GameDetailsActivity extends BaseFragmentActivity implements } } - private void showSuccessDialog() { - final Dialog dialog = new Dialog(this); - View view = View.inflate(this, R.layout.gamedetails_attention_dialog, - null); - TextView title = (TextView) view.findViewById(R.id.dialog_title); - title.setText("关注成功"); - TextView confirm = (TextView) view.findViewById(R.id.dialog_confirm); - confirm.setText("我知道了"); - confirm.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - TextView message = (TextView) view.findViewById(R.id.dialog_message); - message.setText("游戏的最新动态消息会优先提醒您,包括攻略、资讯、开服信息、开测信息以及最新的插件。"); - view.findViewById(R.id.dialog_rl_cancel).setVisibility(View.GONE); - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - } - - private void showCancelDialog() { - final Dialog dialog = new Dialog(this); - View view = View.inflate(this, R.layout.gamedetails_attention_dialog, - null); - TextView title = (TextView) view.findViewById(R.id.dialog_title); - title.setText("取消关注"); - TextView cancel = (TextView) view.findViewById(R.id.dialog_cancel); - cancel.setText("取消"); - cancel.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - TextView message = (TextView) view.findViewById(R.id.dialog_message); - - Spanned content = Html - .fromHtml("取消关注游戏后,您将无法及时收到游戏的攻略资讯等最新动态提醒,您确定取消吗?"); - message.setText(content); - - view.findViewById(R.id.dialog_rl_confirm).setVisibility(View.VISIBLE); - view.findViewById(R.id.dialog_confirm).setOnClickListener( - new OnClickListener() { - @Override - public void onClick(View v) { - - Map kv = new HashMap(); - kv.put("状态", "取消关注"); - DataUtils.onEvent(GameDetailsActivity.this, "游戏关注", - entity.getName(), kv); - - Map map = new HashMap(); - map.put("game", entity.getName()); - map.put("type", "关注"); - map.put("createdOn", System.currentTimeMillis() / 1000); - DataCollectionManager.onEvent(GameDetailsActivity.this, - "concern", map); - - concernManager.deleteConcern(entity.getId()); - dialog.dismiss(); - top_tv_attention.setText("关注"); - top_tv_attention - .setBackgroundResource(R.drawable.textview_red_style); - top_tv_attention.setTextColor(0xffffffff); - } - }); - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - } - private void showPluginDialog(final String path, final String gameName) { - final Dialog dialog = new Dialog(this); - View view = View.inflate(this, R.layout.search_history_delete_dialog, - null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("插件化安装"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - Spanned spanned = Html.fromHtml("您将进行插件化安装以实现插件功能,此过程将" - + "卸载" + "当前使用的版本并" - + "安装插件版本" + "。"); - content.setText(spanned); - - TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); - cancel.setText("取消"); - cancel.setOnClickListener(new OnClickListener() { + DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener() { @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - TextView confirm = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - confirm.setText("确定"); - confirm.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); + public void onConfirem() { Map kv6 = new HashMap(); kv6.put("操作", "一次性完成"); DataUtils.onEvent(GameDetailsActivity.this, "插件化", gameName, kv6); @@ -736,18 +652,12 @@ public class GameDetailsActivity extends BaseFragmentActivity implements startActivity(PackageUtils.getUninstallIntent(getApplicationContext(), path)); } } - }); - - dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + }, new DialogUtils.DismissListener() { @Override - public void onDismiss(DialogInterface dialog) { + public void onDismiss() { isShowPluginDialog = false; } }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index f3cf1ed3a2..cbf29614cd 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -34,6 +34,7 @@ import com.gh.base.AppController; import com.gh.base.BaseFragmentActivity; import com.gh.common.constant.Config; import com.gh.common.util.DataUtils; +import com.gh.common.util.DialogUtils; import com.gh.common.util.FileUtils; import com.gh.common.util.MD5Utils; import com.gh.common.util.NetworkUtils; @@ -69,6 +70,7 @@ import com.gh.gamecenter.news.NewsFragment; import com.gh.gamecenter.personal.PersonalFragment; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; +import com.gh.gamecenter.volley.extended.StringExtendedRequest; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -121,7 +123,6 @@ public class MainActivity extends BaseFragmentActivity implements private int currentTab; - private boolean isFirst; private boolean isDestroy = false; private boolean isShowDownload = false; @@ -406,8 +407,6 @@ public class MainActivity extends BaseFragmentActivity implements doneMap = new ArrayMap(); uninstallMap = new ArrayMap(); - isFirst = true; - getSearchHints(); sp = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); @@ -532,7 +531,7 @@ public class MainActivity extends BaseFragmentActivity implements sp.edit().putString("disclaimer", content) .apply(); if (isFirst) { - showDisclaimerDialog(content); + DialogUtils.showDisclaimerDialog(MainActivity.this, content); } } } catch (JSONException e) { @@ -553,30 +552,6 @@ public class MainActivity extends BaseFragmentActivity implements AppController.addToRequestQueue(request, MainActivity.class); } - // 弹出免责声明的窗口 - private void showDisclaimerDialog(String content) { - final Dialog disclaimerDialog = new Dialog(this); - View view = View - .inflate(this, R.layout.setting_disclaimer_dialog, null); - TextView title = (TextView) view - .findViewById(R.id.disclaimer_dialog_title); - title.setText("免责声明"); - TextView message = (TextView) view - .findViewById(R.id.disclaimer_dialog_message); - Spanned spanned = Html.fromHtml(content); - message.setText(spanned); - view.findViewById(R.id.disclaimer_dialog_confirm).setOnClickListener( - new OnClickListener() { - @Override - public void onClick(View v) { - disclaimerDialog.dismiss(); - } - }); - disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - disclaimerDialog.setContentView(view); - disclaimerDialog.show(); - } - Runnable runnable = new Runnable() { @Override public void run() { @@ -952,9 +927,6 @@ public class MainActivity extends BaseFragmentActivity implements break; case R.id.home2_layout: EventBus.getDefault().post(new EBUISwitch("MainActivity", 1)); - if (isFirst) { - isFirst = false; - } setTabSelection(1); break; case R.id.home3_layout: @@ -1099,12 +1071,15 @@ public class MainActivity extends BaseFragmentActivity implements jsonObject.toString(), new Response.Listener() { @Override public void onResponse(JSONObject response) { - + Utils.log("download = " + response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - + Utils.log("download = " + error); + if (error.networkResponse != null) { + Utils.log("download = " + new String(error.networkResponse.data)); + } } }); AppController.addToRequestQueue(request, MainActivity.class); 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/SettingActivity.java b/app/src/main/java/com/gh/gamecenter/SettingActivity.java index b84d53a887..54c165e4c9 100644 --- a/app/src/main/java/com/gh/gamecenter/SettingActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SettingActivity.java @@ -243,7 +243,7 @@ public class SettingActivity extends BaseActivity implements OnClickListener { case R.id.setting_tv_disclaimer: String content = sp.getString("disclaimer", null); if (!TextUtils.isEmpty(content)) { - showDisclaimerDialog(content); + DialogUtils.showDisclaimerDialog(this, content); } break; case R.id.setting_rl_font_size: @@ -349,30 +349,6 @@ public class SettingActivity extends BaseActivity implements OnClickListener { } } - // 弹出免责声明的窗口 - private void showDisclaimerDialog(String content) { - final Dialog disclaimerDialog = new Dialog(this); - View view = View - .inflate(this, R.layout.setting_disclaimer_dialog, null); - TextView title = (TextView) view - .findViewById(R.id.disclaimer_dialog_title); - title.setText("免责声明"); - TextView message = (TextView) view - .findViewById(R.id.disclaimer_dialog_message); - Spanned spanned = Html.fromHtml(content); - message.setText(spanned); - view.findViewById(R.id.disclaimer_dialog_confirm).setOnClickListener( - new OnClickListener() { - @Override - public void onClick(View v) { - disclaimerDialog.dismiss(); - } - }); - disclaimerDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - disclaimerDialog.setContentView(view); - disclaimerDialog.show(); - } - private void checkUpdate() { String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this, getPackageName(), "TD_CHANNEL_ID"); @@ -418,7 +394,7 @@ public class SettingActivity extends BaseActivity implements OnClickListener { showUpdateDialog(updateMD5); } else { - showCancelDialog(); + toast("已是最新版本"); } } @@ -572,39 +548,6 @@ public class SettingActivity extends BaseActivity implements OnClickListener { DownloadManager.getInstance(getApplicationContext()).add(downloadEntry); } - private void showCancelDialog() { - - final Dialog dialog = new Dialog(SettingActivity.this); - View view = View.inflate(SettingActivity.this, - R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("更新提示"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - - content.setText("已经是最新版本!"); - - view.findViewById(R.id.delete_dialog_rl_cancel) - .setVisibility(View.GONE); - view.findViewById(R.id.delete_dialog_rl_confirm).setVisibility( - View.VISIBLE); - - TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - - cancel.setVisibility(View.VISIBLE); - cancel.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - } - @Override public void onResume() { super.onResume(); diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 187abbb262..1224ef78b8 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -576,11 +576,14 @@ public class SplashScreenActivity extends BaseActivity { List list = gameEntity.getApk(); HashMap packageNames = new HashMap(); for (int j = 0, sizej = list.size(); j < sizej; j++) { - packageNames.put( - list.get(j).getPackageName(), false); + packageNames.put(list.get(j).getPackageName(), false); } entity.setTime(System.currentTimeMillis()); entity.setPackageNames(packageNames); + //默认安装即为关注 + if (!concernManager.isConcern(entity.getId())) { + concernManager.addByEntity(gameEntity); + } concernManager.updateByConcern(entity); } if (cCount == count) { diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java index 15d08c1022..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.HotCardAdapter; -import com.gh.gamecenter.db.info.GameInfo; +import com.gh.gamecenter.adapter.SubjectAdapter; 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 HotCardAdapter adapter; - private LinearLayout hotcard_ll_loading; + private RecyclerView subject_list; + private SubjectAdapter adapter; + 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 HotCardAdapter(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/HotCardAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/HotCardAdapter.java deleted file mode 100644 index e96c768730..0000000000 --- a/app/src/main/java/com/gh/gamecenter/adapter/HotCardAdapter.java +++ /dev/null @@ -1,224 +0,0 @@ -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 com.gh.base.AppController; -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.gamecenter.GameDetailsActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder; -import com.gh.gamecenter.entity.DismissEntity; -import com.gh.gamecenter.entity.GameEntity; - -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * - * @author 温冠超 - * @email 294299195@qq.com - * @date 2015-8-8 - * @update 2015-8-11 - * @des 首页插件fragment适配器 - */ -public class HotCardAdapter extends - RecyclerView.Adapter { - - private Context context; - - private List list; - - // 黄壮华 获取引用 修改2015/8/15 - private ArrayMap> platformMap; - - private ArrayMap statusMap; - - private DismissEntity dismissEntity; - - // 黄壮华 获取引用 修改2015/8/15 - public HotCardAdapter(Context context, - ArrayMap> pMap, - ArrayMap sMap, DismissEntity dEntity) { - - // 黄壮华 获取引用 修改2015/8/15 - platformMap = pMap; - statusMap = sMap; - dismissEntity = dEntity; - - this.context = context; - - list = new ArrayList(); - } - - public List getList() { - return list; - } - - public void setList(List list) { - this.list = list; - notifyDataSetChanged(); - } - - @Override - public int getItemCount() { - return list.size(); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, - int position) { - if (position != list.size()) { - - if (viewHolder instanceof GameNormalViewHolder) { - GameNormalViewHolder holder = (GameNormalViewHolder) 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()); - } - - 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); - } 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, - HotCardAdapter.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, - HotCardAdapter.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; - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { - if (i != list.size()) { - if (list.get(i).getTest() != null) { - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.home_game_test_item, viewGroup, false); - return new GameTestViewHolder(view); - } else { - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.home_game_normal_item, viewGroup, false); - return new GameNormalViewHolder(view); - } - } else { - View view = LayoutInflater.from(viewGroup.getContext()).inflate( - R.layout.refresh_footerview, viewGroup, false); - return new FooterViewHolder(view); - } - } - -} 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 new file mode 100644 index 0000000000..a79c4c2e7a --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java @@ -0,0 +1,333 @@ +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 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.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; +import java.util.List; +import java.util.Map; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * + * @author 温冠超 + * @email 294299195@qq.com + * @date 2015-8-8 + * @update 2015-8-11 + * @des 首页插件fragment适配器 + */ +public class SubjectAdapter extends RecyclerView.Adapter { + + private Context context; + + private RecyclerView subject_list; + private ProgressBarCircularIndeterminate subject_pb_loading; + private LinearLayout reuse_no_connection; + + private List list; + + // 黄壮华 获取引用 修改2015/8/15 + private ArrayMap locationMap; + private ArrayMap> platformMap; + private ArrayMap> gameMap; + private ArrayMap nameMap; + private ArrayMap statusMap; + + private DismissEntity dismissEntity; + + public SubjectAdapter(Context context, + 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); + } + + 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); + } + + 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 + public int getItemCount() { + return list.size(); + } + + @Override + public int getItemViewType(int position) { + return position; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { + if (list.get(i).getTest() != null) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate( + R.layout.home_game_test_item, viewGroup, false); + return new GameTestViewHolder(view); + } else { + View view = LayoutInflater.from(viewGroup.getContext()).inflate( + R.layout.home_game_normal_item, viewGroup, false); + return new GameNormalViewHolder(view); + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { + if (viewHolder instanceof GameNormalViewHolder) { + initGameNormalViewHolder((GameNormalViewHolder) viewHolder, position); + } else if (viewHolder instanceof GameTestViewHolder) { + initGameTestViewHolder((GameTestViewHolder) viewHolder, position); + } + } + + private void initGameTestViewHolder(GameTestViewHolder 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()); + } + 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); + } + + 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 13a5351fb5..ed8457f011 100644 --- a/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.java @@ -1,6 +1,5 @@ package com.gh.gamecenter.download; -import android.app.Dialog; import android.os.Bundle; import android.os.Message; import android.support.annotation.Nullable; @@ -8,15 +7,12 @@ import android.support.v4.app.Fragment; import android.support.v4.util.ArrayMap; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.text.Html; -import android.text.Spanned; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; -import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; @@ -200,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); } @@ -491,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()); } @@ -505,35 +503,9 @@ public class DownLoadManagerFragment extends Fragment { // 显示插件化 private void showPluginDialog(final String path) { - final Dialog dialog = new Dialog(getActivity()); - View view = View.inflate(getActivity(), - R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("插件化安装"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - Spanned spanned = Html.fromHtml("您将进行插件化安装以实现插件功能,此过程将" - + "卸载" + "当前使用的版本并" - + "安装插件版本" + "。"); - content.setText(spanned); - - TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); - cancel.setText("取消"); - cancel.setOnClickListener(new OnClickListener() { + DialogUtils.showPluginDialog(getActivity(), new DialogUtils.ConfiremListener() { @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - TextView confirm = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - confirm.setText("确定"); - confirm.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - + public void onConfirem() { for (DownloadEntry downloadEntry : DownloadManager.getInstance( getActivity()).getAll()) { if (downloadEntry.getMeta().get("isPlugin") != null @@ -552,11 +524,7 @@ public class DownLoadManagerFragment extends Fragment { startActivity(PackageUtils.getUninstallIntent(getActivity(), path)); } } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); + }, null); } private class DownLoadListAdapter extends 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..32f6c25345 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,223 @@ 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.GONE); + 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.startAutoScroll(); + } else { + 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 +335,52 @@ 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); + if (!isDestroy) { + 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 +389,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..249d382c11 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; @@ -30,23 +30,29 @@ import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.PlatformUtils; import com.gh.common.util.TimestampUtils; +import com.gh.common.util.Utils; 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 +80,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 +174,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter() { @Override @@ -175,30 +211,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 +316,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter infos = concernManager.getInstalledGame(); HashMap map; GameEntity gameEntity; @@ -252,11 +342,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 +372,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 +426,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 +440,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 +924,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..ec600d3fa9 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.GONE); + 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,47 @@ 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() { + if (!isDestroy) { + 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 4a2ddfdcb9..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,37 +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.ImageView; import android.widget.LinearLayout; -import android.widget.TextView; +import android.widget.Toast; +import com.android.volley.NoConnectionError; import com.android.volley.Response; +import com.android.volley.TimeoutError; import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.constant.Config; -import com.gh.common.constant.Constants; import com.gh.common.util.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; @@ -49,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; @@ -155,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) { @@ -275,28 +403,30 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter endTime) { @@ -305,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..e1f1f728f4 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,12 +241,13 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { } } + //连接上网络事件 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); + game_pb_loading.setVisibility(View.GONE); reuse_no_connection.setVisibility(View.GONE); handler.postDelayed(runnable, 1000); } else if (adapter.isNetworkError()) { @@ -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); @@ -301,11 +302,13 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { Runnable runnable = new Runnable() { @Override public void run() { - adapter = new Game3FragmentAdapter(Game3Fragment.this, - locationMap, gameMap, platformMap, nameMap, recyclerview, - game_swipe_refresh, reuse_no_connection, statusMap, dismissEntity, - game_pb_loading, true); - recyclerview.setAdapter(adapter); + if (!isDestroy) { + adapter = new Game3FragmentAdapter(Game3Fragment.this, + locationMap, gameMap, platformMap, nameMap, recyclerview, + game_swipe_refresh, reuse_no_connection, statusMap, dismissEntity, + game_pb_loading, true); + recyclerview.setAdapter(adapter); + } } }; 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..97e262baa1 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,15 +58,31 @@ 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 PopupWindow popWindow; + private RelativeLayout.LayoutParams rparams; + private String hint; + private int width; private int currentItem; - private String hint; + private Handler handler = new Handler(); + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("currentItem", currentItem); + } @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -79,15 +94,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; } @@ -96,9 +108,6 @@ public class GameFragment extends Fragment implements OnClickListener, initActionBar(); - viewPager = (ViewPager) view.findViewById(R.id.pager); - - slideLine = view.findViewById(R.id.slide_line); jingpinText = (TextView) view.findViewById(R.id.jingpin_text); zuixinText = (TextView) view.findViewById(R.id.zuixin_text); danjiText = (TextView) view.findViewById(R.id.danji_text); @@ -107,24 +116,39 @@ public class GameFragment extends Fragment implements OnClickListener, zuixinText.setOnClickListener(this); danjiText.setOnClickListener(this); + slideLine = view.findViewById(R.id.slide_line); 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)); rparams.addRule(RelativeLayout.BELOW, R.id.plugin_ll_top); + viewPager = (ViewPager) view.findViewById(R.id.pager); 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; + if (savedInstanceState != null) { + currentItem = savedInstanceState.getInt("currentItem"); + } + viewPager.setCurrentItem(currentItem); - currentItem = viewPager.getCurrentItem(); + 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); @@ -136,7 +160,13 @@ public class GameFragment extends Fragment implements OnClickListener, }, 100); } - private Handler handler = new Handler(); + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if (container != null) { + container.removeView(view); + } + return view; + } private void initActionBar() { view.findViewById(R.id.actionbar_rl_download).setOnClickListener(this); @@ -144,17 +174,14 @@ public class GameFragment extends Fragment implements OnClickListener, view.findViewById(R.id.actionbar_iv_search).setOnClickListener(this); if (Config.isShow) { - view.findViewById(R.id.actionbar_rl_download).setVisibility( - View.VISIBLE); + view.findViewById(R.id.actionbar_rl_download).setVisibility(View.VISIBLE); } else { - view.findViewById(R.id.actionbar_rl_download).setVisibility( - View.GONE); + view.findViewById(R.id.actionbar_rl_download).setVisibility(View.GONE); } downloadHint = (TextView) view.findViewById(R.id.action_tip); int updateSize = PackageManager.getUpdateListSize(); - int downloadSize = DownloadManager.getInstance(getActivity()).getAll() - .size(); + int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { downloadHint.setVisibility(View.VISIBLE); downloadHint.setText(downloadSize + ""); @@ -194,24 +221,14 @@ public class GameFragment extends Fragment implements OnClickListener, } } - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - if (container != null) { - container.removeView(view); - } - return view; - } - private class FragmentAdapter extends FragmentPagerAdapter { public FragmentAdapter(FragmentManager fm) { super(fm); - } @Override public Fragment getItem(int position) { - if (position == 0) { return new Game1Fragment(); } else if (position == 1) { @@ -231,13 +248,7 @@ public class GameFragment extends Fragment implements OnClickListener, @Override public void onClick(View v) { final int id = v.getId(); - if (id == R.id.jingpin_text) { - viewPager.setCurrentItem(0); - } else if (id == R.id.zuixin_text) { - viewPager.setCurrentItem(1); - } else if (id == R.id.danji_text) { - viewPager.setCurrentItem(2); - } else if (id == R.id.actionbar_notification) { + if (id == R.id.actionbar_notification) { DataUtils.onEvent(getActivity(), "主页", "关注图标"); Map map = new HashMap(); @@ -301,68 +312,34 @@ public class GameFragment extends Fragment implements OnClickListener, popUpOverflow(v); } else if (id == R.id.menu_rl_set) { - v.setVisibility(View.GONE); + popWindow.dismiss(); startActivity(new Intent(getActivity(), SettingActivity.class)); - } - } - - public void updateRedDot(int type) { - 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); - rparams.topMargin = DisplayUtils.dip2px(getActivity(), 8); - rparams.rightMargin = DisplayUtils.dip2px(getActivity(), 2); - rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); - downloadHint.setLayoutParams(rparams); - } else if (type == -1 && (downloadSize == 0 || downloadSize == 1)) { - int updateSize = PackageManager.getUpdateList().size(); - if (updateSize != 0) { - downloadHint.setVisibility(View.VISIBLE); - downloadHint.setText(""); - int width = DisplayUtils.dip2px(getActivity(), 10); - 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); - downloadHint.setLayoutParams(rparams); - } else { - downloadHint.setVisibility(View.GONE); - } - } else if (downloadSize != 0) { - downloadHint.setVisibility(View.VISIBLE); - downloadHint.setText((downloadSize + type) + ""); + } else if (id == R.id.jingpin_text) { + viewPager.setCurrentItem(0); + } else if (id == R.id.zuixin_text) { + viewPager.setCurrentItem(1); + } else if (id == R.id.danji_text) { + viewPager.setCurrentItem(2); } } 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); + View popView = View.inflate(getActivity(), R.layout.menu_popwindow, null); popView.findViewById(R.id.menu_rl_set).setOnClickListener(this); - PopupWindow popWindow = new PopupWindow(popView, - LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); + popWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); popWindow.setOutsideTouchable(true); popWindow.setAnimationStyle(android.R.style.Animation_Dialog); - popWindow.setBackgroundDrawable(getResources().getDrawable( - R.drawable.shape)); + 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 +378,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)); } } @@ -414,7 +390,7 @@ public class GameFragment extends Fragment implements OnClickListener, public void onEventMainThread(EBUISwitch busNine) { if ("MainActivity".equals(busNine.getFrom())) { - if (busNine.getPosition() == 1) { + if (busNine.getPosition() == 0) { EventBus.getDefault().post( new EBUISwitch("GameFragment", viewPager.getCurrentItem())); } @@ -436,21 +412,49 @@ public class GameFragment extends Fragment implements OnClickListener, updateRedDot(busEight.getType()); } + public void updateRedDot(int type) { + 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); + rparams.topMargin = DisplayUtils.dip2px(getActivity(), 8); + rparams.rightMargin = DisplayUtils.dip2px(getActivity(), 2); + rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + downloadHint.setLayoutParams(rparams); + } else if (type == -1 && (downloadSize == 0 || downloadSize == 1)) { + int updateSize = PackageManager.getUpdateList().size(); + if (updateSize != 0) { + downloadHint.setVisibility(View.VISIBLE); + downloadHint.setText(""); + int width = DisplayUtils.dip2px(getActivity(), 10); + 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); + downloadHint.setLayoutParams(rparams); + } else { + downloadHint.setVisibility(View.GONE); + } + } else if (downloadSize != 0) { + downloadHint.setVisibility(View.VISIBLE); + downloadHint.setText((downloadSize + type) + ""); + } + } + @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); } } @@ -472,6 +476,7 @@ public class GameFragment extends Fragment implements OnClickListener, searchHint = null; rparams = null; hint = null; + handler = null; } } diff --git a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java index 1cf1ac7a33..8f7f1aab12 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java @@ -15,6 +15,10 @@ import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; +import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBUISwitch; + +import de.greenrobot.event.EventBus; /** * Created by khy on 2016/6/29. @@ -22,7 +26,6 @@ import com.gh.gamecenter.R; public class News1Fragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { private View view; - private SwipeRefreshLayout original_swipe_refresh; private RecyclerView original_list; private LinearLayoutManager layoutManager; @@ -31,6 +34,7 @@ public class News1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr private LinearLayout reuse_no_connection; private boolean isDestroy; + private boolean isEverpause; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -39,14 +43,15 @@ public class News1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr view = View.inflate(getActivity(), R.layout.fragment_original, null); isDestroy = false; + isEverpause = false; original_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.original_swipe_refresh); - original_list = (RecyclerView) view.findViewById(R.id.original_list); original_swipe_refresh.setColorSchemeResources(R.color.theme_colors); - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - original_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.original_pb_loading); original_swipe_refresh.setOnRefreshListener(this); + original_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.original_pb_loading); + + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); reuse_no_connection.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -54,14 +59,16 @@ public class News1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr original_list.setVisibility(View.VISIBLE); original_pb_loading.setVisibility(View.VISIBLE); reuse_no_connection.setVisibility(View.GONE); + handler.postDelayed(runnable, 1000); } }); + original_list = (RecyclerView) view.findViewById(R.id.original_list); original_list.setHasFixedSize(true); layoutManager = new LinearLayoutManager(getActivity()); original_list.setLayoutManager(layoutManager); - adapter = new News1FragmentAdapter(getActivity(), original_list, original_swipe_refresh, - original_pb_loading, reuse_no_connection, true); + adapter = new News1FragmentAdapter(News1Fragment.this, original_list, original_swipe_refresh, + original_pb_loading, reuse_no_connection, false); original_list.setAdapter(adapter); original_list.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); original_list.setOnScrollListener(new RecyclerView.OnScrollListener() { @@ -78,6 +85,7 @@ public class News1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr } }); + EventBus.getDefault().register(this); } @Nullable @@ -90,20 +98,76 @@ public class News1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr return view; } + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + if (reuse_no_connection.getVisibility() == View.VISIBLE) { + original_swipe_refresh.setRefreshing(true); + original_list.setVisibility(View.VISIBLE); + original_pb_loading.setVisibility(View.GONE); + reuse_no_connection.setVisibility(View.GONE); + handler.postDelayed(runnable, 1000); + } + } + } + + //Fragment界面切换事件 + public void onEventMainThread(EBUISwitch busNine) { + if ("NewsFragment".equals(busNine.getFrom())) { + if (busNine.getPosition() == 0) { + if (original_pb_loading.getVisibility() == View.VISIBLE) { + adapter.load(); + } + } + } + } + private Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { - adapter = new News1FragmentAdapter(getActivity(), original_list, original_swipe_refresh, - original_pb_loading, reuse_no_connection, true); - original_list.setAdapter(adapter); + if (!isDestroy) { + adapter = new News1FragmentAdapter(News1Fragment.this, original_list, original_swipe_refresh, + original_pb_loading, reuse_no_connection, true); + original_list.setAdapter(adapter); + } } }; - @Override public void onRefresh() { handler.postDelayed(runnable, 1000); } + + public boolean isEverpause() { + return isEverpause; + } + + @Override + public void onPause() { + super.onPause(); + isEverpause = true; + } + + @Override + public void onResume() { + super.onResume(); + isEverpause = false; + } + + @Override + public void onDestroy() { + super.onDestroy(); + isDestroy = true; + EventBus.getDefault().unregister(this); + view = null; + original_swipe_refresh = null; + original_list = null; + layoutManager = null; + adapter = null; + original_pb_loading = null; + reuse_no_connection = null; + handler = null; + } } 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..249a5fefc4 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java @@ -54,7 +54,15 @@ import java.util.List; * Created by khy on 2016/6/30. */ public class News1FragmentAdapter extends RecyclerView.Adapter{ - private Activity activity; + + private class ITEM_TYPE { + public static final int normal = 0;//正常布局 + public static final int special1 = 1;//一张1:3图 + public static final int special2 = 2;//三张4:3图 + public static final int footer = 3;//页脚 + } + + private News1Fragment fragment; private Context context; private RecyclerView original_list; private SwipeRefreshLayout game_swipe_refresh; @@ -68,16 +76,16 @@ public class News1FragmentAdapter extends RecyclerView.Adapter() { @Override public void onResponse(JSONArray response) { - Log.e("URL",url); isLoading = false; + Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); List list = gson.fromJson(response.toString(), listType); newsList.addAll(list); - notifyItemRangeInserted(newsList.size() - list.size(), list.size()); - if (offset == 0 && game_swipe_refresh.isRefreshing()) { + if (!fragment.isHidden() && !fragment.isEverpause()) { + notifyItemRangeInserted(newsList.size() - list.size(), list.size()); + } else { + notifyDataSetChanged(); + } + + if (game_swipe_refresh != null && game_swipe_refresh.isRefreshing()) { game_swipe_refresh.setRefreshing(false); } - if (game_pb_loading.getVisibility() == View.VISIBLE) { + if (game_pb_loading != null && game_pb_loading.getVisibility() == View.VISIBLE) { game_pb_loading.setVisibility(View.GONE); } if (list.isEmpty() || (offset == 0 && list.size() < 10)) { @@ -138,9 +148,6 @@ public class News1FragmentAdapter extends RecyclerView.Adapter { +public class News2FragmentAdapter extends RecyclerView.Adapter{ private class ITEM_TYPE { public static final int normal = 0;//正常布局 @@ -61,7 +60,7 @@ public class News2FragmentAdapter extends RecyclerView.Adapter>() {}.getType(); Gson gson = new Gson(); List list = gson.fromJson(response.toString(), listType); newsList.addAll(list); - notifyItemRangeInserted(newsList.size() - list.size(), list.size()); - if (offset == 0 && game_swipe_refresh.isRefreshing()) { + if (!fragment.isHidden() && !fragment.isEverpause()) { + notifyItemRangeInserted(newsList.size() - list.size(), list.size()); + } else { + notifyDataSetChanged(); + } + + if (game_swipe_refresh != null && game_swipe_refresh.isRefreshing()) { game_swipe_refresh.setRefreshing(false); } - if (game_pb_loading.getVisibility() == View.VISIBLE) { + if (game_pb_loading != null && game_pb_loading.getVisibility() == View.VISIBLE) { game_pb_loading.setVisibility(View.GONE); } if (list.isEmpty() || (offset == 0 && list.size() < 10)) { @@ -144,34 +146,33 @@ public class News2FragmentAdapter extends RecyclerView.Adapter getNewsList() { return newsList; } - } diff --git a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java index 8c265f12f2..c38853a52b 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java @@ -13,10 +13,14 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBUISwitch; + +import de.greenrobot.event.EventBus; /** * Created by khy on 2016/6/29. @@ -27,7 +31,8 @@ public class News3Fragment extends Fragment { private RecyclerView news_list; private LinearLayoutManager layoutManager; private News3FragmentAdapter adapter; - private LinearLayout news_ll_loading, reuse_no_connection; + private ProgressBarCircularIndeterminate news_pb_loading; + private LinearLayout reuse_no_connection; private TextView news_tv_label; private RelativeLayout news_rl_label; private RelativeLayout.LayoutParams rparams; @@ -38,53 +43,39 @@ public class News3Fragment extends Fragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.fragment_news_or_raiders, null); + view = View.inflate(getActivity(), R.layout.fragment_news3, null); + + isDestroy = false; + + news_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.news_pb_loading); - news_list = (RecyclerView) view.findViewById(R.id.news_list); - news_ll_loading = (LinearLayout) view.findViewById(R.id.news_ll_loading); - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - news_rl_label = (RelativeLayout) view.findViewById(R.id.news_rl_label); news_tv_label = (TextView) view.findViewById(R.id.news_tv_label); + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); reuse_no_connection.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - news_list.setVisibility(View.GONE); - news_ll_loading.setVisibility(View.VISIBLE); + news_list.setVisibility(View.VISIBLE); + news_pb_loading.setVisibility(View.GONE); reuse_no_connection.setVisibility(View.GONE); - adapter = new News3FragmentAdapter( - getActivity(), news_list, news_ll_loading, - reuse_no_connection, "攻略", news_rl_label, news_tv_label); + adapter = new News3FragmentAdapter(News3Fragment.this, news_list, + news_pb_loading, reuse_no_connection, news_rl_label, news_tv_label, true); news_list.setAdapter(adapter); } }); + news_rl_label = (RelativeLayout) view.findViewById(R.id.news_rl_label); rparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + news_list = (RecyclerView) view.findViewById(R.id.news_list); news_list.setHasFixedSize(true); layoutManager = new LinearLayoutManager( getActivity()); news_list.setLayoutManager(layoutManager); - - adapter = new News3FragmentAdapter(getActivity(), news_list, - news_ll_loading, reuse_no_connection, "攻略", news_rl_label, - news_tv_label); - + adapter = new News3FragmentAdapter(News3Fragment.this, news_list, + news_pb_loading, reuse_no_connection, news_rl_label, news_tv_label, false); news_list.setAdapter(adapter); - news_list.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - - if (event.getAction() == MotionEvent.ACTION_UP) { - v.performClick(); - } - if (news_ll_loading.getVisibility() == View.VISIBLE) { - return true; - } else { - return false; - } - } - }); + news_list.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); news_list.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override @@ -108,8 +99,7 @@ public class News3Fragment extends Fragment { if (position == adapter.getPosition_today() - 1 || position == adapter.getPosition_before() - 1) { - int buttom = layoutManager.findViewByPosition(position) - .getBottom(); + int buttom = layoutManager.findViewByPosition(position).getBottom(); if (buttom <= news_rl_label.getHeight()) { rparams.topMargin = buttom - news_rl_label.getHeight(); news_rl_label.setLayoutParams(rparams); @@ -124,19 +114,18 @@ public class News3Fragment extends Fragment { } @Override - public void onScrollStateChanged(RecyclerView recyclerView, - int newState) { + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (!isDestroy && newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) { if (!adapter.isRemove() && !adapter.isLoading() && !adapter.isNetworkError()) { - adapter.addList(); + adapter.addList(adapter.getAllListSize()); } } } }); - news_list.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); + EventBus.getDefault().register(this); } @Nullable @@ -149,20 +138,31 @@ public class News3Fragment extends Fragment { return view; } + //Fragment界面切换事件 + public void onEventMainThread(EBUISwitch busNine) { + if ("NewsFragment".equals(busNine.getFrom())) { + if (busNine.getPosition() == 2) { + if (news_pb_loading.getVisibility() == View.VISIBLE) { + adapter.load(); + } + } + } + } + + //连接上网络事件 public void onEventMainThread(EBNetworkState busNetworkState) { if (busNetworkState.isNetworkConnected()) { if (reuse_no_connection.getVisibility() == View.VISIBLE) { news_list.setVisibility(View.GONE); - news_ll_loading.setVisibility(View.VISIBLE); + news_pb_loading.setVisibility(View.VISIBLE); reuse_no_connection.setVisibility(View.GONE); - adapter = new News3FragmentAdapter(getActivity(), news_list, - news_ll_loading, reuse_no_connection, "攻略", - news_rl_label, news_tv_label); + adapter = new News3FragmentAdapter(News3Fragment.this, news_list, + news_pb_loading, reuse_no_connection, news_rl_label, news_tv_label, true); news_list.setAdapter(adapter); } else if (adapter.isNetworkError()) { adapter.setNetworkError(false); adapter.notifyItemChanged(adapter.getItemCount()); - adapter.addList(); + adapter.addList(adapter.getAllListSize()); } } } @@ -171,11 +171,12 @@ public class News3Fragment extends Fragment { public void onDestroy() { super.onDestroy(); isDestroy = true; - AppController.canclePendingRequests(NewsFragment.class); + AppController.canclePendingRequests(News3Fragment.class); + EventBus.getDefault().unregister(this); news_list = null; layoutManager = null; adapter = null; - news_ll_loading = null; + news_pb_loading = null; reuse_no_connection = null; news_tv_label = null; news_rl_label = null; diff --git a/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java index fd0ee71d5d..d9a5a48846 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.news; import android.content.Context; import android.net.Uri; +import android.support.v4.widget.ContentLoadingProgressBar; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; @@ -10,6 +11,7 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; @@ -18,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; @@ -26,7 +29,6 @@ import com.gh.common.util.ImageUtils; import com.gh.common.util.NewsUtils; import com.gh.common.util.TimestampUtils; import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; @@ -63,161 +65,168 @@ public class News3FragmentAdapter extends private int position_today = -1;// 今天head的位置 private int position_before = -1;// 昨天/以前head的位置 + private News3Fragment fragment; + private Context context; + + private RecyclerView news_list; + private ProgressBarCircularIndeterminate news_pb_loading; + private LinearLayout ll_noconnection; + private RelativeLayout news_rl_label; + private TextView news_tv_label; + private List todayNewsList; private List beforeNewsList; - private boolean isRemove = false; - private boolean isLoading = false; -// private boolean isLoaded = false; - private boolean isNetworkError = false; + private boolean isRemove; + private boolean isLoading; + private boolean isNetworkError; - private LayoutInflater layoutInflater; - private Context context; + public News3FragmentAdapter(News3Fragment fragment, + RecyclerView recyclerView, + ProgressBarCircularIndeterminate loading, + LinearLayout noconnection, + RelativeLayout rlabel, + TextView tlabel, + boolean isLoad) { - private RecyclerView recyclerView; - private LinearLayout ll_loading, ll_noconnection; - - private RelativeLayout relativeLayout; - private TextView textView; - - private String type; - - public News3FragmentAdapter(Context con, RecyclerView recyclerView, - LinearLayout linearLayout1, LinearLayout linearLayout2, String str, - RelativeLayout relativeLayout, TextView textView) { - context = con; - - type = str; + this.fragment = fragment; + context = fragment.getActivity(); + news_list = recyclerView; + news_rl_label = rlabel; + news_tv_label = tlabel; + news_pb_loading = loading; + ll_noconnection = noconnection; todayNewsList = new ArrayList(); beforeNewsList = new ArrayList(); - this.relativeLayout = relativeLayout; - this.textView = textView; + isRemove = false; + isLoading = false; + isNetworkError = false; - this.recyclerView = recyclerView; - ll_loading = linearLayout1; - ll_noconnection = linearLayout2; - - this.layoutInflater = LayoutInflater.from(context); - - initDatas(); + if (isLoad) { + load(); + } } - private void showRecyclerView() { - recyclerView.setVisibility(View.VISIBLE); - ll_loading.setVisibility(View.GONE); + public void load() { + addList(0); } - private void initDatas() { - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST - + "v1d45/news?type_group=" + Uri.encode(type) - + "&offset=0&limit=20", Constants.NEWS_CD), - new Response.Listener() { - - @Override - public void onResponse(JSONArray response) { - SimpleDateFormat format = new SimpleDateFormat("Mdd", - Locale.getDefault()); - int today = Integer.valueOf(format.format(new Date())); - - Type listType = new TypeToken>() { - }.getType(); - Gson gson = new Gson(); - List newsLists = gson.fromJson( - response.toString(), listType); - int size = newsLists.size(); - for (int i = 0; i < size; i++) { - int day = Integer.valueOf(format.format(new Date( - Long.valueOf(newsLists.get(i) - .getPublishOn() + "000")))); - if (day == today) { - todayNewsList.add(newsLists.get(i)); - } else { - beforeNewsList.add(newsLists.get(i)); - } - } - if (size < 20) { - isRemove = true; - } - refreshCount(); - showRecyclerView(); -// isLoaded = true; -// notifyItemChanged(getItemCount() - 1); - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接和访问超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - Toast.makeText(context, "获取" + type + "失败", - Toast.LENGTH_SHORT).show(); - recyclerView.setVisibility(View.GONE); - ll_loading.setVisibility(View.GONE); - ll_noconnection.setVisibility(View.VISIBLE); - } - } - - }); - AppController.addToRequestQueue(request, NewsFragment.class); - } - - public void addList() { + public void addList(final int offset) { if (isLoading) { return; } isLoading = true; JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( TimestampUtils.addTimestamp(Config.HOST - + "v1d45/news?type_group=" + Uri.encode(type) - + "&offset=" + getAllListSize() + "&limit=20", - Constants.NEWS_CD), new Response.Listener() { + + "v1d45/news?type_group=" + Uri.encode("攻略") + + "&offset=" + offset + "&limit=20", + Constants.NEWS_CD), + new Response.Listener() { @Override public void onResponse(JSONArray response) { + Type listType = new TypeToken>() {}.getType(); Gson gson = new Gson(); - List lists = gson.fromJson(response.toString(), listType); - if (lists != null) { - if (lists.isEmpty()) { - isRemove = true; - notifyItemRemoved(getItemCount()); - } else { - addDatas(lists); + List list = gson.fromJson(response.toString(), listType); + + //去重 + list = removeDuplicate(list); + + SimpleDateFormat format = new SimpleDateFormat("Mdd", Locale.getDefault()); + int today = Integer.valueOf(format.format(new Date())); + + if (offset == 0) { + for (int i = 0, size = list.size(); i < size; i++) { + int day = Integer.valueOf(format.format(new Date( + Long.valueOf(list.get(i).getPublishOn() + "000")))); + if (day == today) { + todayNewsList.add(list.get(i)); + } else { + beforeNewsList.add(list.get(i)); + } + } + + refreshCount(); + } else { + for (int i = 0, size = list.size(); i < size; i++) { + int day = Integer.valueOf(format.format(new Date(Long.valueOf(list + .get(i).getPublishOn() + "000")))); + if (day == today) { + todayNewsList.add(list.get(i)); + if (todayNewsList.size() == 1) { + position_today = 0; + notifyItemRangeInserted(0, 2); + } else { + notifyItemInserted(todayNewsList.size()); + } + } else { + beforeNewsList.add(list.get(i)); + if (beforeNewsList.size() == 1 && position_before == -1) { + if (position_today == -1) { + position_before = 0; + notifyItemRangeInserted(0, 2); + } else if (position_today == -1) { + position_before = todayNewsList.size() + 1; + notifyItemRangeChanged(position_before, 2); + } + } else { + notifyItemInserted(getItemCount() - 2); + } + } } } + + if (news_pb_loading != null && news_pb_loading.getVisibility() == View.VISIBLE) { + news_pb_loading.setVisibility(View.GONE); + } + + if (list.size() < 20) { + isRemove = true; + notifyItemChanged(getItemCount() - 1); + } + isLoading = false; -// isLoaded = true; -// notifyItemChanged(getItemCount() - 1); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { isLoading = false; - Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); - isNetworkError = true; - notifyItemChanged(getItemCount() - 1); + // 无网络连接和访问超时 + if (error.getClass().equals(NoConnectionError.class) + || error.getClass().equals(TimeoutError.class)) { + if (offset == 0) { + Toast.makeText(context, "获取攻略失败", Toast.LENGTH_SHORT).show(); + if (news_pb_loading != null && news_pb_loading.getVisibility() == View.VISIBLE) { + news_pb_loading.setVisibility(View.GONE); + } + news_list.setVisibility(View.GONE); + ll_noconnection.setVisibility(View.VISIBLE); + } else { + Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); + isNetworkError = true; + notifyItemChanged(getItemCount() - 1); + } + } } }); - AppController.addToRequestQueue(request, NewsFragment.class); + AppController.addToRequestQueue(request, News3Fragment.class); } - private void addDatas(List datas) { - final int dataSize = datas.size(); - // 去重 - for (int i = 0; i < datas.size(); i++) { - String id = datas.get(i).getId(); + //去除重复数据 + private List removeDuplicate(List list) { + for (int i = 0, size = list.size(); i < size; i++) { + String id = list.get(i).getId(); final int index = i; if (!todayNewsList.isEmpty()) { for (int j = 0; j < todayNewsList.size(); j++) { if (id.equals(todayNewsList.get(j).getId())) { - datas.remove(i); + list.remove(i); i--; break; } @@ -230,7 +239,7 @@ public class News3FragmentAdapter extends if (!beforeNewsList.isEmpty()) { for (int j = 0; j < beforeNewsList.size(); j++) { if (id.equals(beforeNewsList.get(j).getId())) { - datas.remove(i); + list.remove(i); i--; break; } @@ -240,35 +249,7 @@ public class News3FragmentAdapter extends } } } - - if (dataSize < 20 && datas.size() == 0) { - isRemove = true; - notifyItemChanged(getItemCount() - 1); - } - - SimpleDateFormat format = new SimpleDateFormat("Mdd", Locale.getDefault()); - int today = Integer.valueOf(format.format(new Date())); - - for (int i = 0, size = datas.size(); i < size; i++) { - int day = Integer.valueOf(format.format(new Date(Long.valueOf(datas - .get(i).getPublishOn() + "000")))); - if (day == today) { - todayNewsList.add(datas.get(i)); - notifyItemInserted(getItemCount() - 2); - } else { - beforeNewsList.add(datas.get(i)); - if (beforeNewsList.size() == 1 && position_before == -1) { - if (position_today != -1) { - position_before = todayNewsList.size() + 1; - } else if (position_today == -1) { - position_before = 0; - } - notifyItemRangeChanged(getItemCount() - 2, getItemCount()); - } else { - notifyItemInserted(getItemCount() - 2); - } - } - } + return list; } private void refreshCount() { @@ -287,15 +268,17 @@ public class News3FragmentAdapter extends position_before = 0; } } + if (position_today != -1) { - relativeLayout.setVisibility(View.VISIBLE); - textView.setText("今天"); - textView.setBackgroundResource(R.drawable.title_red); + news_rl_label.setVisibility(View.VISIBLE); + news_tv_label.setText("今天"); + news_tv_label.setBackgroundResource(R.drawable.title_red); } else if (position_before != -1) { - relativeLayout.setVisibility(View.VISIBLE); - textView.setText("昨天/以前"); - textView.setBackgroundResource(R.drawable.title_gray); + news_rl_label.setVisibility(View.VISIBLE); + news_tv_label.setText("昨天/以前"); + news_tv_label.setBackgroundResource(R.drawable.title_gray); } + notifyDataSetChanged(); } @@ -348,71 +331,77 @@ public class News3FragmentAdapter extends public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_TYPE.head) { - return new HeadViewHolder(layoutInflater.inflate( - R.layout.news_list_item_category, parent, false)); + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.news_list_item_category, parent, false); + return new HeadViewHolder(view); } else if (viewType == ITEM_TYPE.news_image) { - return new ImageNewsTypeViewHolder(layoutInflater.inflate( - R.layout.home_list_item_newsimage_type, parent, false)); + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.home_list_item_newsimage_type, parent, false); + return new ImageNewsTypeViewHolder(view); } else if (viewType == ITEM_TYPE.news_text) { - return new TextNewsTypeViewHolder(layoutInflater.inflate( - R.layout.home_list_item_newsnormal_type, parent, false), - viewType); + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.home_list_item_newsnormal_type, parent, false); + return new TextNewsTypeViewHolder(view); } else { - return new FooterViewHolder(layoutInflater.inflate( - R.layout.refresh_footerview, parent, false)); + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.gamedetails_item_loading, parent, false); + return new FooterViewHolder(view); } } - @Override - public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, - int position) { - if (viewHolder instanceof HeadViewHolder) { - ((HeadViewHolder) viewHolder).initViewHolder(position, viewHolder); - } else if (viewHolder instanceof ImageNewsTypeViewHolder) { - ((ImageNewsTypeViewHolder) viewHolder).initViewHolder(position); - } else if (viewHolder instanceof TextNewsTypeViewHolder) { - ((TextNewsTypeViewHolder) viewHolder).initViewHolder(position); - } else if (viewHolder instanceof FooterViewHolder) { - FooterViewHolder holder = (FooterViewHolder) viewHolder; + private class FooterViewHolder extends RecyclerView.ViewHolder { + + public ProgressBar item_pb_loading; + public TextView item_tv_loading; + + public FooterViewHolder(View view) { + super(view); + + item_pb_loading = (ProgressBar) view.findViewById(R.id.item_pb_loading); + item_tv_loading = (TextView) view.findViewById(R.id.item_tv_loading); + } + + public void initFooterViewHolder() { if (isNetworkError) { - holder.footerview_progressbar.setVisibility(View.GONE); - holder.footerview_tv_loading.setText("加载失败,点击重试"); - holder.itemView.setClickable(true); - holder.itemView.setOnClickListener(new OnClickListener() { + item_pb_loading.setVisibility(View.GONE); + item_tv_loading.setText("加载失败,点击重试"); + itemView.setClickable(true); + itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { isNetworkError = false; notifyItemChanged(getItemCount() - 1); - addList(); + addList(getAllListSize()); } }); } else if (isRemove) { - holder.footerview_progressbar.setVisibility(View.GONE); - holder.footerview_tv_loading.setText("加载完毕"); - holder.itemView.setClickable(false); - } -// else if (isLoaded) { -// holder.footerview_progressbar.setVisibility(View.GONE); -// holder.footerview_tv_loading.setText("点击加载更多"); -// holder.rootView.setClickable(true); -// holder.rootView.setOnClickListener(new OnClickListener() { -// @Override -// public void onClick(View v) { -// isLoaded = false; -// notifyItemChanged(getItemCount() - 1); -// addList(); -// } -// }); -// } - else { - holder.footerview_progressbar.setVisibility(View.VISIBLE); - holder.footerview_tv_loading.setText("加载中..."); - holder.itemView.setClickable(false); + item_pb_loading.setVisibility(View.GONE); + item_tv_loading.setText("加载完毕"); + itemView.setClickable(false); + } else { + item_pb_loading.setVisibility(View.VISIBLE); + item_tv_loading.setText("加载中..."); + itemView.setClickable(false); } } + + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { + if (viewHolder instanceof HeadViewHolder) { + ((HeadViewHolder) viewHolder).initViewHolder(position); + } else if (viewHolder instanceof ImageNewsTypeViewHolder) { + ((ImageNewsTypeViewHolder) viewHolder).initViewHolder(); + } else if (viewHolder instanceof TextNewsTypeViewHolder) { + ((TextNewsTypeViewHolder) viewHolder).initViewHolder(position); + } else if (viewHolder instanceof FooterViewHolder) { + ((FooterViewHolder) viewHolder).initFooterViewHolder(); + } } private class HeadViewHolder extends RecyclerView.ViewHolder { + public TextView headType; public HeadViewHolder(View v) { @@ -420,7 +409,7 @@ public class News3FragmentAdapter extends headType = (TextView) v.findViewById(R.id.tv_label); } - public void initViewHolder(int position, RecyclerView.ViewHolder viewHolder) { + public void initViewHolder(int position) { if (position == position_today) { headType.setText("今天"); @@ -435,19 +424,21 @@ public class News3FragmentAdapter extends } public class ImageNewsTypeViewHolder extends RecyclerView.ViewHolder { + private ImageView newsThumb; - private TextView newsMainTitle, newsSubTitle; - private View rootItem; + private TextView newsMainTitle; + private TextView newsSubTitle; public ImageNewsTypeViewHolder(View v) { super(v); - rootItem = v; + newsThumb = (ImageView) v.findViewById(R.id.news_thumb); newsMainTitle = (TextView) v.findViewById(R.id.news_main_title); newsSubTitle = (TextView) v.findViewById(R.id.news_sub_title); + } - public void initViewHolder(int position) { + public void initViewHolder() { final NewsEntity newsEntity = todayNewsList.get(0); ImageUtils.getInstance(context).display(newsEntity.getThumb(), newsThumb); String title = newsEntity.getTitle(); @@ -463,23 +454,22 @@ public class News3FragmentAdapter extends newsMainTitle.setText(title); newsSubTitle.setVisibility(View.GONE); } - rootItem.setOnClickListener(new OnClickListener() { + itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Map kv = new HashMap(); kv.put("文章类型", newsEntity.getType()); - kv.put("入口", type + "-今天"); - DataUtils.onEvent(context, "文章阅读-" + type, newsEntity.getTitle(), kv); + kv.put("入口", "攻略-今天"); + DataUtils.onEvent(context, "文章阅读-攻略", newsEntity.getTitle(), kv); Map map = new HashMap(); map.put("location", "今天"); map.put("createOn", System.currentTimeMillis() / 1000); map.put("news", newsEntity.getTitle()); - map.put("page", type); + map.put("page", "攻略"); DataCollectionManager.onEvent(context, "click-item", map); - NewsUtils.startNewsActivity(context, newsEntity, type - + "-今天"); + NewsUtils.startNewsActivity(context, newsEntity, "攻略-今天"); } }); } @@ -487,15 +477,12 @@ public class News3FragmentAdapter extends } private class TextNewsTypeViewHolder extends RecyclerView.ViewHolder { + public TextView newsType; public TextView newsTitle; - private int column; - private View rootItem; - public TextNewsTypeViewHolder(View v, int column) { + public TextNewsTypeViewHolder(View v) { super(v); - rootItem = v; - this.column = column; newsType = (TextView) v.findViewById(R.id.news_type); newsTitle = (TextView) v.findViewById(R.id.news_title); } @@ -503,18 +490,14 @@ public class News3FragmentAdapter extends public void initViewHolder(final int position) { NewsEntity newsEntity = null; String from = null; - if (column == ITEM_TYPE.news_text) { - if (position > position_today - && position <= todayNewsList.size() + position_today) { - newsEntity = todayNewsList.get(position - position_today - - 1); - from = "今天"; - } else if (position > position_before - && position <= beforeNewsList.size() + position_before) { - newsEntity = beforeNewsList.get(position - position_before - - 1); - from = "昨天/以前"; - } + if (position > position_today + && position <= todayNewsList.size() + position_today) { + newsEntity = todayNewsList.get(position - position_today - 1); + from = "今天"; + } else if (position > position_before + && position <= beforeNewsList.size() + position_before) { + newsEntity = beforeNewsList.get(position - position_before - 1); + from = "昨天/以前"; } if (newsEntity != null) { final NewsEntity entity = newsEntity; @@ -523,23 +506,22 @@ public class News3FragmentAdapter extends .getDrawableIdByType(entity.getType())); newsType.setText(entity.getType()); newsTitle.setText(entity.getTitle()); - rootItem.setOnClickListener(new OnClickListener() { + itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Map kv = new HashMap(); kv.put("文章类型", entity.getType()); - kv.put("入口", type + "-" + entrance); - DataUtils.onEvent(context, "文章阅读-" + type, entity.getTitle(), kv); + kv.put("入口", "攻略-" + entrance); + DataUtils.onEvent(context, "文章阅读-攻略", entity.getTitle(), kv); Map map = new HashMap(); map.put("location", entrance); map.put("createOn", System.currentTimeMillis() / 1000); map.put("news", entity.getTitle()); - map.put("page", type); + map.put("page", "攻略"); DataCollectionManager.onEvent(context, "click-item", map); - NewsUtils.startNewsActivity(context, entity, type + "-" - + entrance); + NewsUtils.startNewsActivity(context, entity, "攻略-" + entrance); } }); } @@ -555,10 +537,6 @@ public class News3FragmentAdapter extends return todayNewsList.size(); } - public int getBeforeSize() { - return beforeNewsList.size(); - } - public int getPosition_today() { return position_today; } @@ -579,10 +557,6 @@ public class News3FragmentAdapter extends return isLoading; } - public void setLoading(boolean isLoading) { - this.isLoading = isLoading; - } - public boolean isNetworkError() { return isNetworkError; } diff --git a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java index 263902cbf6..4213d0c688 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java @@ -1,21 +1,28 @@ package com.gh.gamecenter.news; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import android.widget.TextView; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.view.VerticalItemDecoration; +import com.gh.gamecenter.ConcernActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBConcernChanged; import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.eventbus.EBUISwitch; + +import de.greenrobot.event.EventBus; /** * Created by khy on 2016/6/29. @@ -24,57 +31,49 @@ public class News4Fragment extends Fragment { private View view; private RecyclerView news_list; - private LinearLayoutManager layoutManager; private News4FragmentAdapter adapter; - private LinearLayout news_ll_loading, reuse_no_connection; - - private boolean isDestroy; + private ProgressBarCircularIndeterminate news_pb_loading; + private LinearLayout reuse_no_connection; + private TextView news_tv_none; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.fragment_news_or_raiders, null); + view = View.inflate(getActivity(), R.layout.fragment_news3, null); + + news_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.news_pb_loading); + + news_tv_none = (TextView) view.findViewById(R.id.news_tv_none); + news_tv_none.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(getActivity(), ConcernActivity.class)); + } + }); - news_list = (RecyclerView) view.findViewById(R.id.news_list); - news_ll_loading = (LinearLayout) view.findViewById(R.id.news_ll_loading); reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - news_list.setVisibility(View.GONE); - news_ll_loading.setVisibility(View.VISIBLE); + news_list.setVisibility(View.VISIBLE); + news_pb_loading.setVisibility(View.VISIBLE); reuse_no_connection.setVisibility(View.GONE); adapter = new News4FragmentAdapter(getActivity(), news_list, - news_ll_loading, reuse_no_connection); + news_pb_loading, reuse_no_connection, news_tv_none, true); news_list.setAdapter(adapter); } }); + news_list = (RecyclerView) view.findViewById(R.id.news_list); news_list.setHasFixedSize(true); - layoutManager = new LinearLayoutManager( getActivity()); - news_list.setLayoutManager(layoutManager); - + news_list.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new News4FragmentAdapter(getActivity(), news_list, - news_ll_loading, reuse_no_connection); - + news_pb_loading, reuse_no_connection, news_tv_none, false); news_list.setAdapter(adapter); - news_list.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - v.performClick(); - } - if (news_ll_loading.getVisibility() == View.VISIBLE) { - return true; - } else { - return false; - } - } - }); news_list.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); + EventBus.getDefault().register(this); } @Nullable @@ -87,18 +86,36 @@ public class News4Fragment extends Fragment { return view; } + //关注改变事件 public void onEventMainThread(EBConcernChanged busSeven) { - adapter.updateMyGameNews(); + adapter.update(); } + //安装、卸载事件 + public void onEventMainThread(EBPackage busFour) { + adapter.update(); + } + + //Fragment界面切换事件 + public void onEventMainThread(EBUISwitch busNine) { + if ("NewsFragment".equals(busNine.getFrom())) { + if (busNine.getPosition() == 3) { + if (news_pb_loading.getVisibility() == View.VISIBLE) { + adapter.load(); + } + } + } + } + + //连接上网络事件 public void onEventMainThread(EBNetworkState busNetworkState) { if (busNetworkState.isNetworkConnected()) { if (reuse_no_connection.getVisibility() == View.VISIBLE) { - news_list.setVisibility(View.GONE); - news_ll_loading.setVisibility(View.VISIBLE); + news_list.setVisibility(View.VISIBLE); + news_pb_loading.setVisibility(View.VISIBLE); reuse_no_connection.setVisibility(View.GONE); adapter = new News4FragmentAdapter(getActivity(), news_list, - news_ll_loading, reuse_no_connection); + news_pb_loading, reuse_no_connection, news_tv_none, true); news_list.setAdapter(adapter); } } @@ -107,12 +124,12 @@ public class News4Fragment extends Fragment { @Override public void onDestroy() { super.onDestroy(); - isDestroy = true; - AppController.canclePendingRequests(NewsFragment.class); + AppController.canclePendingRequests(News4Fragment.class); + EventBus.getDefault().unregister(this); + view = null; news_list = null; - layoutManager = null; adapter = null; - news_ll_loading = null; + news_pb_loading = null; reuse_no_connection = null; } } diff --git a/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java index a45c5dc78b..0c51a209f4 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java @@ -11,12 +11,10 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import android.widget.Toast; -import com.android.volley.NoConnectionError; import com.android.volley.Response; -import com.android.volley.TimeoutError; import com.android.volley.VolleyError; +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.AppController; import com.gh.common.constant.Config; import com.gh.common.constant.Constants; @@ -25,6 +23,7 @@ import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.NewsUtils; import com.gh.common.util.TimestampUtils; +import com.gh.common.util.Utils; import com.gh.gamecenter.ConcernActivity; import com.gh.gamecenter.GameDetailsActivity; import com.gh.gamecenter.R; @@ -66,50 +65,70 @@ public class News4FragmentAdapter extends RecyclerView.Adapter { public static class ITEM_TYPE { - public static final int game_type = 1;// 游戏布局类型 - public static final int game_text = 2;// 游戏新闻列表类型 - public static final int refresh_footer = 3;// 刷新布局类型 + public static final int GAME = 1;// 游戏布局类型 + public static final int NEWS = 2;// 游戏新闻列表类型 + public static final int FOOTER = 3;// 刷新布局类型 } - private int count_game = 0;// 游戏+游戏新闻 的数目 + private Context context; + + private RecyclerView news_list; + private ProgressBarCircularIndeterminate news_pb_loading; + private LinearLayout reuse_no_connection; + private TextView news_tv_none; - private ConcernManager concernManager; private List concernList; private List concernGameList; private ArrayMap> concernNewsMap; - private boolean isNetworkError = false; + private ConcernManager concernManager; - private LayoutInflater layoutInflater; - private Context context; + private int count_game;// 游戏+游戏新闻 的数目 - private RecyclerView recyclerView; - private LinearLayout ll_loading, ll_noconnection; - - public News4FragmentAdapter(Context con, RecyclerView recyclerView, - LinearLayout linearLayout1, LinearLayout linearLayout2) { + public News4FragmentAdapter(Context con, + RecyclerView recyclerView, + ProgressBarCircularIndeterminate pbLoading, + LinearLayout linearLayout, + TextView textView, + boolean isLoad) { context = con; - - this.recyclerView = recyclerView; - ll_loading = linearLayout1; - ll_noconnection = linearLayout2; + news_list = recyclerView; + news_pb_loading = pbLoading; + reuse_no_connection = linearLayout; + news_tv_none = textView; concernManager = new ConcernManager(context); - this.layoutInflater = LayoutInflater.from(context); + concernGameList = new ArrayList(); + concernNewsMap = new ArrayMap>(); - // 获取关注的信息 - concernList = concernManager.getAllConcernBySort(); + concernList = new ArrayList(); - if (concernList != null && !concernList.isEmpty()) { - sortList(); - initConcernNews(); - } else { - refreshCount(); - showRecyclerView(); + count_game = 0; + + if (isLoad) { + load(); } } - private void sortList() { + public void load() { + new Thread(new Runnable() { + @Override + public void run() { + // 获取关注的信息 + concernList = concernManager.getAllConcernBySort(); + if (concernList != null && !concernList.isEmpty()) { + sortList(concernList); + initGameNews(); + } else { + news_list.setVisibility(View.GONE); + news_pb_loading.setVisibility(View.GONE); + news_tv_none.setVisibility(View.VISIBLE); + } + } + }).start(); + } + + private void sortList(List list) { Comparator comparator = new Comparator() { @Override public int compare(ConcernInfo lhs, ConcernInfo rhs) { @@ -131,30 +150,130 @@ public class News4FragmentAdapter extends return 0; } } + } }; - Collections.sort(concernList, comparator); + Collections.sort(list, comparator); } - public void updateMyGameNews() { - ll_loading.setVisibility(View.VISIBLE); - concernList = concernManager.getAllConcernBySort(); - if (concernList != null && !concernList.isEmpty()) { - sortList(); - initConcernNews(); - } else { - ll_loading.setVisibility(View.GONE); - refreshCount(); + private int count; + + private void initGameNews() { + final List cList = new ArrayList(); + count = 0; + final int size = concernList.size(); + for (int i = 0; i < size; i++) { + final int index = i; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( + TimestampUtils.addTimestamp( + Config.HOST + "v1d45/game/" + concernList.get(i).getId() + + "/news?limit=3&offset=0", Constants.NEWS_CD), + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Gson gson = new Gson(); + Type listType = new TypeToken>() {}.getType(); + List list = gson.fromJson(response.toString(), listType); + if (list != null && !list.isEmpty()) { + cList.add(concernList.get(index)); + concernNewsMap.put(concernList.get(index).getGameName(), list); + } + count++; + if (count == size) { + refresh(cList); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + count++; + if (count == size) { + refresh(cList); + } + } + }); + AppController.addToRequestQueue(request, News4Fragment.class); } } - private void showRecyclerView() { - recyclerView.setVisibility(View.VISIBLE); - ll_loading.setVisibility(View.GONE); + private void refresh(List list) { + if (list.isEmpty()) { + news_list.setVisibility(View.GONE); + news_pb_loading.setVisibility(View.GONE); + news_tv_none.setVisibility(View.VISIBLE); + } else { + concernList = list; + List ids = new ArrayList(); + for (int i = 0; i < concernList.size(); i++) { + ids.add(concernList.get(i).getId()); + } + news_list.setVisibility(View.VISIBLE); + news_pb_loading.setVisibility(View.GONE); + refreshCount(); + initGame(ids); + } + } + + private void initGame(List ids) { + count = 0; + final int size = ids.size(); + for (int i = 0; i < size; i++) { + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( + TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/" + + ids.get(i) + "/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); + if (gameEntity != null) { + concernGameList.add(gameEntity); + } + count++; + if (count == size) { + processingGameData(); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + count++; + if (count == size) { + processingGameData(); + } + } + }); + AppController.addToRequestQueue(request, News4Fragment.class); + } + } + + private void processingGameData() { + if (!concernGameList.isEmpty()) { + List list = new ArrayList(); + for (int i = 0, size = concernList.size(); i < size; i++) { + String id = concernList.get(i).getId(); + for (GameEntity gameEntity : concernGameList) { + if (gameEntity.getId().equals(id)) { + list.add(gameEntity); + break; + } + } + } + concernGameList = list; + GameManager manager = new GameManager(context); + for (int i = 0, size = concernGameList.size(); i < size; i++) { + for (ApkEntity apkEntity : concernGameList.get(i).getApk()) { + manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), + concernGameList.get(i).getId(), concernGameList.get(i).getName())); + } + } + notifyDataSetChanged(); + } SuspectedGameManager manager = new SuspectedGameManager(context); List list = manager.getAllGame(); if (list != null && !list.isEmpty()) { - ll_loading.setVisibility(View.VISIBLE); + news_pb_loading.setVisibility(View.VISIBLE); List params = new ArrayList(); for (SuspectedGameInfo entity : list) { params.add(entity.getPackageName()); @@ -163,10 +282,8 @@ public class News4FragmentAdapter extends } } - private int iCount; - private void initSuspectedGame(final List params) { - iCount = 0; + count = 0; final List list = new ArrayList(); final List useParams = new ArrayList(); for (int i = 0, size = params.size(); i < size; i++) { @@ -179,12 +296,12 @@ public class News4FragmentAdapter extends @Override public void onResponse(JSONObject response) { - iCount++; + count++; if (response.length() != 0) { list.add(response); useParams.add(packageName); } - if (params.size() == iCount) { + if (params.size() == count) { processingData(list, params, useParams); } } @@ -192,10 +309,10 @@ public class News4FragmentAdapter extends @Override public void onErrorResponse(VolleyError error) { - iCount++; - if (params.size() == iCount) { + count++; + if (params.size() == count) { if (list.isEmpty()) { - ll_loading.setVisibility(View.GONE); + news_pb_loading.setVisibility(View.GONE); } else { processingData(list, params, useParams); } @@ -219,146 +336,31 @@ public class News4FragmentAdapter extends manager.updateByEntity(gameEntity, false); } - SuspectedGameManager suspectedGameManager = new SuspectedGameManager( - context); + SuspectedGameManager suspectedGameManager = new SuspectedGameManager(context); for (String packageName : params) { suspectedGameManager.deleteSuspectedGame(packageName); } if (data.size() > 0) { - updateMyGameNews(); + update(); } else { - ll_loading.setVisibility(View.GONE); + news_pb_loading.setVisibility(View.GONE); } } - private int count; - - private void initConcernNews() { - final List cList = new ArrayList(); - concernNewsMap = new ArrayMap>(); - count = concernList.size(); - for (int i = 0, size = concernList.size(); i < size; i++) { - final int index = i; - final int finalI = i; - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - TimestampUtils.addTimestamp( - Config.HOST + "v1d45/game/" - + concernList.get(i).getId() - + "/news?limit=3&offset=0", Constants.NEWS_CD), - new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - Gson gson = new Gson(); - Type listType = new TypeToken>() { - }.getType(); - List list = gson.fromJson( - response.toString(), listType); - if (list != null && !list.isEmpty()) { - cList.add(concernList.get(index)); - concernNewsMap.put(concernList.get(index) - .getGameName(), list); - } - refresh(cList); - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接和网络超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - Toast.makeText(context, "网络错误", Toast.LENGTH_SHORT).show(); - ll_loading.setVisibility(View.GONE); - } - } - }); - AppController.addToRequestQueue(request, NewsFragment.class); - } - } - - private void refresh(List cList) { - if (count != 1) { - count--; + public void update() { + news_pb_loading.setVisibility(View.VISIBLE); + concernList = concernManager.getAllConcernBySort(); + if (concernList != null && !concernList.isEmpty()) { + sortList(concernList); + initGameNews(); } else { - concernList = cList; - if (!concernList.isEmpty()) { - List ids = new ArrayList(); - for (int i = 0; i < concernList.size(); i++) { - ids.add(concernList.get(i).getId()); - } - initConcernDatas(ids); - } else { - refreshCount(); - showRecyclerView(); - } + news_list.setVisibility(View.GONE); + news_pb_loading.setVisibility(View.GONE); + news_tv_none.setVisibility(View.VISIBLE); } } - private void initConcernDatas(List ids) { - final List result = new ArrayList(); - final int count = ids.size(); - for (int i = 0, size = ids.size(); i < size; i++) { - JsonObjectExtendedRequest gameObjectRequest = new JsonObjectExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST + "v1d45/game/" - + ids.get(i) + "/digest", Constants.GAME_CD), - new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - result.add(response); - if (result.size() == count) { - processingConcernData(result); - } - } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - // 无网络连接和网络超时 - if (error.getClass().equals(NoConnectionError.class) - || error.getClass().equals(TimeoutError.class)) { - refreshCount(); - showRecyclerView(); - } - } - - }); - AppController.addToRequestQueue(gameObjectRequest, NewsFragment.class); - } - } - - private void processingConcernData(List data) { - Gson gson = new Gson(); - concernGameList = new ArrayList(); - for (int i = 0, size = data.size(); i < size; i++) { - JSONObject response = data.get(i); - concernGameList.add(gson.fromJson(response.toString(), - GameEntity.class)); - } - if (concernGameList != null && !concernGameList.isEmpty()) { - List list = new ArrayList(); - for (int i = 0, size = concernList.size(); i < size; i++) { - String id = concernList.get(i).getId(); - for (GameEntity gameEntity : concernGameList) { - if (gameEntity.getId().equals(id)) { - list.add(gameEntity); - break; - } - } - } - concernGameList = list; - GameManager manager = new GameManager(context); - for (int i = 0, size = concernGameList.size(); i < size; i++) { - for (ApkEntity apkEntity : concernGameList.get(i).getApk()) { - manager.addOrUpdate(new GameInfo(apkEntity.getPackageName(), - concernGameList.get(i).getId(), concernGameList - .get(i).getName())); - } - } - } - refreshCount(); - showRecyclerView(); - } - private void refreshCount() { count_game = 0; @@ -394,30 +396,33 @@ public class News4FragmentAdapter extends concernList.get(j).getGameName()).size() + 1); } if (position == offset) { - return ITEM_TYPE.game_type; + return ITEM_TYPE.GAME; } else if (position > offset && position <= concernNewsMap.get( concernList.get(i).getGameName()).size() + offset) { - return ITEM_TYPE.game_text; + return ITEM_TYPE.NEWS; } } } - return ITEM_TYPE.refresh_footer; + return ITEM_TYPE.FOOTER; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == ITEM_TYPE.game_type) { - return new GameNormalViewHolder(layoutInflater.inflate( - R.layout.news_list_item_gamenormal_type, parent, false)); - } else if (viewType == ITEM_TYPE.game_text) { - return new TextNewsTypeViewHolder(layoutInflater.inflate( - R.layout.home_list_item_newsnormal_type, parent, false), viewType); + if (viewType == ITEM_TYPE.GAME) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.news_list_item_gamenormal_type, parent, false); + return new GameNormalViewHolder(view); + } else if (viewType == ITEM_TYPE.NEWS) { + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.home_list_item_newsnormal_type, parent, false); + return new TextNewsTypeViewHolder(view); } else { - return new FooterViewHolder(layoutInflater.inflate( - R.layout.refresh_footerview, parent, false)); + View view = LayoutInflater.from(parent.getContext()).inflate( + R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view); } } @@ -442,14 +447,14 @@ public class News4FragmentAdapter extends } private class GameNormalViewHolder extends RecyclerView.ViewHolder { + public ImageView gameThumb; public TextView gameName; public LinearLayout labelList; - private View rootItem; public GameNormalViewHolder(View v) { super(v); - this.rootItem = v; + gameThumb = (ImageView) v.findViewById(R.id.news_game_thumb); gameName = (TextView) v.findViewById(R.id.news_game_name); labelList = (LinearLayout) v.findViewById(R.id.news_label_list); @@ -464,11 +469,10 @@ public class News4FragmentAdapter extends concernList.get(j).getGameName()).size() + 1); } if (position == offset) { - if (concernGameList == null) { + if (concernGameList.isEmpty()) { init(concernList.get(i)); } else { - init(concernGameList.get(i), concernList.get(i) - .getTag()); + init(concernGameList.get(i), concernList.get(i).getTag()); } } } @@ -476,14 +480,13 @@ public class News4FragmentAdapter extends } private void init(ConcernInfo concernEntity) { - ImageUtils.getInstance(context).display(concernEntity.getIcon(), - gameThumb); + ImageUtils.getInstance(context).display(concernEntity.getIcon(), gameThumb); gameName.setText(concernEntity.getGameName()); String tag = concernEntity.getTag(); if (tag != null) { GameViewUtils.setLabelList(context, labelList, tag); } - rootItem.setOnClickListener(new OnClickListener() { + itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -497,7 +500,7 @@ public class News4FragmentAdapter extends if (tag != null) { GameViewUtils.setLabelList(context, labelList, tag); } - rootItem.setOnClickListener(new OnClickListener() { + itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -513,8 +516,7 @@ public class News4FragmentAdapter extends DataCollectionManager.onEvent(context, "click-item", map); AppController.put("GameEntity", entry); - Intent intent = new Intent(context, - GameDetailsActivity.class); + Intent intent = new Intent(context, GameDetailsActivity.class); intent.putExtra("entrance", "关注-我的游戏"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); @@ -524,15 +526,13 @@ public class News4FragmentAdapter extends } private class TextNewsTypeViewHolder extends RecyclerView.ViewHolder { + public TextView newsType; public TextView newsTitle; - private int column; - private View rootItem; - public TextNewsTypeViewHolder(View v, int column) { + public TextNewsTypeViewHolder(View v) { super(v); - rootItem = v; - this.column = column; + newsType = (TextView) v.findViewById(R.id.news_type); newsTitle = (TextView) v.findViewById(R.id.news_title); } @@ -540,24 +540,18 @@ public class News4FragmentAdapter extends public void initViewHolder(final int position) { NewsEntity newsEntity = null; String from = null; - if (column == ITEM_TYPE.game_text) { - if (position >= 0 && position < count_game) { - for (int i = 0, size = concernList.size(); i < size; i++) { - int offset = 0; - for (int j = 0; j < i; j++) { - offset += (concernNewsMap.get( - concernList.get(j).getGameName()).size() + 1); - } - if (position > offset - && position <= concernNewsMap.get( - concernList.get(i).getGameName()) - .size() - + offset) { - newsEntity = concernNewsMap.get( - concernList.get(i).getGameName()).get( - position - offset - 1); - from = "我的游戏"; - } + if (position >= 0 && position < count_game) { + for (int i = 0, size = concernList.size(); i < size; i++) { + int offset = 0; + for (int j = 0; j < i; j++) { + offset += (concernNewsMap.get( + concernList.get(j).getGameName()).size() + 1); + } + if (position > offset && position <= concernNewsMap.get( + concernList.get(i).getGameName()).size() + offset) { + newsEntity = concernNewsMap.get( + concernList.get(i).getGameName()).get(position - offset - 1); + from = "我的游戏"; } } } @@ -568,7 +562,7 @@ public class News4FragmentAdapter extends .getDrawableIdByType(entity.getType())); newsType.setText(entity.getType()); newsTitle.setText(entity.getTitle()); - rootItem.setOnClickListener(new OnClickListener() { + itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Map kv = new HashMap(); @@ -591,11 +585,4 @@ public class News4FragmentAdapter extends } - public boolean isNetworkError() { - return isNetworkError; - } - - public void setNetworkError(boolean isNetworkError) { - this.isNetworkError = isNetworkError; - } } diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java index 89d7857806..c003d275e3 100644 --- a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java @@ -6,10 +6,12 @@ import android.content.SharedPreferences; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.util.DisplayMetrics; @@ -25,7 +27,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; @@ -40,6 +41,7 @@ import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.PackageManager; import java.util.HashMap; +import java.util.List; import java.util.Map; import de.greenrobot.event.EventBus; @@ -48,11 +50,18 @@ import de.greenrobot.event.EventBus; * Created by khy on 2016/6/29. */ public class NewsFragment extends Fragment implements View.OnClickListener, ViewPager.OnPageChangeListener { + private View view; - private ViewPager mViewPager; - private TextView tvZixun, tvYuanchuang, tvGonglve, tvGuanzhu; - private TextView downloadHint, searchHint; private View slideLine; + private ViewPager viewPager; + private TextView tvZixun; + private TextView tvYuanchuang; + private TextView tvGonglve; + private TextView tvGuanzhu; + private TextView downloadHint; + private TextView searchHint; + + private PopupWindow popWindow; private RelativeLayout.LayoutParams rparams; @@ -61,7 +70,13 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View private int width; private int currentItem; - private PopupWindow popWindow; + private Handler handler = new Handler(); + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt("currentItem", currentItem); + } @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -87,10 +102,15 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View initActionBar(); - tvGonglve = (TextView) view.findViewById(R.id.gonglue_text); - tvGuanzhu = (TextView) view.findViewById(R.id.guanzhu_text); tvZixun = (TextView) view.findViewById(R.id.zixun_text); tvYuanchuang = (TextView) view.findViewById(R.id.yuanchuang_text); + tvGonglve = (TextView) view.findViewById(R.id.gonglue_text); + tvGuanzhu = (TextView) view.findViewById(R.id.guanzhu_text); + + tvZixun.setOnClickListener(this); + tvYuanchuang.setOnClickListener(this); + tvGonglve.setOnClickListener(this); + tvGuanzhu.setOnClickListener(this); slideLine = view.findViewById(R.id.slide_line); DisplayMetrics outMetrics = new DisplayMetrics(); @@ -101,25 +121,59 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View DisplayUtils.dip2px(getActivity(), 2)); rparams.addRule(RelativeLayout.BELOW, R.id.plugin_ll_top); - tvZixun.setOnClickListener(this); - tvYuanchuang.setOnClickListener(this); - tvGonglve.setOnClickListener(this); - tvGuanzhu.setOnClickListener(this); + viewPager = (ViewPager) view.findViewById(R.id.news_vp); + viewPager.setAdapter(new FragmentAdapter(getChildFragmentManager())); + viewPager.addOnPageChangeListener(this); - mViewPager = (ViewPager) view.findViewById(R.id.news_vp); - mViewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager())); - mViewPager.addOnPageChangeListener(this); + currentItem = 0; + if (savedInstanceState != null) { + currentItem = savedInstanceState.getInt("currentItem"); + } + viewPager.setCurrentItem(currentItem); - rparams.leftMargin = width / 4; + rparams.leftMargin = width * currentItem + width / 4; slideLine.setLayoutParams(rparams); - tvZixun.setClickable(false); - tvYuanchuang.setClickable(true); - tvGonglve.setClickable(true); - tvGuanzhu.setClickable(true); - currentItem = mViewPager.getCurrentItem(); + if (currentItem == 0) { + tvZixun.setClickable(false); + tvYuanchuang.setClickable(true); + tvGonglve.setClickable(true); + tvGuanzhu.setClickable(true); + } else if (currentItem == 1) { + tvZixun.setClickable(true); + tvYuanchuang.setClickable(false); + tvGonglve.setClickable(true); + tvGuanzhu.setClickable(true); + } else if (currentItem == 2) { + tvZixun.setClickable(true); + tvYuanchuang.setClickable(true); + tvGonglve.setClickable(false); + tvGuanzhu.setClickable(true); + } else if (currentItem == 3) { + tvZixun.setClickable(true); + tvYuanchuang.setClickable(true); + tvGonglve.setClickable(true); + tvGuanzhu.setClickable(false); + } EventBus.getDefault().register(this); + + handler.postDelayed(new Runnable() { + @Override + public void run() { + EventBus.getDefault().post(new EBUISwitch("NewsFragment", viewPager.getCurrentItem())); + } + }, 100); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + if (container != null){ + container.removeView(view); + } + return view; } private void initActionBar() { @@ -128,17 +182,14 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View view.findViewById(R.id.actionbar_iv_search).setOnClickListener(this); if (Config.isShow) { - view.findViewById(R.id.actionbar_rl_download).setVisibility( - View.VISIBLE); + view.findViewById(R.id.actionbar_rl_download).setVisibility(View.VISIBLE); } else { - view.findViewById(R.id.actionbar_rl_download).setVisibility( - View.GONE); + view.findViewById(R.id.actionbar_rl_download).setVisibility(View.GONE); } downloadHint = (TextView) view.findViewById(R.id.action_tip); int updateSize = PackageManager.getUpdateListSize(); - int downloadSize = DownloadManager.getInstance(getActivity()).getAll() - .size(); + int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { downloadHint.setVisibility(View.VISIBLE); downloadHint.setText(downloadSize + ""); @@ -178,14 +229,29 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View } } - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - if (container != null){ - container.removeView(view); + public class FragmentAdapter extends FragmentPagerAdapter{ + + public FragmentAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int i) { + if (i == 0) { + return new News1Fragment(); + } else if (i == 1) { + return new News2Fragment(); + } else if (i == 2) { + return new News3Fragment(); + } else { + return new News4Fragment(); + } + } + + @Override + public int getCount() { + return 4; } - return view; } @Override @@ -258,28 +324,25 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View popWindow.dismiss(); startActivity(new Intent(getActivity(), SettingActivity.class)); } else if (id == R.id.zixun_text) { - mViewPager.setCurrentItem(0); + viewPager.setCurrentItem(0); } else if (id == R.id.yuanchuang_text) { - mViewPager.setCurrentItem(1); + viewPager.setCurrentItem(1); } else if (id == R.id.gonglue_text) { - mViewPager.setCurrentItem(2); + viewPager.setCurrentItem(2); } else if (id == R.id.guanzhu_text) { - mViewPager.setCurrentItem(3); + viewPager.setCurrentItem(3); } } 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); + View popView = View.inflate(getActivity(), R.layout.menu_popwindow, null); popView.findViewById(R.id.menu_rl_set).setOnClickListener(this); popWindow = new PopupWindow(popView, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, true); @@ -289,8 +352,7 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View 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); } @@ -301,13 +363,13 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View rparams.leftMargin = (int) (width * (position + positionOffset) + width / 4); slideLine.setLayoutParams(rparams); } else { - if (currentItem != mViewPager.getCurrentItem()) { - currentItem = mViewPager.getCurrentItem(); - Utils.log("currentItem = " + currentItem); - EventBus.getDefault().post(new EBUISwitch("GameFragment", currentItem)); + if (currentItem != viewPager.getCurrentItem()) { + currentItem = viewPager.getCurrentItem(); + EventBus.getDefault().post(new EBUISwitch("NewsFragment", currentItem)); } } } + @Override public void onPageSelected(int position) { if (position == 0) { @@ -355,6 +417,15 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View } + public void onEventMainThread(EBUISwitch busNine) { + if ("MainActivity".equals(busNine.getFrom())) { + if (busNine.getPosition() == 1) { + EventBus.getDefault().post( + new EBUISwitch("NewsFragment", viewPager.getCurrentItem())); + } + } + } + public void onEventMainThread(EBTopState busTen) { if ("搜索".equals(busTen.getType())) { hint = busTen.getSearchHint(); @@ -375,8 +446,7 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View } 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) + ""); @@ -408,30 +478,41 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View } } - public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ - - public MyFragmentPagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int i) { - if (i == 0) { - return new News1Fragment(); - } else if (i == 1) { - return new News2Fragment(); - } else if (i == 2) { - return new News3Fragment(); + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + List list = getChildFragmentManager().getFragments(); + if (list != null) { + if (hidden) { + for (Fragment fragment : getChildFragmentManager().getFragments()) { + transaction.hide(fragment); + } } else { - return new News4Fragment(); + for (Fragment fragment : getChildFragmentManager().getFragments()) { + transaction.show(fragment); + } } } - - @Override - public int getCount() { - return 4; - } + transaction.commit(); } + @Override + public void onDestroy() { + super.onDestroy(); + view = null; + slideLine = null; + viewPager = null; + tvZixun = null; + tvYuanchuang = null; + tvGonglve = null; + tvGuanzhu = null; + downloadHint = null; + searchHint = null; + popWindow = null; + rparams = null; + hint = null; + handler = null; + } } diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragmentAdapter.java index 199473c748..3d6ca5e8ec 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragmentAdapter.java @@ -1,6 +1,5 @@ package com.gh.gamecenter.personal; -import android.app.Dialog; import android.content.Intent; import android.graphics.Color; import android.graphics.Rect; @@ -18,8 +17,6 @@ import android.support.v4.widget.ContentLoadingProgressBar; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; -import android.text.Html; -import android.text.Spanned; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.SparseArray; @@ -29,7 +26,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; @@ -46,6 +42,7 @@ 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.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.FileUtils; import com.gh.common.util.ImageUtils; @@ -1216,35 +1213,9 @@ public class PersonalFragmentAdapter extends private void showPluginDialog(final ApkEntity apkEntity, final String gameName, final PlatformViewAdapter adapter, final int location) { - final Dialog dialog = new Dialog(fragmentActivity); - View view = View.inflate(fragmentActivity, - R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("插件化安装"); - TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); - Spanned spanned = Html.fromHtml("您将进行插件化安装以实现插件功能,此过程将" - + "卸载" + "当前使用的版本并" - + "安装插件版本" + "。"); - content.setText(spanned); - - TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); - cancel.setText("取消"); - cancel.setOnClickListener(new OnClickListener() { + DialogUtils.showPluginDialog(fragmentActivity, new DialogUtils.ConfiremListener() { @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - TextView confirm = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - confirm.setText("确定"); - confirm.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - + public void onConfirem() { Map kv6 = new HashMap(); kv6.put("操作", "点击插件化安装完成"); DataUtils.onEvent(fragmentActivity, "插件化", gameName, kv6); @@ -1266,11 +1237,7 @@ public class PersonalFragmentAdapter extends fragmentActivity.startActivity(PackageUtils.getUninstallIntent(fragmentActivity, path)); } } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); + }, null); } public void updateItem(EBDownloadDelete busThree) { diff --git a/app/src/main/res/layout/activity_hotcard.xml b/app/src/main/res/layout/activity_hotcard.xml deleted file mode 100644 index 0b69bed99f..0000000000 --- a/app/src/main/res/layout/activity_hotcard.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_original.xml b/app/src/main/res/layout/activity_original.xml deleted file mode 100644 index b3f67c4138..0000000000 --- a/app/src/main/res/layout/activity_original.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ 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/fragment_news_or_raiders.xml b/app/src/main/res/layout/fragment_news3.xml similarity index 61% rename from app/src/main/res/layout/fragment_news_or_raiders.xml rename to app/src/main/res/layout/fragment_news3.xml index 7a9d28752b..8d1be9d77e 100644 --- a/app/src/main/res/layout/fragment_news_or_raiders.xml +++ b/app/src/main/res/layout/fragment_news3.xml @@ -2,6 +2,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > + @@ -9,32 +10,15 @@ + android:layout_height="match_parent" > - - - - - - + android:background="@color/theme_colors" /> + + + \ 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" /> diff --git a/app/src/main/res/layout/home_list_item_newsimage_type.xml b/app/src/main/res/layout/home_list_item_newsimage_type.xml index 321f2bf231..7092afe7cf 100644 --- a/app/src/main/res/layout/home_list_item_newsimage_type.xml +++ b/app/src/main/res/layout/home_list_item_newsimage_type.xml @@ -33,7 +33,6 @@ android:id="@+id/news_sub_title" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginRight="39dp" android:ellipsize="end" android:gravity="right" android:maxLines="1"