diff --git a/app/src/main/java/com/gh/base/BaseFragment.java b/app/src/main/java/com/gh/base/BaseFragment.java new file mode 100644 index 0000000000..e2bc77b364 --- /dev/null +++ b/app/src/main/java/com/gh/base/BaseFragment.java @@ -0,0 +1,72 @@ +package com.gh.base; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.common.util.Utils; + +import java.lang.reflect.Field; + +import de.greenrobot.event.EventBus; + +/** + * Created by LGT on 2016/9/4. + */ +public class BaseFragment extends Fragment { + + protected View view; + + protected boolean isDestroy; + + protected void init(int layout) { + view = View.inflate(getActivity(), layout, null); + + //简化findViewById + try { + Class clazz = this.getClass(); + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + int id = Utils.getId(field.getName()); + if (id != -1) { + Utils.log("reflect name = " + field.getName()); + field.setAccessible(true); + Class fieldType = field.getType(); + Object injectedValue = fieldType.cast(view.findViewById(id)); + field.set(this, injectedValue); + field.setAccessible(false); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + isDestroy = false; + 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; + } + + @Override + public void onDestroy() { + super.onDestroy(); + view = null; + isDestroy = true; + EventBus.getDefault().unregister(this); + } +} 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 786ec70b66..6b7ac74584 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -56,18 +56,17 @@ public class DownloadItemUtils { } // 更新下载进度条 - public static void processDate(GameEntity detailedEntity, + public static void processDate(Context context, + GameEntity detailedEntity, DownloadEntry downloadEntry, - ArrayMap> platformMap, - Handler handler, RecyclerView.Adapter adapter, int index, ArrayMap statusMap) { - LinkedBlockingQueue queue = platformMap.get(downloadEntry.getName()); + LinkedBlockingQueue queue = DownloadManager.getInstance(context).getQueue(downloadEntry.getName()); if (queue == null) { queue = new LinkedBlockingQueue<>(); - platformMap.put(downloadEntry.getName(), queue); + DownloadManager.getInstance(context).putQueue(downloadEntry.getName(), queue); } String platform = downloadEntry.getMeta().get("platform"); @@ -93,7 +92,7 @@ public class DownloadItemUtils { Message msg = Message.obtain(); msg.obj = downloadEntry.getName(); msg.what = Constants.DOWNLOAD_ROLL; - handler.sendMessageDelayed(msg, 3000); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 3000); } } if (platform.equals(queue.peek())) { @@ -170,7 +169,6 @@ public class DownloadItemUtils { TextView download_percentage, TextView downloadBtn, GameEntity entity, - ArrayMap> platformMap, ArrayMap statusMap, boolean isShowPlatform) { @@ -228,7 +226,7 @@ public class DownloadItemUtils { DownloadEntry downloadEntry; - LinkedBlockingQueue queue = platformMap.get(entity.getName()); + LinkedBlockingQueue queue = DownloadManager.getInstance(context).getQueue(entity.getName()); if (queue != null && !queue.isEmpty()) { downloadEntry = entryMap.get(queue.peek()); } else { @@ -342,7 +340,6 @@ public class DownloadItemUtils { TextView download_percentage, TextView downloadBtn, GameEntity entity, - ArrayMap> platformMap, ArrayMap statusMap, boolean isShowPlatform) { @@ -363,7 +360,7 @@ public class DownloadItemUtils { download_percentage, downloadBtn, entity, statusMap, isShowPlatform); } else { updatePluginItem(context, textView, game_progressbar, game_ll_info, download_speed, - download_percentage, downloadBtn, entity, platformMap, statusMap, isShowPlatform); + download_percentage, downloadBtn, entity, statusMap, isShowPlatform); } } @@ -376,10 +373,9 @@ public class DownloadItemUtils { TextView download_percentage, TextView downloadBtn, GameEntity entity, - ArrayMap> platformMap, ArrayMap statusMap) { updateItem(context, textView, game_progressbar, game_ll_info, download_speed, - download_percentage, downloadBtn, entity, platformMap, statusMap, true); + download_percentage, downloadBtn, entity, statusMap, true); } public static void setNormalOnClickListener(final Context context, @@ -483,28 +479,9 @@ public class DownloadItemUtils { int position, RecyclerView.Adapter adapter, ArrayMap statusMap, - ArrayMap> platformMap, String entrance, DismissEntity dismissEntity, String location) { - setOnClickListener(context, downloadBtn, download_speed, download_percentage, - entity, position, adapter, statusMap, platformMap, entrance, true, - dismissEntity, location); - } - - public static void setOnClickListener(Context context, - TextView downloadBtn, - TextView download_speed, - TextView download_percentage, - GameEntity entity, - int position, - RecyclerView.Adapter adapter, - ArrayMap statusMap, - ArrayMap> platformMap, - String entrance, - boolean isShowPlatform, - DismissEntity dismissEntity, - String location) { if (entity.getApk().size() == 1) { setNormalOnClickListener(context, downloadBtn, entity, position, adapter, statusMap, entrance); 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 9a1f75b98f..2df32076b7 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -686,12 +686,12 @@ public class DownloadDialog { || clickCollectionPosition != location && clickCollectionPosition != -1){ llCollection.setVisibility(View.VISIBLE); showCollectionLayout(apkEntity.getApkCollection()); - viewHolder.download_item_open_collection.setImageResource(R.drawable.colse_collection); + viewHolder.download_item_open_collection.setImageResource(R.drawable.collection_colse); colseCollectionPosition = location; notifyDataSetChanged(); } else { llCollection.setVisibility(View.GONE); - viewHolder.download_item_open_collection.setImageResource(R.drawable.open_collection); + viewHolder.download_item_open_collection.setImageResource(R.drawable.collection_open); } clickCollectionPosition = location; } else if (viewHolder.download_item_tv_status.getVisibility() == View.GONE) { @@ -919,9 +919,9 @@ public class DownloadDialog { ImageUtils.getInstance(context).display(apkEntity.getApkCollection().getIcon(),viewHolder.download_item_iv_pic); viewHolder.download_item_open_collection.setVisibility(View.VISIBLE); if (colseCollectionPosition == location){ - viewHolder.download_item_open_collection.setImageResource(R.drawable.colse_collection); + viewHolder.download_item_open_collection.setImageResource(R.drawable.collection_colse); }else { - viewHolder.download_item_open_collection.setImageResource(R.drawable.open_collection); + viewHolder.download_item_open_collection.setImageResource(R.drawable.collection_open); } } } diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index b207164df8..830ce05707 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -14,6 +14,7 @@ import com.gh.common.util.Utils; import java.io.File; import java.util.List; import java.util.Map.Entry; +import java.util.concurrent.LinkedBlockingQueue; public class DownloadManager { @@ -23,11 +24,13 @@ public class DownloadManager { private Handler handler; private ArrayMap lastTimeMap; + private ArrayMap> platformMap; private DownloadManager(Context context) { this.context = context; - lastTimeMap = new ArrayMap(); + lastTimeMap = new ArrayMap<>(); + platformMap = new ArrayMap<>(); handler = new Handler(context.getMainLooper()){ @Override @@ -42,6 +45,16 @@ public class DownloadManager { if (System.currentTimeMillis() - lastTimeMap.get(url) >= 1000) { pause(url); } + } else if (msg.what == Constants.DOWNLOAD_ROLL) { + String name = (String) msg.obj; + LinkedBlockingQueue queue = platformMap.get(name); + if (queue.size() > 1) { + queue.offer(queue.poll()); + Message message = Message.obtain(); + message.obj = name; + message.what = Constants.DOWNLOAD_ROLL; + sendMessageDelayed(message, 3000); + } } } }; @@ -52,6 +65,22 @@ public class DownloadManager { lastTimeMap.put(url, time); } + public void putQueue(String name, LinkedBlockingQueue queue) { + platformMap.put(name, queue); + } + + public LinkedBlockingQueue getQueue(String name) { + return platformMap.get(name); + } + + public void removePlatform(String name, String platform) { + LinkedBlockingQueue queue = platformMap.get(name); + if (queue != null) { + queue.remove(platform); + platformMap.put(name, queue); + } + } + public void sendMessageDelayed(Message msg, long delayMillis) { handler.sendMessageDelayed(msg, delayMillis); } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 5bc469c0ef..23a8401ee6 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -16,12 +16,14 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.NotificationCompat; import android.support.v4.util.ArrayMap; +import android.text.Html; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; @@ -104,12 +106,10 @@ public class MainActivity extends BaseFragmentActivity implements public static ArrayMap uninstallMap; public static String searchHint; - + private GameFragment gameFragment; private NewsFragment newsFragment; - - private GameFragment pluginFragmentActivity; - private PersonalFragment home3Fragment; - private View home1Layout, home2Layout, home3Layout; + private PersonalFragment personalFragment; + private LinearLayout home1Layout, home2Layout, home3Layout; private ImageView home1Image, home2Image, home3Image; private TextView home1Title, home2Title, home3Title; @@ -133,10 +133,8 @@ public class MainActivity extends BaseFragmentActivity implements // 黄壮华 添加观察者 修改2015/8/15 private DataWatcher dataWatcher = new DataWatcher() { @Override - public void onDataChanged( - HashMap downloadingEntries) { - for (Map.Entry entry : downloadingEntries - .entrySet()) { + public void onDataChanged(HashMap downloadingEntries) { + for (Map.Entry entry : downloadingEntries.entrySet()) { final DownloadEntry downloadEntry = entry.getValue(); // 链接被劫持 if (DownloadStatus.hijack.equals(downloadEntry.getStatus())) { @@ -145,7 +143,7 @@ public class MainActivity extends BaseFragmentActivity implements // 弹出提示框 EventBus.getDefault().post(new EBShowDialog("hijack")); //记录链接被劫持 - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("url", downloadEntry.getUrl()); map.put("game", downloadEntry.getName()); map.put("platform", downloadEntry.getMeta().get("platform")); @@ -154,10 +152,10 @@ public class MainActivity extends BaseFragmentActivity implements continue; } if (downloadEntry.getName().contains("光环助手") && isShowDownload) { - app_tv_speed.setText(SpeedUtils.getSpeed(downloadEntry.getSpeed()) - + "(剩" + SpeedUtils.getRemainTime(downloadEntry.getSize(), - downloadEntry.getProgress(), - downloadEntry.getSpeed() * 1024) + ")"); + app_tv_speed.setText(String.format("%s(剩%s)", + SpeedUtils.getSpeed(downloadEntry.getSpeed()), + SpeedUtils.getRemainTime(downloadEntry.getSize(), + downloadEntry.getProgress(), downloadEntry.getSpeed() * 1024))); app_pb_progress.setProgress((int) (downloadEntry .getPercent() * 10)); app_tv_percent.setText(downloadEntry.getPercent() + "%"); @@ -180,15 +178,12 @@ public class MainActivity extends BaseFragmentActivity implements } } else { - Map kv = new HashMap(); - kv.put("版本", downloadEntry.getMeta() - .get("platform")); + Map kv = new HashMap<>(); + kv.put("版本", downloadEntry.getMeta().get("platform")); kv.put("状态", "下载完成"); - String isUpdate = downloadEntry.getMeta().get( - "isUpdate"); - String entrance = downloadEntry.getMeta().get( - "entrance"); + String isUpdate = downloadEntry.getMeta().get("isUpdate"); + String entrance = downloadEntry.getMeta().get("entrance"); if (isUpdate != null && "true".equals(isUpdate)) { DataUtils.onEvent(MainActivity.this, "游戏更新", downloadEntry.getName(), kv); @@ -196,7 +191,7 @@ public class MainActivity extends BaseFragmentActivity implements DataUtils.onEvent(MainActivity.this, "游戏下载", downloadEntry.getName(), kv); - Map kv2 = new HashMap(); + Map kv2 = new HashMap<>(); kv2.put("版本", downloadEntry.getMeta().get("platform")); kv2.put("状态", "下载完成"); @@ -205,7 +200,7 @@ public class MainActivity extends BaseFragmentActivity implements downloadEntry.getName(), kv2); } if (downloadEntry.getMeta().get("isPlugin") != null) { - Map kv6 = new HashMap(); + Map kv6 = new HashMap<>(); kv6.put("下载", "下载完成"); kv6.put("版本", downloadEntry.getMeta().get("platform")); @@ -213,7 +208,7 @@ public class MainActivity extends BaseFragmentActivity implements downloadEntry.getName(), kv6); } - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("game", downloadEntry.getName()); if (downloadEntry.getMeta().get("isPlugin") != null) { map.put("method", "插件化"); @@ -399,9 +394,9 @@ public class MainActivity extends BaseFragmentActivity implements initViews(); setTabSelection(currentTab); - entryMap = new ArrayMap(); - doneMap = new ArrayMap(); - uninstallMap = new ArrayMap(); + uninstallMap = new ArrayMap<>(); + entryMap = new ArrayMap<>(); + doneMap = new ArrayMap<>(); getSearchHints(); @@ -429,18 +424,16 @@ public class MainActivity extends BaseFragmentActivity implements handler.postDelayed(new Runnable() { @Override public void run() { - ArrayList concernList = new ArrayList(); - ConcernManager concernManager = new ConcernManager( - MainActivity.this); + ArrayList concernList = new ArrayList<>(); + ConcernManager concernManager = new ConcernManager(MainActivity.this); for (ConcernInfo entity : concernManager.getAllConcern()) { if (entity.isConcern()) { concernList.add(entity.getGameName()); } } - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("type", Build.MODEL); - map.put("system", Build.VERSION.SDK_INT + "=" - + Build.VERSION.RELEASE); + map.put("system", Build.VERSION.SDK_INT + "=" + Build.VERSION.RELEASE); map.put("install", PackageManager.getInstalledList()); map.put("concern", concernList); map.put("createdOn", System.currentTimeMillis() / 1000); @@ -458,50 +451,52 @@ public class MainActivity extends BaseFragmentActivity implements String version = PackageUtils.getVersion(getApplicationContext()); String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this, getPackageName(), "TD_CHANNEL_ID"); String url = "http://api.ghzhushou.com/v1d45/hotfix?channel=" + TD_CHANNEL_ID + "&version=" + version; - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, new Response.Listener() { - @Override - public void onResponse(JSONArray response) { - Utils.log("hotfix = " + response.toString()); - try { - for (int i = 0; i < response.length(); i++) { - JSONObject jsonObject = response.getJSONObject(i); - String clazz = jsonObject.getString("class"); - final String url = jsonObject.getString("url"); - String fileName = url.substring(url.lastIndexOf("/")); - File directory = new File(getFilesDir().getAbsolutePath() + File.separator + "hotfix"); - if (!directory.exists() || !directory.isDirectory()) { - directory.mkdirs(); - } - File file = new File(directory.getAbsolutePath() + File.separator + fileName); - if (file.exists()) { - break; - } - //下载文件 - final String savePath = file.getAbsolutePath(); - new Thread(){ - @Override - public void run() { - try { - FileUtils.downloadFile(url, savePath); - } catch (IOException e) { - e.printStackTrace(); - } - Utils.log(savePath + " download success"); - } - }.start(); - //存储class - sp.edit().putString(file.getName(),clazz).apply(); - } - } catch (JSONException e) { - e.printStackTrace(); - } - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - Utils.log("hotfix = " + error.toString()); - } - }); + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Utils.log("hotfix = " + response.toString()); + try { + for (int i = 0; i < response.length(); i++) { + JSONObject jsonObject = response.getJSONObject(i); + String clazz = jsonObject.getString("class"); + final String url = jsonObject.getString("url"); + String fileName = url.substring(url.lastIndexOf("/")); + File directory = new File(getFilesDir().getAbsolutePath() + File.separator + "hotfix"); + if (!directory.exists() || !directory.isDirectory()) { + directory.mkdirs(); + } + File file = new File(directory.getAbsolutePath() + File.separator + fileName); + if (file.exists()) { + break; + } + //下载文件 + final String savePath = file.getAbsolutePath(); + new Thread(){ + @Override + public void run() { + try { + FileUtils.downloadFile(url, savePath); + } catch (IOException e) { + e.printStackTrace(); + } + Utils.log(savePath + " download success"); + } + }.start(); + //存储class + sp.edit().putString(file.getName(),clazz).apply(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Utils.log("hotfix = " + error.toString()); + } + }); AppController.addToRequestQueue(request, MainActivity.class); } @@ -510,82 +505,72 @@ public class MainActivity extends BaseFragmentActivity implements JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( Config.HOST + "v2/disclaimer", new Response.Listener() { - @Override public void onResponse(JSONObject response) { - Utils.log(response.toString()); if (!isDestroy) { try { boolean isShow = response.getBoolean("isShow"); - sp.edit() - .putBoolean("isShowDisclaimer", isShow) - .apply(); + sp.edit().putBoolean("isShowDisclaimer", isShow).apply(); if (isShow) { - String content = response - .getString("content"); - sp.edit().putString("disclaimer", content) - .apply(); + String content = response.getString("content"); + sp.edit().putString("disclaimer", content).apply(); if (isFirst) { DialogUtils.showDisclaimerDialog(MainActivity.this, content); } } } catch (JSONException e) { - e.printStackTrace(); } } } - }, new Response.ErrorListener() { + }, + new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - Utils.log(error.toString()); sp.edit().putBoolean("isShowDisclaimer", false).apply(); } }); AppController.addToRequestQueue(request, MainActivity.class); } - private Class intentClass(String to) { - Class aClass = null; + private Class intentClass(String to) { try { - aClass = Class.forName("com.gh.gamecenter."+to); + return Class.forName("com.gh.gamecenter." + to); } catch (ClassNotFoundException e) { e.printStackTrace(); } - - return aClass; + return null; } + Runnable runnable = new Runnable() { @Override public void run() { - String to = getIntent().getExtras().getString("to"); if(!TextUtils.isEmpty(to)){ - Intent toIntent = new Intent(getApplicationContext(),intentClass(to)); - - if("NewsActivity".equals(to)){ + Intent toIntent = new Intent(getApplicationContext(), intentClass(to)); + if ("NewsActivity".equals(to)) { toIntent.putExtra("newsId", getIntent().getExtras().getString("newsId")); toIntent.putExtra("entrance", getIntent().getExtras().getString("entrance")); - }else if("DownloadManagerActivity".equals(to)){ + } else if("DownloadManagerActivity".equals(to)) { toIntent.putExtra("packageName" , getIntent().getExtras().getString("packageName")); toIntent.putExtra("currentItem" , 1); - }else if ("GameDetailsActivity".equals(to)){ + } else if ("GameDetailsActivity".equals(to)) { toIntent.putExtra("gameId", getIntent().getExtras().getString("gameId")); toIntent.putExtra("entrance", getIntent().getExtras().getString("entrance")); - }else if ("SubjectActivity".equals(to)){ + } else if ("SubjectActivity".equals(to)) { toIntent.putExtra("id", getIntent().getExtras().getString("id")); toIntent.putExtra("name", getIntent().getExtras().getString("name")); toIntent.putExtra("order", getIntent().getExtras().getBoolean("order")); - }else if ("ViewImageActivity".equals(to)){ + } else if ("ViewImageActivity".equals(to)) { toIntent.putExtra("urls" , getIntent().getExtras().getStringArrayList("urls")); toIntent.putExtra("current" , getIntent().getExtras().getInt("current",0)); toIntent.putExtra("ScaleType" , getIntent().getExtras().getString("ScaleType")); } startActivity(toIntent); - }else { + } else { String from = getIntent().getStringExtra("from"); if (!TextUtils.isEmpty(from)) { if (from.equals("plugin")) { @@ -613,7 +598,7 @@ public class MainActivity extends BaseFragmentActivity implements JSONObject jsonObject = new JSONObject(getIntent() .getStringExtra("data")); JSONArray jsonArray = jsonObject.getJSONArray("apk"); - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject apk = jsonArray.getJSONObject(i); String packageName = apk.getString("package"); @@ -703,10 +688,8 @@ public class MainActivity extends BaseFragmentActivity implements + "&channel=" + TD_CHANNEL_ID; JsonObjectExtendedRequest updateRequest = new JsonObjectExtendedRequest( url, new Response.Listener() { - @Override public void onResponse(JSONObject response) { - Utils.log("update=" + response.toString()); if (!isDestroy) { if (response.length() != 0) { @@ -771,10 +754,10 @@ public class MainActivity extends BaseFragmentActivity implements } } - }, new Response.ErrorListener() { + }, + new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - Utils.log("update=" + error.toString()); } }); @@ -782,23 +765,23 @@ public class MainActivity extends BaseFragmentActivity implements } private void showUpdateDialog(final String md5) { - dialog = new Dialog(this); - View view = View.inflate(this, R.layout.app_update_hint_dialog, - null); - TextView content = (TextView) view - .findViewById(R.id.updeta_content); - TextView size = (TextView) view - .findViewById(R.id.update_app_size); - TextView versison = (TextView) view.findViewById(R.id.update_app_version); + final Dialog updateDialog = new Dialog(this); + View view = View.inflate(this, R.layout.app_update_hint_dialog, null); - versison.setText("光环助手V"+appEntity.getVersion()+"更新内容:"); - size.setText("大小:"+appEntity.getSize()); - content.setText(appEntity.getContent()+""); + TextView content = (TextView) view.findViewById(R.id.updeta_content); + content.setText(Html.fromHtml(appEntity.getContent())); + + TextView versison = (TextView) view.findViewById(R.id.update_app_version); + versison.setText(String.format("光环助手V%s更新内容:",appEntity.getVersion())); + + TextView size = (TextView) view.findViewById(R.id.update_app_size); + size.setText(String.format("大小:%s", appEntity.getSize())); if (appEntity.isIs_force()) { - dialog.setCanceledOnTouchOutside(false); - dialog.setCancelable(false); + updateDialog.setCanceledOnTouchOutside(false); + updateDialog.setCancelable(false); } + view.findViewById(R.id.update_cannel).setOnClickListener( new OnClickListener() { @Override @@ -806,7 +789,7 @@ public class MainActivity extends BaseFragmentActivity implements if (appEntity.isIs_force()) { finish(); } else { - dialog.dismiss(); + updateDialog.dismiss(); } } }); @@ -814,11 +797,10 @@ public class MainActivity extends BaseFragmentActivity implements new OnClickListener() { @Override public void onClick(View v) { - dialog.dismiss(); + updateDialog.dismiss(); String path = FileUtils.getDownloadPath( MainActivity.this, - "光环助手V" + appEntity.getVersion() + "_" + md5 - + ".apk"); + "光环助手V" + appEntity.getVersion() + "_" + md5 + ".apk"); File file = new File(path); if (file.exists() && file.length() > 0) { startActivity(PackageUtils.getInstallIntent(path)); @@ -828,9 +810,9 @@ public class MainActivity extends BaseFragmentActivity implements } } }); - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); + updateDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + updateDialog.setContentView(view); + updateDialog.show(); } private void showDownloadDialog(String md5) { @@ -878,7 +860,7 @@ public class MainActivity extends BaseFragmentActivity implements downloadEntry.setUrl(appEntity.getUrl()); downloadEntry.setName("光环助手V" + appEntity.getVersion()); downloadEntry.setPath(path); - HashMap meta = new HashMap(); + HashMap meta = new HashMap<>(); meta.put("platform", "官方版"); downloadEntry.setMeta(meta); @@ -926,15 +908,15 @@ public class MainActivity extends BaseFragmentActivity implements } private void initViews() { - home1Layout = findViewById(R.id.home1_layout); - home2Layout = findViewById(R.id.home2_layout); - home3Layout = findViewById(R.id.home3_layout); - home1Image = (ImageView) findViewById(R.id.message_image); - home2Image = (ImageView) findViewById(R.id.contacts_image); - home3Image = (ImageView) findViewById(R.id.news_image); - home1Title = (TextView) findViewById(R.id.message_title); - home2Title = (TextView) findViewById(R.id.contacts_title); - home3Title = (TextView) findViewById(R.id.news_title); + home1Layout = (LinearLayout) findViewById(R.id.main_ll_game); + home2Layout = (LinearLayout) findViewById(R.id.main_ll_news); + home3Layout = (LinearLayout) findViewById(R.id.main_ll_personal); + home1Image = (ImageView) findViewById(R.id.main_iv_game); + home2Image = (ImageView) findViewById(R.id.main_iv_news); + home3Image = (ImageView) findViewById(R.id.main_iv_personal); + home1Title = (TextView) findViewById(R.id.main_tv_game); + home2Title = (TextView) findViewById(R.id.main_tv_news); + home3Title = (TextView) findViewById(R.id.main_tv_personal); home1Layout.setOnClickListener(this); home2Layout.setOnClickListener(this); home3Layout.setOnClickListener(this); @@ -943,15 +925,15 @@ public class MainActivity extends BaseFragmentActivity implements @Override public void onClick(View v) { switch (v.getId()) { - case R.id.home1_layout: + case R.id.main_ll_game: EventBus.getDefault().post(new EBUISwitch("MainActivity", 0)); setTabSelection(0); break; - case R.id.home2_layout: + case R.id.main_ll_news: EventBus.getDefault().post(new EBUISwitch("MainActivity", 1)); setTabSelection(1); break; - case R.id.home3_layout: + case R.id.main_ll_personal: EventBus.getDefault().post(new EBUISwitch("MainActivity", 2)); setTabSelection(2); break; @@ -969,23 +951,23 @@ public class MainActivity extends BaseFragmentActivity implements home1Layout.setClickable(false); home1Image.setImageResource(R.drawable.home1_selected); home1Title.setTextColor(getResources().getColor(R.color.theme)); - if (pluginFragmentActivity == null) { + if (gameFragment == null) { List list = getSupportFragmentManager().getFragments(); if (list != null) { for (Fragment fragment : list) { if (fragment.getClass().equals(GameFragment.class)) { - pluginFragmentActivity = (GameFragment) fragment; - transaction.show(pluginFragmentActivity); + gameFragment = (GameFragment) fragment; + transaction.show(gameFragment); break; } } } - if (pluginFragmentActivity == null) { - pluginFragmentActivity = new GameFragment(); - transaction.add(R.id.main_content, pluginFragmentActivity); + if (gameFragment == null) { + gameFragment = new GameFragment(); + transaction.add(R.id.main_content, gameFragment); } } else { - transaction.show(pluginFragmentActivity); + transaction.show(gameFragment); } currentTab = 0; break; @@ -1017,23 +999,23 @@ public class MainActivity extends BaseFragmentActivity implements home3Layout.setClickable(false); home3Image.setImageResource(R.drawable.home3_selected); home3Title.setTextColor(getResources().getColor(R.color.theme)); - if (home3Fragment == null) { + if (personalFragment == null) { List list = getSupportFragmentManager().getFragments(); if (list != null) { for (Fragment fragment : list) { if (fragment.getClass().equals(PersonalFragment.class)) { - home3Fragment = (PersonalFragment) fragment; - transaction.show(home3Fragment); + personalFragment = (PersonalFragment) fragment; + transaction.show(personalFragment); break; } } } - if (home3Fragment == null) { - home3Fragment = new PersonalFragment(); - transaction.add(R.id.main_content, home3Fragment); + if (personalFragment == null) { + personalFragment = new PersonalFragment(); + transaction.add(R.id.main_content, personalFragment); } } else { - transaction.show(home3Fragment); + transaction.show(personalFragment); } currentTab = 2; break; @@ -1062,11 +1044,11 @@ public class MainActivity extends BaseFragmentActivity implements * 将所有的Fragment都置为隐藏状态。 */ private void hideFragments(FragmentTransaction transaction) { - if (home3Fragment != null) { - transaction.hide(home3Fragment); + if (personalFragment != null) { + transaction.hide(personalFragment); } - if (pluginFragmentActivity != null) { - transaction.hide(pluginFragmentActivity); + if (gameFragment != null) { + transaction.hide(gameFragment); } if (newsFragment != null) { transaction.hide(newsFragment); @@ -1081,18 +1063,19 @@ public class MainActivity extends BaseFragmentActivity implements } private void uploadData(String id, String platform) { - HashMap params = new HashMap(); + HashMap params = new HashMap<>(); params.put("game", id); params.put("platform", platform); JSONObject jsonObject = new JSONObject(params); JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( - Method.POST, Config.HOST + "v2/stat/download", - jsonObject.toString(), new Response.Listener() { + Method.POST, Config.HOST + "v2/stat/download", jsonObject.toString(), + new Response.Listener() { @Override public void onResponse(JSONObject response) { Utils.log("download = " + response); } - }, new Response.ErrorListener() { + }, + new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Utils.log("download = " + error); @@ -1127,7 +1110,7 @@ public class MainActivity extends BaseFragmentActivity implements getApplicationContext()).get(url); if (downloadEntry != null && downloadEntry.getMeta().get("isPlugin") != null) { - Map kv6 = new HashMap(); + Map kv6 = new HashMap<>(); kv6.put("安装或卸载", "安装完成"); DataUtils.onEvent(this, "插件化", downloadEntry.getName(), kv6); } @@ -1143,7 +1126,7 @@ public class MainActivity extends BaseFragmentActivity implements if (downloadEntry.getMeta().get("isPlugin") != null && downloadEntry.getMeta().get("package_name") .equals(packageName)) { - Map kv6 = new HashMap(); + Map kv6 = new HashMap<>(); kv6.put("安装或卸载", "卸载完成"); DataUtils.onEvent(this, "插件化", downloadEntry.getName(), kv6); break; @@ -1193,7 +1176,7 @@ public class MainActivity extends BaseFragmentActivity implements } if ("卸载".equals(busFour.getType())) { ArrayList list = PackageManager.getUpdateList(); - GameUpdateEntity game = null; + GameUpdateEntity game; int index = -1; for (int i = 0, size = list.size(); i < size; i++) { game = list.get(i); @@ -1210,7 +1193,7 @@ public class MainActivity extends BaseFragmentActivity implements } } - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("type", busFour.getType()); map.put("packageName", busFour.getPackageName()); map.put("createdOn", System.currentTimeMillis() / 1000); @@ -1220,8 +1203,7 @@ public class MainActivity extends BaseFragmentActivity implements @Override public void finish() { // 上传数据 - DataCollectionManager.getInstance(getApplicationContext()) - .statClickData(); + DataCollectionManager.getInstance(getApplicationContext()).statClickData(); super.finish(); } @@ -1232,8 +1214,8 @@ public class MainActivity extends BaseFragmentActivity implements AppController.canclePendingRequests(GameFragment.class); AppController.canclePendingRequests(NewsFragment.class); DownloadManager.getInstance(this).removeObserver(dataWatcher); - pluginFragmentActivity = null; - home3Fragment = null; + gameFragment = null; + personalFragment = null; home1Layout = null; home2Layout = null; home3Layout = null; diff --git a/app/src/main/java/com/gh/gamecenter/PluginActivity.java b/app/src/main/java/com/gh/gamecenter/PluginActivity.java index 132299ac7f..55c3c1f090 100644 --- a/app/src/main/java/com/gh/gamecenter/PluginActivity.java +++ b/app/src/main/java/com/gh/gamecenter/PluginActivity.java @@ -37,28 +37,6 @@ public class PluginActivity extends BaseActivity { 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 @@ -73,12 +51,10 @@ public class PluginActivity extends BaseActivity { Integer location = adapter.getLocationMap().get( downloadEntry.getName() + " - " + downloadEntry.getMeta().get("PluginPlatform")); if (location != null) { - int index = location; - GameEntity detailedEntity = getEntityByLocation(index); - + GameEntity detailedEntity = adapter.getPluginList().get(location); if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, adapter.getPlatformMap(), handler, adapter, index, adapter.getStatusMap()); + DownloadItemUtils.processDate(PluginActivity.this, detailedEntity, + downloadEntry, adapter, location, adapter.getStatusMap()); } } } @@ -154,10 +130,6 @@ public class PluginActivity extends BaseActivity { } } - private GameEntity getEntityByLocation(int position) { - return adapter.getPluginList().get(position); - } - @Override protected void onPause() { super.onPause(); @@ -184,13 +156,11 @@ public class PluginActivity extends BaseActivity { @Override protected void onDestroy() { super.onDestroy(); - isDestroy = true; AppController.canclePendingRequests(PluginActivity.class); plugin_list = null; adapter = null; plugin_pb_loading = null; reuse_no_connection = null; - handler = null; dataWatcher = null; } } diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java index 2241fbdd4b..ca681e5dbe 100644 --- a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java @@ -43,27 +43,6 @@ public class SubjectActivity extends BaseActivity { private LinearLayoutManager layoutManager; private int page = 1; - 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); - } - } - } - } - } - }; - // 黄壮华 添加观察者 修改2015/8/15 private DataWatcher dataWatcher = new DataWatcher() { @Override @@ -75,14 +54,10 @@ public class SubjectActivity extends BaseActivity { Integer location = adapter.getLocationMap().get(downloadEntry.getName()); if (location != null) { - int index = location; - - GameEntity detailedEntity = adapter.getList().get(index); - + GameEntity detailedEntity = adapter.getList().get(location); if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, adapter.getPlatformMap(), handler, adapter, - index, adapter.getStatusMap()); + DownloadItemUtils.processDate(SubjectActivity.this, detailedEntity, downloadEntry, + adapter, location, adapter.getStatusMap()); } } @@ -128,10 +103,10 @@ public class SubjectActivity extends BaseActivity { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); - if (!isDestroy && newState == RecyclerView.SCROLL_STATE_IDLE && adapter.getItemCount() == layoutManager.findLastVisibleItemPosition()+1&&adapter.isLoaded()){ + if (!isDestroy && adapter.isLoaded() && newState == RecyclerView.SCROLL_STATE_IDLE + && adapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1){ page++; adapter.initList(page); - } } }); @@ -209,7 +184,6 @@ public class SubjectActivity extends BaseActivity { adapter = null; subject_pb_loading = null; reuse_no_connection = null; - handler = null; dataWatcher = null; } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java index ede814fbf4..d04e56c715 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java @@ -59,7 +59,6 @@ public class PluginAdapter extends RecyclerView.Adapter private List pluginList; private ArrayMap locationMap; - private ArrayMap> platformMap; private ArrayMap> gameMap; private ArrayMap nameMap; private ArrayMap statusMap; @@ -75,13 +74,12 @@ public class PluginAdapter extends RecyclerView.Adapter plugin_pb_loading = pbLoading; reuse_no_connection = linearLayout; - pluginList = new ArrayList(); + pluginList = new ArrayList<>(); - locationMap = new ArrayMap(); - platformMap = new ArrayMap>(); - gameMap = new ArrayMap>(); - nameMap = new ArrayMap(); - statusMap = new ArrayMap(); + locationMap = new ArrayMap<>(); + gameMap = new ArrayMap<>(); + nameMap = new ArrayMap<>(); + statusMap = new ArrayMap<>(); dismissEntity = new DismissEntity(false); // 黄壮华 添加 初始化游戏状态 修改2015/8/21 @@ -102,7 +100,7 @@ public class PluginAdapter extends RecyclerView.Adapter ConcernManager concernManager = new ConcernManager(context); List infos = concernManager.getInstalledGame(); final int size = infos.size(); - final List list = new ArrayList(); + final List list = new ArrayList<>(); count = 0; for (ConcernInfo info : infos) { JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( @@ -259,14 +257,12 @@ public class PluginAdapter extends RecyclerView.Adapter DownloadItemUtils.setOnClickListener(context, viewHolder.downloadBtn, viewHolder.download_speed, viewHolder.download_percentage, entity, i, - PluginAdapter.this, - statusMap, platformMap, "游戏-插件", - dismissEntity, "主页:" + entity.getName()); + PluginAdapter.this, statusMap, "游戏-插件", dismissEntity, + "主页:" + entity.getName()); DownloadItemUtils.updateItem(context, viewHolder.gameDes, viewHolder.game_progressbar, viewHolder.game_ll_info, viewHolder.download_speed, - viewHolder.download_percentage, viewHolder.downloadBtn, entity, platformMap, - statusMap); + viewHolder.download_percentage, viewHolder.downloadBtn, entity, statusMap); } } @@ -283,10 +279,6 @@ public class PluginAdapter extends RecyclerView.Adapter return locationMap; } - public ArrayMap> getPlatformMap() { - return platformMap; - } - public ArrayMap> getGameMap() { return gameMap; } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java index a6802de5a9..4bdb8e8188 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java @@ -74,7 +74,6 @@ public class SubjectAdapter extends RecyclerView.Adapter locationMap; - private ArrayMap> platformMap; private ArrayMap> gameMap; private ArrayMap nameMap; private ArrayMap statusMap; @@ -98,7 +97,6 @@ public class SubjectAdapter extends RecyclerView.Adapter(); - platformMap = new ArrayMap<>(); gameMap = new ArrayMap<>(); nameMap = new ArrayMap<>(); statusMap = new ArrayMap<>(); @@ -317,8 +315,7 @@ public class SubjectAdapter extends RecyclerView.Adapter getList() { @@ -416,10 +412,6 @@ public class SubjectAdapter extends RecyclerView.Adapter> getPlatformMap() { - return platformMap; - } - public ArrayMap> getGameMap() { return gameMap; } 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 c65c9d6804..8ce9b342a4 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java @@ -4,19 +4,17 @@ 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.base.BaseFragment; import com.gh.common.constant.Constants; import com.gh.common.util.DownloadItemUtils; import com.gh.common.util.Utils; @@ -39,26 +37,19 @@ import java.util.List; import java.util.Map; import java.util.concurrent.LinkedBlockingQueue; -import de.greenrobot.event.EventBus; - /** * Created by khy on 2016/6/27. */ -public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { +public class Game1Fragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener { - private View view; - private RecyclerView recyclerview; - private SwipeRefreshLayout game_swipe_refresh; + private SwipeRefreshLayout fm_game_swipe_refresh; + private RecyclerView fm_game_rv_list; private Game1FragmentAdapter adapter; private LinearLayout reuse_no_connection; - private ProgressBarCircularIndeterminate game_pb_loading; + private ProgressBarCircularIndeterminate fm_game_pb_loading; //下载用到的map - private ArrayMap locationMap; private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; - private ArrayMap pluginNameMap; private ArrayMap statusMap; private DismissEntity dismissEntity; @@ -66,59 +57,34 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr private int currentItem; private boolean isEverpause; - private boolean isDestroy; - 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 (queue.size() > 1) { - queue.offer(queue.poll()); - Message msg2 = Message.obtain(); - msg2.obj = name; - msg2.what = Constants.DOWNLOAD_ROLL; - sendMessageDelayed(msg2, 3000); - } - } - } - } - } - }; + private Handler handler = new Handler(); private DataWatcher dataWatcher = new DataWatcher() { - @Override - public void onDataChanged( - HashMap downloadingEntries) { - if (!game_swipe_refresh.isRefreshing()) { + public void onDataChanged(HashMap downloadingEntries) { + if (!fm_game_swipe_refresh.isRefreshing()) { for (Map.Entry entry : downloadingEntries.entrySet()) { DownloadEntry downloadEntry = entry.getValue(); - Integer location = locationMap.get(downloadEntry.getName()); + Integer location = adapter.getLocationMap().get(downloadEntry.getName()); if (location != null) { - int index = location; - GameEntity detailedEntity = getEntityByLocation(index); - + GameEntity detailedEntity = getEntityByLocation(location); if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler, adapter, index, statusMap); + DownloadItemUtils.processDate(getActivity(), detailedEntity, + downloadEntry, adapter, location, statusMap); } } //特殊 插件化update if (downloadEntry.getMeta().get("PluginPlatform") != null) { - location = locationMap.get(downloadEntry.getName() + " - " + downloadEntry.getMeta().get("PluginPlatform")); + location = adapter.getLocationMap().get(downloadEntry.getName() + + " - " + downloadEntry.getMeta().get("PluginPlatform")); if (location != null) { - int index = location; - GameEntity detailedEntity = getEntityByLocation(index); - + GameEntity detailedEntity = getEntityByLocation(location); if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler, adapter, index, statusMap); + DownloadItemUtils.processDate(getActivity(), detailedEntity, + downloadEntry, adapter, location, statusMap); } } } @@ -131,73 +97,47 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); + init(R.layout.fragment_game); - locationMap = new ArrayMap(); - gameMap = new ArrayMap>(); - platformMap = new ArrayMap>(); - nameMap = new ArrayMap(); - pluginNameMap = new ArrayMap(); - statusMap = new ArrayMap(); + gameMap = 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); + fm_game_swipe_refresh.setRefreshing(true); + fm_game_rv_list.setVisibility(View.VISIBLE); + fm_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); - game_swipe_refresh.setOnRefreshListener(this); + fm_game_swipe_refresh.setColorSchemeResources(R.color.theme); + fm_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; + fm_game_rv_list.setHasFixedSize(true); + fm_game_rv_list.setLayoutManager(new LinearLayoutManager(getActivity())); + adapter = new Game1FragmentAdapter(Game1Fragment.this, fm_game_rv_list, fm_game_swipe_refresh, + reuse_no_connection, fm_game_pb_loading, gameMap, statusMap, + dismissEntity, false); + fm_game_rv_list.setAdapter(adapter); } //下载被删除事件 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()); + DownloadManager.getInstance(getActivity()).removePlatform(busThree.getName(), busThree.getPlatform()); + + Integer location = adapter.getLocationMap().get(busThree.getName()); if (location != null) { int index = location; GameEntity detailedEntity = getEntityByLocation(index); @@ -212,7 +152,7 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr } //特殊 插件化update if (busThree.getPluginPlatform() != null) { - location = locationMap.get(busThree.getName() + " - " + busThree.getPluginPlatform()); + location = adapter.getLocationMap().get(busThree.getName() + " - " + busThree.getPluginPlatform()); int index = location; Utils.log(location); GameEntity detailedEntity = getEntityByLocation(index); @@ -232,19 +172,21 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr //安装、卸载事件 public void onEventMainThread(EBPackage busFour) { - String name = nameMap.get(busFour.getPackageName()); + String name = adapter.getNameMap().get(busFour.getPackageName()); if (name != null) { - Integer location = locationMap.get(name); + Integer location = adapter.getLocationMap().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; + if (detailedEntity != null) { + 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())) { @@ -253,9 +195,9 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr } } //特殊 插件化 - name = pluginNameMap.get(busFour.getPackageName()); + name = adapter.getPluginNameMap().get(busFour.getPackageName()); if (name != null) { - Integer location = locationMap.get(name); + Integer location = adapter.getLocationMap().get(name); if (location != null) { if ("安装".equals(busFour.getType()) || "卸载".equals(busFour.getType())) { List list = adapter.getPluginList(); @@ -276,14 +218,14 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr 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); + fm_game_swipe_refresh.setRefreshing(true); + fm_game_rv_list.setVisibility(View.VISIBLE); + fm_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.notifyItemChanged(adapter.getItemCount() - 1); adapter.load(); } } @@ -302,7 +244,7 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr currentItem = busNine.getPosition(); if (busNine.getPosition() == 0) { adapter.startAutoScroll(); - if (game_pb_loading.getVisibility() == View.VISIBLE) { + if (fm_game_pb_loading.getVisibility() == View.VISIBLE) { adapter.load(); } } else { @@ -375,10 +317,10 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr @Override public void run() { 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); + adapter = new Game1FragmentAdapter(Game1Fragment.this, fm_game_rv_list, fm_game_swipe_refresh, + reuse_no_connection, fm_game_pb_loading, gameMap, statusMap, + dismissEntity, true); + fm_game_rv_list.setAdapter(adapter); } } }; @@ -391,20 +333,13 @@ public class Game1Fragment extends Fragment implements SwipeRefreshLayout.OnRefr @Override public void onDestroy() { super.onDestroy(); - isDestroy = true; AppController.canclePendingRequests(Game1Fragment.class); - EventBus.getDefault().unregister(this); - view = null; - recyclerview = null; + fm_game_rv_list = null; adapter = null; reuse_no_connection = null; - game_swipe_refresh = null; - game_pb_loading = null; - locationMap = null; + fm_game_swipe_refresh = null; + fm_game_pb_loading = null; gameMap = null; - platformMap = null; - nameMap = null; - pluginNameMap = null; statusMap = null; dismissEntity = null; handler = 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 f632a85836..577ff6d176 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -78,18 +78,18 @@ import java.util.concurrent.LinkedBlockingQueue; public class Game1FragmentAdapter extends RecyclerView.Adapter { private class ITEM_TYPE { - public static final int slide = 0;// 滚动图 - public static final int head = 1;// 专题头部 - public static final int game_normal_type = 2;// 游戏布局1 - public static final int game_test_type = 3;// 游戏布局2 - public static final int image = 4;// 大图布局 - public static final int footer_view = 5;// 加载布局 + public static final int slide = 0; // 滚动图 + public static final int head = 1; // 专题头部 + public static final int game_normal_type = 2; // 游戏布局1 + public static final int game_test_type = 3; // 游戏布局2 + public static final int image = 4; // 大图布局 + public static final int footer_view = 5; // 加载布局 } private Game1Fragment fragment; private Context context; - private RecyclerView recyclerview; + private RecyclerView game_list; private SwipeRefreshLayout game_swipe_refresh; private LinearLayout reuse_no_connection; private ProgressBarCircularIndeterminate game_pb_loading; @@ -98,6 +98,15 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter pluginList; private List subjectList; + private ArrayMap locationMap; + private ArrayMap nameMap; + private ArrayMap pluginNameMap; + + private ArrayMap> gameMap; + private ArrayMap statusMap; + + private DismissEntity dismissEntity; + private int pluginSize; private boolean isNetworkError; @@ -105,46 +114,35 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter locationMap; - private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; - private ArrayMap pluginNameMap; - private ArrayMap statusMap; - - private DismissEntity dismissEntity; - public Game1FragmentAdapter(Game1Fragment fragment, - ArrayMap lMap, - ArrayMap> gMap, - ArrayMap> pMap, - ArrayMap nMap, - ArrayMap pnMap, RecyclerView rView, SwipeRefreshLayout refreshLayout, LinearLayout linearLayout, + ProgressBarCircularIndeterminate pbLoading, + ArrayMap> gMap, ArrayMap sMap, DismissEntity dEntity, - ProgressBarCircularIndeterminate pbLoading, boolean isLoad) { this.fragment = fragment; this.context = fragment.getActivity(); - locationMap = lMap; - gameMap = gMap; - platformMap = pMap; - nameMap = nMap; - pluginNameMap = pnMap; - recyclerview = rView; + + game_list = rView; game_swipe_refresh = refreshLayout; reuse_no_connection = linearLayout; game_pb_loading = pbLoading; + + gameMap = gMap; statusMap = sMap; dismissEntity = dEntity; - slideList = new ArrayList(); - pluginList = new ArrayList(); - subjectList = new ArrayList(); + slideList = new ArrayList<>(); + pluginList = new ArrayList<>(); + subjectList = new ArrayList<>(); + + locationMap = new ArrayMap<>(); + nameMap = new ArrayMap<>(); + pluginNameMap = new ArrayMap<>(); pluginSize = 0; @@ -158,6 +156,18 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter getLocationMap() { + return locationMap; + } + + public ArrayMap getNameMap() { + return nameMap; + } + + public ArrayMap getPluginNameMap() { + return pluginNameMap; + } + public void load() { new Thread(new Runnable() { @Override @@ -300,7 +310,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter infos = concernManager.getInstalledGame(); final int size = infos.size(); - final List list = new ArrayList(); + final List list = new ArrayList<>(); count = 0; for (ConcernInfo info : infos) { JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( @@ -373,7 +383,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter apkList = new ArrayList(); + ArrayList apkList = new ArrayList<>(); apkList.add(apkEntity); entity.setApk(apkList); pluginList.add(entity); @@ -617,7 +627,7 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter kv = new HashMap<>(); kv.put("名字", gameEntity.getName()); kv.put("位置", i + 1); - DataUtils.onEvent(context, "点击", "游戏-插件-" + name, kv); + DataUtils.onEvent(context, "点击", "游戏-插件-" + subjectEntity.getName(), kv); AppController.put("GameEntity", gameEntity); Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("entrance", "游戏-插件-" + name); + intent.putExtra("entrance", "游戏-插件-" + subjectEntity.getName()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } @@ -673,8 +700,8 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter locationMap; private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; private ArrayMap statusMap; private DismissEntity dismissEntity; private boolean isEverpause; - private boolean isDestroy; - 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 (queue.size() > 1) { - queue.offer(queue.poll()); - Message msg2 = Message.obtain(); - msg2.obj = name; - msg2.what = Constants.DOWNLOAD_ROLL; - sendMessageDelayed(msg2, 3000); - } - } - } - } - } - }; + private Handler handler = new Handler(); DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(HashMap downloadingEntries) { - if (!game_swipe_refresh.isRefreshing()) { + if (!fm_game_swipe_refresh.isRefreshing()) { for (Map.Entry stringDownloadEntryEntry : downloadingEntries.entrySet()) { DownloadEntry downloadEntry = stringDownloadEntryEntry.getValue(); - Integer location = locationMap.get(downloadEntry.getName()); + Integer location = adapter.getLocationMap().get(downloadEntry.getName()); if (location != null) { - int index = location; - GameEntity detailedEntity = getEntityByLocation(index); - + GameEntity detailedEntity = getEntityByLocation(location); if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler, adapter, index, statusMap); + DownloadItemUtils.processDate(getActivity(), detailedEntity, + downloadEntry, adapter, location, statusMap); } } } @@ -111,70 +81,44 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); + init(R.layout.fragment_game); - locationMap = new ArrayMap(); - gameMap = new ArrayMap>(); - platformMap = new ArrayMap>(); - nameMap = new ArrayMap(); - statusMap = new ArrayMap(); + gameMap = new ArrayMap<>(); + statusMap = new ArrayMap<>(); dismissEntity = new DismissEntity(false); 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); + fm_game_swipe_refresh.setRefreshing(true); + fm_game_rv_list.setVisibility(View.VISIBLE); + fm_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); - game_swipe_refresh.setOnRefreshListener(this); + fm_game_swipe_refresh.setColorSchemeResources(R.color.theme); + fm_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) { - if (container != null) { - container.removeView(view); - } - return view; + fm_game_rv_list.setHasFixedSize(true); + fm_game_rv_list.setLayoutManager(new LinearLayoutManager(getActivity())); + adapter = new Game2FragmentAdapter(Game2Fragment.this, fm_game_swipe_refresh, + fm_game_rv_list, reuse_no_connection, fm_game_pb_loading, gameMap, statusMap, dismissEntity, false); + fm_game_rv_list.setAdapter(adapter); } //下载被删除事件 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()); + DownloadManager.getInstance(getActivity()).removePlatform(busThree.getName(), busThree.getPlatform()); + + Integer location = adapter.getLocationMap().get(busThree.getName()); if (location != null) { int index = location; GameEntity detailedEntity = getEntityByLocation(index); @@ -198,19 +142,21 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr //安装、卸载事件 public void onEventMainThread(EBPackage busFour) { - String name = nameMap.get(busFour.getPackageName()); + String name = adapter.getNameMap().get(busFour.getPackageName()); if (name != null) { - Integer location = locationMap.get(name); + Integer location = adapter.getLocationMap().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; + if (detailedEntity != null) { + 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())) { @@ -224,9 +170,9 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr 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); + fm_game_swipe_refresh.setRefreshing(true); + fm_game_rv_list.setVisibility(View.VISIBLE); + fm_game_pb_loading.setVisibility(View.GONE); reuse_no_connection.setVisibility(View.GONE); handler.postDelayed(runnable, 1000); } @@ -241,7 +187,7 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr } } else if ("GameFragment".equals(busNine.getFrom())) { if (busNine.getPosition() == 1) { - if (game_pb_loading.getVisibility() == View.VISIBLE) { + if (fm_game_pb_loading.getVisibility() == View.VISIBLE) { adapter.load(); } } @@ -293,10 +239,10 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr @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); + adapter = new Game2FragmentAdapter(Game2Fragment.this, fm_game_swipe_refresh, + fm_game_rv_list, reuse_no_connection, fm_game_pb_loading, gameMap, + statusMap, dismissEntity, true); + fm_game_rv_list.setAdapter(adapter); } } }; @@ -309,19 +255,13 @@ public class Game2Fragment extends Fragment implements SwipeRefreshLayout.OnRefr @Override public void onDestroy() { super.onDestroy(); - isDestroy = true; AppController.canclePendingRequests(Game2Fragment.class); - EventBus.getDefault().unregister(this); - view = null; - recyclerview = null; + fm_game_rv_list = null; adapter = null; reuse_no_connection = null; - game_swipe_refresh = null; - game_pb_loading = null; - locationMap = null; + fm_game_swipe_refresh = null; + fm_game_pb_loading = null; gameMap = null; - platformMap = null; - nameMap = null; statusMap = null; dismissEntity = null; handler = 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 d2f829b794..c717f77dd7 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game2FragmentAdapter.java @@ -80,46 +80,53 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter subjectList; private ArrayMap locationMap; - private ArrayMap> gameMap; - private ArrayMap> platformMap; private ArrayMap nameMap; + + private ArrayMap> gameMap; private ArrayMap statusMap; private DismissEntity dismissEntity; public Game2FragmentAdapter(Game2Fragment fragment, - ArrayMap lMap, - ArrayMap> gMap, - ArrayMap> pMap, - ArrayMap nMap, - RecyclerView rView, SwipeRefreshLayout refreshLayout, + RecyclerView rView, LinearLayout linearLayout, + ProgressBarCircularIndeterminate pbLoading, + ArrayMap> gMap, 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; + + gameMap = gMap; statusMap = sMap; dismissEntity = dEntity; - subjectList = new ArrayList(); + subjectList = new ArrayList<>(); + + locationMap = new ArrayMap<>(); + nameMap = new ArrayMap<>(); if (isLoad) { load(); } } + public ArrayMap getLocationMap() { + return locationMap; + } + + public ArrayMap getNameMap() { + return nameMap; + } + public void load() { new Thread(new Runnable() { @Override @@ -452,12 +459,12 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter= offset && position <= subjectList.get(i).getData().size() + offset) { int index = position - offset - 1; - if (index<0){ + if (index < 0){ index = 0; } gameEntity = subjectList.get(i).getData().get(index); 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 568c22d018..9c2cf52323 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game3Fragment.java @@ -4,20 +4,18 @@ 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.v4.widget.SwipeRefreshLayout.OnRefreshListener; 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.base.BaseFragment; import com.gh.common.constant.Constants; import com.gh.common.util.DownloadItemUtils; import com.gh.download.DataWatcher; @@ -36,8 +34,6 @@ import com.gh.gamecenter.eventbus.EBUISwitch; import java.util.HashMap; import java.util.concurrent.LinkedBlockingQueue; -import de.greenrobot.event.EventBus; - /** * * @author 温冠超 @@ -46,66 +42,39 @@ import de.greenrobot.event.EventBus; * @update 2015-8-11 * @des 主页插件fragment */ -public class Game3Fragment extends Fragment implements OnRefreshListener { +public class Game3Fragment extends BaseFragment implements OnRefreshListener { - private View view; - private RecyclerView recyclerview; - private SwipeRefreshLayout game_swipe_refresh; + private SwipeRefreshLayout fm_game_swipe_refresh; + private RecyclerView fm_game_rv_list; private Game3FragmentAdapter adapter; private LinearLayoutManager layoutManager; private LinearLayout reuse_no_connection; - private ProgressBarCircularIndeterminate game_pb_loading; + private ProgressBarCircularIndeterminate fm_game_pb_loading; // 黄壮华 添加 记录信息的map 修改2015/8/15 - private ArrayMap locationMap; private ArrayMap> gameMap; - private ArrayMap> platformMap; - private ArrayMap nameMap; private ArrayMap statusMap; - private boolean isEverpause; - private boolean isDestroy; - 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 (queue.size() > 1) { - queue.offer(queue.poll()); - Message msg2 = Message.obtain(); - msg2.obj = name; - msg2.what = Constants.DOWNLOAD_ROLL; - sendMessageDelayed(msg2, 3000); - } - } - } - } - } - }; + private boolean isEverpause; + + private Handler handler = new Handler(); // 黄壮华 添加观察者 修改2015/8/15 private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(HashMap downloadingEntries) { - if (!game_swipe_refresh.isRefreshing()) { + if (!fm_game_swipe_refresh.isRefreshing()) { for (java.util.Map.Entry entry : downloadingEntries.entrySet()) { DownloadEntry downloadEntry = entry.getValue(); - Integer location = locationMap.get(downloadEntry.getName()); + Integer location = adapter.getLocationMap().get(downloadEntry.getName()); if (location != null) { - int index = location; - GameEntity detailedEntity = adapter.getList().get(index); - + GameEntity detailedEntity = adapter.getList().get(location); if (detailedEntity != null) { - DownloadItemUtils.processDate(detailedEntity, - downloadEntry, platformMap, handler, - adapter, index, statusMap); + DownloadItemUtils.processDate(getActivity(), detailedEntity, + downloadEntry, adapter, location, statusMap); } } } @@ -115,55 +84,43 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { @Override public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.plugin1_fragment, null); + init(R.layout.fragment_game); - locationMap = new ArrayMap<>(); gameMap = new ArrayMap<>(); - platformMap = new ArrayMap<>(); - nameMap = new ArrayMap<>(); statusMap = new ArrayMap<>(); dismissEntity = new DismissEntity(false); isEverpause = false; - isDestroy = false; // 黄壮华 添加 初始化游戏状态 修改2015/8/21 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); + fm_game_swipe_refresh.setRefreshing(true); + fm_game_rv_list.setVisibility(View.VISIBLE); + fm_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); - game_swipe_refresh.setOnRefreshListener(this); + fm_game_swipe_refresh.setColorSchemeResources(R.color.theme); + fm_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); + fm_game_rv_list.setHasFixedSize(true); layoutManager = new LinearLayoutManager(getActivity()); - recyclerview.setLayoutManager(layoutManager); + fm_game_rv_list.setLayoutManager(layoutManager); // 黄壮华 传递引用 修改2015/8/15 - adapter = new Game3FragmentAdapter(Game3Fragment.this, locationMap, - gameMap, platformMap, nameMap, recyclerview, - game_swipe_refresh, reuse_no_connection, statusMap, - dismissEntity,game_pb_loading, false); - recyclerview.setAdapter(adapter); - recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { - + adapter = new Game3FragmentAdapter(Game3Fragment.this, fm_game_swipe_refresh, + fm_game_rv_list, reuse_no_connection, fm_game_pb_loading, gameMap, + statusMap, dismissEntity, false); + fm_game_rv_list.setAdapter(adapter); + fm_game_rv_list.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { @@ -178,28 +135,13 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { } }); -// recyclerview.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - - EventBus.getDefault().register(this); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - 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()); + DownloadManager.getInstance(getActivity()).removePlatform(busThree.getName(), busThree.getPlatform()); + + Integer location = adapter.getLocationMap().get(busThree.getName()); if (location != null) { int index = location; @@ -222,9 +164,9 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { //安装、卸载事件 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 detailedEntity = adapter.getList().get(location); for (ApkEntity apkEntity : detailedEntity.getApk()) { @@ -244,9 +186,9 @@ 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.GONE); + fm_game_swipe_refresh.setRefreshing(true); + fm_game_rv_list.setVisibility(View.VISIBLE); + fm_game_pb_loading.setVisibility(View.GONE); reuse_no_connection.setVisibility(View.GONE); handler.postDelayed(runnable, 1000); } else if (adapter.isNetworkError()) { @@ -264,7 +206,7 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { } } else if ("GameFragment".equals(busNine.getFrom())) { if (busNine.getPosition() == 2) { - if (game_pb_loading.getVisibility() == View.VISIBLE) { + if (fm_game_pb_loading.getVisibility() == View.VISIBLE) { adapter.load(); } } @@ -302,11 +244,9 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { @Override public void run() { 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); + adapter = new Game3FragmentAdapter(Game3Fragment.this, fm_game_swipe_refresh, + fm_game_rv_list, reuse_no_connection, fm_game_pb_loading, gameMap, statusMap, dismissEntity, true); + fm_game_rv_list.setAdapter(adapter); } } }; @@ -319,24 +259,18 @@ public class Game3Fragment extends Fragment implements OnRefreshListener { @Override public void onDestroy() { super.onDestroy(); - isDestroy = true; AppController.canclePendingRequests(Game3Fragment.class); - EventBus.getDefault().unregister(this); - view = null; - recyclerview = null; - game_swipe_refresh = null; + fm_game_rv_list = null; + fm_game_swipe_refresh = null; adapter = null; layoutManager = null; reuse_no_connection = null; - locationMap = null; gameMap = null; - platformMap = null; - nameMap = null; statusMap = null; dismissEntity = null; handler = null; dataWatcher = null; - game_pb_loading = null; + fm_game_pb_loading = null; } } 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 749b88d9d8..606f2f0204 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game3FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game3FragmentAdapter.java @@ -78,51 +78,59 @@ public class Game3FragmentAdapter extends // 黄壮华 获取引用 修改2015/8/15 private ArrayMap locationMap; - private ArrayMap> gameMap; - private ArrayMap> platformMap; private ArrayMap nameMap; + + private ArrayMap> gameMap; private ArrayMap statusMap; private DismissEntity dismissEntity; // 黄壮华 获取引用 修改2015/8/15 public Game3FragmentAdapter(Game3Fragment fment, - ArrayMap lMap, - ArrayMap> gMap, - ArrayMap> pMap, - ArrayMap nMap, RecyclerView rView, SwipeRefreshLayout swipeRefreshLayout, + RecyclerView rView, LinearLayout linearLayout, + ProgressBarCircularIndeterminate pbLoading, + ArrayMap> gMap, ArrayMap sMap, DismissEntity dEntity, - ProgressBarCircularIndeterminate pbLoading, boolean isLoad) { this.fragment = fment; this.context = fment.getActivity(); - locationMap = lMap; - gameMap = gMap; - platformMap = pMap; - nameMap = nMap; - statusMap = sMap; - recyclerView = rView; + game_swipe_refresh = swipeRefreshLayout; + recyclerView = rView; reuse_no_connection = linearLayout; game_pb_loading = pbLoading; + gameMap = gMap; + statusMap = sMap; + dismissEntity = dEntity; + locationMap = new ArrayMap<>(); + nameMap = new ArrayMap<>(); + isRemove = false; isLoading = false; isNetworkError = false; - list = new ArrayList(); + list = new ArrayList<>(); if (isLoad) { load(); } } + public ArrayMap getLocationMap() { + return locationMap; + } + + public ArrayMap getNameMap() { + return nameMap; + } + public void load() { new Thread(new Runnable() { @Override @@ -309,11 +317,11 @@ public class Game3FragmentAdapter extends @Override public void onClick(View v) { - Map kv = new HashMap(); + Map kv = new HashMap<>(); kv.put("入口", "游戏-单机"); DataUtils.onEvent(context, "游戏详情", entity.getName(), kv); - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("location", "单机"); map.put("createOn", System.currentTimeMillis() / 1000); map.put("game", entity.getName()); @@ -331,13 +339,13 @@ public class Game3FragmentAdapter extends DownloadItemUtils.setOnClickListener(context, holder.downloadBtn, holder.download_speed, holder.download_percentage, entity, position, this, - statusMap, platformMap, "游戏-单机", false, dismissEntity, + statusMap, "游戏-单机", dismissEntity, "单机:" + entity.getName()); DownloadItemUtils.updateItem(context, holder.gameDes, holder.game_progressbar, holder.game_ll_info, holder.download_speed, holder.download_percentage, - holder.downloadBtn, entity, platformMap, statusMap, + holder.downloadBtn, entity, statusMap, false); } 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 60ecc5ae15..59239f5e0b 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragment.java @@ -80,7 +80,6 @@ public class GameFragment extends Fragment implements OnClickListener, @Override public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); view = View.inflate(getActivity(), R.layout.plugin_container_fragments, null); diff --git a/app/src/main/java/com/gh/gamecenter/news/NewNews4Fragment.java b/app/src/main/java/com/gh/gamecenter/news/NewNews4Fragment.java deleted file mode 100644 index dff1671a3f..0000000000 --- a/app/src/main/java/com/gh/gamecenter/news/NewNews4Fragment.java +++ /dev/null @@ -1,224 +0,0 @@ -package com.gh.gamecenter.news; - -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.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -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.common.constant.Config; -import com.gh.common.util.ConcernUtils; -import com.gh.common.util.MD5Utils; -import com.gh.common.util.Utils; -import com.gh.gamecenter.R; -import com.gh.gamecenter.db.info.ConcernInfo; -import com.gh.gamecenter.manager.ConcernManager; - -import org.json.JSONArray; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -/** - * Created by khy on 2016/8/15. - */ -public class NewNews4Fragment extends Fragment implements NewNews4FragmentAdapter.OnCallBackListener{ - - private View mView; - private RecyclerView mRecyclerView; - private NewNews4FragmentAdapter mNews4FragmentAdapter; - private LinearLayoutManager mLayoutManager; - private LinearLayout noConnection; - private LinearLayout reuse_none_data; - private SwipeRefreshLayout mSwipeRefreshLayout; - private ProgressBarCircularIndeterminate mProgressBar; - - private boolean isLoadOver = true; - private boolean isRemove = false; - private boolean isNetworkError = false; - - private int page = 1; - - private List gameIdList; - - private ConcernManager manager; - - private Handler handler = new Handler(){ - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - if (msg.what == 0){ - StringBuffer concernKey = new StringBuffer(); - concernKey.setLength(0); - StringBuffer gameIdPostData = new StringBuffer(); - for (int i = 0, size = gameIdList.size(); i < size; i++){ - if (i < 5) { - gameIdPostData.append(gameIdList.get(i)); - gameIdPostData.append("-"); - } - } - for (int i = 0; i < gameIdList.size(); i++) { - concernKey.append(gameIdList.get(i)); - } - String contentMD5 = MD5Utils.getContentMD5(concernKey.toString()); - - if (gameIdPostData.length() > 0) { - gameIdPostData.deleteCharAt(gameIdPostData.length() - 1); - } - mNews4FragmentAdapter = new NewNews4FragmentAdapter(getActivity(), NewNews4Fragment.this, - contentMD5, gameIdPostData.toString(), page); - mRecyclerView.setAdapter(mNews4FragmentAdapter); - } - } - }; - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mView = View.inflate(getActivity(), R.layout.fragment_news4, null); - mRecyclerView = (RecyclerView) mView.findViewById(R.id.news4_rv); - mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.news4_swipe_refresh); - mProgressBar = (ProgressBarCircularIndeterminate) mView.findViewById(R.id.news4_pb_loading); - noConnection = (LinearLayout) mView.findViewById(R.id.reuse_no_connection); - reuse_none_data = (LinearLayout) mView.findViewById(R.id.reuse_none_data); - mLayoutManager = new LinearLayoutManager(getActivity()); - mRecyclerView.setLayoutManager(mLayoutManager); - - manager = new ConcernManager(getActivity()); - - gameIdList = new ArrayList<>(); - - loadConcernGameId(); - - mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - if (mNews4FragmentAdapter != null &&newState == RecyclerView.SCROLL_STATE_IDLE - &&mLayoutManager.findLastVisibleItemPosition() + 1 == mNews4FragmentAdapter.getItemCount() - &&isLoadOver &&!isRemove &&!isNetworkError){ - isLoadOver = false; - page++; - mNews4FragmentAdapter.LoadJosnData(page); - } - } - }); - - mSwipeRefreshLayout.setColorSchemeResources(R.color.theme); - mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - page = 1; - isRemove = false; - loadConcernGameId(); - } - }); - noConnection.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - noConnection.setVisibility(View.GONE); - mProgressBar.setVisibility(View.VISIBLE); - handler.postDelayed(new Runnable() { - @Override - public void run() { - isNetworkError = false; - loadConcernGameId(); - } - },1000); - } - }); - } - - private void loadConcernGameId() { - List concernGame = manager.getConcernGame(); - gameIdList.clear(); - for (ConcernInfo concernInfo : concernGame) { - gameIdList.add(concernInfo.getId()); - } - - // 对数据进行排序 - Collections.sort(gameIdList, new Comparator() { - @Override - public int compare(String lhs, String rhs) { - return lhs.compareTo(rhs); - } - }); - - handler.sendEmptyMessage(0); - reuse_none_data.setVisibility(View.GONE); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (container != null) { - container.removeView(mView); - } - return mView; - } - - @Override - public void isLoadOver(boolean loadOver) { - isLoadOver = loadOver; - - if (mSwipeRefreshLayout != null && mSwipeRefreshLayout.isRefreshing()){ - mSwipeRefreshLayout.setRefreshing(false); - } - if (mProgressBar != null && mProgressBar.getVisibility() == View.VISIBLE){ - mProgressBar.setVisibility(View.GONE); - } - } - - @Override - public void isRemove(boolean remove) { - isRemove = remove; - } - - @Override - public void isNetworkError(boolean netWorkError) { - isNetworkError = netWorkError; - if (isNetworkError){ - noConnection.setVisibility(View.VISIBLE); - }else { - noConnection.setVisibility(View.GONE); - } - } - - public void updateConcern() { - String uuid = ConcernUtils.uuid(getActivity()); - - ConcernUtils.updateConcernData(Config.HOST + "v2d0/device/" + uuid + "/concern", new JSONArray(gameIdList), - new ConcernUtils.DownJsonListener() { - @Override - public void downSucced(String str) { - Utils.log("更新设备游戏成功"); - } - - @Override - public void downFailed() { - Utils.log("更新设备游戏失败"); - } - }); - } - - @Override - public void concernNewsData(boolean noDate) { - if (noDate){ - if (mSwipeRefreshLayout.isRefreshing()){ - mSwipeRefreshLayout.setRefreshing(false); - } - reuse_none_data.setVisibility(View.VISIBLE); - } - } - -} diff --git a/app/src/main/java/com/gh/gamecenter/news/NewNews4FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/NewNews4FragmentAdapter.java deleted file mode 100644 index fb2c983ab7..0000000000 --- a/app/src/main/java/com/gh/gamecenter/news/NewNews4FragmentAdapter.java +++ /dev/null @@ -1,329 +0,0 @@ -package com.gh.gamecenter.news; - -import android.content.Context; -import android.content.Intent; -import android.support.v7.widget.RecyclerView; -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 com.android.volley.Response; -import com.android.volley.VolleyError; -import com.gh.base.AppController; -import com.gh.common.constant.Config; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.Utils; -import com.gh.gamecenter.NewsActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.entity.ConcernEntity; -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.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -/** - * Created by khy on 2016/8/15. - */ -public class NewNews4FragmentAdapter extends RecyclerView.Adapter { - - private Context mContext; - private List concernList; - public OnCallBackListener callBackListener; - - private String concernKey ; - private String gameIdPostData; - - private boolean keyRequestError = false; - private boolean isKeyGetData = false; - private boolean isNetworkError = false; - private boolean isRemove = false; - - private int page ; - - public NewNews4FragmentAdapter(Context context, NewNews4Fragment newNews4Fragment, String concernKey, String gameIdPostData, int page) { - this.mContext = context; - this.concernKey = concernKey; - this.gameIdPostData = gameIdPostData; - this.page = page; - concernList = new ArrayList<>(); - callBackListener = (OnCallBackListener) newNews4Fragment; - LoadJosnData(page); - } - - public void LoadJosnData(final int p) { - - page = p; - final String url; - - if (keyRequestError){ - url= Config.HOST+ "v2d0/zixun/guanzhu?"+ "game_id="+ gameIdPostData+ "&limit=10&page="+ page+ "×tamp="+ System.currentTimeMillis(); - isKeyGetData = false; - }else { - url= Config.HOST+ "v2d0/zixun/guanzhu?"+ "key="+ concernKey+ "&limit=10&page="+ page+ "×tamp="+ System.currentTimeMillis(); - isKeyGetData= true; - } - if (page == 1){ - concernList.clear(); - notifyDataSetChanged(); - } - final JsonArrayExtendedRequest request= new JsonArrayExtendedRequest(url - , 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); - - concernList.addAll(list); - notifyDataSetChanged(); - callBackListener.isLoadOver(true); - if (concernList.size() == 0){ - callBackListener.concernNewsData(true); - }else { - callBackListener.concernNewsData(false); - } - if (list.isEmpty() || (list.size() < 10)) { - notifyItemChanged(getItemCount() - 1); - callBackListener.isRemove(true); - isRemove = true; - } - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - int statusCode = 0; - try { - statusCode = error.networkResponse.statusCode; - } catch (NullPointerException e) { - e.printStackTrace(); - Utils.log("资讯-关注页面出现异常"+e.toString()); - } - - if (statusCode == 409 && isKeyGetData){ - keyRequestError = true; - if (gameIdPostData.length() > 5){ - LoadJosnData(page); - callBackListener.updateConcern(); - }else { - callBackListener.concernNewsData(true); - } - }else { - callBackListener.isLoadOver(true); - callBackListener.isNetworkError(true); - isNetworkError = true; - } - } - }); - AppController.addToRequestQueue(request, NewsFragment.class); - } - - @Override - public int getItemViewType(int position) { - if (position == concernList.size()) { - return 0; - }else { - return 1; - } - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == 0){ - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view); - } - return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.concern_rv_item, parent, false)); - } - - @Override - public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { - - if (holder instanceof ViewHolder){ - - ViewHolder viewHolder = ((ViewHolder) holder); - ConcernEntity concernEntity = concernList.get(position); - - if (concernEntity.getImg().size() == 0) { - viewHolder.contentPicLl.setVisibility(View.GONE); - } else { - viewHolder.contentPicLl.setVisibility(View.VISIBLE); - addContentPic(mContext.getResources().getDisplayMetrics().widthPixels - - DisplayUtils.dip2px(mContext, 34), viewHolder.contentPicLl, concernEntity.getImg()); - } - - ImageUtils.getInstance(mContext).display(concernEntity.getGameIcon(), viewHolder.concernThumb); - viewHolder.concernContent.setText(concernEntity.getContent()); - viewHolder.concernTitle.setText(concernEntity.getGameName()); - SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); - - try { - long today = format.parse(format.format(new Date())).getTime(); - long day = Long.valueOf(concernEntity.getTime() + "000"); - if (day >= today && day < today + 86400 * 1000) { - format.applyPattern("HH:mm"); - viewHolder.concerntTime.setText("今天 " + format.format(day)); - } else if (day >= today - 86400 * 1000 && day < today) { - format.applyPattern("HH:mm"); - viewHolder.concerntTime.setText("昨天 " + format.format(day)); - } else { - format.applyPattern("yyyy年MM月dd日 HH:mm"); - viewHolder.concerntTime.setText(format.format(day)); - } - } catch (ParseException e) { - e.printStackTrace(); - format.applyPattern("yyyy年MM月dd日 HH:mm"); - viewHolder.concerntTime.setText(format.format(Long.valueOf(concernEntity.getTime() + "000"))); - } - - viewHolder.view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(mContext, NewsActivity.class); - intent.putExtra("newsId", concernList.get(position).getId()); - intent.putExtra("entrance", "资讯-关注"); - mContext.startActivity(intent); - } - }); - - }else if (holder instanceof FooterViewHolder){ - - FooterViewHolder viewHolder = ((FooterViewHolder) holder); - if (isNetworkError) { - viewHolder.footerview_progressbar.setVisibility(View.GONE); - viewHolder.footerview_tv_loading.setText("加载失败,点击重试"); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isNetworkError = false; - notifyItemChanged(getItemCount() - 1); - LoadJosnData(page); - } - }); - - } else if (isRemove) { - viewHolder.footerview_progressbar.setVisibility(View.GONE); - viewHolder.footerview_tv_loading.setText("加载完毕"); - viewHolder.itemView.setClickable(false); - } else { - viewHolder.footerview_progressbar.setVisibility(View.VISIBLE); - viewHolder.footerview_tv_loading.setText("加载中..."); - viewHolder.itemView.setClickable(false); - } - } - - } - - @Override - public int getItemCount() { - if (concernList.isEmpty()){ - return 0; - } - return concernList.size()+ 1; - } - - public class ViewHolder extends RecyclerView.ViewHolder { - View view; - ImageView concernThumb; - LinearLayout contentPicLl; - TextView concernTitle, concerntTime, concernContent, concernRead; - - public ViewHolder(View itemView) { - super(itemView); - view = itemView; - concernContent = (TextView) view.findViewById(R.id.concern_rv_item_content); - concernRead = (TextView) view.findViewById(R.id.concern_rv_item_read); - concernThumb = (ImageView) view.findViewById(R.id.concern_rv_item_thumb); - concerntTime = (TextView) view.findViewById(R.id.concern_rv_item_time); - concernTitle = (TextView) view.findViewById(R.id.concern_rv_item_title); - contentPicLl = (LinearLayout) view.findViewById(R.id.concern_rv_item_iv_ll); - } - } - - private void addContentPic(int width, LinearLayout linearLayout, List list) { - - int allSize = list.size(); - LinearLayout ll; - ImageView imageView; - int index = 0; - linearLayout.removeAllViews(); - for (int i = 0; i < Math.ceil(list.size()/ 3.0); i++) { - switch (allSize% 3) { - case 1: - ll = new LinearLayout(mContext); - ll.setOrientation(LinearLayout.HORIZONTAL); - ll.removeAllViews(); - imageView = new ImageView(mContext); - imageView.setLayoutParams(new ViewGroup.LayoutParams(width, width / 2)); - ImageUtils.getInstance(mContext).display(list.get(index), imageView, ImageView.ScaleType.CENTER_CROP); - ll.addView(imageView); - ll.setPadding(DisplayUtils.dip2px(mContext, 2), 0, DisplayUtils.dip2px(mContext, 2), DisplayUtils.dip2px(mContext, 4)); - linearLayout.addView(ll); - allSize = allSize - 1; - index = index + 1; - break; - case 2: - ll = new LinearLayout(mContext); - ll.setOrientation(LinearLayout.HORIZONTAL); - ll.removeAllViews(); - for (int j = 0; j < list.size() % 3; j++) { - imageView = new ImageView(mContext); - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, width / 2 - DisplayUtils.dip2px(mContext, 4)); - layoutParams.setMargins(DisplayUtils.dip2px(mContext, 2), 0, DisplayUtils.dip2px(mContext, 2), DisplayUtils.dip2px(mContext, 4)); - layoutParams.weight = 1; - imageView.setLayoutParams(layoutParams); - ImageUtils.getInstance(mContext).display(list.get(index), imageView, ImageView.ScaleType.CENTER_CROP); - ll.addView(imageView); - index = index + 1; - } - linearLayout.addView(ll); - allSize = allSize - 2; - - break; - case 0: - ll = new LinearLayout(mContext); - ll.setOrientation(LinearLayout.HORIZONTAL); - ll.removeAllViews(); - for (int j = 0; j < 3; j++) { - imageView = new ImageView(mContext); - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, width / 3 - DisplayUtils.dip2px(mContext, 4)); - layoutParams.setMargins(DisplayUtils.dip2px(mContext, 2), 0, DisplayUtils.dip2px(mContext, 2), DisplayUtils.dip2px(mContext, 4)); - layoutParams.weight = 1; - imageView.setLayoutParams(layoutParams); - ImageUtils.getInstance(mContext).display(list.get(index), imageView, ImageView.ScaleType.CENTER_CROP); - ll.addView(imageView); - index = index + 1; - } - linearLayout.addView(ll); - allSize = allSize - 3; - break; - } - } - - } - public interface OnCallBackListener{ - void isLoadOver(boolean loadOver); - void isRemove(boolean remove); - void isNetworkError(boolean netWorkError); - void updateConcern(); - void concernNewsData(boolean noDate);//关注新闻是否为空 - } - -} 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 14c13b3885..eecf875409 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java @@ -1,9 +1,11 @@ package com.gh.gamecenter.news; -import android.content.Intent; 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.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -12,123 +14,211 @@ import android.view.ViewGroup; import android.widget.LinearLayout; 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.common.constant.Config; +import com.gh.common.util.ConcernUtils; +import com.gh.common.util.MD5Utils; +import com.gh.common.util.Utils; 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 com.gh.gamecenter.db.info.ConcernInfo; +import com.gh.gamecenter.manager.ConcernManager; -import de.greenrobot.event.EventBus; +import org.json.JSONArray; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; /** - * Created by khy on 2016/6/29. + * Created by khy on 2016/8/15. */ -public class News4Fragment extends Fragment { +public class News4Fragment extends Fragment implements News4FragmentAdapter.OnCallBackListener{ - private View view; - private RecyclerView news_list; - private News4FragmentAdapter adapter; - private ProgressBarCircularIndeterminate news_pb_loading; - private LinearLayout reuse_no_connection; + private View mView; + private RecyclerView mRecyclerView; + private News4FragmentAdapter mNews4FragmentAdapter; + private LinearLayoutManager mLayoutManager; + private LinearLayout noConnection; private LinearLayout reuse_none_data; + private SwipeRefreshLayout mSwipeRefreshLayout; + private ProgressBarCircularIndeterminate mProgressBar; + private boolean isLoadOver = true; + private boolean isRemove = false; + private boolean isNetworkError = false; + + private int page = 1; + + private List gameIdList; + + private ConcernManager manager; + + private Handler handler = new Handler(){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == 0){ + StringBuffer concernKey = new StringBuffer(); + concernKey.setLength(0); + StringBuffer gameIdPostData = new StringBuffer(); + for (int i = 0, size = gameIdList.size(); i < size; i++){ + if (i < 5) { + gameIdPostData.append(gameIdList.get(i)); + gameIdPostData.append("-"); + } + } + for (int i = 0; i < gameIdList.size(); i++) { + concernKey.append(gameIdList.get(i)); + } + String contentMD5 = MD5Utils.getContentMD5(concernKey.toString()); + + if (gameIdPostData.length() > 0) { + gameIdPostData.deleteCharAt(gameIdPostData.length() - 1); + } + mNews4FragmentAdapter = new News4FragmentAdapter(getActivity(), News4Fragment.this, + contentMD5, gameIdPostData.toString(), page); + mRecyclerView.setAdapter(mNews4FragmentAdapter); + } + } + }; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.fragment_news3, null); + mView = View.inflate(getActivity(), R.layout.fragment_news4, null); + mRecyclerView = (RecyclerView) mView.findViewById(R.id.news4_rv); + mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.news4_swipe_refresh); + mProgressBar = (ProgressBarCircularIndeterminate) mView.findViewById(R.id.news4_pb_loading); + noConnection = (LinearLayout) mView.findViewById(R.id.reuse_no_connection); + reuse_none_data = (LinearLayout) mView.findViewById(R.id.reuse_none_data); + mLayoutManager = new LinearLayoutManager(getActivity()); + mRecyclerView.setLayoutManager(mLayoutManager); - news_pb_loading = (ProgressBarCircularIndeterminate) view.findViewById(R.id.news_pb_loading); + manager = new ConcernManager(getActivity()); - reuse_none_data = (LinearLayout) view.findViewById(R.id.reuse_none_data); - reuse_none_data.setOnClickListener(new View.OnClickListener() { + gameIdList = new ArrayList<>(); + + loadConcernGameId(); + + mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override - public void onClick(View v) { - startActivity(new Intent(getActivity(), ConcernActivity.class)); + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (mNews4FragmentAdapter != null &&newState == RecyclerView.SCROLL_STATE_IDLE + &&mLayoutManager.findLastVisibleItemPosition() + 1 == mNews4FragmentAdapter.getItemCount() + &&isLoadOver &&!isRemove &&!isNetworkError){ + isLoadOver = false; + page++; + mNews4FragmentAdapter.loadJosnData(page); + } } }); - reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); - reuse_no_connection.setOnClickListener(new View.OnClickListener() { + mSwipeRefreshLayout.setColorSchemeResources(R.color.theme); + mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + page = 1; + isRemove = false; + loadConcernGameId(); + } + }); + noConnection.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - news_list.setVisibility(View.VISIBLE); - news_pb_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - adapter = new News4FragmentAdapter(getActivity(), news_list, - news_pb_loading, reuse_no_connection, reuse_none_data, true); - news_list.setAdapter(adapter); + noConnection.setVisibility(View.GONE); + mProgressBar.setVisibility(View.VISIBLE); + handler.postDelayed(new Runnable() { + @Override + public void run() { + isNetworkError = false; + loadConcernGameId(); + } + },1000); + } + }); + } + + private void loadConcernGameId() { + List concernGame = manager.getConcernGame(); + gameIdList.clear(); + for (ConcernInfo concernInfo : concernGame) { + gameIdList.add(concernInfo.getId()); + } + + // 对数据进行排序 + Collections.sort(gameIdList, new Comparator() { + @Override + public int compare(String lhs, String rhs) { + return lhs.compareTo(rhs); } }); - news_list = (RecyclerView) view.findViewById(R.id.news_list); - news_list.setHasFixedSize(true); - news_list.setLayoutManager(new LinearLayoutManager(getActivity())); - adapter = new News4FragmentAdapter(getActivity(), news_list, - news_pb_loading, reuse_no_connection, reuse_none_data, false); - news_list.setAdapter(adapter); - news_list.addItemDecoration(new VerticalItemDecoration(getActivity(), 1)); - - EventBus.getDefault().register(this); + handler.sendEmptyMessage(0); + reuse_none_data.setVisibility(View.GONE); } @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); + container.removeView(mView); } - return view; + return mView; } - //关注改变事件 - public void onEventMainThread(EBConcernChanged busSeven) { - adapter.update(); - } + @Override + public void isLoadOver(boolean loadOver) { + isLoadOver = loadOver; - //安装、卸载事件 - 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(); - } - } + if (mSwipeRefreshLayout != null && mSwipeRefreshLayout.isRefreshing()){ + mSwipeRefreshLayout.setRefreshing(false); } - } - - //连接上网络事件 - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (reuse_no_connection.getVisibility() == 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_pb_loading, reuse_no_connection, reuse_none_data, true); - news_list.setAdapter(adapter); - } + if (mProgressBar != null && mProgressBar.getVisibility() == View.VISIBLE){ + mProgressBar.setVisibility(View.GONE); } } @Override - public void onDestroy() { - super.onDestroy(); - AppController.canclePendingRequests(News4Fragment.class); - EventBus.getDefault().unregister(this); - view = null; - news_list = null; - adapter = null; - news_pb_loading = null; - reuse_no_connection = null; + public void isRemove(boolean remove) { + isRemove = remove; } + + @Override + public void isNetworkError(boolean netWorkError) { + isNetworkError = netWorkError; + if (isNetworkError){ + noConnection.setVisibility(View.VISIBLE); + }else { + noConnection.setVisibility(View.GONE); + } + } + + public void updateConcern() { + String uuid = ConcernUtils.uuid(getActivity()); + + ConcernUtils.updateConcernData(Config.HOST + "v2d0/device/" + uuid + "/concern", new JSONArray(gameIdList), + new ConcernUtils.DownJsonListener() { + @Override + public void downSucced(String str) { + Utils.log("更新设备游戏成功"); + } + + @Override + public void downFailed() { + Utils.log("更新设备游戏失败"); + } + }); + } + + @Override + public void concernNewsData(boolean noDate) { + if (noDate){ + if (mSwipeRefreshLayout.isRefreshing()){ + mSwipeRefreshLayout.setRefreshing(false); + } + reuse_none_data.setVisibility(View.VISIBLE); + } + } + } 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 4fc5fd26fc..6149b2bd8a 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java @@ -2,11 +2,10 @@ package com.gh.gamecenter.news; import android.content.Context; import android.content.Intent; -import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; +import android.text.Html; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; @@ -14,579 +13,335 @@ import android.widget.TextView; 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.DataUtils; import com.gh.common.util.DisplayUtils; -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.gamecenter.ConcernActivity; -import com.gh.gamecenter.GameDetailsActivity; +import com.gh.common.util.Utils; +import com.gh.common.view.CardLinearLayout; +import com.gh.gamecenter.NewsActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.db.info.ConcernInfo; -import com.gh.gamecenter.db.info.GameInfo; -import com.gh.gamecenter.db.info.SuspectedGameInfo; -import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.GameDigestEntity; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.entity.NewsEntity; -import com.gh.gamecenter.manager.ConcernManager; -import com.gh.gamecenter.manager.DataCollectionManager; -import com.gh.gamecenter.manager.GameManager; -import com.gh.gamecenter.manager.SuspectedGameManager; +import com.gh.gamecenter.entity.ConcernEntity; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; -import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.json.JSONArray; -import org.json.JSONObject; import java.lang.reflect.Type; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; +import java.util.Date; import java.util.List; -import java.util.Map; +import java.util.Locale; /** - * - * @author 温冠超 - * @email 294299195@qq.com - * @date 2015-8-5 modified 2015-8-21 资讯首页模块 + * Created by khy on 2016/8/15. */ -public class News4FragmentAdapter extends - RecyclerView.Adapter { +public class News4FragmentAdapter extends RecyclerView.Adapter { - public static class ITEM_TYPE { - public static final int GAME = 1;// 游戏布局类型 - public static final int NEWS = 2;// 游戏新闻列表类型 - public static final int FOOTER = 3;// 刷新布局类型 + private Context mContext; + private List concernList; + public OnCallBackListener callBackListener; + + private String concernKey ; + private String gameIdPostData; + + private boolean keyRequestError = false; + private boolean isKeyGetData = false; + private boolean isNetworkError = false; + private boolean isRemove = false; + + private int page ; + + public News4FragmentAdapter(Context context, News4Fragment newNews4Fragment, String concernKey, String gameIdPostData, int page) { + this.mContext = context; + this.concernKey = concernKey; + this.gameIdPostData = gameIdPostData; + this.page = page; + concernList = new ArrayList<>(); + callBackListener = (OnCallBackListener) newNews4Fragment; + loadJosnData(page); } - private Context context; + public void loadJosnData(final int p) { - private RecyclerView news_list; - private ProgressBarCircularIndeterminate news_pb_loading; - private LinearLayout reuse_no_connection; - private LinearLayout news_tv_none; + page = p; + final String url; - private List concernList; - private List concernGameList; - private ArrayMap> concernNewsMap; - - private ConcernManager concernManager; - - private int count_game;// 游戏+游戏新闻 的数目 - - public News4FragmentAdapter(Context con, - RecyclerView recyclerView, - ProgressBarCircularIndeterminate pbLoading, - LinearLayout linearLayout, - LinearLayout textView, - boolean isLoad) { - context = con; - news_list = recyclerView; - news_pb_loading = pbLoading; - reuse_no_connection = linearLayout; - news_tv_none = textView; - - concernManager = new ConcernManager(context); - concernGameList = new ArrayList(); - concernNewsMap = new ArrayMap>(); - - concernList = new ArrayList(); - - count_game = 0; - - if (isLoad) { - load(); + if (keyRequestError){ + url= Config.HOST+ "v2d0/zixun/guanzhu?"+ "game_id="+ gameIdPostData+ "&limit=10&page="+ page+ "×tamp="+ System.currentTimeMillis(); + isKeyGetData = false; + }else { + url= Config.HOST+ "v2d0/zixun/guanzhu?"+ "key="+ concernKey+ "&limit=10&page="+ page+ "×tamp="+ System.currentTimeMillis(); + isKeyGetData= true; } - } - - public void load() { - // 获取关注的信息 - 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);//空指针 - } - } - - private void sortList(List list) { - Comparator comparator = new Comparator() { - @Override - public int compare(ConcernInfo lhs, ConcernInfo rhs) { - - if (rhs.getWeight() == 2 && lhs.getWeight() == 2) { - return 0; - } else if (rhs.getWeight() == 2 && lhs.getWeight() == 1) { - return 1; - } else if (rhs.getWeight() == 1 && lhs.getWeight() == 2) { - return -1; - } else { - if ("已关注".equals(rhs.getTag()) - && "已安装".equals(lhs.getTag())) { - return 1; - } else if ("已安装".equals(rhs.getTag()) - && "已关注".equals(lhs.getTag())) { - return -1; - } else { - return 0; - } - } - - } - }; - Collections.sort(list, comparator); - } - - 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 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())); - } - } + if (page == 1){ + concernList.clear(); notifyDataSetChanged(); } - SuspectedGameManager manager = new SuspectedGameManager(context); - List list = manager.getAllGame(); - if (list != null && !list.isEmpty()) { - news_pb_loading.setVisibility(View.VISIBLE); - List params = new ArrayList(); - for (SuspectedGameInfo entity : list) { - params.add(entity.getPackageName()); - } - initSuspectedGame(params); - } - } + final JsonArrayExtendedRequest request= new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { - private void initSuspectedGame(final List params) { - count = 0; - final List list = new ArrayList(); - final List useParams = new ArrayList(); - for (int i = 0, size = params.size(); i < size; i++) { - final String packageName = params.get(i); - JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( - TimestampUtils.addTimestamp(Config.HOST - + "v1d45/support/package/" + packageName - + "/game/digest", Constants.GAME_CD), - new Response.Listener() { + Type listType = new TypeToken>() {}.getType(); + Gson gson = new Gson(); + List list = gson.fromJson(response.toString(), listType); - @Override - public void onResponse(JSONObject response) { - count++; - if (response.length() != 0) { - list.add(response); - useParams.add(packageName); - } - if (params.size() == count) { - processingData(list, params, useParams); - } + concernList.addAll(list); + + notifyItemRangeInserted(concernList.size() - list.size(), list.size()); + + callBackListener.isLoadOver(true); + if (concernList.size() == 0){ + callBackListener.concernNewsData(true); + }else { + callBackListener.concernNewsData(false); } - }, new Response.ErrorListener() { - - @Override - public void onErrorResponse(VolleyError error) { - count++; - if (params.size() == count) { - if (list.isEmpty()) { - news_pb_loading.setVisibility(View.GONE); - } else { - processingData(list, params, useParams); + if (list.isEmpty() || (list.size() < 10)) { + notifyItemChanged(getItemCount() - 1); + callBackListener.isRemove(true); + isRemove = true; } } - } - }); - AppController.addToRequestQueue(request, NewsFragment.class); - } - } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + int statusCode = 0; + try { + statusCode = error.networkResponse.statusCode; + } catch (NullPointerException e) { + e.printStackTrace(); + Utils.log("资讯-关注页面出现异常" + e.toString()); + } - private void processingData(List data, List params, - List useParams) { - Gson gson = new Gson(); - ConcernManager manager = new ConcernManager(context); - for (int i = 0, size = data.size(); i < size; i++) { - GameDigestEntity gameDigestEntity = gson.fromJson(data.get(i) - .toString(), GameDigestEntity.class); - GameInfo gameEntity = new GameInfo(); - gameEntity.setId(gameDigestEntity.getId()); - gameEntity.setPackageName(useParams.get(i)); - manager.updateByEntity(gameEntity, false); - } - - SuspectedGameManager suspectedGameManager = new SuspectedGameManager(context); - for (String packageName : params) { - suspectedGameManager.deleteSuspectedGame(packageName); - } - - if (data.size() > 0) { - update(); - } else { - news_pb_loading.setVisibility(View.GONE); - } - } - - public void update() { - news_pb_loading.setVisibility(View.VISIBLE); - 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); - } - } - - private void refreshCount() { - - count_game = 0; - - if (!concernList.isEmpty()) { - int count = 0; - for (int i = 0, size = concernList.size(); i < size; i++) { - count += (concernNewsMap.get(concernList.get(i).getGameName()) - .size() + 1); - } - count_game = count; - } - - notifyDataSetChanged(); - } - - @Override - public int getItemCount() { - if (count_game == 0) { - return 0; - } - return count_game + 1; + if (statusCode == 409 && isKeyGetData) { + keyRequestError = true; + if (gameIdPostData.length() > 5){ + loadJosnData(page); + callBackListener.updateConcern(); + }else { + callBackListener.concernNewsData(true); + } + } else { + callBackListener.isLoadOver(true); + callBackListener.isNetworkError(true); + isNetworkError = true; + } + } + }); + AppController.addToRequestQueue(request, NewsFragment.class); } @Override public int getItemViewType(int position) { - - 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) { - return ITEM_TYPE.GAME; - } else if (position > offset - && position <= concernNewsMap.get( - concernList.get(i).getGameName()).size() - + offset) { - return ITEM_TYPE.NEWS; - } - } + if (position == concernList.size()) { + return 0; + }else { + return 1; } - - return ITEM_TYPE.FOOTER; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int 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 { + if (viewType == 0){ View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view); } + return new ConcernViewHolder(LayoutInflater.from(mContext).inflate(R.layout.concern_rv_item, parent, false)); } @Override - public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { - if (viewHolder instanceof GameNormalViewHolder) { - ((GameNormalViewHolder) viewHolder).initViewHolder(position); - } else if (viewHolder instanceof TextNewsTypeViewHolder) { - ((TextNewsTypeViewHolder) viewHolder).initViewHolder(position); - } else if (viewHolder instanceof FooterViewHolder) { - FooterViewHolder holder = (FooterViewHolder) viewHolder; - holder.footerview_progressbar.setVisibility(View.GONE); - holder.footerview_tv_loading.setText("管理我的关注"); - holder.footerview_tv_loading.setBackgroundResource(R.drawable.border_blue_bg); - int padding = DisplayUtils.dip2px(context, 5); - holder.footerview_tv_loading.setPadding(padding, padding, padding, padding); - holder.footerview_tv_loading.setTextColor(context.getResources().getColor(R.color.theme)); - holder.itemView.setClickable(true); - holder.itemView.setOnClickListener(new OnClickListener() { + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof ConcernViewHolder) { + + ConcernViewHolder viewHolder = ((ConcernViewHolder) holder); + + // 第一个 + if (position == 0) { + ((CardLinearLayout) viewHolder.itemView).setmTop(DisplayUtils.dip2px(mContext, 8)); + } else { + ((CardLinearLayout) viewHolder.itemView).setmTop(0); + } + + // 最后一个 + if (position == concernList.size() - 1) { + ((CardLinearLayout) viewHolder.itemView).setBottom(true); + } else { + ((CardLinearLayout) viewHolder.itemView).setBottom(false); + } + + final ConcernEntity concernEntity = concernList.get(position); + + if (concernEntity.getImg().size() == 0) { + viewHolder.contentPicLl.setVisibility(View.GONE); + } else { + viewHolder.contentPicLl.setVisibility(View.VISIBLE); + addContentPic(mContext.getResources().getDisplayMetrics().widthPixels + - DisplayUtils.dip2px(mContext, 34), viewHolder.contentPicLl, concernEntity.getImg()); + } + + ImageUtils.getInstance(mContext).display(concernEntity.getGameIcon(), viewHolder.concernThumb); + viewHolder.concernContent.setText(Html.fromHtml(concernEntity.getContent())); + viewHolder.concernTitle.setText(concernEntity.getGameName()); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + + try { + long today = format.parse(format.format(new Date())).getTime(); + long day = Long.valueOf(concernEntity.getTime() + "000"); + if (day >= today && day < today + 86400 * 1000) { + format.applyPattern("HH:mm"); + viewHolder.concerntTime.setText("今天 " + format.format(day)); + } else if (day >= today - 86400 * 1000 && day < today) { + format.applyPattern("HH:mm"); + viewHolder.concerntTime.setText("昨天 " + format.format(day)); + } else { + format.applyPattern("yyyy年MM月dd日 HH:mm"); + viewHolder.concerntTime.setText(format.format(day)); + } + } catch (ParseException e) { + e.printStackTrace(); + format.applyPattern("yyyy年MM月dd日 HH:mm"); + viewHolder.concerntTime.setText(format.format(Long.valueOf(concernEntity.getTime() + "000"))); + } + + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - context.startActivity(new Intent(context, ConcernActivity.class)); + Intent intent = new Intent(mContext, NewsActivity.class); + intent.putExtra("newsId", concernEntity.getId()); + intent.putExtra("entrance", "资讯-关注"); + mContext.startActivity(intent); } }); - } - } - private class GameNormalViewHolder extends RecyclerView.ViewHolder { + } else if (holder instanceof FooterViewHolder) { - public ImageView gameThumb; - public TextView gameName; - public LinearLayout labelList; - public ImageView gameInfo; - - public GameNormalViewHolder(View v) { - super(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); - gameInfo = (ImageView) v.findViewById(R.id.gamenormal_game_info); - } - - public void initViewHolder(int position) { - 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) { - if (concernGameList.isEmpty()) { - init(concernList.get(i)); - } else { - init(concernGameList.get(i), concernList.get(i).getTag()); - } - } - } - } - } - - private void init(ConcernInfo concernEntity) { - ImageUtils.getInstance(context).display(concernEntity.getIcon(), gameThumb); - gameName.setText(concernEntity.getGameName()); - String tag = concernEntity.getTag(); - if (tag != null) { - GameViewUtils.setLabelList(context, labelList, tag); - } - itemView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - } - - private void init(final GameEntity entry, String tag) { - ImageUtils.getInstance(context).display(entry.getIcon(), gameThumb); - gameName.setText(entry.getName()); - if (tag != null) { - GameViewUtils.setLabelList(context, labelList, tag); - } - itemView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - - Map kv = new HashMap(); - kv.put("入口", "关注-我的游戏"); - DataUtils.onEvent(context, "游戏详情", entry.getName(), kv); - - Map map = new HashMap(); - map.put("location", "我的游戏"); - map.put("createOn", System.currentTimeMillis() / 1000); - map.put("game", entry.getName()); - map.put("page", "关注"); - DataCollectionManager.onEvent(context, "click-item", map); - - AppController.put("GameEntity", entry); - Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("entrance", "关注-我的游戏"); - intent.putExtra("current", 1); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - }); - } - } - - private class TextNewsTypeViewHolder extends RecyclerView.ViewHolder { - - public TextView newsType; - public TextView newsTitle; - - public TextNewsTypeViewHolder(View v) { - super(v); - - newsType = (TextView) v.findViewById(R.id.news_type); - newsTitle = (TextView) v.findViewById(R.id.news_title); - } - - public void initViewHolder(final int position) { - NewsEntity newsEntity = null; - String from = null; - 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 (newsEntity != null) { - final NewsEntity entity = newsEntity; - final String entrance = from; - newsType.setBackgroundResource(NewsUtils - .getDrawableIdByType(entity.getType())); - newsType.setText(entity.getType()); - newsTitle.setText(entity.getTitle()); - itemView.setOnClickListener(new OnClickListener() { + FooterViewHolder viewHolder = ((FooterViewHolder) holder); + if (isNetworkError) { + viewHolder.footerview_progressbar.setVisibility(View.GONE); + viewHolder.footerview_tv_loading.setText("加载失败,点击重试"); + viewHolder.itemView.setClickable(true); + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Map kv = new HashMap(); - kv.put("文章类型", entity.getType()); - 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", "关注"); - DataCollectionManager.onEvent(context, "click-item", map); - - //统计阅读量 - NewsUtils.statNewsViews(entity.getId()); - NewsUtils.startNewsActivity(context, entity, "资讯-关注-" + entrance); + isNetworkError = false; + notifyItemChanged(getItemCount() - 1); + loadJosnData(page); } }); + + } else if (isRemove) { + viewHolder.footerview_progressbar.setVisibility(View.GONE); + viewHolder.footerview_tv_loading.setText("加载完毕"); + viewHolder.itemView.setClickable(false); + } else { + viewHolder.footerview_progressbar.setVisibility(View.VISIBLE); + viewHolder.footerview_tv_loading.setText("加载中..."); + viewHolder.itemView.setClickable(false); } } } + @Override + public int getItemCount() { + if (concernList.isEmpty()){ + return 0; + } + return concernList.size()+ 1; + } + + public class ConcernViewHolder extends RecyclerView.ViewHolder { + + ImageView concernThumb; + LinearLayout contentPicLl; + TextView concernTitle, concerntTime, concernContent, concernRead; + + public ConcernViewHolder(View itemView) { + super(itemView); + + concernContent = (TextView) itemView.findViewById(R.id.concern_rv_item_content); + concernRead = (TextView) itemView.findViewById(R.id.concern_rv_item_read); + concernThumb = (ImageView) itemView.findViewById(R.id.concern_rv_item_thumb); + concerntTime = (TextView) itemView.findViewById(R.id.concern_rv_item_time); + concernTitle = (TextView) itemView.findViewById(R.id.concern_rv_item_title); + contentPicLl = (LinearLayout) itemView.findViewById(R.id.concern_rv_item_iv_ll); + } + } + + private void addContentPic(int width, LinearLayout linearLayout, List list) { + + int allSize = list.size(); + LinearLayout ll; + ImageView imageView; + int index = 0; + linearLayout.removeAllViews(); + for (int i = 0; i < Math.ceil(list.size()/ 3.0); i++) { + switch (allSize% 3) { + case 1: + ll = new LinearLayout(mContext); + ll.setOrientation(LinearLayout.HORIZONTAL); + ll.removeAllViews(); + imageView = new ImageView(mContext); + imageView.setLayoutParams(new ViewGroup.LayoutParams(width, width / 2)); + ImageUtils.getInstance(mContext).display(list.get(index), imageView, ImageView.ScaleType.CENTER_CROP); + ll.addView(imageView); + ll.setPadding(DisplayUtils.dip2px(mContext, 2), 0, DisplayUtils.dip2px(mContext, 2), DisplayUtils.dip2px(mContext, 4)); + linearLayout.addView(ll); + allSize = allSize - 1; + index = index + 1; + break; + case 2: + ll = new LinearLayout(mContext); + ll.setOrientation(LinearLayout.HORIZONTAL); + ll.removeAllViews(); + for (int j = 0; j < list.size() % 3; j++) { + imageView = new ImageView(mContext); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, width / 2 - DisplayUtils.dip2px(mContext, 4)); + layoutParams.setMargins(DisplayUtils.dip2px(mContext, 2), 0, DisplayUtils.dip2px(mContext, 2), DisplayUtils.dip2px(mContext, 4)); + layoutParams.weight = 1; + imageView.setLayoutParams(layoutParams); + ImageUtils.getInstance(mContext).display(list.get(index), imageView, ImageView.ScaleType.CENTER_CROP); + ll.addView(imageView); + index = index + 1; + } + linearLayout.addView(ll); + allSize = allSize - 2; + + break; + case 0: + ll = new LinearLayout(mContext); + ll.setOrientation(LinearLayout.HORIZONTAL); + ll.removeAllViews(); + for (int j = 0; j < 3; j++) { + imageView = new ImageView(mContext); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, width / 3 - DisplayUtils.dip2px(mContext, 4)); + layoutParams.setMargins(DisplayUtils.dip2px(mContext, 2), 0, DisplayUtils.dip2px(mContext, 2), DisplayUtils.dip2px(mContext, 4)); + layoutParams.weight = 1; + imageView.setLayoutParams(layoutParams); + ImageUtils.getInstance(mContext).display(list.get(index), imageView, ImageView.ScaleType.CENTER_CROP); + ll.addView(imageView); + index = index + 1; + } + linearLayout.addView(ll); + allSize = allSize - 3; + break; + } + } + + } + public interface OnCallBackListener{ + void isLoadOver(boolean loadOver); + void isRemove(boolean remove); + void isNetworkError(boolean netWorkError); + void updateConcern(); + void concernNewsData(boolean noDate);//关注新闻是否为空 + } + } 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 7aad647ca4..a095508a1f 100644 --- a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java @@ -237,7 +237,7 @@ public class NewsFragment extends Fragment implements View.OnClickListener, View return new News3Fragment(); } else { // return new News4Fragment(); - return new NewNews4Fragment(); + return new News4Fragment(); } } diff --git a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java index 1fb85cbabe..172fe2a64f 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java @@ -1,8 +1,11 @@ package com.gh.gamecenter.personal; 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.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -10,20 +13,34 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; +import com.gh.base.BaseFragment; +import com.gh.common.constant.Constants; import com.gh.common.util.DisplayUtils; +import com.gh.common.util.DownloadItemUtils; import com.gh.common.util.Utils; +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.DismissEntity; +import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.eventbus.EBMoveTop; +import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBPWDismiss; +import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBSlide; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.LinkedBlockingQueue; + import de.greenrobot.event.EventBus; /** * Created by LGT on 2016/8/12. */ -public class ConcernFragment extends Fragment { +public class ConcernFragment extends BaseFragment { - private View view; private RecyclerView fm_concern_rv_show; private LinearLayoutManager linearLayoutManager; private ConcernFragmentAdapter adapter; @@ -32,18 +49,39 @@ public class ConcernFragment extends Fragment { private int dis; private int distance; + private boolean isEverpause; + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(HashMap downloadingEntries) { + for (Map.Entry entry : downloadingEntries.entrySet()) { + DownloadEntry downloadEntry = entry.getValue(); + + Integer location = adapter.getLocationMap().get(downloadEntry.getName()); + if (location != null) { + GameEntity detailedEntity = adapter.getGameList().get(location); + if (detailedEntity != null) { + DownloadItemUtils.processDate(getActivity(), detailedEntity, downloadEntry, + adapter, location + 2, adapter.getStatusMap()); + } + } + } + } + }; + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - view = View.inflate(getActivity(), R.layout.fm_concern, null); + isEverpause = false; + + init(R.layout.fm_concern); topMargin = 0; dis = 0; distance = DisplayUtils.dip2px(getActivity(), 230) - DisplayUtils.getInternalDimensionSize(getActivity().getResources(), "status_bar_height"); - fm_concern_rv_show = (RecyclerView) view.findViewById(R.id.fm_concern_rv_show); fm_concern_rv_show.setHasFixedSize(true); linearLayoutManager = new LinearLayoutManager(getActivity()); fm_concern_rv_show.setLayoutManager(linearLayoutManager); @@ -85,16 +123,12 @@ public class ConcernFragment extends Fragment { } }); - EventBus.getDefault().register(this); } - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (container != null) { - container.removeView(view); + public void onEventMainThread(EBPWDismiss dismiss) { + if (adapter != null) { + adapter.getDismissEntity().setShow(false); } - return view; } public void onEventMainThread(EBSlide busOne) { @@ -113,10 +147,54 @@ public class ConcernFragment extends Fragment { } } + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + + } + } + + //安装、卸载事件 + 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())) { + + } else if ("卸载".equals(busFour.getType())) { + + } + } + } + } + + @Override + public void onResume() { + super.onResume(); + if (isEverpause) { + //修改游戏下载状态 + DownloadItemUtils.initializeGameMap(getActivity(), adapter.getGameMap()); + for (GameEntity entity : adapter.getGameList()) { + entity.setEntryMap(adapter.getGameMap().get(entity.getName())); + } + adapter.notifyDataSetChanged(); + } + isEverpause = false; + DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); + } + + @Override + public void onPause() { + super.onPause(); + isEverpause = true; + adapter.getStatusMap().clear(); + DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); + } + @Override public void onDestroy() { super.onDestroy(); - EventBus.getDefault().unregister(this); } } diff --git a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java index 7d9a23dc8e..f42c4267a1 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.personal; import android.content.Context; import android.content.Intent; +import android.support.v4.util.ArrayMap; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -18,11 +19,13 @@ import com.gh.common.constant.Config; import com.gh.common.constant.Constants; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; +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.common.view.CardLinearLayout; +import com.gh.download.DownloadEntry; import com.gh.gamecenter.ConcernActivity; import com.gh.gamecenter.GameDetailsActivity; import com.gh.gamecenter.R; @@ -30,8 +33,12 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; 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.manager.ConcernManager; +import com.gh.gamecenter.manager.GameManager; import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; import com.google.gson.Gson; @@ -41,6 +48,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.LinkedBlockingQueue; /** * Created by LGT on 2016/8/15. @@ -54,6 +62,14 @@ public class ConcernFragmentAdapter extends RecyclerView.Adapter concernList; private List gameList; + //下载用到的map + private ArrayMap> gameMap; + private ArrayMap statusMap; + private ArrayMap locationMap; + private ArrayMap nameMap; + + private DismissEntity dismissEntity; + private boolean isRemove; public ConcernFragmentAdapter(Context context, RecyclerView recyclerView) { @@ -65,6 +81,15 @@ public class ConcernFragmentAdapter extends RecyclerView.Adapter(); + locationMap = new ArrayMap<>(); + gameMap = new ArrayMap<>(); + nameMap = new ArrayMap<>(); + statusMap = new ArrayMap<>(); + dismissEntity = new DismissEntity(false); + + //初始化gamemap + DownloadItemUtils.initializeGameMap(context, gameMap); + ConcernManager concernManager = new ConcernManager(context); concernList = concernManager.getConcernGame(); @@ -128,9 +153,30 @@ public class ConcernFragmentAdapter extends RecyclerView.Adapter kv = new HashMap(); + Map kv = new HashMap<>(); kv.put("名字", entity.getName()); kv.put("位置", i + 1); - DataUtils.onEvent(context, "点击", "我的光环-已安装", kv); + DataUtils.onEvent(context, "点击", "我的光环-已关注", kv); if (entity.getPluginPlatform() != null) { Intent intent = new Intent(context, GameDetailsActivity.class); intent.putExtra("gameId", entity.getId()); - intent.putExtra("entrance", "我的光环-已安装"); + intent.putExtra("entrance", "我的光环-已关注"); context.startActivity(intent); } else { AppController.put("GameEntity", entity); Intent intent = new Intent(context, GameDetailsActivity.class); - intent.putExtra("entrance", "我的光环-已安装"); + 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, -// this, -// statusMap, platformMap, "我的光环-已安装", -// dismissEntity, "我的光环-已安装" + ":" + entity.getName()); + DownloadItemUtils.setOnClickListener(context, holder.downloadBtn, + holder.download_speed, holder.download_percentage, entity, i, + this, statusMap, "我的光环-已关注", + 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, entity.getPluginPlatform() != null); + DownloadItemUtils.updateItem(context, holder.gameDes, + holder.game_progressbar, holder.game_ll_info, holder.download_speed, + holder.download_percentage, holder.downloadBtn, entity, statusMap, true); + } + + public ArrayMap getLocationMap() { + return locationMap; + } + + public ArrayMap> getGameMap() { + return gameMap; + } + + public ArrayMap getNameMap() { + return nameMap; + } + + public ArrayMap getStatusMap() { + return statusMap; + } + + public DismissEntity getDismissEntity() { + return dismissEntity; + } + + public List getGameList() { + return gameList; } } diff --git a/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java index d53b6b2fa6..fc2cb67d2a 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java @@ -70,8 +70,8 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter(); - sortedList = new ArrayList(); + gameList = new ArrayList<>(); + sortedList = new ArrayList<>(); isRemove = false; @@ -82,7 +82,7 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter ids = new ArrayList(); + List ids = new ArrayList<>(); for (MyGameInfo info : sortedList) { if (!ids.contains(info.getGame_id())) { ids.add(info.getGame_id()); @@ -97,10 +97,10 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter signatureList = new ArrayList(); - ArrayList unsignatureList = new ArrayList(); - ArrayList noopenList = new ArrayList(); - ArrayList oftenuseList = new ArrayList(); + ArrayList signatureList = new ArrayList<>(); + ArrayList unsignatureList = new ArrayList<>(); + ArrayList noopenList = new ArrayList<>(); + ArrayList oftenuseList = new ArrayList<>(); PackageManager pManager = new PackageManager(context); TrafficUtils tUtils = TrafficUtils.getInstance(context); @@ -176,7 +176,7 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter ids) { - final List result = new ArrayList(); + final List result = new ArrayList<>(); final int size = ids.size(); count = 0; for (int i = 0; i < ids.size(); i++) { @@ -184,7 +184,6 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter() { - @Override public void onResponse(JSONObject response) { result.add(response); @@ -193,21 +192,21 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter data) { Gson gson = new Gson(); - List gameList = new ArrayList(); + List gameList = new ArrayList<>(); for (int i = 0, size = data.size(); i < size; i++) { gameList.add(gson.fromJson(data.get(i).toString(), GameEntity.class)); } @@ -228,7 +227,7 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter 1) { for (ApkEntity apkEntity : newEntity.getApk()) { if (sortedList.get(i).getPackage_name().equals(apkEntity.getPackageName())) { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); list.add(apkEntity); newEntity.setApk(list); break; @@ -250,19 +249,19 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter> map = new ArrayMap>(); - ArrayList keys = new ArrayList(); + ArrayMap> map = new ArrayMap<>(); + ArrayList keys = new ArrayList<>(); ArrayList list; for (GameEntity gameEntity : this.gameList) { list = map.get(gameEntity.getId()); if (list == null) { - list = new ArrayList(); + list = new ArrayList<>(); map.put(gameEntity.getId(), list); keys.add(gameEntity.getId()); } list.add(gameEntity); } - list = new ArrayList(); + list = new ArrayList<>(); for (String key : keys) { list.addAll(map.get(key)); } @@ -375,7 +374,7 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter kv = new HashMap(); + Map kv = new HashMap<>(); kv.put("名字", entity.getName()); kv.put("位置", i + 1); DataUtils.onEvent(context, "点击", "我的光环-已安装", kv); diff --git a/app/src/main/res/drawable-hdpi/collection_colse.png b/app/src/main/res/drawable-hdpi/collection_colse.png new file mode 100644 index 0000000000..73e975cc10 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/collection_colse.png differ diff --git a/app/src/main/res/drawable-hdpi/open_collection.png b/app/src/main/res/drawable-hdpi/collection_open.png similarity index 100% rename from app/src/main/res/drawable-hdpi/open_collection.png rename to app/src/main/res/drawable-hdpi/collection_open.png diff --git a/app/src/main/res/drawable-hdpi/colse_collection.png b/app/src/main/res/drawable-hdpi/colse_collection.png deleted file mode 100644 index 6d7bb065d5..0000000000 Binary files a/app/src/main/res/drawable-hdpi/colse_collection.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/frame_left.png b/app/src/main/res/drawable-hdpi/frame_left.png index 115d1257f0..44009408ec 100644 Binary files a/app/src/main/res/drawable-hdpi/frame_left.png and b/app/src/main/res/drawable-hdpi/frame_left.png differ diff --git a/app/src/main/res/drawable-xhdpi/logo_black.png b/app/src/main/res/drawable-xhdpi/logo_black.png index d41c3f1446..46011adf3b 100644 Binary files a/app/src/main/res/drawable-xhdpi/logo_black.png and b/app/src/main/res/drawable-xhdpi/logo_black.png differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ace250cf88..87aeec32b9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,7 +30,7 @@ android:baselineAligned="false" > - + android:orientation="vertical" + android:background="@drawable/reuse_listview_item_style" + android:paddingLeft="12dp" + android:paddingRight="12dp" + android:paddingTop="15dp" + android:paddingBottom="15dp" + app:left="8dp" + app:bottom="8dp" + app:right="8dp"> - - - - + android:layout_height="wrap_content"> + + + + + + - - - - - - - - + + + + + + + + - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/plugin1_fragment.xml b/app/src/main/res/layout/fragment_game.xml similarity index 86% rename from app/src/main/res/layout/plugin1_fragment.xml rename to app/src/main/res/layout/fragment_game.xml index 18c43643c6..71dab34d6b 100644 --- a/app/src/main/res/layout/plugin1_fragment.xml +++ b/app/src/main/res/layout/fragment_game.xml @@ -4,19 +4,19 @@ android:layout_height="match_parent" > - - + + - + android:layout_height="wrap_content" + android:background="@color/background"> + + - - - + - + - + - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/game_download_item.xml b/app/src/main/res/layout/game_download_item.xml index ffabaa0eaa..712628a477 100644 --- a/app/src/main/res/layout/game_download_item.xml +++ b/app/src/main/res/layout/game_download_item.xml @@ -57,7 +57,7 @@ android:layout_height="18dp" android:layout_marginRight="7dp" android:layout_marginTop="7dp" - android:src="@drawable/open_collection" + android:src="@drawable/collection_open" android:visibility="gone" android:layout_alignParentRight="true" android:gravity="center"/>