From 7da78b6e4a2c3cdcf073a73e28a66631c6444402 Mon Sep 17 00:00:00 2001 From: huangzhuanghua <401742778@qq.com> Date: Sat, 24 Sep 2016 15:55:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=8C=96=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=98=BE=E7=A4=BA=E8=83=8C=E6=99=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E4=B8=8B=E8=BD=BD=E6=B7=BB=E5=8A=A0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=98=AF=E6=8F=92=E4=BB=B6=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gh/base/BaseActivity.java | 8 - .../com/gh/base/BaseFragmentActivity.java | 8 - .../main/java/com/gh/base/DetailActivity.java | 43 +--- .../java/com/gh/common/util/DialogUtils.java | 5 - .../com/gh/common/util/DownloadItemUtils.java | 140 ++++-------- .../java/com/gh/common/util/PackageUtils.java | 66 +++++- .../com/gh/common/util/PlatformUtils.java | 2 +- .../com/gh/common/view/CropImageCustom.java | 2 - .../com/gh/common/view/DownloadDialog.java | 211 ++++-------------- .../java/com/gh/download/DownloadManager.java | 50 ++++- .../java/com/gh/download/DownloadTask.java | 1 - .../java/com/gh/gamecenter/MainActivity.java | 29 +-- .../gh/gamecenter/adapter/PluginAdapter.java | 3 +- .../gh/gamecenter/adapter/SubjectAdapter.java | 7 +- .../download/GameDownloadAdapter.java | 102 ++++----- .../download/GameUpdateAdapter.java | 6 +- .../gamecenter/game/Game1FragmentAdapter.java | 9 +- .../gamecenter/game/Game2FragmentAdapter.java | 9 +- .../gamecenter/game/Game3FragmentAdapter.java | 1 - .../gh/gamecenter/manager/PackageManager.java | 53 ----- .../gamecenter/personal/ConcernFragment.java | 6 +- .../personal/ConcernFragmentAdapter.java | 3 +- .../personal/InstallFragmentAdapter.java | 10 +- .../receiver/ActivitySkipReceiver.java | 10 +- .../receiver/InstallAndUninstallReceiver.java | 5 +- .../progressbar_plugin_radius_style.xml | 25 +++ 26 files changed, 316 insertions(+), 498 deletions(-) create mode 100644 app/src/main/res/drawable/progressbar_plugin_radius_style.xml diff --git a/app/src/main/java/com/gh/base/BaseActivity.java b/app/src/main/java/com/gh/base/BaseActivity.java index 1de4b7d93f..cd027e8d8b 100644 --- a/app/src/main/java/com/gh/base/BaseActivity.java +++ b/app/src/main/java/com/gh/base/BaseActivity.java @@ -170,16 +170,8 @@ public class BaseActivity extends Activity implements OnCallBackListener { if (!isPause && this.getClass().getName().equals(RunningUtils.getTopActivity(this))) { if ("hijack".equals(showDialog.getType())) { DialogUtils.showHijackDialog(this); - } else if ("delete".equals(showDialog.getType())) { - DialogUtils.showUninstallDialog(this, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - startActivity(PackageUtils.getUninstallIntent(BaseActivity.this, showDialog.getPath())); - } - }); } else if ("plugin".equals(showDialog.getType())) { DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener(){ - @Override public void onConfirem() { startActivity(PackageUtils.getUninstallIntent(BaseActivity.this, showDialog.getPath())); diff --git a/app/src/main/java/com/gh/base/BaseFragmentActivity.java b/app/src/main/java/com/gh/base/BaseFragmentActivity.java index 1c570f12a1..11e7e05de5 100644 --- a/app/src/main/java/com/gh/base/BaseFragmentActivity.java +++ b/app/src/main/java/com/gh/base/BaseFragmentActivity.java @@ -158,16 +158,8 @@ public class BaseFragmentActivity extends FragmentActivity { if (!isPause && this.getClass().getName().equals(RunningUtils.getTopActivity(this))) { if ("hijack".equals(showDialog.getType())) { DialogUtils.showHijackDialog(this); - } else if ("delete".equals(showDialog.getType())) { - DialogUtils.showUninstallDialog(this, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - startActivity(PackageUtils.getUninstallIntent(BaseFragmentActivity.this, showDialog.getPath())); - } - }); } else if ("plugin".equals(showDialog.getType())) { DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener(){ - @Override public void onConfirem() { startActivity(PackageUtils.getUninstallIntent(BaseFragmentActivity.this, showDialog.getPath())); diff --git a/app/src/main/java/com/gh/base/DetailActivity.java b/app/src/main/java/com/gh/base/DetailActivity.java index 776a492e93..834bcd6a22 100644 --- a/app/src/main/java/com/gh/base/DetailActivity.java +++ b/app/src/main/java/com/gh/base/DetailActivity.java @@ -17,7 +17,6 @@ import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.FileUtils; -import com.gh.common.util.MD5Utils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; @@ -195,9 +194,8 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic gameEntity.getName(), downloadAddWord)); } } else { - PackageManager mPackageManager = new PackageManager(this); if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 - && !mPackageManager.isSignature(gameEntity.getApk().get(0).getPackageName()) + && !PackageUtils.isSignature(this, gameEntity.getApk().get(0).getPackageName()) ) { if (TextUtils.isEmpty(downloadAddWord)) { detail_tv_download.setBackgroundResource( @@ -269,6 +267,12 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic break; case done: detail_tv_per.setText("安装"); + if (mDownloadEntity.isPluggable() + && PackageManager.isInstalled(mDownloadEntity.getPackageName())) { + detail_pb_progressbar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_plugin_radius_style)); + } else { + detail_pb_progressbar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_normal_radius_style)); + } break; case cancel: case hijack: @@ -331,19 +335,7 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic if ("下载中".equals(str)) { startActivity(new Intent(this, DownloadManagerActivity.class)); } else if ("安装".equals(str)) { - final String path = mDownloadEntity.getPath(); - PackageManager manager = new PackageManager(getApplicationContext()); - if (manager.launchSetup(path)) { - startActivity(PackageUtils.getInstallIntent(path)); - } else { - DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - startActivity(PackageUtils.getUninstallIntent( - DetailActivity.this, path)); - } - }); - } + PackageUtils.launchSetup(this, mDownloadEntity.getPath()); } } } @@ -400,21 +392,7 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic map.put("network", NetworkUtils.getConnectedType(this)); DataCollectionManager.onEvent(this, "download", map); - DownloadEntity downloadEntity = new DownloadEntity(); - downloadEntity.setUrl(apkEntity.getUrl()); - downloadEntity.setName(gameEntity.getName()); - downloadEntity.setPath(FileUtils.getDownloadPath(DetailActivity.this, - MD5Utils.getContentMD5(gameEntity.getName() + "_" - + System.currentTimeMillis()) + ".apk")); - downloadEntity.setETag(apkEntity.getEtag()); - downloadEntity.setIcon(gameEntity.getIcon()); - downloadEntity.setPlatform(apkEntity.getPlatform()); - downloadEntity.setPackageName(apkEntity.getPackageName()); - downloadEntity.setGameId(gameEntity.getId()); - downloadEntity.setEntrance(entrance); - downloadEntity.setLocation(name + ":" + title); - - DownloadManager.getInstance(getApplicationContext()).add(downloadEntity); + DownloadManager.createDownload(this, apkEntity, gameEntity, method, entrance, name + ":" + title); detail_tv_download.setVisibility(View.GONE); detail_pb_progressbar.setVisibility(View.VISIBLE); @@ -422,8 +400,7 @@ public abstract class DetailActivity extends BaseActivity implements View.OnClic detail_pb_progressbar.setProgress(0); detail_tv_per.setText("0.0%"); - DownloadManager.getInstance(DetailActivity.this).putStatus( - downloadEntity.getUrl(), "downloading"); + DownloadManager.getInstance(DetailActivity.this).putStatus(apkEntity.getUrl(), "downloading"); } else { toast(msg); } diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index d00c3101bf..178d69507e 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -98,11 +98,6 @@ public class DialogUtils { }); } - public static void showUninstallDialog(final Context context, final ConfiremListener listener) { - showWarningDialog(context, "卸载", "您已安装了官方原版,该版本与插件版本冲突,是否卸载官方原版?", - "忽略", "卸载", listener, null); - } - public static void showWarningDialog(Context context, String title, CharSequence msg, final ConfiremListener listener) { showWarningDialog(context, title, msg, "取消", "确定", listener, null); } 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 b9822cc1c9..91997d5b2b 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -116,10 +116,10 @@ public class DownloadItemUtils { if (entryMap != null && !entryMap.isEmpty()) { DownloadEntity downloadEntity = entryMap.get(entryMap.keyAt(0)); - - if (downloadEntity != null && (!downloadEntity.isPluggable() - || entity.getApk().get(0).getPlatform().equals( - downloadEntity.getPlatform()))) { + if (!downloadEntity.isPluggable() + || entity.getApk().get(0).getPlatform().equals(downloadEntity.getPlatform()) + || entity.getApk().get(0).getPlatform().equals("local_plugin") + || downloadEntity.getPlatform().equals("local_plugin")) { // 更改进度条和提示文本的状态 changeStatus(context, textView, game_progressbar, game_ll_info, download_speed, download_percentage, downloadBtn, downloadEntity, isShowPlatform, true); @@ -140,9 +140,8 @@ public class DownloadItemUtils { downloadBtn.setText("更新"); downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); } else { - PackageManager mPackageManager = new PackageManager(context); if (entity.getTag() != null && entity.getTag().size() != 0 - && !mPackageManager.isSignature(entity.getApk().get(0).getPackageName())) { + && !PackageUtils.isSignature(context, entity.getApk().get(0).getPackageName())) { downloadBtn.setText("插件化"); downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); } else { @@ -189,10 +188,9 @@ public class DownloadItemUtils { } } - PackageManager packageManager = new PackageManager(context); for (ApkEntity apkEntity : entity.getApk()) { if (PackageManager.isInstalled(apkEntity.getPackageName())) { - if (!packageManager.isSignature(apkEntity.getPackageName())) { + if (!PackageUtils.isSignature(context, apkEntity.getPackageName())) { pluginCount++; } else { installCount++; @@ -321,8 +319,13 @@ public class DownloadItemUtils { if (isNormal) { downloadBtn.setText("安装"); - downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); downloadBtn.setTextColor(Color.WHITE); + if (downloadEntity.isPluggable() + && PackageManager.isInstalled(downloadEntity.getPackageName())) { + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_plugin_style); + } else { + downloadBtn.setBackgroundResource(R.drawable.game_item_btn_download_style); + } } } } @@ -432,24 +435,19 @@ public class DownloadItemUtils { public static void setPluginOnClickListener(final Context context, final TextView downloadBtn, - final TextView download_speed, - final TextView download_percentage, final GameEntity entity, final String entrance, final String location) { downloadBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { - DownloadDialog.getInstance(context).showPopupWindow( - v, entity, entrance, download_speed, download_percentage, location); + DownloadDialog.getInstance(context).showPopupWindow(v, entity, entrance, location); } }); } public static void setOnClickListener(Context context, TextView downloadBtn, - TextView download_speed, - TextView download_percentage, GameEntity entity, int position, RecyclerView.Adapter adapter, @@ -459,14 +457,16 @@ public class DownloadItemUtils { if (entity.getApk().size() == 1) { setNormalOnClickListener(context, downloadBtn, entity, position, adapter, entrance, location); } else { - setPluginOnClickListener(context, downloadBtn, download_speed, download_percentage, entity, - entrance, location); + setPluginOnClickListener(context, downloadBtn, entity, entrance, location); } } //更新 - private static void update(Context context, GameEntity gameEntity, String entrance, String location) { + private static void update(Context context, + GameEntity gameEntity, + String entrance, + String location) { ApkEntity apkEntity = gameEntity.getApk().get(0); //下载可更新游戏 Map kv = new HashMap<>(); @@ -487,52 +487,39 @@ public class DownloadItemUtils { map.put("network", NetworkUtils.getConnectedType(context)); DataCollectionManager.onEvent(context, "download", map); - DownloadEntity downloadEntity = new DownloadEntity(); - downloadEntity.setUrl(apkEntity.getUrl()); - downloadEntity.setName(gameEntity.getName()); - downloadEntity.setPath(FileUtils.getDownloadPath(context, - MD5Utils.getContentMD5( - gameEntity.getName() + "_" + System.currentTimeMillis()) + ".apk")); - downloadEntity.setPlatform(apkEntity.getPlatform()); - downloadEntity.setPackageName(apkEntity.getPackageName()); - downloadEntity.setIcon(gameEntity.getIcon()); - downloadEntity.setUpdate(true); - downloadEntity.setETag(apkEntity.getEtag()); - downloadEntity.setLocation(location); - downloadEntity.setEntrance(entrance); - DownloadManager.getInstance(context).add(downloadEntity); + DownloadManager.createDownload(context, gameEntity, "更新", entrance, location); } //下载 private static void download(Context context, - GameEntity entity, + GameEntity gameEntity, TextView downloadBtn, String entrance, String location) { - String msg = FileUtils.isCanDownload(entity.getApk().get(0).getSize()); + String msg = FileUtils.isCanDownload(gameEntity.getApk().get(0).getSize()); if (TextUtils.isEmpty(msg)) { Map kv = new HashMap<>(); - kv.put("版本", entity.getApk().get(0).getPlatform()); + kv.put("版本", gameEntity.getApk().get(0).getPlatform()); kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", entity.getName(), kv); + DataUtils.onEvent(context, "游戏下载", gameEntity.getName(), kv); Map kv2 = new HashMap<>(); - kv2.put("版本", entity.getApk().get(0).getPlatform()); + kv2.put("版本", gameEntity.getApk().get(0).getPlatform()); kv2.put("状态", "下载开始"); kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", entity.getName(), kv2); + DataUtils.onEvent(context, "游戏下载位置", gameEntity.getName(), kv2); Map kv3 = new HashMap<>(); kv3.put(entrance, "下载数"); kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", entity.getName(), kv3); + DataUtils.onEvent(context, "应用数据", gameEntity.getName(), kv3); Map map = new HashMap<>(); - map.put("game", entity.getName()); - map.put("game_id", entity.getId()); + map.put("game", gameEntity.getName()); + map.put("game_id", gameEntity.getId()); map.put("method", "正常"); map.put("platform", PlatformUtils.getInstance(context) - .getPlatformName(entity.getApk().get(0).getPlatform())); + .getPlatformName(gameEntity.getApk().get(0).getPlatform())); map.put("status", "开始"); map.put("location", location); map.put("entrance", entrance); @@ -540,14 +527,14 @@ public class DownloadItemUtils { map.put("network", NetworkUtils.getConnectedType(context)); DataCollectionManager.onEvent(context, "download", map); - addDownloadEntry(context, entity, 0, entrance, location); - Toast.makeText(context, entity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); + DownloadManager.createDownload(context, gameEntity, "下载", entrance, location); + Toast.makeText(context, gameEntity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); downloadBtn.setText("下载中"); downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); downloadBtn.setTextColor(context.getResources().getColorStateList(R.color.text_downloading_style)); - DownloadManager.getInstance(context).putStatus(entity.getApk().get(0).getUrl(), "downloading"); + DownloadManager.getInstance(context).putStatus(gameEntity.getApk().get(0).getUrl(), "downloading"); } else { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } @@ -555,34 +542,34 @@ public class DownloadItemUtils { //插件化 private static void plugin(Context context, - GameEntity entity, + GameEntity gameEntity, TextView downloadBtn, String entrance, String location) { - String msg = FileUtils.isCanDownload(entity.getApk().get(0).getSize()); + String msg = FileUtils.isCanDownload(gameEntity.getApk().get(0).getSize()); if (TextUtils.isEmpty(msg)) { Map kv = new HashMap<>(); - kv.put("版本", entity.getApk().get(0).getPlatform()); + kv.put("版本", gameEntity.getApk().get(0).getPlatform()); kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", entity.getName(), kv); + DataUtils.onEvent(context, "游戏下载", gameEntity.getName(), kv); Map kv2 = new HashMap<>(); - kv2.put("版本", entity.getApk().get(0).getPlatform()); + kv2.put("版本", gameEntity.getApk().get(0).getPlatform()); kv2.put("状态", "下载开始"); kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", entity.getName(), kv2); + DataUtils.onEvent(context, "游戏下载位置", gameEntity.getName(), kv2); Map kv3 = new HashMap<>(); kv3.put(entrance, "下载数"); kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", entity.getName(), kv3); + DataUtils.onEvent(context, "应用数据", gameEntity.getName(), kv3); Map map = new HashMap<>(); - map.put("game", entity.getName()); - map.put("game_id", entity.getId()); + map.put("game", gameEntity.getName()); + map.put("game_id", gameEntity.getId()); map.put("method", "插件化"); map.put("platform", PlatformUtils.getInstance(context) - .getPlatformName(entity.getApk().get(0).getPlatform())); + .getPlatformName(gameEntity.getApk().get(0).getPlatform())); map.put("status", "开始"); map.put("location", location); map.put("entrance", entrance); @@ -590,14 +577,14 @@ public class DownloadItemUtils { map.put("network", NetworkUtils.getConnectedType(context)); DataCollectionManager.onEvent(context, "download", map); - addDownloadEntry(context, entity, 0, entrance, location); - Toast.makeText(context, entity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); + DownloadManager.createDownload(context, gameEntity, "插件化", entrance, location); + Toast.makeText(context, gameEntity.getName() + "已加入下载队列", Toast.LENGTH_SHORT).show(); downloadBtn.setText("下载中"); downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); downloadBtn.setTextColor(context.getResources().getColorStateList(R.color.text_downloading_style)); - DownloadManager.getInstance(context).putStatus(entity.getApk().get(0).getUrl(), "downloading"); + DownloadManager.getInstance(context).putStatus(gameEntity.getApk().get(0).getUrl(), "downloading"); } else { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } @@ -618,43 +605,8 @@ public class DownloadItemUtils { entity.getEntryMap().remove(entity.getEntryMap().keyAt(0)); adapter.notifyItemChanged(position); } else { - PackageManager manager = new PackageManager(context); - if (manager.launchSetup(path)) { - context.startActivity(PackageUtils.getInstallIntent(path)); - } else { - DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - context.startActivity(PackageUtils.getUninstallIntent(context, path)); - } - }); - } + PackageUtils.launchSetup(context, path); } } - private static void addDownloadEntry(Context context, - GameEntity gameEntity, - int position, - String entrance, - String location) { - - ApkEntity apkEntity = gameEntity.getApk().get(position); - - DownloadEntity downloadEntity = new DownloadEntity(); - downloadEntity.setUrl(apkEntity.getUrl()); - downloadEntity.setName(gameEntity.getName()); - downloadEntity.setPath(FileUtils.getDownloadPath(context, MD5Utils.getContentMD5( - gameEntity.getName() + "_" + System.currentTimeMillis()) + ".apk")); - downloadEntity.setIcon(gameEntity.getIcon()); - downloadEntity.setETag(apkEntity.getEtag()); - downloadEntity.setPlatform(apkEntity.getPlatform()); - downloadEntity.setPackageName(apkEntity.getPackageName()); - downloadEntity.setGameId(gameEntity.getId()); - downloadEntity.setPluggable(gameEntity.isPluggable()); - downloadEntity.setEntrance(entrance); - downloadEntity.setLocation(location); - - DownloadManager.getInstance(context).add(downloadEntity); - } - } diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index d07465782d..280c275dd5 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -133,6 +133,70 @@ public class PackageUtils { return null; } + /* + * 判断是否是插件包 + */ + public static boolean isSignature(Context context, String packageName) { + String signature = getApkSignatureByPackageName(context, packageName); + if (publicKey.equals(signature)) { + return true; + } + return false; + } + + /** + * 根据apk路径,获取apk包名、签名 根据包名 判断 是否已安装游戏 根据签名 判断 是否一致 + * + * @param path apk路径 + * @return true 可执行安装 false 要卸载已安装的,再执行安装 + */ + public static boolean isCanLaunchSetup(Context context, String path) { + String packageName = getPackageNameByPath(context, path); + + boolean isContain = isContain(context, packageName); + if (!isContain) { + return true; + } + + boolean isInstalled = isInstalled(context, packageName); + if (!isInstalled) { + return true; + } + + String signature = getApkSignatureByPackageName(context, packageName); + return publicKey.equals(signature); + } + + /* + * 启动安装应用程序 + */ + public static void launchSetup(final Context context, final String path) { + if (isCanLaunchSetup(context, path)) { + context.startActivity(PackageUtils.getInstallIntent(path)); + } else { + DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + context.startActivity(PackageUtils.getUninstallIntent(context, path)); + } + }); + } + } + + /* + * 获取应用第一次安装的时间 + */ + public static long getInstalledTime(Context context, String packageName) { + try { + PackageInfo packageInfo = context.getPackageManager() + .getPackageInfo(packageName, 0); + return packageInfo.firstInstallTime; + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + return 0; + } + /* * 解析签名 */ @@ -246,7 +310,7 @@ public class PackageUtils { return false; } if (map == null) { - map = new ArrayMap(); + map = new ArrayMap<>(); List infos = context.getPackageManager() .getInstalledPackages(0); for (PackageInfo info : infos) { diff --git a/app/src/main/java/com/gh/common/util/PlatformUtils.java b/app/src/main/java/com/gh/common/util/PlatformUtils.java index 87ffcca7a4..c366660871 100644 --- a/app/src/main/java/com/gh/common/util/PlatformUtils.java +++ b/app/src/main/java/com/gh/common/util/PlatformUtils.java @@ -223,7 +223,7 @@ public class PlatformUtils { } Integer id = platformPicMap.get(platform); if (id != null) { - return id.intValue(); + return id; } return 0; } diff --git a/app/src/main/java/com/gh/common/view/CropImageCustom.java b/app/src/main/java/com/gh/common/view/CropImageCustom.java index 11e225e747..2aca51570f 100644 --- a/app/src/main/java/com/gh/common/view/CropImageCustom.java +++ b/app/src/main/java/com/gh/common/view/CropImageCustom.java @@ -7,8 +7,6 @@ import android.util.TypedValue; import android.widget.ImageView; import android.widget.RelativeLayout; -import com.gh.common.util.Utils; - import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; diff --git a/app/src/main/java/com/gh/common/view/DownloadDialog.java b/app/src/main/java/com/gh/common/view/DownloadDialog.java index becede5e2b..ea56bfa1fd 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -37,7 +37,6 @@ import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.FileUtils; import com.gh.common.util.ImageUtils; -import com.gh.common.util.MD5Utils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; @@ -51,7 +50,6 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.GameCollectionEntity; 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.EBReuse; @@ -98,7 +96,7 @@ public class DownloadDialog { private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(DownloadEntity downloadEntity) { - if (downloadEntity.getName().equals(gameName) + if (downloadEntity.getName().equals(gameEntity.getName()) && !"delete".equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) { entryMap.put(downloadEntity.getUrl(), downloadEntity); @@ -129,16 +127,11 @@ public class DownloadDialog { private ArrayMap urlMap; private List gameApk; + private GameEntity gameEntity; private List gameCollection;//游戏合集 private List gameCollectionApk; //和合集合并后的apk集合 - private String gameName; - private String gameIcon; - private String gameId; - private String gameType; private String entrance; - private String mlocation; - private TextView download_speed; - private TextView download_percentage; + private String location; private LinearLayout linearLayout; private ViewPager viewPager; private LinearLayout llCollection; @@ -154,62 +147,40 @@ public class DownloadDialog { private List collectionPositionlist;//存储集合位置 - public void showPopupWindow(View view, - GameEntity game, - String entrance, - String location) { - showPopupWindow(view, game, entrance, null, null, location); - } - - public void showPopupWindow(View view, - GameEntity game, - String eStr, - TextView dSpeed, - TextView dPercentage, - String lstr) { + public void showPopupWindow(View view, GameEntity gameEntity, String entrance, String location) { if (isShow) { return; } isShow = true; + this.gameEntity = gameEntity; + this.entrance = entrance; + this.location = location; + SharedPreferences sp = context.getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); row = sp.getInt("download_box_row", 3); column = sp.getInt("download_box_column", 3); - mlocation = lstr; - entrance = eStr; - download_speed = dSpeed; - download_percentage = dPercentage; - - gameName = game.getName(); - gameIcon = game.getIcon(); - gameId = game.getId(); - if (game.getTag() == null || game.getTag().isEmpty()) { - gameType = "normal"; - } else { - gameType = "plugin"; - } - entryMap = new ArrayMap<>(); List entries = DownloadManager.getInstance(context).getAll(); for (int i = 0, size = entries.size(); i < size; i++) { - if (entries.get(i).getName().equals(gameName)) { + if (entries.get(i).getName().equals(gameEntity.getName())) { entryMap.put(entries.get(i).getUrl(), entries.get(i)); } } - gameApk = sortApk(new ArrayList<>(game.getApk())); + gameApk = sortApk(new ArrayList<>(gameEntity.getApk())); - if (game.getCollection() != null){ - mergeApkCollection(game); + if (gameEntity.getCollection() != null){ + mergeApkCollection(gameEntity); } // 一个自定义的布局,作为显示的内容 View contentView = View.inflate(context, R.layout.game_download_dialog, null); TextView textView = (TextView) contentView.findViewById(R.id.dialog_title); - textView.setText(gameName); + textView.setText(gameEntity.getName()); int count = gameApk.size(); int vpHeight; @@ -449,7 +420,6 @@ public class DownloadDialog { List downloadList = new ArrayList<>(); List noPicList = new ArrayList<>(); - PackageManager packageManager = new PackageManager(context); for (int i = 0, size = apkList.size(); i < size; i++) { String packageName = apkList.get(i).getPackageName(); if (PackageManager.isInstalled(packageName)) { @@ -457,7 +427,7 @@ public class DownloadDialog { updateList.add(apkList.remove(i)); size--; i--; - } else if (!packageManager.isSignature(packageName)) { + } else if (!PackageUtils.isSignature(context, packageName)) { pluginList.add(apkList.remove(i)); size--; i--; @@ -642,7 +612,7 @@ public class DownloadDialog { public void onConfirem() { Map kv6 = new HashMap<>(); kv6.put("操作", "点击插件化安装完成"); - DataUtils.onEvent(context, "插件化", gameName, kv6); + DataUtils.onEvent(context, "插件化", gameEntity.getName(), kv6); String path = entryMap.get(apkEntity.getUrl()).getPath(); if (FileUtils.isEmptyFile(path)) { @@ -730,7 +700,7 @@ public class DownloadDialog { } else if ("启动".equals(status)) { Map kv = new HashMap<>(); kv.put("版本", apkEntity.getPlatform()); - DataUtils.onEvent(context, "游戏启动", gameName, kv); + DataUtils.onEvent(context, "游戏启动", gameEntity.getName(), kv); PackageUtils.launchApplicationByPackageName(context, apkEntity.getPackageName()); } else if ("安装".equals(status) || "安装更新".equals(status)) { @@ -795,12 +765,11 @@ public class DownloadDialog { viewHolder.download_item_progressbar.setProgressDrawable(layerDrawable); DownloadEntity downloadEntity = DownloadManager.getInstance( context).get(apkEntity.getUrl()); - PackageManager mPackageManager = new PackageManager(context); if (downloadEntity == null) { viewHolder.download_item_progressbar.setProgress(1000); viewHolder.download_item_tv_status.setText("启动"); - if (!"normal".equals(gameType) - && !mPackageManager.isSignature(apkEntity.getPackageName())) { + if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 + && !PackageUtils.isSignature(context, apkEntity.getPackageName())) { viewHolder.download_item_tv_status.setText("插件化"); } else if (PackageManager.isCanUpdate(apkEntity.getPackageName())) { viewHolder.download_item_tv_status.setText("更新"); @@ -968,17 +937,7 @@ public class DownloadDialog { DownloadManager.getInstance(context).cancel(apkEntity.getUrl()); notifyItemChanged(position); } else { - PackageManager manager = new PackageManager(context); - if (manager.launchSetup(path)) { - context.startActivity(PackageUtils.getInstallIntent(path)); - } else { - DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - context.startActivity(PackageUtils.getUninstallIntent(context, path)); - } - }); - } + PackageUtils.launchSetup(context, path); } } @@ -987,35 +946,22 @@ public class DownloadDialog { Map kv = new HashMap<>(); kv.put("版本", apkEntity.getPlatform()); kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏更新", gameName, kv); + DataUtils.onEvent(context, "游戏更新", gameEntity.getName(), kv); Map map = new HashMap<>(); - map.put("game", gameName); - map.put("game_id", gameId); + map.put("game", gameEntity.getName()); + map.put("game_id", gameEntity.getId()); map.put("method", "更新"); map.put("platform", PlatformUtils.getInstance(context) .getPlatformName(apkEntity.getPlatform())); map.put("status", "开始"); - map.put("location", mlocation); + map.put("location", location); map.put("entrance", entrance); map.put("btn_status", "更新"); map.put("network", NetworkUtils.getConnectedType(context)); DataCollectionManager.onEvent(context, "download", map); - DownloadEntity downloadEntity = new DownloadEntity(); - downloadEntity.setUrl(apkEntity.getUrl()); - downloadEntity.setName(gameName); - downloadEntity.setPath(FileUtils.getDownloadPath(context, - MD5Utils.getContentMD5( - gameName + "_" + System.currentTimeMillis()) + ".apk")); - downloadEntity.setETag(apkEntity.getEtag()); - downloadEntity.setIcon(gameIcon); - downloadEntity.setPlatform(apkEntity.getPlatform()); - downloadEntity.setPackageName(apkEntity.getPackageName()); - downloadEntity.setUpdate(true); - downloadEntity.setEntrance(entrance); - downloadEntity.setLocation(mlocation); - DownloadManager.getInstance(context).add(downloadEntity); + DownloadManager.createDownload(context, apkEntity, gameEntity, "更新", entrance, location); } //下载插件化游戏 @@ -1025,89 +971,46 @@ public class DownloadDialog { Map kv = new HashMap<>(); kv.put("版本", apkEntity.getPlatform()); kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", gameName, kv); + DataUtils.onEvent(context, "游戏下载", gameEntity.getName(), kv); Map kv2 = new HashMap<>(); kv2.put("版本", apkEntity.getPlatform()); kv2.put("状态", "下载开始"); kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", gameName, kv2); + DataUtils.onEvent(context, "游戏下载位置", gameEntity.getName(), kv2); Map kv3 = new HashMap<>(); kv3.put(entrance, "下载数"); kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", gameName, kv3); - - if ("主页-最新插件".equals(entrance)) { - Map kv4 = new HashMap<>(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "最新插件", kv4); - } else if ("主页-热门卡牌".equals(entrance)) { - Map kv4 = new HashMap<>(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); - } else if ("主页-新测卡牌".equals(entrance)) { - Map kv4 = new HashMap<>(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); - } + DataUtils.onEvent(context, "应用数据", gameEntity.getName(), kv3); if (entrance.contains("游戏详情")) { Map kv5 = new HashMap<>(); kv5.put("下载", "下载开始"); kv5.put("下载", apkEntity.getPlatform()); - DataUtils.onEvent(context, "插件数据", gameName, kv5); + DataUtils.onEvent(context, "插件数据", gameEntity.getName(), kv5); } Map kv6 = new HashMap<>(); kv6.put("下载", "下载开始"); kv6.put("版本", apkEntity.getPlatform()); - DataUtils.onEvent(context, "插件化", gameName, kv6); + DataUtils.onEvent(context, "插件化", gameEntity.getName(), kv6); Map map = new HashMap<>(); - map.put("game", gameName); - map.put("game_id", gameId); + map.put("game", gameEntity.getName()); + map.put("game_id", gameEntity.getId()); map.put("method", "插件化"); map.put("platform", PlatformUtils.getInstance(context) .getPlatformName(apkEntity.getPlatform())); map.put("status", "开始"); - map.put("location", mlocation); + map.put("location", location); map.put("entrance", entrance); map.put("btn_status", "插件化"); map.put("network", NetworkUtils.getConnectedType(context)); DataCollectionManager.onEvent(context, "download", map); - DownloadEntity downloadEntity = new DownloadEntity(); - downloadEntity.setUrl(apkEntity.getUrl()); - downloadEntity.setName(gameName); - downloadEntity.setPath(FileUtils.getDownloadPath(context, MD5Utils.getContentMD5( - gameName + "_" + System.currentTimeMillis()) + ".apk")); - downloadEntity.setETag(apkEntity.getEtag()); - downloadEntity.setIcon(gameIcon); - downloadEntity.setPlatform(apkEntity.getPlatform()); - downloadEntity.setPluggable(true); - downloadEntity.setPackageName(apkEntity.getPackageName()); - downloadEntity.setGameId(gameId); - downloadEntity.setEntrance(entrance); - downloadEntity.setLocation(mlocation); - - DownloadManager.getInstance(context).add(downloadEntity); - - DownloadManager.getInstance(context).putStatus(downloadEntity.getUrl(), "downloading"); - - GameUpdateEntity game = new GameUpdateEntity(); - game.setId(gameId); - game.setName(gameName); - game.setIcon(gameIcon); - game.setPackageName(apkEntity.getPackageName()); - game.setSize(apkEntity.getSize()); - game.setVersion(apkEntity.getVersion()); - game.setGhVersion(apkEntity.getGhVersion()); - game.setUrl(apkEntity.getUrl()); - game.setPlatform(apkEntity.getPlatform()); - game.setPluggable(true); - - PackageManager.addUpdate(game); + DownloadManager.createDownload(context, apkEntity, gameEntity, "插件化", entrance, location); + DownloadManager.getInstance(context).putStatus(apkEntity.getUrl(), "downloading"); } else { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } @@ -1120,71 +1023,43 @@ public class DownloadDialog { Map kv = new HashMap<>(); kv.put("版本", apkEntity.getPlatform()); kv.put("状态", "下载开始"); - DataUtils.onEvent(context, "游戏下载", gameName, kv); + DataUtils.onEvent(context, "游戏下载", gameEntity.getName(), kv); Map kv2 = new HashMap<>(); kv2.put("版本", apkEntity.getPlatform()); kv2.put("状态", "下载开始"); kv2.put("位置", entrance + "-开始"); - DataUtils.onEvent(context, "游戏下载位置", gameName, kv2); + DataUtils.onEvent(context, "游戏下载位置", gameEntity.getName(), kv2); Map kv3 = new HashMap<>(); kv3.put(entrance, "下载数"); kv3.put(entrance, "下载开始"); - DataUtils.onEvent(context, "应用数据", gameName, kv3); - - if ("主页-最新插件".equals(entrance)) { - Map kv4 = new HashMap<>(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "最新插件", kv4); - } else if ("主页-热门卡牌".equals(entrance)) { - Map kv4 = new HashMap<>(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "热门卡牌", kv4); - } else if ("主页-新测卡牌".equals(entrance)) { - Map kv4 = new HashMap<>(); - kv4.put(gameName, "下载数"); - DataUtils.onEvent(context, "主页数据", "新测卡牌", kv4); - } + DataUtils.onEvent(context, "应用数据", gameEntity.getName(), kv3); if (entrance.contains("游戏详情")) { Map kv5 = new HashMap<>(); kv5.put("下载", "下载量"); kv5.put("下载", apkEntity.getPlatform()); - DataUtils.onEvent(context, "插件数据", gameName, kv5); + DataUtils.onEvent(context, "插件数据", gameEntity.getName(), kv5); } Map map = new HashMap<>(); - map.put("game", gameName); - map.put("game_id", gameId); + map.put("game", gameEntity.getName()); + map.put("game_id", gameEntity.getId()); map.put("method", "正常"); map.put("platform", PlatformUtils.getInstance(context) .getPlatformName(apkEntity.getPlatform())); map.put("status", "开始"); - map.put("location", mlocation); + map.put("location", location); map.put("entrance", entrance); map.put("btn_status", "下载"); map.put("network", NetworkUtils.getConnectedType(context)); DataCollectionManager.onEvent(context, "download", map); - DownloadEntity downloadEntity = new DownloadEntity(); - downloadEntity.setUrl(apkEntity.getUrl()); - downloadEntity.setName(gameName); - downloadEntity.setPath(FileUtils.getDownloadPath(context, MD5Utils.getContentMD5( - gameName + "_" + System.currentTimeMillis()) + ".apk")); - downloadEntity.setETag(apkEntity.getEtag()); - downloadEntity.setIcon(gameIcon); - downloadEntity.setPlatform(apkEntity.getPlatform()); - downloadEntity.setPackageName(apkEntity.getPackageName()); - downloadEntity.setGameId(gameId); - downloadEntity.setEntrance(entrance); - downloadEntity.setLocation(mlocation); - - DownloadManager.getInstance(context).add(downloadEntity); + DownloadManager.createDownload(context, apkEntity, gameEntity, "下载", entrance, location); + DownloadManager.getInstance(context).putStatus(apkEntity.getUrl(), "downloading"); download_item_tv_status.setText("0.0%"); - - DownloadManager.getInstance(context).putStatus(downloadEntity.getUrl(), "downloading"); } else { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index ea13f153e4..6f9abd6be5 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -9,12 +9,14 @@ import android.widget.Toast; import com.gh.common.constant.Constants; import com.gh.common.util.FileUtils; +import com.gh.common.util.MD5Utils; import com.gh.common.util.Utils; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameEntity; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.LinkedBlockingQueue; @@ -182,19 +184,55 @@ public class DownloadManager { /** * 添加一个下载任务 * - * @param entry + * @param downloadEntity */ - public void add(DownloadEntity entry) { - if (entry != null) { - String url = entry.getUrl(); + public void add(DownloadEntity downloadEntity) { + if (downloadEntity != null) { + String url = downloadEntity.getUrl(); checkDownloadEntryRecordValidate(url); if (!isFileCompleted(url) && !isTaskDownloading(url)) { - context.startService(getIntent(entry, DownloadStatus.add)); + context.startService(getIntent(downloadEntity, DownloadStatus.add)); } } Utils.log(DownloadManager.class.getSimpleName(), "add"); } + public static void createDownload(Context context, + GameEntity gameEntity, + String method, + String entrance, + String location) { + createDownload(context, gameEntity.getApk().get(0), gameEntity, method, entrance, location); + } + + public static void createDownload(Context context, + ApkEntity apkEntity, + GameEntity gameEntity, + String method, + String entrance, + String location) { + + DownloadEntity downloadEntity = new DownloadEntity(); + downloadEntity.setUrl(apkEntity.getUrl()); + downloadEntity.setName(gameEntity.getName()); + downloadEntity.setPath(FileUtils.getDownloadPath(context, + MD5Utils.getContentMD5(gameEntity.getName() + "_" + System.currentTimeMillis()) + ".apk")); + downloadEntity.setETag(apkEntity.getEtag()); + downloadEntity.setIcon(gameEntity.getIcon()); + downloadEntity.setPlatform(apkEntity.getPlatform()); + downloadEntity.setPackageName(apkEntity.getPackageName()); + downloadEntity.setGameId(gameEntity.getId()); + downloadEntity.setEntrance(entrance); + downloadEntity.setLocation(location); + if (method.equals("更新")) { + downloadEntity.setUpdate(true); + } else if (method.equals("插件化")) { + downloadEntity.setPluggable(true); + } + downloadEntity.setPlugin(gameEntity.getTag() != null && gameEntity.getTag().size() != 0); + DownloadManager.getInstance(context.getApplicationContext()).add(downloadEntity); + } + /** * 根据任务url暂停下载 * diff --git a/app/src/main/java/com/gh/download/DownloadTask.java b/app/src/main/java/com/gh/download/DownloadTask.java index 232b242e5e..ace98f5ba1 100644 --- a/app/src/main/java/com/gh/download/DownloadTask.java +++ b/app/src/main/java/com/gh/download/DownloadTask.java @@ -11,7 +11,6 @@ import com.gh.common.util.Utils; import java.text.DecimalFormat; import java.util.Iterator; import java.util.Map; -import java.util.Map.Entry; public class DownloadTask implements DownloadListener { diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 8bd539743e..a079c76c91 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -53,13 +53,10 @@ import com.gh.common.util.TimestampUtils; import com.gh.common.util.TokenUtils; import com.gh.common.util.TrafficUtils; import com.gh.common.util.Utils; -import com.gh.download.DataChanger; import com.gh.download.DataWatcher; -import com.gh.download.DownloadDao; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; import com.gh.download.DownloadStatus; -import com.gh.download.DownloadTask; import com.gh.gamecenter.db.info.ConcernInfo; import com.gh.gamecenter.db.info.GameInfo; import com.gh.gamecenter.db.info.SuspectedGameInfo; @@ -147,8 +144,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene private TextView app_btn_cancel; private AppEntity appEntity; - public static MainActivity mainActivity = null; - // 黄壮华 添加观察者 修改2015/8/15 private DataWatcher dataWatcher = new DataWatcher() { @Override @@ -270,18 +265,14 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene if (!downloadEntity.isPluggable()) { if (sp.getBoolean("autoinstall", true)) { if (FileUtils.isEmptyFile(downloadEntity.getPath())) { - toast("解析包错误"); + toast("解析包出错(可能被误删了),请重新下载"); DownloadManager.getInstance(MainActivity.this).cancel(downloadEntity.getUrl()); } else { - PackageManager manager = new PackageManager( - getApplicationContext()); - if (manager.launchSetup(downloadEntity.getPath())) { + if (PackageUtils.isCanLaunchSetup(getApplicationContext(), downloadEntity.getPath())) { startActivity(PackageUtils.getInstallIntent(downloadEntity.getPath())); } else { - // 记录自动弹出卸载框 // 弹出卸载提示框 - EventBus.getDefault().post(new EBShowDialog("delete", - downloadEntity.getPath())); + EventBus.getDefault().post(new EBShowDialog("plugin", downloadEntity.getPath())); } } } @@ -383,8 +374,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene // 初始化gameMap DownloadManager.getInstance(this).initGameMap(); - mainActivity = this; - if (savedInstanceState != null) { currentTab = savedInstanceState.getInt("currentTab"); } else { @@ -817,7 +806,6 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene if (list == null || list.isEmpty()) { return; } - PackageManager mPackageManager = new PackageManager(this); List infos = concernManager.getInstalledGame(); HashMap map; GameEntity gameEntity; @@ -829,7 +817,7 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene && gameEntity.getApk() != null) { map = info.getPackageNames(); for (String key : map.keySet()) { - if (map.get(key) && !mPackageManager.isSignature(key)) { + if (map.get(key) && !PackageUtils.isSignature(this, key)) { for (ApkEntity apkEntity : gameEntity.getApk()) { if (apkEntity.getPackageName().equals(key)) { GameUpdateEntity gameUpdateEntity = new GameUpdateEntity(); @@ -1504,9 +1492,12 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene DataUtils.onEvent(this, "插件化", mDownloadEntity.getName(), kv6); } - // 删除数据库和文件 - DownloadManager.getInstance(getApplicationContext()).cancel( - mDownloadEntity.getUrl(), sp.getBoolean("autodelete", true)); + if (!mDownloadEntity.isPlugin() // 不是插件游戏,自己删除数据库数据和安装包 + || PackageUtils.isSignature(this, packageName)) {// 是插件游戏,判断签名是否相同,是才删除数据库数据和安装包 + DownloadManager.getInstance(getApplicationContext()).cancel( + mDownloadEntity.getUrl(), sp.getBoolean("autodelete", true)); + } + } else if ("卸载".equals(busFour.getType())) { Map kv6 = new HashMap<>(); kv6.put("安装或卸载", "卸载完成"); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java index a2932f46eb..fa7ed46085 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/PluginAdapter.java @@ -185,8 +185,7 @@ public class PluginAdapter extends RecyclerView.Adapter } }); - DownloadItemUtils.setOnClickListener(context, viewHolder.downloadBtn, - viewHolder.download_speed, viewHolder.download_percentage, gameEntity, position, + DownloadItemUtils.setOnClickListener(context, viewHolder.downloadBtn, gameEntity, position, PluginAdapter.this, entrance + "+(可以插件化的游戏)", "可以插件化的游戏:" + gameEntity.getName()); DownloadItemUtils.updateItem(context, viewHolder.gameDes, 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 39d01a0856..9600f860af 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java @@ -302,8 +302,7 @@ public class SubjectAdapter extends RecyclerView.Adapter 0 && position <= doneList.size()) { - entry = doneList.get(position - 1); + downloadEntity = doneList.get(position - 1); // // 第一个 // if (position == 1) { @@ -114,7 +114,7 @@ public class GameDownloadAdapter extends RecyclerView.Adapter kv6 = new HashMap<>(); - kv6.put("操作", "点击安装完成"); - DataUtils.onEvent(context, "插件化", entry.getName(), kv6); - } - if (FileUtils.isEmptyFile(path)) { - Toast.makeText(context, "解析包出错(可能被误删了),请重新下载", Toast.LENGTH_SHORT).show(); - removeDownload(entry, viewHolder.getPosition()); + final String path = downloadEntity.getPath(); + if (downloadEntity.isPluggable() + && PackageManager.isInstalled(downloadEntity.getPackageName())) { + showPluginDialog(downloadEntity.getPath()); } else { - if (entry.getName().contains("光环助手")) { - context.startActivity(PackageUtils.getInstallIntent(path)); + if (FileUtils.isEmptyFile(path)) { + Toast.makeText(context, "解析包出错(可能被误删了),请重新下载", Toast.LENGTH_SHORT).show(); + removeDownload(downloadEntity, viewHolder.getPosition()); } else { - PackageManager manager = new PackageManager(context); - if (manager.launchSetup(path)) { + if (downloadEntity.getName().contains("光环助手")) { context.startActivity(PackageUtils.getInstallIntent(path)); } else { - DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() { - @Override - public void onConfirem() { - context.startActivity(PackageUtils.getUninstallIntent(context, path)); - } - }); + PackageUtils.launchSetup(context, path); } } } - } else if ("插件化".equals(str)) { - showPluginDialog(entry.getPath()); } else if ("暂停".equals(str)) { viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_download_style); viewHolder.dm_item_tv_startorpause.setText("继续"); @@ -334,10 +322,10 @@ public class GameDownloadAdapter extends RecyclerView.Adapter kv = new HashMap<>(); - kv.put("版本", entry.getPlatform()); - DataUtils.onEvent(context, "游戏启动", entry.getName(), kv); + kv.put("版本", downloadEntity.getPlatform()); + DataUtils.onEvent(context, "游戏启动", downloadEntity.getName(), kv); - PackageUtils.launchApplicationByPackageName(context, entry.getPackageName()); + PackageUtils.launchApplicationByPackageName(context, downloadEntity.getPackageName()); } } }); @@ -346,7 +334,7 @@ public class GameDownloadAdapter extends RecyclerView.Adapter noopenList = new ArrayList<>(); ArrayList oftenuseList = new ArrayList<>(); - PackageManager pManager = new PackageManager(context); TrafficUtils tUtils = TrafficUtils.getInstance(context); ConcernManager cManager = new ConcernManager(context); @@ -137,8 +136,8 @@ public class InstallFragmentAdapter extends RecyclerView.Adapter + + + + + + + + + + + + + + + + + + + + \ No newline at end of file