diff --git a/app/src/main/java/com/gh/base/DetailActivity.java b/app/src/main/java/com/gh/base/DetailActivity.java index 17827f8e9f..11d68890f5 100644 --- a/app/src/main/java/com/gh/base/DetailActivity.java +++ b/app/src/main/java/com/gh/base/DetailActivity.java @@ -195,8 +195,8 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic } } else { if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 - && !PackageUtils.isSignature(this, gameEntity.getApk().get(0).getPackageName()) - ) { + && !TextUtils.isEmpty(gameEntity.getApk().get(0).getGhVersion()) + && !PackageUtils.isSignature(this, gameEntity.getApk().get(0).getPackageName())) { if (TextUtils.isEmpty(downloadAddWord)) { detail_tv_download.setBackgroundResource( R.drawable.game_item_btn_plugin_style); @@ -276,6 +276,7 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic break; case cancel: case hijack: + case notfound: initDownload(false); break; default: diff --git a/app/src/main/java/com/gh/base/HomeFragment.java b/app/src/main/java/com/gh/base/HomeFragment.java index 419b70be49..ac137cc18d 100644 --- a/app/src/main/java/com/gh/base/HomeFragment.java +++ b/app/src/main/java/com/gh/base/HomeFragment.java @@ -196,7 +196,6 @@ public class HomeFragment extends Fragment implements View.OnClickListener { } public void onEventMainThread(EBDownloadStatus status) { - downloadHint = (TextView) view.findViewById(R.id.action_tip); int updateSize = PackageManager.getUpdateListSize(); int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { diff --git a/app/src/main/java/com/gh/common/constant/ItemViewType.java b/app/src/main/java/com/gh/common/constant/ItemViewType.java new file mode 100644 index 0000000000..8f0afd3f38 --- /dev/null +++ b/app/src/main/java/com/gh/common/constant/ItemViewType.java @@ -0,0 +1,24 @@ +package com.gh.common.constant; + +/** + * Created by LGT on 2016/10/16. + */ +public class ItemViewType { + + public static final int COLUMN_HEADER = 0; // 专题头部布局 + public static final int GAME_SLIDE = 1; // 滚动图布局 + public static final int GAME_NORMAL = 2; // 正常游戏布局 + public static final int GAME_TEST = 3; // 测试游戏布局 + public static final int GAME_IMAGE = 4; // 游戏大图布局 + public static final int NEWS_HEADER = 5; // 新闻头部布局 + public static final int NEWS_TEXT = 6; // 新闻文本布局 + public static final int NEWS_IMAGE = 7; // 新闻带图布局 + public static final int NEWS_IMAGE1 = 8; // 新闻带一张小图布局 + public static final int NEWS_IMAGE2 = 9; // 新闻带三张小图布局 + public static final int NEWS_IMAGE3 = 10; // 新闻带一张大图布局 + public static final int NEWS_DIGEST = 11; // 新闻摘要布局 + public static final int SEARCH_NORMAL = 12; // 搜索正常布局 + public static final int SEARCH_DELETE = 13; // 清空历史记录布局 + public static final int LOADING = 14; // 加载布局 + +} 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 90a70b1b4d..6ad6574943 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -120,7 +120,8 @@ public class DownloadItemUtils { downloadBtn.setText("插件化"); DownloadEntity downloadEntity = DownloadManager.getInstance(context).getByPackage( gameEntity.getApk().get(0).getPackageName()); - if (downloadEntity == null) { + if (downloadEntity == null + || downloadEntity.getUrl().equals(gameEntity.getApk().get(0).getUrl())) { downloadBtn.setClickable(true); downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); } else { @@ -133,11 +134,13 @@ public class DownloadItemUtils { downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); } else { if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 + && !TextUtils.isEmpty(gameEntity.getApk().get(0).getGhVersion()) && !PackageUtils.isSignature(context, gameEntity.getApk().get(0).getPackageName())) { downloadBtn.setText("插件化"); DownloadEntity downloadEntity = DownloadManager.getInstance(context).getByPackage( gameEntity.getApk().get(0).getPackageName()); - if (downloadEntity == null) { + if (downloadEntity == null + || downloadEntity.getUrl().equals(gameEntity.getApk().get(0).getUrl())) { downloadBtn.setClickable(true); downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); } else { @@ -602,8 +605,8 @@ public class DownloadItemUtils { if (FileUtils.isEmptyFile(path)) { Toast.makeText(context, "解析包出错(可能被误删了),请重新下载", Toast.LENGTH_SHORT).show(); DownloadManager.getInstance(context).cancel(downloadEntity.getUrl()); - if (gameEntity.getEntryMap() != null && !gameEntity.getEntryMap().isEmpty()) { - gameEntity.getEntryMap().remove(gameEntity.getEntryMap().keyAt(0)); + if (gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(gameEntity.getApk().get(0).getPlatform()); } adapter.notifyItemChanged(position); } else { diff --git a/app/src/main/java/com/gh/download/DownloadStatus.java b/app/src/main/java/com/gh/download/DownloadStatus.java index b38dd71a5f..bd331efb27 100644 --- a/app/src/main/java/com/gh/download/DownloadStatus.java +++ b/app/src/main/java/com/gh/download/DownloadStatus.java @@ -1,5 +1,5 @@ package com.gh.download; public enum DownloadStatus { - add, pause, cancel, downloading, done, waiting, resume, timeout, neterror, hijack + add, pause, cancel, downloading, done, waiting, resume, timeout, neterror, hijack, notfound } diff --git a/app/src/main/java/com/gh/download/DownloadTask.java b/app/src/main/java/com/gh/download/DownloadTask.java index 7a8d7b7201..cd287ba6dc 100644 --- a/app/src/main/java/com/gh/download/DownloadTask.java +++ b/app/src/main/java/com/gh/download/DownloadTask.java @@ -119,7 +119,8 @@ public class DownloadTask implements DownloadListener { @Override public void onStatusChanged(DownloadStatus status, String error) { if (status == DownloadStatus.cancel - || status == DownloadStatus.hijack) { + || status == DownloadStatus.hijack + || status == DownloadStatus.notfound) { entry.setProgress(0); entry.setPercent(0); FileUtils.deleteFile(entry.getPath()); diff --git a/app/src/main/java/com/gh/download/DownloadThread.java b/app/src/main/java/com/gh/download/DownloadThread.java index 9398640d06..27ec069a5f 100644 --- a/app/src/main/java/com/gh/download/DownloadThread.java +++ b/app/src/main/java/com/gh/download/DownloadThread.java @@ -13,6 +13,7 @@ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; @@ -38,6 +39,8 @@ public class DownloadThread extends Thread { public void run() { super.run(); + BufferedInputStream bis = null; + BufferedOutputStream bos = null; try { File targetFile = new File(entry.getPath()); if (!targetFile.exists()) { @@ -47,13 +50,12 @@ public class DownloadThread extends Thread { } } - FileOutputStream fileOutputStream; - if (targetFile.length() > 0) { - fileOutputStream = new FileOutputStream(entry.getPath(), true); - } else { - fileOutputStream = new FileOutputStream(entry.getPath()); + if (TextUtils.isEmpty(entry.getUrl())) { + listener.onStatusChanged(DownloadStatus.notfound); + Utils.log(DownloadThread.class.getSimpleName(), + "error-->url is empty"); + return; } - URL url = new URL(entry.getUrl()); Utils.log("url = " + entry.getUrl()); @@ -92,11 +94,24 @@ public class DownloadThread extends Thread { "startPosition-->" + targetFile.length()); //设置自动重定向 connection.setInstanceFollowRedirects(true); + + code = connection.getResponseCode(); + } + if (code == HttpStatus.SC_NOT_FOUND) { + // 404 Not Found + listener.onStatusChanged(DownloadStatus.notfound); + Utils.log(DownloadThread.class.getSimpleName(), + "error-->404 Not Found"); + return; + } + + bis = new BufferedInputStream(connection.getInputStream()); + if (targetFile.length() > 0) { + bos = new BufferedOutputStream(new FileOutputStream(entry.getPath(), true)); + } else { + bos = new BufferedOutputStream(new FileOutputStream(entry.getPath())); } - BufferedInputStream bis = new BufferedInputStream(connection.getInputStream()); - BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); - long conentLength = connection.getContentLength(); String eTag = connection.getHeaderField("ETag"); if (!TextUtils.isEmpty(eTag) && eTag.startsWith("\"") && eTag.endsWith("\"")) { eTag = eTag.substring(1, eTag.length() - 1); @@ -109,45 +124,41 @@ public class DownloadThread extends Thread { listener.onStatusChanged(DownloadStatus.hijack); Utils.log(DownloadThread.class.getSimpleName(), "error-->链接被劫持"); - interrupt(); - } else { - // 第一次下载记录文件长度 - if (entry.getSize() == 0) { - entry.setSize(conentLength); - DownloadDao.getInstance(context).newOrUpdate(entry); - Utils.log(DownloadThread.class.getSimpleName(), - "记录第一次长度"); - } - Utils.log(DownloadThread.class.getSimpleName(), - "progress:" + entry.getProgress() + "/curfilesize:" - + targetFile.length() + "=====contentLength:" - + conentLength + "/ totalSize:" + entry.getSize()); - - byte[] buffer = new byte[2048]; - int len; - while ((len = bis.read(buffer)) != -1) { - bos.write(buffer, 0, len); - listener.onProgressChanged(targetFile.length(), len); - if (status == DownloadStatus.pause - || status == DownloadStatus.cancel) { - listener.onStatusChanged(status); - break; - } - } - bos.flush(); - Utils.log(DownloadThread.class.getSimpleName(), - "flush==>" + targetFile.length() + ",progress==>" - + entry.getProgress() + ",size==>" + entry.getSize()); + return; + } - bis.close(); - bos.close(); -// if (status != DownloadStatus.pause && status != DownloadStatus.cancel) { -// listener.onStatusChanged(DownloadStatus.done); -// } - if (targetFile.length() == entry.getSize()) { - listener.onStatusChanged(DownloadStatus.done); + long conentLength = connection.getContentLength(); + // 第一次下载记录文件长度 + if (entry.getSize() == 0) { + entry.setSize(conentLength); + DownloadDao.getInstance(context).newOrUpdate(entry); + Utils.log(DownloadThread.class.getSimpleName(), + "记录第一次长度"); + } + Utils.log(DownloadThread.class.getSimpleName(), + "progress:" + entry.getProgress() + "/curfilesize:" + + targetFile.length() + "=====contentLength:" + + conentLength + "/ totalSize:" + entry.getSize()); + + byte[] buffer = new byte[2048]; + int len; + while ((len = bis.read(buffer)) != -1) { + bos.write(buffer, 0, len); + listener.onProgressChanged(targetFile.length(), len); + if (status == DownloadStatus.pause + || status == DownloadStatus.cancel) { + listener.onStatusChanged(status); + break; } } + bos.flush(); + Utils.log(DownloadThread.class.getSimpleName(), + "flush==>" + targetFile.length() + ",progress==>" + + entry.getProgress() + ",size==>" + entry.getSize()); + + if (targetFile.length() == entry.getSize()) { + listener.onStatusChanged(DownloadStatus.done); + } } catch (Exception e) { String errorMsg = Log.getStackTraceString(e); @@ -159,6 +170,21 @@ public class DownloadThread extends Thread { } Utils.log(DownloadThread.class.getSimpleName(), "exception-->" + e.toString()); + } finally { + if (bis != null) { + try { + bis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (bos != null) { + try { + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 3272a181e0..8a69932fd5 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -53,7 +53,6 @@ import com.gh.download.DownloadManager; import com.gh.download.DownloadStatus; 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.AppEntity; import com.gh.gamecenter.entity.GameDigestEntity; @@ -71,7 +70,6 @@ import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.FilterManager; import com.gh.gamecenter.manager.GameManager; import com.gh.gamecenter.manager.PackageManager; -import com.gh.gamecenter.manager.SuspectedGameManager; import com.gh.gamecenter.news.NewsFragment; import com.gh.gamecenter.personal.PersonalFragment; import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; @@ -141,10 +139,17 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(DownloadEntity downloadEntity) { - // 链接被劫持 if (DownloadStatus.hijack.equals(downloadEntity.getStatus())) { + // 链接被劫持 processHijack(downloadEntity); return; + } else if (DownloadStatus.notfound.equals(downloadEntity.getStatus())) { + // 404 Not Found + // 删除任务 + downloadEntity.setStatus(DownloadStatus.cancel); + DownloadManager.getInstance(getApplicationContext()).cancel(downloadEntity.getUrl()); + toast("该链接已失效!请联系管理员。"); + return; } else if (DownloadStatus.neterror.equals(downloadEntity.getStatus()) || DownloadStatus.timeout.equals(downloadEntity.getStatus())) { toast("网络不稳定,下载任务已暂停"); @@ -344,9 +349,14 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene } } if (downloadEntity != null) { - String msg = "《" + downloadEntity.getName() + "-" - + PlatformUtils.getInstance(getApplicationContext()).getPlatformName(downloadEntity.getPlatform()) - + "》已下载完但还未安装,是否立即安装?"; + String msg; + if (downloadEntity.isPlugin()) { + msg = "《" + downloadEntity.getName() + "-" + + PlatformUtils.getInstance(getApplicationContext()).getPlatformName(downloadEntity.getPlatform()) + + "》已下载完但还未安装,是否立即安装?"; + } else { + msg = "《" + downloadEntity.getName() + "》已下载完但还未安装,是否立即安装?"; + } final String path = downloadEntity.getPath(); DialogUtils.showWarningDialog(this, "提示", msg, "直接退出", "立即安装", new DialogUtils.ConfiremListener() { @@ -556,10 +566,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene } private void updateConcern() { - // 移除疑似游戏数据库中所有数据 - SuspectedGameManager suspectedGameManager = new SuspectedGameManager(getApplicationContext()); - suspectedGameManager.deleteAll(); - ArrayList concernIdList = new ArrayList<>(); for (ConcernInfo entity : concernManager.getAllConcern()) { concernIdList.add(entity.getId()); @@ -716,43 +722,41 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene } private void checkGameUpdate() { - ArrayList list = new ArrayList<>(); List infos = concernManager.getInstalledGame(); for (ConcernInfo info : infos) { for (String packageName : info.getPackageNames().keySet()) { if (info.getPackageNames().get(packageName) && PackageUtils.getMetaData(this, packageName, "gh_version") != null) { - list.add(packageName); + checkGameUpdate(packageName); } } } + } - Object gh_id; - for (String packageName : list) { - gh_id = PackageUtils.getMetaData(this, packageName, "gh_id"); - String url; - if (gh_id == null) { - url = Config.HOST + "update/package/" + packageName; - } else { - url = Config.HOST + "update/game/" + gh_id + "/package/" + packageName; - } - JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, - new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - if (response.length() != 0) { - Gson gson = new Gson(); - GameUpdateEntity gameUpdateEntity = gson.fromJson( - response.toString(), GameUpdateEntity.class); - if (PackageUtils.isCanUpdate(MainActivity.this, gameUpdateEntity)) { - PackageManager.addUpdate(gameUpdateEntity); - EventBus.getDefault().post(new EBDownloadStatus("update")); - } + private void checkGameUpdate(String packageName) { + Object gh_id = PackageUtils.getMetaData(this, packageName, "gh_id"); + String url; + if (gh_id == null) { + url = Config.HOST + "update/package/" + packageName; + } else { + url = Config.HOST + "update/game/" + gh_id + "/package/" + packageName; + } + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + if (response.length() != 0) { + Gson gson = new Gson(); + GameUpdateEntity gameUpdateEntity = gson.fromJson( + response.toString(), GameUpdateEntity.class); + if (PackageUtils.isCanUpdate(MainActivity.this, gameUpdateEntity)) { + PackageManager.addUpdate(gameUpdateEntity); + EventBus.getDefault().post(new EBDownloadStatus("update")); } } - }, null); - AppController.addToRequestQueue(request, TAG); - } + } + }, null); + AppController.addToRequestQueue(request, TAG); } private int count; @@ -810,25 +814,12 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene && gameEntity.getApk() != null) { map = info.getPackageNames(); for (String key : map.keySet()) { - if (map.get(key) && !PackageUtils.isSignature(this, key)) { + if (map.get(key)) { for (ApkEntity apkEntity : gameEntity.getApk()) { - if (apkEntity.getPackageName().equals(key)) { - GameUpdateEntity gameUpdateEntity = new GameUpdateEntity(); - gameUpdateEntity.setId(gameEntity.getId()); - gameUpdateEntity.setIcon(gameEntity.getIcon()); - gameUpdateEntity.setName(gameEntity.getName()); - gameUpdateEntity.setPackageName(apkEntity.getPackageName()); - gameUpdateEntity.setSize(apkEntity.getSize()); - gameUpdateEntity.setVersion(apkEntity.getVersion()); - gameUpdateEntity.setGhVersion(apkEntity.getGhVersion()); - gameUpdateEntity.setUrl(apkEntity.getUrl()); - gameUpdateEntity.setPlatform(apkEntity.getPlatform()); - gameUpdateEntity.setEtag(apkEntity.getEtag()); - gameUpdateEntity.setPluggable(true); - gameUpdateEntity.setTag(gameEntity.getTag()); - gameUpdateEntity.setBrief(gameEntity.getBrief()); - - PackageManager.addUpdate(gameUpdateEntity); + if (apkEntity.getPackageName().equals(key) + && !TextUtils.isEmpty(apkEntity.getGhVersion()) + && !PackageUtils.isSignature(this, apkEntity.getPackageName())) { + PackageManager.addUpdate(getGameUpdateEntity(gameEntity, apkEntity)); break; } } @@ -843,6 +834,24 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene EventBus.getDefault().post(new EBDownloadStatus("plugin")); } + private GameUpdateEntity getGameUpdateEntity(GameEntity gameEntity, ApkEntity apkEntity) { + GameUpdateEntity gameUpdateEntity = new GameUpdateEntity(); + gameUpdateEntity.setId(gameEntity.getId()); + gameUpdateEntity.setIcon(gameEntity.getIcon()); + gameUpdateEntity.setName(gameEntity.getName()); + gameUpdateEntity.setPackageName(apkEntity.getPackageName()); + gameUpdateEntity.setSize(apkEntity.getSize()); + gameUpdateEntity.setVersion(apkEntity.getVersion()); + gameUpdateEntity.setGhVersion(apkEntity.getGhVersion()); + gameUpdateEntity.setUrl(apkEntity.getUrl()); + gameUpdateEntity.setPlatform(apkEntity.getPlatform()); + gameUpdateEntity.setEtag(apkEntity.getEtag()); + gameUpdateEntity.setPluggable(true); + gameUpdateEntity.setTag(gameEntity.getTag()); + gameUpdateEntity.setBrief(gameEntity.getBrief()); + return gameUpdateEntity; + } + @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); @@ -1401,7 +1410,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene DownloadManager.getInstance(getApplicationContext()).cancel( mDownloadEntity.getUrl(), sp.getBoolean("autodelete", true)); } - } else if ("卸载".equals(busFour.getType())) { Map kv6 = new HashMap<>(); kv6.put("安装或卸载", "卸载完成"); @@ -1412,45 +1420,19 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene } if ("安装".equals(busFour.getType())) { GameManager gameManager = new GameManager(getApplicationContext()); - GameInfo gameEntity = gameManager.findGame(packageName); - if (gameEntity != null) { - concernManager.updateByEntity(gameEntity); - } else { - FilterManager filterManager = new FilterManager(getApplicationContext()); - if (!filterManager.isFilter(packageName)) { - SuspectedGameManager suspectedGameManager = new SuspectedGameManager(getApplicationContext()); - suspectedGameManager.addGame(new SuspectedGameInfo( - packageName, System.currentTimeMillis())); - } + GameInfo gameInfo = gameManager.findGame(packageName); + if (gameInfo != null) { + concernManager.updateByEntity(gameInfo); } } else if ("卸载".equals(busFour.getType())) { FilterManager filterManager = new FilterManager(getApplicationContext()); if (!filterManager.isFilter(packageName)) { - SuspectedGameManager suspectedGameManager = new SuspectedGameManager(getApplicationContext()); - suspectedGameManager.deleteSuspectedGame(packageName); - concernManager.updateByPackageName(packageName); } } - if ("卸载".equals(busFour.getType())) { - ArrayList list = PackageManager.getUpdateList(); - GameUpdateEntity game; - int index = -1; - for (int i = 0, size = list.size(); i < size; i++) { - game = list.get(i); - if (!game.isPluggable()) { - continue; - } - if (game.getPackageName().equals(packageName)) { - index = i; - break; - } - } - if (index != -1) { - PackageManager.removeUpdate(packageName); - } + if ("卸载".equals(busFour.getType()) || "安装".equals(busFour.getType())) { + PackageManager.removeUpdate(packageName); } - if ("安装".equals(busFour.getType())) { // 安装后关注游戏 JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( @@ -1468,7 +1450,11 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene gameInfo.setPackageName(packageName); gameInfo.setGameName(gameDigestEntity.getName()); concernManager.updateByEntity(gameInfo); - concernGame(gameDigestEntity.getId()); + concernGame(gameDigestEntity.getId(), packageName); + if (PackageUtils.getMetaData(getApplicationContext(), + packageName, "gh_version") != null) { + checkGameUpdate(packageName); + } } } } @@ -1482,20 +1468,35 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene DataCollectionManager.onEvent(this, "inorunstall", map); } - private void concernGame(String id) { - if (!concernManager.isConcern(id)) { - JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( - Config.HOST + "game/" + id + "/digest", - new Response.Listener() { - @Override - public void onResponse(JSONObject response) { - Gson gson = new Gson(); - GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class); + private void concernGame(final String id, final String packageName) { + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest( + Config.HOST + "game/" + id + "/digest", + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Gson gson = new Gson(); + GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class); + GameManager manager = new GameManager(getApplicationContext()); + manager.addOrUpdate(gameEntity.getApk(), gameEntity.getId(), gameEntity.getName()); + if (!concernManager.isConcern(id)) { concernManager.addByEntity(gameEntity); } - }, null); - AppController.addToRequestQueue(request, TAG); - } + // 检查是否能插件化 + if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 + && gameEntity.getApk() != null) { + for (ApkEntity apkEntity : gameEntity.getApk()) { + if (apkEntity.getPackageName().equals(packageName) + && !TextUtils.isEmpty(apkEntity.getGhVersion()) + && !PackageUtils.isSignature(getApplicationContext(), apkEntity.getPackageName())) { + PackageManager.addUpdate(getGameUpdateEntity(gameEntity, apkEntity)); + EventBus.getDefault().post(new EBDownloadStatus("plugin")); + break; + } + } + } + } + }, null); + AppController.addToRequestQueue(request, TAG); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java index 5c0297e988..e3ff7248f4 100644 --- a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java @@ -138,7 +138,9 @@ public class SubjectActivity extends BaseActivity { gameEntity = adapter.getSubjectList().get(location); for (ApkEntity apkEntity : gameEntity.getApk()) { if (apkEntity.getPackageName().equals(busFour.getPackageName())) { - gameEntity.getEntryMap().remove(apkEntity.getPlatform()); + if (gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(apkEntity.getPlatform()); + } adapter.notifyItemChanged(location); break; } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java index 00a7b79822..9b47054d9a 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java @@ -202,10 +202,12 @@ public class PlatformAdapter extends RecyclerView.Adapter { if (downloadEntity == null) { viewHolder.download_item_progressbar.setProgress(1000); if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 + && !TextUtils.isEmpty(apkEntity.getGhVersion()) && !PackageUtils.isSignature(context, apkEntity.getPackageName())) { viewHolder.download_item_tv_status.setText("插件化"); downloadEntity = DownloadManager.getInstance(context).getByPackage(apkEntity.getPackageName()); - if (downloadEntity == null) { + if (downloadEntity == null + || downloadEntity.getUrl().equals(apkEntity.getUrl())) { viewHolder.itemView.setClickable(true); viewHolder.download_item_progressbar.setProgress(1000); } else { @@ -238,7 +240,8 @@ public class PlatformAdapter extends RecyclerView.Adapter { DownloadEntity downloadEntity = entryMap.get(apkEntity.getUrl()); if (downloadEntity == null || downloadEntity.getStatus().equals(DownloadStatus.cancel) - || downloadEntity.getStatus().equals(DownloadStatus.hijack)) { + || downloadEntity.getStatus().equals(DownloadStatus.hijack) + || downloadEntity.getStatus().equals(DownloadStatus.notfound)) { int id = PlatformUtils.getInstance(context).getPlatformPic( apkEntity.getPlatform()); if (id != 0) { 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 4b9c14826a..5ce050c787 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java @@ -14,6 +14,7 @@ import com.android.volley.TimeoutError; import com.android.volley.VolleyError; import com.gh.base.AppController; import com.gh.common.constant.Config; +import com.gh.common.constant.ItemViewType; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; @@ -59,7 +60,6 @@ public class SubjectAdapter extends RecyclerView.Adapter subjectList; private boolean order; - private static final int FOOTER_ITEM = 101; private boolean isLoaded; private ArrayMap> locationMap; @@ -192,36 +192,40 @@ public class SubjectAdapter extends RecyclerView.Adapter dao; - - public SuspectedGameDao(Context context) { - try { - helper = DatabaseHelper.getHelper(context); - dao = helper.getDao(SuspectedGameInfo.class); - } catch (SQLException e) { - - e.printStackTrace(); - } - } - - /** - * 添加一个疑似游戏 - */ - public void add(SuspectedGameInfo entity) { - try { - dao.create(entity); - } catch (SQLException e) { - - e.printStackTrace(); - } - } - - /** - * 删除一个疑似游戏 - */ - public void delete(String packageName) { - try { - dao.deleteById(packageName); - } catch (SQLException e) { - - e.printStackTrace(); - } - } - - /** - * 根据包名获取某一个疑似游戏 - */ - public SuspectedGameInfo find(String packageName) { - try { - return dao.queryForId(packageName); - } catch (SQLException e) { - - e.printStackTrace(); - } - return null; - } - - /** - * 获取所有的疑似游戏 - */ - public List getAll() { - try { - return dao.queryForAll(); - } catch (SQLException e) { - - e.printStackTrace(); - } - return null; - } - - /** - * 更新疑似游戏 - */ - public void update(SuspectedGameInfo entity) { - try { - dao.update(entity); - } catch (SQLException e) { - - e.printStackTrace(); - } - } - - public void deleteAll() { - try { - List list = dao.queryForAll(); - for (int i = 0, size = list.size(); i < size; i++) { - dao.deleteById(list.get(i).getPackageName()); - } - } catch (SQLException e) { - - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/gh/gamecenter/db/info/SuspectedGameInfo.java b/app/src/main/java/com/gh/gamecenter/db/info/SuspectedGameInfo.java deleted file mode 100644 index 314c165077..0000000000 --- a/app/src/main/java/com/gh/gamecenter/db/info/SuspectedGameInfo.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.gh.gamecenter.db.info; - -import com.j256.ormlite.field.DatabaseField; -import com.j256.ormlite.table.DatabaseTable; - -import java.io.Serializable; - -@DatabaseTable(tableName = "tb_suspectedgame") -public class SuspectedGameInfo implements Serializable { - - /** - * - */ - private static final long serialVersionUID = -5623387326449838895L; - - @DatabaseField(id = true, columnName = "packageName") - private String packageName; - - @DatabaseField(columnName = "time") - private long time; - - public SuspectedGameInfo() { - - } - - public SuspectedGameInfo(String packageName, long time) { - super(); - this.packageName = packageName; - this.time = time; - } - - public String getPackageName() { - return packageName; - } - - public void setPackageName(String packageName) { - this.packageName = packageName; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - @Override - public String toString() { - return "SuspectedGameEntity [packageName=" + packageName + ", time=" - + time + "]"; - } - -} diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownLoadFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameDownLoadFragment.java index baadc53930..4f4443e400 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownLoadFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownLoadFragment.java @@ -53,7 +53,6 @@ public class GameDownLoadFragment extends Fragment implements View.OnClickListen private TextView downloadmanager_tv_allstart; private RelativeLayout.LayoutParams rparams; - private String path; private String url; private boolean isScroll; @@ -161,7 +160,7 @@ public class GameDownLoadFragment extends Fragment implements View.OnClickListen super.onCreate(savedInstanceState); - path = getActivity().getIntent().getStringExtra("path"); + String path = getActivity().getIntent().getStringExtra("path"); url = getActivity().getIntent().getStringExtra("url"); isScroll = false; @@ -293,26 +292,31 @@ public class GameDownLoadFragment extends Fragment implements View.OnClickListen Integer location = adapter.getLocation(url); if (location != null) { if ("安装".equals(busFour.getType())) { - if (adapter.getDownloadingList().isEmpty() && adapter.getDoneList().size() == 1) { - adapter.getDoneList().remove(location.intValue()); - adapter.getLocationMap().clear(); - adapter.notifyDataSetChanged(); - EventBus.getDefault().post(new EBDownloadChanged("download", View.GONE, 0)); - if (reuse_nodata_skip.getVisibility() == View.GONE) { - reuse_nodata_skip.setVisibility(View.VISIBLE); + DownloadEntity downloadEntity = DownloadManager.getInstance(getActivity()).get(url); + if (downloadEntity == null + || !downloadEntity.isPlugin() // 不是插件游戏,自己删除数据库数据和安装包 + || PackageUtils.isSignature(getActivity(), packageName)) {// 是插件游戏,判断签名是否相同,是才删除数据库数据和安装包 + if (adapter.getDownloadingList().isEmpty() && adapter.getDoneList().size() == 1) { + adapter.getDoneList().remove(location.intValue()); + adapter.getLocationMap().clear(); + adapter.notifyDataSetChanged(); + EventBus.getDefault().post(new EBDownloadChanged("download", View.GONE, 0)); + if (reuse_nodata_skip.getVisibility() == View.GONE) { + reuse_nodata_skip.setVisibility(View.VISIBLE); + } + } else if (adapter.getDoneList().size() == 1) { + adapter.getDoneList().remove(location.intValue()); + adapter.initLocationMap(); + adapter.notifyItemRangeRemoved(0, 2); + EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE, + adapter.getDoneList().size() + adapter.getDownloadingList().size())); + } else { + adapter.getDoneList().remove(location.intValue()); + adapter.initLocationMap(); + adapter.notifyItemRemoved(location + 1); + EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE, + adapter.getDoneList().size() + adapter.getDownloadingList().size())); } - } else if (adapter.getDoneList().size() == 1) { - adapter.getDoneList().remove(location.intValue()); - adapter.initLocationMap(); - adapter.notifyItemRangeRemoved(0, 2); - EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE, - adapter.getDoneList().size() + adapter.getDownloadingList().size())); - } else { - adapter.getDoneList().remove(location.intValue()); - adapter.initLocationMap(); - adapter.notifyItemRemoved(location + 1); - EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE, - adapter.getDoneList().size() + adapter.getDownloadingList().size())); } } } diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java index f9cce8bf0c..ebf5f9456d 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java @@ -5,8 +5,6 @@ import android.graphics.Color; import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; -import android.util.SparseArray; -import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,6 +26,7 @@ import com.gh.common.view.CardLinearLayout; import com.gh.common.view.CardRelativeLayout; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; +import com.gh.download.DownloadStatus; import com.gh.gamecenter.R; import com.gh.gamecenter.db.info.ConcernInfo; import com.gh.gamecenter.entity.GameUpdateEntity; @@ -60,10 +59,7 @@ public class GameUpdateAdapter extends RecyclerView.Adapter locationMap; - private ArrayMap packageNameMap; - private SparseBooleanArray successMap; - private SparseArray entryMap; + private ArrayMap> locationMap; private List updateList; @@ -81,9 +77,6 @@ public class GameUpdateAdapter extends RecyclerView.Adapter(); - packageNameMap = new ArrayMap<>(); - successMap = new SparseBooleanArray(); - entryMap = new SparseArray<>(); updateList = new ArrayList<>(); if (packageName != null) { @@ -91,16 +84,25 @@ public class GameUpdateAdapter extends RecyclerView.Adapter entries = DownloadManager.getInstance(context).getAll(); + // 初始化map + public void initLocationMap() { + locationMap.clear(); + + String packageName; + ArrayList list; for (int i = 0, size = updateList.size(); i < size; i++) { - locationMap.put(updateList.get(i).getPackageName(), i); - packageNameMap.put(updateList.get(i).getUrl(), updateList.get(i).getPackageName()); - successMap.put(i, false); - for (DownloadEntity downloadEntity : entries) { - if (updateList.get(i).getUrl().equals(downloadEntity.getUrl())) { - entryMap.put(i, downloadEntity); - break; - } + packageName = updateList.get(i).getPackageName(); + list = locationMap.get(packageName); + if (list == null) { + list = new ArrayList<>(); + locationMap.put(packageName, list); } + list.add(i + 1); } } @@ -311,11 +314,12 @@ public class GameUpdateAdapter extends RecyclerView.Adapter getLocationMap() { + public ArrayMap> getLocationMap() { return locationMap; } - public SparseBooleanArray getSuccessMap() { - return successMap; - } - - public ArrayMap getPackageNameMap() { - return packageNameMap; - } - - public SparseArray getEntryMap() { - return entryMap; + public void removeUpdate(String packageName) { + for (int i = 0; i < updateList.size(); i++) { + if (updateList.get(i).getPackageName().equals(packageName)) { + updateList.remove(i); + if (updateList.isEmpty()) { + notifyItemRangeRemoved(0, 2); + break; + } + notifyItemRemoved(i + 1); + notifyItemChanged(0); + i--; + } + } } } diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java index bda4105039..e5b0615e22 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java @@ -15,6 +15,7 @@ import android.widget.TextView; import com.gh.base.AppController; import com.gh.gamecenter.MainActivity; import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.GameUpdateEntity; import com.gh.gamecenter.eventbus.EBDownloadChanged; import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.gh.gamecenter.eventbus.EBMiPush; @@ -22,6 +23,8 @@ import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.manager.PackageManager; +import java.util.ArrayList; + import de.greenrobot.event.EventBus; /** @@ -102,46 +105,36 @@ public class GameUpdateFragment extends Fragment { public void onEventMainThread(EBDownloadStatus status) { if ("delete".equals(status.getStatus())) { - String packageName = adapter.getPackageNameMap().get(status.getUrl()); - if (packageName != null) { - Integer location = adapter.getLocationMap().get(packageName); - adapter.getEntryMap().remove(location); - gameupdate_rv_show.getAdapter().notifyItemChanged(location + 1); + ArrayList locationList = adapter.getLocationMap().get(status.getPackageName()); + if (locationList != null) { + for (int location : locationList) { + gameupdate_rv_show.getAdapter().notifyItemChanged(location); + } gameupdate_rv_show.getAdapter().notifyItemChanged(0); } + } else if ("update".equals(status.getStatus()) || "plugin".equals(status.getStatus())) { + adapter.init(); + adapter.notifyDataSetChanged(); } } public void onEventMainThread(EBPackage busFour) { - if ("安装".equals(busFour.getType())) { - Integer location = adapter.getLocationMap().get(busFour.getPackageName()); - if (location != null) { - adapter.getSuccessMap().put(location, true); - EventBus.getDefault().post( - new EBDownloadChanged("update", View.VISIBLE, -1)); - gameupdate_rv_show.getAdapter().notifyItemChanged(location + 1); - gameupdate_rv_show.getAdapter().notifyItemChanged(0); - PackageManager.removeUpdate(busFour.getPackageName()); - } - } else if ("卸载".equals(busFour.getType())) { - Integer location = adapter.getLocationMap().get(busFour.getPackageName()); - if (location != null && adapter.getUpdateList().size() != 0) { - if (adapter.getUpdateList().get(location).isPluggable()) { - EventBus.getDefault().post( - new EBDownloadChanged("update", View.VISIBLE, -1)); - if (adapter.getUpdateList().size() == 1) { - adapter.getUpdateList().remove(location.intValue()); - adapter.notifyItemRangeRemoved(0, 2); - if (reuse_nodata_skip.getVisibility() == View.GONE) { - reuse_nodata_skip.setVisibility(View.VISIBLE); - } - } else { - adapter.getUpdateList().remove(location.intValue()); - adapter.notifyItemRemoved(location + 1); - adapter.notifyItemChanged(0); + ArrayList locationList = adapter.getLocationMap().get(busFour.getPackageName()); + if (locationList != null) { + for (int location : locationList) { + if ("安装".equals(busFour.getType())) { + gameupdate_rv_show.getAdapter().notifyItemChanged(location + 1); + gameupdate_rv_show.getAdapter().notifyItemChanged(0); + } else if ("卸载".equals(busFour.getType())) { + adapter.removeUpdate(busFour.getPackageName()); + if (adapter.getUpdateList().isEmpty()) { + reuse_nodata_skip.setVisibility(View.VISIBLE); } } + EventBus.getDefault().post( + new EBDownloadChanged("update", View.VISIBLE, -1)); } + adapter.initLocationMap(); } } diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.java b/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.java index 7bab6294f7..f24963b3fb 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/GameUpdateEntity.java @@ -163,23 +163,4 @@ public class GameUpdateEntity { this.apk = apk; } - @Override - public String toString() { - return "GameUpdateEntity{" + - "id='" + id + '\'' + - ", name='" + name + '\'' + - ", icon='" + icon + '\'' + - ", packageName='" + packageName + '\'' + - ", size='" + size + '\'' + - ", version='" + version + '\'' + - ", ghVersion='" + ghVersion + '\'' + - ", url='" + url + '\'' + - ", platform='" + platform + '\'' + - ", isPluggable=" + isPluggable + - ", apk=" + apk + - ", etag='" + etag + '\'' + - ", brief='" + brief + '\'' + - ", tag=" + tag + - '}'; - } } 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 2b4a5f88b7..094479f3c6 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1Fragment.java @@ -139,13 +139,10 @@ public class Game1Fragment extends BaseFragment implements SwipeRefreshLayout.On Runnable initPluginRunnable = new Runnable() { @Override public void run() { - if (PackageManager.getPluggableSize() != 0 - && adapter.getPluginList().isEmpty()) { - if (adapter.isInitPlugin()) { - adapter.initPlugin(); - } else { - handler.postDelayed(initPluginRunnable, 100); - } + if (adapter.isInitPlugin()) { + handler.postDelayed(initPluginRunnable, 100); + } else { + adapter.initPlugin(); } } }; @@ -164,15 +161,21 @@ public class Game1Fragment extends BaseFragment implements SwipeRefreshLayout.On List list = adapter.getPluginList(); for (int i = 0, size = list.size(); i < size; i++) { if (list.get(i).getApk().get(0).getPackageName().equals(busFour.getPackageName())) { - list.remove(i); - if (list.isEmpty()) { - adapter.initItemCount(); - adapter.notifyItemRangeRemoved(1, 2); + if ("卸载".equals(busFour.getType()) + && DownloadManager.getInstance(getActivity()).get( + list.get(i).getApk().get(0).getUrl()) != null) { + adapter.notifyItemChanged(2 + i); } else { - adapter.initItemCount(); - adapter.notifyItemRemoved(location); + list.remove(i); + if (list.isEmpty()) { + adapter.initItemCount(); + adapter.notifyItemRangeRemoved(1, 2); + } else { + adapter.initItemCount(); + adapter.notifyItemRemoved(location); + adapter.notifyItemChanged(1); + } } - adapter.initLocationMap(); break; } } @@ -181,7 +184,9 @@ public class Game1Fragment extends BaseFragment implements SwipeRefreshLayout.On if ("安装".equals(busFour.getType())) { for (ApkEntity apkEntity : gameEntity.getApk()) { if (apkEntity.getPackageName().equals(busFour.getPackageName())) { - gameEntity.getEntryMap().remove(apkEntity.getPlatform()); + if (gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(apkEntity.getPlatform()); + } adapter.notifyItemChanged(location); break; } @@ -192,6 +197,7 @@ public class Game1Fragment extends BaseFragment implements SwipeRefreshLayout.On } } } + adapter.initLocationMap(); } } 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 63883ed031..22adf94db3 100644 --- a/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/Game1FragmentAdapter.java @@ -23,6 +23,7 @@ import com.android.volley.TimeoutError; import com.android.volley.VolleyError; import com.gh.base.AppController; import com.gh.common.constant.Config; +import com.gh.common.constant.ItemViewType; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; @@ -71,15 +72,6 @@ import java.util.Map; */ 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; // 加载布局 - } - private Game1Fragment fragment; private Context context; private OnCallBackListener listener; @@ -272,15 +264,18 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter updateList = PackageManager.getUpdateList(); if (updateList.isEmpty()) { - if (!isInitPlugin) { - isInitPlugin = true; - } + isInitPlugin = false; return; } List list = new ArrayList<>(); GameUpdateEntity gameUpdateEntity; + pluginSize = 0; for (int i = 0, size= updateList.size(); i < size; i++) { gameUpdateEntity = updateList.get(i); if (gameUpdateEntity.isPluggable()) { @@ -316,17 +311,20 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter pluginList.size() + 2) { - notifyItemChanged(pluginList.size() + 2); + if (pluginList.isEmpty()) { + pluginList = list; + initItemCount(); + notifyItemRangeInserted(1, pluginList.size() + 1); + if (getItemCount() > pluginList.size() + 2) { + notifyItemChanged(pluginList.size() + 2); + } + } else { + pluginList = list; + notifyDataSetChanged(); } initLocationMap(); } - if (!isInitPlugin) { - isInitPlugin = true; - } + isInitPlugin = false; } private void showView() { @@ -419,15 +417,15 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter 1 && position <= 1 + pluginList.size()) { - return ITEM_TYPE.game_normal_type; + return ItemViewType.GAME_NORMAL; } } @@ -444,29 +442,29 @@ public class Game1FragmentAdapter extends RecyclerView.Adapter { - private class ITEM_TYPE { - public final static int HEAD = 100;// 专题头部 - public final static int GAME_NORMAL = 101;// 游戏布局1 - public final static int GAME_TEST = 102;// 游戏布局2 - public final static int IMAGE = 103;// 大图布局 - public final static int FOOTER = 104;// 加载布局 - } - private Game2Fragment fragment; private Context context; private OnCallBackListener listener; @@ -224,47 +217,48 @@ public class Game2FragmentAdapter extends RecyclerView.Adapter getAllGame() { - return dao.getAll(); - } - - public void updateGame(SuspectedGameInfo entity) { - dao.update(entity); - } - - public void deleteAll() { - dao.deleteAll(); - } - -} diff --git a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java index 4b3912d249..b1ba659278 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java @@ -19,6 +19,7 @@ import com.android.volley.VolleyError; import com.android.volley.toolbox.DiskBasedCache; import com.gh.base.AppController; import com.gh.common.constant.Config; +import com.gh.common.constant.ItemViewType; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.GzipUtils; @@ -55,13 +56,6 @@ import java.util.Map; */ public class News1FragmentAdapter extends RecyclerView.Adapter{ - private class ITEM_TYPE { - public static final int normal = 0;//正常布局 - public static final int special1 = 1;//一张1:3图 - public static final int special2 = 2;//三张4:3图 - public static final int footer = 3;//页脚 - } - private News1Fragment fragment; private Context context; private OnCallBackListener listener; @@ -206,23 +200,24 @@ public class News1FragmentAdapter extends RecyclerView.Adapter{ - private class ITEM_TYPE { - public static final int normal = 0;//正常布局 - public static final int special1 = 1;//一张1:3图 - public static final int special2 = 2;//三张4:3图 - public static final int footer = 3;//页脚 - } - private News2Fragment fragment; private Context context; private OnCallBackListener listener; @@ -207,23 +201,24 @@ public class News2FragmentAdapter extends RecyclerView.Adapter { - - public static class ITEM_TYPE { - public static final int head = 1;// head - public static final int news_text = 2;// 新闻列表1类型 - public static final int news_image = 3;// 新闻列表2类型 - public static final int refresh_footer = 4;// 刷新布局类型 - } +public class News3FragmentAdapter extends RecyclerView.Adapter { private int position_today = -1;// 今天head的位置 private int position_before = -1;// 昨天/以前head的位置 @@ -279,53 +272,54 @@ public class News3FragmentAdapter extends if (position_today != -1) { if (position == position_today) { - return ITEM_TYPE.head; + return ItemViewType.NEWS_HEADER; } if (position == position_today + 1) { if (!TextUtils.isEmpty(todayNewsList.get(0).getThumb())) { - return ITEM_TYPE.news_image; + return ItemViewType.NEWS_IMAGE; } else { - return ITEM_TYPE.news_text; + return ItemViewType.NEWS_TEXT; } } if (position > position_today + 1 && position <= todayNewsList.size() + position_today) { - return ITEM_TYPE.news_text; + return ItemViewType.NEWS_TEXT; } } if (position_before != -1) { if (position == position_before) { - return ITEM_TYPE.head; + return ItemViewType.NEWS_HEADER; } if (position > position_before && position <= beforeNewsList.size() + position_before) { - return ITEM_TYPE.news_text; + return ItemViewType.NEWS_TEXT; } } - return ITEM_TYPE.refresh_footer; + return ItemViewType.LOADING; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == ITEM_TYPE.head) { + if (viewType == ItemViewType.NEWS_HEADER) { View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.news_list_item_category, parent, false); return new NewsHeadViewHolder(view); - } else if (viewType == ITEM_TYPE.news_image) { + } else if (viewType == ItemViewType.NEWS_IMAGE) { View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.home_list_item_newsimage_type, parent, false); return new NewsImageViewHolder(view); - } else if (viewType == ITEM_TYPE.news_text) { + } else if (viewType == ItemViewType.NEWS_TEXT) { View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.home_list_item_newsnormal_type, parent, false); return new NewsTextViewHolder(view); - } else { + } else if (viewType == ItemViewType.LOADING) { View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.gamedetail_item_loading, parent, false); return new NewsFooterViewHolder(view); } + return null; } @Override 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 8de62cdeca..9ede1480f9 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java @@ -21,6 +21,7 @@ import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.AppController; import com.gh.common.constant.Config; +import com.gh.common.constant.ItemViewType; import com.gh.common.util.ConcernUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; @@ -411,20 +412,25 @@ public class News4FragmentAdapter extends RecyclerView.Adapter= 0 && position < gameList.size()) { - return 1; + return ItemViewType.GAME_NORMAL; } - return 0; + return ItemViewType.LOADING; } private void initGameNormal(final GameNormalViewHolder holder, final GameEntity gameEntity, int i) { 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 460bdaef77..4317820075 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java @@ -11,6 +11,7 @@ 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.constant.ItemViewType; import com.gh.common.util.DataUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; @@ -323,15 +324,16 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter= 0 && position < gameList.size()) { - return 1; + return ItemViewType.GAME_NORMAL; } - return 0; + return ItemViewType.LOADING; } private void initGameNormal(final GameNormalViewHolder holder, final GameEntity gameEntity, int i) { diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragmentAdapter.java index 4e1b54ffe3..d0adb8a078 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragmentAdapter.java @@ -176,9 +176,11 @@ public class SearchGameDetailFragmentAdapter extends RecyclerView.Adapter