Files
assistant-android/app/src/main/java/com/gh/gamecenter/MainActivity.java
2016-10-09 15:18:32 +08:00

1537 lines
54 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.gh.gamecenter;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.provider.Settings;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.NotificationCompat;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.gh.base.AppController;
import com.gh.base.BaseFragmentActivity;
import com.gh.common.constant.Config;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DeviceUtils;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.FileUtils;
import com.gh.common.util.MD5Utils;
import com.gh.common.util.NetworkUtils;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.PlatformUtils;
import com.gh.common.util.RandomUtils;
import com.gh.common.util.RunningUtils;
import com.gh.common.util.SpeedUtils;
import com.gh.common.util.TokenUtils;
import com.gh.common.util.TrafficUtils;
import com.gh.common.util.Utils;
import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntity;
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;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.GameUpdateEntity;
import com.gh.gamecenter.eventbus.EBDownloadStatus;
import com.gh.gamecenter.eventbus.EBPackage;
import com.gh.gamecenter.eventbus.EBShowDialog;
import com.gh.gamecenter.eventbus.EBSkip;
import com.gh.gamecenter.eventbus.EBTopStatus;
import com.gh.gamecenter.eventbus.EBUISwitch;
import com.gh.gamecenter.game.GameFragment;
import com.gh.gamecenter.manager.ConcernManager;
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;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.gh.gamecenter.volley.extended.StringExtendedRequest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import de.greenrobot.event.EventBus;
/**
*
* @author 温冠超
* @email 294299195@qq.com
* @update 2015-8-11
* @des 项目的主Activity3个Fragment都嵌入在这里。
*/
public class MainActivity extends BaseFragmentActivity implements OnClickListener {
public static final String TAG = MainActivity.class.getSimpleName();
public static String searchHint;
private GameFragment gameFragment;
private NewsFragment newsFragment;
private PersonalFragment personalFragment;
private LinearLayout home1Layout;
private LinearLayout home2Layout;
private LinearLayout home3Layout;
private ImageView home1Image;
private ImageView home2Image;
private ImageView home3Image;
private TextView home1Title;
private TextView home2Title;
private TextView home3Title;
private AppEntity appEntity;
private SharedPreferences sp;
private ConcernManager concernManager;
private int currentTab;
private boolean isShowDownload = false;
private boolean isNewFirstLaunch;
private Handler handler = new Handler();
// 黄壮华 添加观察者 修改2015/8/15
private DataWatcher dataWatcher = new DataWatcher() {
@Override
public void onDataChanged(DownloadEntity downloadEntity) {
// 链接被劫持
if (DownloadStatus.hijack.equals(downloadEntity.getStatus())) {
processHijack(downloadEntity);
return;
} else if (DownloadStatus.neterror.equals(downloadEntity.getStatus())
|| DownloadStatus.timeout.equals(downloadEntity.getStatus())) {
uploadNeterrorLog(downloadEntity);
}
if (downloadEntity.getName().contains("光环助手") && isShowDownload) {
processGhAssistDownload(downloadEntity);
}
if (DownloadStatus.done.equals(downloadEntity.getStatus())) {
if (downloadEntity.getName().contains("光环助手")) {
DataUtils.onEvent(MainActivity.this, "软件更新", "下载完成");
startActivity(PackageUtils.getInstallIntent(downloadEntity.getPath()));
if (appEntity != null && appEntity.isForce()) {
finish();
}
} else {
statDoneEvent(downloadEntity);
if (RunningUtils.isApplicationBroughtToBackground(getApplicationContext())) {
// 应用程序在后台如果是插件化下载则弹出notification提示用户
if (downloadEntity.isPluggable()) {
String path = downloadEntity.getPath();
String platform = PlatformUtils.getInstance(getApplicationContext())
.getPlatformName(downloadEntity.getPlatform());
String title = downloadEntity.getName() + " - " + platform;
Intent intent = new Intent();
intent.putExtra("path", path);
intent.setAction("com.gh.gamecenter.UNINSTALL");
PendingIntent pendingIntent = PendingIntent.getBroadcast(
MainActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setSmallIcon(R.drawable.logo)
.setTicker(title)
.setContentTitle(title)
.setContentText("下载完成,点击继续插件化。")
.setContentIntent(pendingIntent)
.build();
notification.defaults = Notification.DEFAULT_SOUND;// 添加系统默认声音
notification.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时通知将被清除。
NotificationManager notificationManager = (NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);
notificationManager.notify(((int) System.currentTimeMillis() / 1000), notification);
}
} else {
String platform = PlatformUtils.getInstance(getApplicationContext())
.getPlatformName(downloadEntity.getPlatform());
if (platform != null) {
if (downloadEntity.isPluggable()) {
// 弹出插件化提示框
EventBus.getDefault().post(new EBShowDialog("plugin", downloadEntity.getPath()));
} else if (platform.equals("官方版")) {
toast(downloadEntity.getName() + " - 下载完成");
} else {
toast(downloadEntity.getName() + " - " + platform + " - 下载完成");
}
} else {
toast(downloadEntity.getName() + " - 下载完成");
}
if (!downloadEntity.isPluggable()) {
// 是否是自动安装
if (sp.getBoolean("autoinstall", true)) {
if (FileUtils.isEmptyFile(downloadEntity.getPath())) {
toast("解析包出错(可能被误删了),请重新下载");
DownloadManager.getInstance(MainActivity.this).cancel(downloadEntity.getUrl());
} else {
if (PackageUtils.isCanLaunchSetup(getApplicationContext(), downloadEntity.getPath())) {
startActivity(PackageUtils.getInstallIntent(downloadEntity.getPath()));
} else {
// 弹出卸载提示框
EventBus.getDefault().post(new EBShowDialog("plugin", downloadEntity.getPath()));
}
}
}
}
}
// 统计下载完成
uploadData(downloadEntity.getGameId(), downloadEntity.getPlatform());
}
}
}
};
// 统计下载
private void uploadData(String id, String platform) {
HashMap<String, String> 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(), null, null);
AppController.addToRequestQueue(request, TAG);
}
// 统计下载完成事件
private void statDoneEvent(DownloadEntity downloadEntity) {
Map<String, Object> kv1 = new HashMap<>();
kv1.put("版本", downloadEntity.getPlatform());
kv1.put("状态", "下载完成");
if (downloadEntity.isUpdate()) {
DataUtils.onEvent(MainActivity.this, "游戏更新", downloadEntity.getName(), kv1);
} else {
DataUtils.onEvent(MainActivity.this, "游戏下载", downloadEntity.getName(), kv1);
}
Map<String, Object> kv2 = new HashMap<>();
kv2.put("版本", downloadEntity.getPlatform());
kv2.put("状态", "下载完成");
kv2.put("位置", downloadEntity.getEntrance());
DataUtils.onEvent(MainActivity.this, "游戏下载位置", downloadEntity.getName(), kv2);
if (downloadEntity.isPluggable()) {
Map<String, Object> kv3 = new HashMap<>();
kv3.put("下载", "下载完成");
kv3.put("版本", downloadEntity.getPlatform());
kv3.put("位置", downloadEntity.getEntrance());
DataUtils.onEvent(MainActivity.this, "插件化", downloadEntity.getName(), kv3);
}
Map<String, Object> map = new HashMap<>();
map.put("game", downloadEntity.getName());
map.put("game_id", downloadEntity.getGameId());
if (downloadEntity.isPluggable()) {
map.put("method", "插件化");
map.put("btn_status", "插件化");
} else if (downloadEntity.isUpdate()) {
map.put("method", "更新");
map.put("btn_status", "更新");
} else {
map.put("method", "正常");
map.put("btn_status", "下载");
}
map.put("platform", PlatformUtils.getInstance(getApplicationContext())
.getPlatformName(downloadEntity.getPlatform()));
map.put("status", "完成");
map.put("entrance", downloadEntity.getEntrance());
map.put("location", downloadEntity.getLocation());
map.put("network", NetworkUtils.getConnectedType(MainActivity.this));
DataCollectionManager.onEvent(MainActivity.this, "download", map);
}
private void processHijack(DownloadEntity downloadEntity) {
// 删除任务
downloadEntity.setStatus(DownloadStatus.cancel);
DownloadManager.getInstance(getApplicationContext()).cancel(downloadEntity.getUrl());
// 弹出提示框
EventBus.getDefault().post(new EBShowDialog("hijack"));
// 记录链接被劫持
Map<String, Object> map = new HashMap<>();
map.put("url", downloadEntity.getUrl());
map.put("game", downloadEntity.getName());
map.put("game_id", downloadEntity.getGameId());
map.put("platform", downloadEntity.getPlatform());
DataCollectionManager.onEvent(MainActivity.this, "hijack", map);
// 上传劫持log
uploadHijackLog(new HashMap<>(map));
}
private void uploadHijackLog(Map<String, Object> map) {
String version = PackageUtils.getVersion(this);
String user = DeviceUtils.getDeviceID(this);
String channel = (String) PackageUtils.getMetaData(this,
getPackageName(), "TD_CHANNEL_ID");
map.put("version", version);
map.put("user", user);
map.put("device_id", TokenUtils.getDeviceId(this));
map.put("channel", channel);
String url = "http://data.ghzhushou.com/api/v1d0/log";
Map<String, String> params = new HashMap<>();
params.put("topic", "hijack");
params.put("source", "GH-ASSIST-Client");
params.put("time", String.valueOf(Utils.getTime(this)));
params.put("content", new JSONObject(map).toString());
StringExtendedRequest request = new StringExtendedRequest(Method.POST, url, null, null);
request.setParams(params);
request.setShouldCache(false);
AppController.addToRequestQueue(request, TAG);
}
// 上传网络错误log
private void uploadNeterrorLog(DownloadEntity downloadEntity) {
String version = PackageUtils.getVersion(this);
String user = DeviceUtils.getDeviceID(this);
String channel = (String) PackageUtils.getMetaData(this,
getPackageName(), "TD_CHANNEL_ID");
Map<String, Object> map = new HashMap<>();
map.put("url", downloadEntity.getUrl());
map.put("game", downloadEntity.getName());
map.put("game_id", downloadEntity.getGameId());
map.put("platform", downloadEntity.getPlatform());
map.put("version", version);
map.put("user", user);
map.put("device_id", TokenUtils.getDeviceId(this));
map.put("channel", channel);
map.put("error", downloadEntity.getError());
String url = "http://data.ghzhushou.com/api/v1d0/log";
Map<String, String> params = new HashMap<>();
params.put("topic", "neterror");
params.put("source", "GH-ASSIST-Client");
params.put("time", String.valueOf(Utils.getTime(this)));
params.put("content", new JSONObject(map).toString());
StringExtendedRequest request = new StringExtendedRequest(Method.POST, url, null, null);
request.setParams(params);
request.setShouldCache(false);
AppController.addToRequestQueue(request, TAG);
}
/*
* 黄壮华 按连续按返回键两次才退出应用
*/
private long[] mHits = new long[2];
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis() - 1000)) {
finish();
} else {
toast("再按一次就退出光环助手了哦");
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("currentTab", currentTab);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化gameMap
DownloadManager.getInstance(this).initGameMap();
View contentView = View.inflate(this, R.layout.activity_main, null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTheme(R.style.AppTheme);
setTranslucentStatus(true);
}
setContentView(contentView);
initViews();
if (savedInstanceState != null) {
currentTab = savedInstanceState.getInt("currentTab");
} else {
currentTab = 0;
}
setTabSelection(currentTab);
sp = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE);
concernManager = new ConcernManager(getApplicationContext());
getSearchHints();
isNewFirstLaunch = sp.getBoolean("isNewFirstLaunch", true);
if (!isNewFirstLaunch && sp.getBoolean("autoupdate", true)) {
// 检查助手更新
checkUpdate();
}
if (isNewFirstLaunch) {
getPluginUpdate();
sp.edit().putBoolean("isNewFirstLaunch", false).apply();
}
// 获取免责声明
getDisclaimer(isNewFirstLaunch);
// 初始化PlatformUtils
PlatformUtils.getInstance(getApplicationContext());
// 解决助手奔溃后导致的下载状态保留问题
DownloadManager.getInstance(this).checkAll();
// 添加观察者
DownloadManager.getInstance(this).addObserver(dataWatcher);
// //检查是否存在更新的dex包
// checkHotfix();
// 检查是否有权限读取应用列表
checkPermission();
if (isNewFirstLaunch || TokenUtils.getDeviceId(this) == null) {
new Thread(){
@Override
public void run() {
// 注册设备
TokenUtils.register(MainActivity.this);
}
}.start();
}
// 执行跳转事件
handler.postDelayed(runnable, 500);
Log.e("TD_CHANNEL_ID", (String) PackageUtils.getMetaData(this, getPackageName(), "TD_CHANNEL_ID"));
}
private void initViews() {
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);
}
private void checkPermission() {
List<PackageInfo> installedList = getPackageManager().getInstalledPackages(0);
if (installedList.isEmpty()) {
// 无权限获取应用列表
Spanned content = Html.fromHtml("请前往系统权限设置,把“" +
"<font color='#ff0000'>读取应用列表</font>”选择为打开" +
"“<font color='#ff0000'>允许</font>”,否则光环助手将无法帮您安装插件加速版的游戏");
DialogUtils.showWarningDialog(this, "提示", content, "忽略", "去开启",
new DialogUtils.ConfiremListener() {
@Override
public void onConfirem() {
// 跳转应用信息界面
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 0x123);
}
}, null);
} else {
getInstalledListFromServer();
}
}
private int iCount;
private void addInstalledCount() {
synchronized (MainActivity.class) {
iCount++;
}
}
// 获取已安装游戏
private void getInstalledListFromServer() {
ArrayList<String> list = PackageUtils.getAllPackageName(getApplicationContext());
if (list.isEmpty()) {
return;
}
PackageManager manager = new PackageManager(getApplicationContext());
manager.initInstalledMap(list);
final int size = list.size();
iCount = 0;
for (int i = 0; i < size; i++) {
final String packageName = list.get(i);
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v1d45/support/package/" + packageName + "/game/digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response.length() != 0) {
Gson gson = new Gson();
GameDigestEntity gameDigestEntity = gson.fromJson(
response.toString(), GameDigestEntity.class);
GameInfo gameInfo = new GameInfo();
gameInfo.setId(gameDigestEntity.getId());
gameInfo.setPackageName(packageName);
concernManager.updateByEntity(gameInfo);
}
addInstalledCount();
if (iCount == size) {
updateConcern();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
addInstalledCount();
if (iCount == size) {
updateConcern();
}
}
});
AppController.addToRequestQueue(request, TAG);
}
}
private int cCount;
private void addConcernCount() {
synchronized (MainActivity.class) {
cCount++;
}
}
private void updateConcern() {
// 移除疑似游戏数据库中所有数据
SuspectedGameManager suspectedGameManager = new SuspectedGameManager(getApplicationContext());
suspectedGameManager.deleteAll();
ArrayList<String> concernIdList = new ArrayList<>();
for (ConcernInfo entity : concernManager.getAllConcern()) {
concernIdList.add(entity.getId());
}
if (concernIdList.isEmpty()) {
update();
} else {
final int size = concernIdList.size();
cCount = 0;
for (int i = 0; i < size; i++) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v2d0/game/" + concernIdList.get(i) + "/digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Gson gson = new Gson();
GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class);
ConcernInfo concernInfo = concernManager.findConcernById(gameEntity.getId());
if (concernInfo != null && gameEntity.getApk() != null
&& gameEntity.getApk().size() != 0) {
HashMap<String, Boolean> packageNames = new HashMap<>();
String packageName;
for (int i = 0, size = gameEntity.getApk().size(); i < size; i++) {
packageName = gameEntity.getApk().get(i).getPackageName();
if (PackageManager.isInstalled(packageName)) {
packageNames.put(packageName, true);
} else {
packageNames.put(packageName, false);
}
}
concernInfo.setTime(System.currentTimeMillis());
concernInfo.setPackageNames(packageNames);
concernManager.updateByConcern(concernInfo);
}
if (isNewFirstLaunch) {
//默认安装即为关注
if (!concernManager.isConcern(gameEntity.getId())) {
concernManager.addByEntity(gameEntity);
}
}
addConcernCount();
if (cCount == size) {
update();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
addConcernCount();
if (cCount == size) {
update();
}
}
});
AppController.addToRequestQueue(request, TAG);
}
}
}
/*
* 更新关注列表数据
*/
private void update() {
new Thread(){
@Override
public void run() {
TrafficUtils spy = TrafficUtils.getInstance(getApplicationContext(), true);
List<ConcernInfo> concernList = concernManager.getAllConcern();
for (ConcernInfo concernEntity : concernList) {
concernEntity.setTime(System.currentTimeMillis());
int quantity = 0;
HashMap<String, Boolean> packageNames = new HashMap<>();
for (String packageName : concernEntity.getPackageNames().keySet()) {
if (PackageManager.isInstalled(packageName)) {
quantity++;
packageNames.put(packageName, true);
} else {
packageNames.put(packageName, false);
}
}
concernEntity.setPackageNames(packageNames);
concernEntity.setInstalled(quantity > 0);
concernEntity.setInstalledQuantity(quantity);
String tag = null;
int weight = 0;
if (concernEntity.isConcern() && concernEntity.isInstalled()) {
tag = "已关注,已安装";
weight = 2;
} else if (concernEntity.isConcern()
&& !concernEntity.isInstalled()) {
tag = "已关注";
weight = 1;
} else if (!concernEntity.isConcern()
&& concernEntity.isInstalled()) {
tag = "已安装";
weight = 1;
}
concernEntity.setTag(tag);
long traffic = spy.getTraffic(new ArrayList<>(concernEntity.getPackageNames().keySet()));
concernEntity.setTraffic(traffic);
if (traffic > 0) {
weight++;
}
concernEntity.setWeight(weight);
if (weight == 0) {
concernManager.deleteConcern(concernEntity.getId());
} else {
concernManager.updateByConcern(concernEntity);
}
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
ArrayList<String> concernList = new ArrayList<>();
for (ConcernInfo entity : concernManager.getAllConcern()) {
if (entity.isConcern()) {
concernList.add(entity.getGameName());
}
}
Map<String, Object> map = new HashMap<>();
map.put("type", Build.MODEL);
map.put("system", Build.VERSION.SDK_INT + "=" + Build.VERSION.RELEASE);
map.put("install", PackageManager.getInstalledList());
map.put("concern", concernList);
DataCollectionManager.upsert(MainActivity.this, "user", map);
}
}, 1000);
// 检查游戏更新
checkGameUpdate();
// 检查可插件化游戏
checkGamePlugin();
}
}.start();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0x123) {
List<PackageInfo> installedList = getPackageManager().getInstalledPackages(0);
if (installedList.isEmpty()) {
toast("读取应用列表失败");
} else {
getInstalledListFromServer();
}
}
}
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)) {
list.add(packageName);
}
}
}
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return lhs.compareTo(rhs);
}
};
Collections.sort(list, comparator);
StringBuilder builder = new StringBuilder();
String packages;
PackageManager.clearUpdateList();
for (int i = 0, sizei = (list.size() / 10) + 1; i < sizei; i++) {
builder.delete(0, builder.length());
for (int j = i * 10, sizej = (i + 1) * 10 > list.size() ? list
.size() : (i + 1) * 10; j < sizej; j++) {
builder.append(list.get(j));
builder.append("-");
}
if (builder.length() != 0) {
packages = builder.substring(0, builder.length() - 1);
JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(
Config.HOST + "v1d45/support/package/update?package=" + packages,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
if (response.length() != 0) {
Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<GameUpdateEntity>>() {}.getType();
ArrayList<GameUpdateEntity> games = gson.fromJson(response.toString(), listType);
GameUpdateEntity gameUpdateEntity;
for (int i = 0; i < games.size(); i++) {
gameUpdateEntity = games.get(i);
// 判断是否gh_version是否相同
String gh_version = (String) PackageUtils.getMetaData(
MainActivity.this, gameUpdateEntity.getPackageName(), "gh_version");
if (gh_version != null) {
gh_version = gh_version.substring(2);
// 判断gh_version是否相同
if (gh_version.equals(gameUpdateEntity.getGhVersion())) {
// 判断version是否相同
String version = PackageUtils.getVersionByPackage(
MainActivity.this, gameUpdateEntity.getPackageName());
if (version != null && version.equals(gameUpdateEntity.getVersion())) {
// 版本相同,无需显示插件更新,继续查看是否有可更新的游戏包
games.remove(i);
i--;
}
}
} else {
games.remove(i);
i--;
}
}
PackageManager.addUpdateList(games);
EventBus.getDefault().post(new EBDownloadStatus("update"));
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
}
}
private int count;
private void addCount() {
synchronized (MainActivity.class) {
count++;
}
}
private void checkGamePlugin() {
List<ConcernInfo> infos = concernManager.getInstalledGame();
final int size = infos.size();
final List<GameEntity> list = new ArrayList<>();
count = 0;
for (ConcernInfo info : infos) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v2d0/game/" + info.getId() + "/digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Gson gson = new Gson();
GameEntity gameEntity = gson.fromJson(response.toString(), GameEntity.class);
list.add(gameEntity);
addCount();
if (count == size) {
processPluginData(list);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
addCount();
if (count == size) {
processPluginData(list);
}
}
});
AppController.addToRequestQueue(request, TAG);
}
}
private void processPluginData(List<GameEntity> list) {
if (list == null || list.isEmpty()) {
return;
}
List<ConcernInfo> infos = concernManager.getInstalledGame();
HashMap<String, Boolean> map;
GameEntity gameEntity;
for (ConcernInfo info : infos) {
for (int i = 0, size = list.size(); i < size; i++) {
gameEntity = list.get(i);
if (gameEntity.getId().equals(info.getId())
&& gameEntity.getTag() != null && gameEntity.getTag().size() != 0
&& gameEntity.getApk() != null) {
map = info.getPackageNames();
for (String key : map.keySet()) {
if (map.get(key) && !PackageUtils.isSignature(this, 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);
break;
}
}
GameManager manager = new GameManager(this);
manager.addOrUpdate(gameEntity.getApk(), gameEntity.getId(), gameEntity.getName());
}
}
break;
}
}
}
EventBus.getDefault().post(new EBDownloadStatus("plugin"));
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
FrameLayout main_content = (FrameLayout) findViewById(R.id.main_content);
if (main_content.getPaddingBottom() == 0) {
main_content.setPadding(0, 0, 0, findViewById(R.id.main_ll_bottom).getHeight());
}
}
}
private void checkHotfix() {
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<JSONArray>() {
@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();
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
// 获取免责声明
private void getDisclaimer(final boolean isFirst) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v2/disclaimer",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
boolean isShow = response.getBoolean("isShow");
sp.edit().putBoolean("isShowDisclaimer", isShow).apply();
if (isShow) {
String content = response.getString("content");
sp.edit().putString("disclaimer", content).apply();
if (isFirst) {
DialogUtils.showDisclaimerDialog(MainActivity.this, content);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
private Class<?> intentClass(String to) {
if ("NewsActivity".equals(to)) {
to = "NewsDetailActivity";
} else if ("GameDetailsActivity".equals(to)) {
to = "GameDetailActivity";
}
try {
return Class.forName("com.gh.gamecenter." + to);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
Runnable runnable = new Runnable() {
@Override
public void run() {
if (getIntent() != null && getIntent().getExtras() != null) {
String to = getIntent().getExtras().getString("to");
if(!TextUtils.isEmpty(to)){
Class<?> clazz = intentClass(to);
if (clazz != null) {
Intent toIntent = new Intent(MainActivity.this, clazz);
if ("NewsActivity".equals(to) || "NewsDetailActivity".equals(to)) {
toIntent.putExtra("newsId", getIntent().getExtras().getString("newsId"));
toIntent.putExtra("entrance", getIntent().getExtras().getString("entrance"));
} else if("DownloadManagerActivity".equals(to)) {
toIntent.putExtra("packageName" , getIntent().getExtras().getString("packageName"));
toIntent.putExtra("currentItem" , 1);
} else if ("GameDetailsActivity".equals(to) || "GameDetailActivity".equals(to)) {
toIntent.putExtra("gameId", getIntent().getExtras().getString("gameId"));
toIntent.putExtra("entrance", getIntent().getExtras().getString("entrance"));
} 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)) {
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 {
String from = getIntent().getStringExtra("from");
if (!TextUtils.isEmpty(from)) {
if (from.equals("plugin")) {
Intent intent = new Intent(MainActivity.this, DownloadManagerActivity.class);
intent.putExtra("currentItem", 1);
intent.putExtra("packageName", getIntent().getStringExtra("packageName"));
startActivity(intent);
} else if (from.equals("mipush_news")) {
Intent intent = new Intent(MainActivity.this, NewsDetailActivity.class);
intent.putExtra("entrance", "小米推送");
intent.putExtra("newsId", getIntent().getStringExtra("newsId"));
startActivity(intent);
} else if (from.equals("mipush_new_game")) {
Intent intent = new Intent(MainActivity.this, GameDetailActivity.class);
intent.putExtra("entrance", "小米推送");
startActivity(intent);
} else if (from.equals("mipush_plugin")) {
Intent intent = new Intent(MainActivity.this, DownloadManagerActivity.class);
intent.putExtra("currentItem", 1);
intent.putExtra("isPushIntent", true);
startActivity(intent);
} else if (from.equals("plugin_install")) {
Intent intent = new Intent(MainActivity.this, DownloadManagerActivity.class);
intent.putExtra("currentItem", 0);
intent.putExtra("path", getIntent().getStringExtra("path"));
startActivity(intent);
}
}
}
}
}
};
private void getSearchHints() {
JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(
Config.HOST + "v1d45/search/game/default",
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
if (response.length() != 0) {
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
Gson gson = new Gson();
List<String> searchHintList = gson.fromJson(response.toString(), listType);
if (searchHintList != null && searchHintList.size() != 0) {
if (searchHintList.size() == 1) {
searchHint = searchHintList.get(0);
} else {
searchHint = searchHintList.get(RandomUtils.nextInt(searchHintList.size()));
}
EventBus.getDefault().post(new EBTopStatus("搜索", searchHintList.get(0)));
}
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
private void checkUpdate() {
String TD_CHANNEL_ID = (String) PackageUtils.getMetaData(this, getPackageName(), "TD_CHANNEL_ID");
String url = Config.HOST + "v2d0/support/upgrade?version=" + PackageUtils.getVersion(getApplicationContext())
+ "&channel=" + TD_CHANNEL_ID;
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response.length() != 0) {
Gson gson = new Gson();
appEntity = gson.fromJson(response.toString(), AppEntity.class);
float version = Float.valueOf(appEntity.getVersion());
float currentVersion = Float.valueOf(PackageUtils.getVersion(getApplicationContext()));
if (version > currentVersion) {
// 光环助手 有更新
GameUpdateEntity game = new GameUpdateEntity();
game.setName("光环助手V" + appEntity.getVersion());
game.setPackageName(getPackageName());
game.setSize(appEntity.getSize());
game.setVersion(appEntity.getVersion());
game.setUrl(appEntity.getUrl());
game.setPlatform("官方版");
PackageManager.addUpdate(0, game);
String updateMD5 = MD5Utils.getUpdateMD5(appEntity.getUrl(), appEntity.getContent());
if (appEntity.isForce()) {
// 强制更新
showUpdateDialog(updateMD5);
} else {
// 非强制更新
if ("EVERY_TIME_OPEN".equals(appEntity.getAlert())) {
// 每次都提示
showUpdateDialog(updateMD5);
} else {
// 一天提示一次
String showUpdateTime = sp.getString("show_update_tiem", null);
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd", Locale.getDefault());
String today = format.format(new Date());
if (!today.equals(showUpdateTime)) {
sp.edit().putString("show_update_tiem", today).apply();
showUpdateDialog(updateMD5);
}
}
}
}
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
private void showUpdateDialog(final String md5) {
final Dialog updateDialog = new Dialog(this);
View view = View.inflate(this, R.layout.app_update_hint_dialog, null);
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()));
view.findViewById(R.id.update_cannel).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
if (appEntity.isForce()) {
finish();
} else {
updateDialog.dismiss();
}
}
});
view.findViewById(R.id.updeta_confirm).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
updateDialog.dismiss();
String path = FileUtils.getDownloadPath(MainActivity.this,
"光环助手V" + appEntity.getVersion() + "_" + md5 + ".apk");
File file = new File(path);
if (file.exists() && file.length() > 0) {
startActivity(PackageUtils.getInstallIntent(path));
} else {
DataUtils.onEvent(MainActivity.this, "软件更新", "下载开始");
showDownloadDialog(md5);
}
}
});
if (appEntity.isForce()) {
updateDialog.setCanceledOnTouchOutside(false);
updateDialog.setCancelable(false);
}
updateDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
updateDialog.setContentView(view);
updateDialog.show();
}
private Dialog dialog;
private ProgressBar app_pb_progress;
private TextView app_tv_speed;
private TextView app_tv_percent;
private TextView app_tv_cancel;
private void showDownloadDialog(String md5) {
dialog = new Dialog(this);
View view = View.inflate(this, R.layout.app_updating_dialog, null);
app_pb_progress = (ProgressBar) view.findViewById(R.id.app_pb_progress);
app_tv_speed = (TextView) view.findViewById(R.id.app_tv_speed);
app_tv_percent = (TextView) view.findViewById(R.id.app_tv_percent);
app_tv_cancel = (TextView) view.findViewById(R.id.app_tv_cancel);
app_tv_cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DownloadManager.getInstance(getApplicationContext()).cancel(appEntity.getUrl());
if (appEntity.isForce()) {
finish();
} else {
dialog.dismiss();
isShowDownload = false;
}
}
});
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.closeOptionsMenu();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();
isShowDownload = true;
String path = FileUtils.getDownloadPath(MainActivity.this,
"光环助手V" + appEntity.getVersion() + "_" + md5 + ".apk");
File file = new File(path);
if (file.exists()) {
file.delete();
}
DownloadEntity downloadEntity = new DownloadEntity();
downloadEntity.setUrl(appEntity.getUrl());
downloadEntity.setName("光环助手V" + appEntity.getVersion());
downloadEntity.setPath(path);
downloadEntity.setPlatform("官方版");
downloadEntity.setPackageName(getPackageName());
DownloadManager.getInstance(getApplicationContext()).cancel(downloadEntity.getUrl(), false);
DownloadManager.getInstance(getApplicationContext()).pauseAll();
DownloadManager.getInstance(getApplicationContext()).add(downloadEntity);
}
private void processGhAssistDownload(DownloadEntity downloadEntity) {
app_tv_speed.setText(String.format("%s(剩%s)", SpeedUtils.getSpeed(downloadEntity.getSpeed()),
SpeedUtils.getRemainTime(downloadEntity.getSize(),
downloadEntity.getProgress(), downloadEntity.getSpeed() * 1024)));
app_pb_progress.setProgress((int) (downloadEntity.getPercent() * 10));
app_tv_percent.setText(downloadEntity.getPercent() + "%");
if (DownloadStatus.done.equals(downloadEntity.getStatus())) {
DownloadManager.getInstance(getApplicationContext()).cancel(downloadEntity.getUrl(), false);
dialog.dismiss();
isShowDownload = false;
}
}
// 获取META-INF中的plugin_update 文件判断是否从游戏插件中下载的app是则获取游戏id启动游戏更新下载该游戏
private void getPluginUpdate() {
ApplicationInfo appinfo = getApplicationInfo();
String sourceDir = appinfo.sourceDir;
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.contains("gh_assist")) {
String packageName = entryName.substring(entryName.lastIndexOf("_") + 1);
Intent intent = new Intent(MainActivity.this, DownloadManagerActivity.class);
intent.putExtra("currentItem", 1);
intent.putExtra("packageName", packageName);
startActivity(intent);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public void onClick(View v) {
final int id = v.getId();
if (id == R.id.main_ll_game) {
EventBus.getDefault().post(new EBUISwitch("MainActivity", 0));
setTabSelection(0);
} else if (id == R.id.main_ll_news) {
EventBus.getDefault().post(new EBUISwitch("MainActivity", 1));
setTabSelection(1);
} else if (id == R.id.main_ll_personal) {
EventBus.getDefault().post(new EBUISwitch("MainActivity", 2));
setTabSelection(2);
}
}
private void setTabSelection(int index) {
clearSelection();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
hideFragments(transaction);
switch (index) {
case 0:
home1Image.setImageResource(R.drawable.home1_selected);
home1Title.setTextColor(getResources().getColor(R.color.theme));
if (gameFragment == null) {
List<Fragment> list = getSupportFragmentManager().getFragments();
if (list != null) {
for (Fragment fragment : list) {
if (fragment.getClass().equals(GameFragment.class)) {
gameFragment = (GameFragment) fragment;
transaction.show(gameFragment);
break;
}
}
}
if (gameFragment == null) {
gameFragment = new GameFragment();
transaction.add(R.id.main_content, gameFragment);
}
} else {
transaction.show(gameFragment);
}
currentTab = 0;
break;
case 1:
home2Image.setImageResource(R.drawable.home2_selected);
home2Title.setTextColor(getResources().getColor(R.color.theme));
if (newsFragment == null) {
List<Fragment> list = getSupportFragmentManager().getFragments();
if (list != null) {
for (Fragment fragment : list) {
if (fragment.getClass().equals(NewsFragment.class)) {
newsFragment = (NewsFragment) fragment;
transaction.show(newsFragment);
break;
}
}
}
if (newsFragment == null) {
newsFragment = new NewsFragment();
transaction.add(R.id.main_content, newsFragment);
}
} else {
transaction.show(newsFragment);
}
currentTab = 1;
break;
case 2:
home3Image.setImageResource(R.drawable.home3_selected);
home3Title.setTextColor(getResources().getColor(R.color.theme));
if (personalFragment == null) {
List<Fragment> list = getSupportFragmentManager().getFragments();
if (list != null) {
for (Fragment fragment : list) {
if (fragment.getClass().equals(PersonalFragment.class)) {
personalFragment = (PersonalFragment) fragment;
transaction.show(personalFragment);
break;
}
}
}
if (personalFragment == null) {
personalFragment = new PersonalFragment();
transaction.add(R.id.main_content, personalFragment);
}
} else {
transaction.show(personalFragment);
}
currentTab = 2;
break;
default:
break;
}
transaction.commit();
}
/**
* 清除掉所有的选中状态。
*/
private void clearSelection() {
home1Image.setImageResource(R.drawable.home1_unselected);
home2Image.setImageResource(R.drawable.home2_unselected);
home3Image.setImageResource(R.drawable.home3_unselected);
home1Title.setTextColor(getResources().getColor(R.color.title));
home2Title.setTextColor(getResources().getColor(R.color.title));
home3Title.setTextColor(getResources().getColor(R.color.title));
}
/**
* 将所有的Fragment都置为隐藏状态。
*/
private void hideFragments(FragmentTransaction transaction) {
if (personalFragment != null) {
transaction.hide(personalFragment);
}
if (gameFragment != null) {
transaction.hide(gameFragment);
}
if (newsFragment != null) {
transaction.hide(newsFragment);
}
List<Fragment> list = getSupportFragmentManager().getFragments();
if (list != null) {
for (Fragment fragment : list) {
transaction.hide(fragment);
}
}
}
public void onEventMainThread(EBSkip skip) {
if ("GameFragment".equals(skip.getType())) {
home1Layout.performClick();
EventBus.getDefault().post(new EBSkip("MainActivity", skip.getCurrentItem()));
}
}
public void onEventMainThread(EBPackage busFour) {
String packageName = busFour.getPackageName();
if ("安装".equals(busFour.getType())) {
// 添加进已安装map中
PackageManager.addInstalled(packageName);
} else if ("卸载".equals(busFour.getType())) {
// 删除map中数据
PackageManager.removeInstalled(packageName);
}
DownloadEntity mDownloadEntity = null;
for (DownloadEntity downloadEntity : DownloadManager.getInstance(getApplicationContext()).getAll()) {
if (packageName.equals(downloadEntity.getPackageName())) {
mDownloadEntity = downloadEntity;
break;
}
}
if (mDownloadEntity != null) {
if ("安装".equals(busFour.getType())) {
if (mDownloadEntity.isPluggable()) {
Map<String, Object> kv6 = new HashMap<>();
kv6.put("安装或卸载", "安装完成");
DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6);
}
if (!mDownloadEntity.isPlugin() // 不是插件游戏,自己删除数据库数据和安装包
|| PackageUtils.isSignature(this, packageName)) {// 是插件游戏,判断签名是否相同,是才删除数据库数据和安装包
DownloadManager.getInstance(getApplicationContext()).cancel(
mDownloadEntity.getUrl(), sp.getBoolean("autodelete", true));
}
} else if ("卸载".equals(busFour.getType())) {
Map<String, Object> kv6 = new HashMap<>();
kv6.put("安装或卸载", "卸载完成");
DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6);
startActivity(PackageUtils.getInstallIntent(mDownloadEntity.getPath()));
}
}
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()));
}
}
} 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.removeUpdateList(packageName);
}
}
if ("安装".equals(busFour.getType())) {
// 安装后关注游戏
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v1d45/support/package/" + packageName + "/game/digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (response.length() != 0) {
Gson gson = new Gson();
GameDigestEntity gameDigestEntity = gson.fromJson(
response.toString(), GameDigestEntity.class);
concernGame(gameDigestEntity.getId());
}
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
Map<String, Object> map = new HashMap<>();
map.put("type", busFour.getType());
map.put("packageName", busFour.getPackageName());
DataCollectionManager.onEvent(this, "inorunstall", map);
}
private void concernGame(String id) {
if (!concernManager.isConcern(id)) {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(
Config.HOST + "v2d0/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);
concernManager.addByEntity(gameEntity);
}
}, null);
AppController.addToRequestQueue(request, TAG);
}
}
@Override
public void finish() {
// 上传数据
DataCollectionManager.getInstance(getApplicationContext()).statClickData();
super.finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
AppController.canclePendingRequests(TAG);
DownloadManager.getInstance(this).removeObserver(dataWatcher);
}
}