Merge remote-tracking branch 'origin/2.1' into 2.1

This commit is contained in:
khy
2016-10-21 16:09:46 +08:00
36 changed files with 540 additions and 670 deletions

View File

@ -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<String> 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<String> list = new ArrayList<>();
List<ConcernInfo> 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<JSONObject>() {
@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<JSONObject>() {
@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<String, Object> 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<GameUpdateEntity> 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<JSONObject>() {
@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<JSONObject>() {
@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