From 899da436827f86e953f91c899a86d5dc44a93acd Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Mon, 30 Dec 2019 18:15:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E8=A1=8C=E4=B8=BA=E7=9B=91?= =?UTF-8?q?=E6=8E=A7-=E6=95=B0=E6=8D=AE=E5=9F=8B=E7=82=B9=E9=9C=80?= =?UTF-8?q?=E6=B1=82=20https://gitlab.ghzs.com/pm/halo-app-issues/issues/7?= =?UTF-8?q?38?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/LogUtils.java | 52 ++++++++++++++++ .../com/gh/download/DownloadDataHelper.kt | 56 +++++++++++++++++ .../java/com/gh/download/DownloadManager.java | 62 +++++++++++++++++-- .../java/com/gh/gamecenter/MainActivity.java | 6 +- .../gh/gamecenter/SplashScreenActivity.java | 11 ++-- .../gh/gamecenter/manager/UpdateManager.java | 4 +- libraries/LGLibrary | 2 +- 7 files changed, 178 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/gh/download/DownloadDataHelper.kt diff --git a/app/src/main/java/com/gh/common/util/LogUtils.java b/app/src/main/java/com/gh/common/util/LogUtils.java index eecdee9ea9..b4b368912e 100644 --- a/app/src/main/java/com/gh/common/util/LogUtils.java +++ b/app/src/main/java/com/gh/common/util/LogUtils.java @@ -9,6 +9,7 @@ import android.text.TextUtils; import com.gh.common.exposure.ExposureSource; import com.gh.common.exposure.meta.Meta; import com.gh.common.exposure.meta.MetaUtil; +import com.gh.download.DownloadDataHelper; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.entity.CommunityEntity; import com.gh.gamecenter.entity.GameEntity; @@ -17,6 +18,7 @@ import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.qa.entity.Questions; import com.gh.loghub.LogHubUtils; import com.halo.assistant.HaloApp; +import com.lightgame.download.DownloadEntity; import com.lightgame.utils.Util_System_Phone_State; import com.lightgame.utils.Utils; @@ -31,6 +33,56 @@ import java.util.List; */ public class LogUtils { + + public static void uploadDownloadEvent(DownloadEntity downloadEntity) { + Context context = HaloApp.getInstance().getApplication(); + Meta meta = MetaUtil.INSTANCE.getMeta(); + JSONObject object = new JSONObject(); + + try { + object.put("event", DownloadDataHelper.getDownloadStatusAlias(downloadEntity)); + object.put("msg", downloadEntity.getError()); + object.put("status", downloadEntity.getStatus().getStatus()); + + // payload + JSONObject payloadObject = new JSONObject(); + payloadObject.put("game_id", downloadEntity.getGameId()); + payloadObject.put("gameName", downloadEntity.getName()); + payloadObject.put("platform", downloadEntity.getPlatform()); + payloadObject.put("package", downloadEntity.getPackageName()); + payloadObject.put("filename", downloadEntity.getPath().substring(downloadEntity.getPath().lastIndexOf("/") + 1)); + payloadObject.put("total_size", (downloadEntity.getSize() / 1024 / 1024)); + payloadObject.put("completed_size", (downloadEntity.getProgress() / 1024 / 1024)); + + object.put("payload", payloadObject); + + // meta + JSONObject metaObject = new JSONObject(); + metaObject.put("android_id", meta.getAndroid_id()); + metaObject.put("android_sdk", meta.getAndroid_sdk()); + metaObject.put("android_version", meta.getAndroid_version()); + metaObject.put("appVersion", meta.getAppVersion()); + metaObject.put("channel", meta.getChannel()); + metaObject.put("gid", meta.getGid()); + metaObject.put("imei", meta.getImei()); + metaObject.put("mac", meta.getMac()); + metaObject.put("manufacturer", meta.getManufacturer()); + metaObject.put("model", meta.getModel()); + metaObject.put("network", DeviceUtils.getNetwork(context)); + metaObject.put("os", meta.getOs()); + metaObject.put("userId", meta.getUserId()); + + object.put("meta", metaObject); + object.put("timestamp", System.currentTimeMillis() / 1000); + } catch (Exception e) { + e.printStackTrace(); + } + if (BuildConfig.DEBUG) { + Utils.log("LogUtils->" + object.toString()); + } + LogHubUtils.uploadLog(DeviceUtils.getIPAddress(context), object, "download_debug"); + } + public static void uploadCommunityArticle(String tracers, String articleId, String articleTitle, int readTime, CommunityEntity community, SpecialColumn specialColumn) { JSONObject object = new JSONObject(); try { diff --git a/app/src/main/java/com/gh/download/DownloadDataHelper.kt b/app/src/main/java/com/gh/download/DownloadDataHelper.kt new file mode 100644 index 0000000000..622ce9c9a2 --- /dev/null +++ b/app/src/main/java/com/gh/download/DownloadDataHelper.kt @@ -0,0 +1,56 @@ +package com.gh.download + +import android.content.pm.PackageManager +import com.halo.assistant.HaloApp +import com.lightgame.download.DownloadEntity +import com.lightgame.download.DownloadStatus + +object DownloadDataHelper { + const val DOWNLOAD_RESUME_WAY = "download_resume_way" + const val DOWNLOAD_RESUME_MANUAL = "manual" + const val DOWNLOAD_RESUME_AUTO = "auto" + + const val DOWNLOAD_CANCEL_WAY = "download_cancel_way" + const val DOWNLOAD_CANCEL_MANUAL = "manual" + const val DOWNLOAD_CANCEL_AUTO = "auto" + + @JvmStatic + fun getDownloadStatusAlias(downloadEntity: DownloadEntity): String { + val status = downloadEntity.status + return if (status == DownloadStatus.add) { + "开始下载" + } else if (status == DownloadStatus.pause) { + "暂停下载" + } else if (status == DownloadStatus.resume) { + if (downloadEntity.meta[DOWNLOAD_RESUME_WAY] == DOWNLOAD_RESUME_AUTO) { + "自动恢复下载" + } else { + "继续下载" + } + } else if (status == DownloadStatus.waiting) { + "暂停下载-等待中" + } else if (status == DownloadStatus.subscribe || status == DownloadStatus.neterror || status == DownloadStatus.timeout) { + "暂停下载-连上WiFi自动下载" + } else if (status == DownloadStatus.done) { + val pm = HaloApp.getInstance().application.applicationContext.packageManager + val packageInfo = pm.getPackageArchiveInfo(downloadEntity.path, PackageManager.GET_ACTIVITIES) + if (packageInfo == null) { + "解析包错误" + } else { + "下载完成" + } + } else if (status == DownloadStatus.delete || status == DownloadStatus.cancel) { + if (downloadEntity.meta[DOWNLOAD_CANCEL_WAY] == DOWNLOAD_CANCEL_AUTO) { + "自动删除任务" + } else { + "删除任务" + } + } else if (status == DownloadStatus.overflow) { + "解析包错误-下载过程中" + } else if (status == DownloadStatus.hijack || status == DownloadStatus.notfound) { + "下载失败" + } else { + "未知状态" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 5fab6d9172..de458aefad 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -157,9 +157,12 @@ public class DownloadManager implements DownloadStatusListener { String url = (String) msg.obj; switch (msg.what) { case DownloadConfig.CONTINUE_DOWNLOAD_TASK: + case DownloadConfig.CONTINUE_DOWNLOAD_AUTO_TASK: if (lastTimeMap.get(url) != null && System.currentTimeMillis() - lastTimeMap.get(url) >= 1000) { DownloadEntity downloadEntity = getDownloadEntityByUrl(url); - if (downloadEntity != null) add(downloadEntity); + if (downloadEntity != null) { + resume(downloadEntity, msg.what == DownloadConfig.CONTINUE_DOWNLOAD_AUTO_TASK); + } } break; case DownloadConfig.PAUSE_DOWNLOAD_TASK: @@ -309,6 +312,42 @@ public class DownloadManager implements DownloadStatusListener { Utils.log(DownloadManager.class.getSimpleName(), "add"); } + /** + * 继续下载任务 + * + * @param downloadEntity + * @param automatic 是否是自动下载 + */ + public void resume(DownloadEntity downloadEntity, boolean automatic) { + if (downloadEntity != null) { + String url = downloadEntity.getUrl(); + checkDownloadEntryRecordValidate(url); + if (isFileCompleted(url)) { + downloadEntity.setStatus(DownloadStatus.done); + DataChanger.INSTANCE.notifyDataChanged(downloadEntity); + } else if (!isTaskDownloading(url)) { + DownloadEntity daoEntity = mDownloadDao.get(downloadEntity.getUrl()); + if (automatic) { + if (daoEntity != null) { + daoEntity.getMeta().put(DownloadDataHelper.DOWNLOAD_RESUME_WAY, DownloadDataHelper.DOWNLOAD_RESUME_AUTO); + mDownloadDao.newOrUpdate(daoEntity); + } + downloadEntity.getMeta().put(DownloadDataHelper.DOWNLOAD_RESUME_WAY, DownloadDataHelper.DOWNLOAD_RESUME_AUTO); + } else { + if (daoEntity != null) { + daoEntity.getMeta().put(DownloadDataHelper.DOWNLOAD_RESUME_WAY, DownloadDataHelper.DOWNLOAD_RESUME_MANUAL); + mDownloadDao.newOrUpdate(daoEntity); + } + downloadEntity.getMeta().put(DownloadDataHelper.DOWNLOAD_RESUME_WAY, DownloadDataHelper.DOWNLOAD_RESUME_MANUAL); + } + startDownloadService(downloadEntity, DownloadStatus.resume); + } + put(url, System.currentTimeMillis()); + putStatus(url, DownloadStatus.downloading); + } + Utils.log(DownloadManager.class.getSimpleName(), "resume"); + } + /** * 添加一个下载任务(WiFi时自动下载) * @@ -482,10 +521,16 @@ public class DownloadManager implements DownloadStatusListener { * @param url */ public void cancel(String url) { - cancel(url, true); + cancel(url, true, false); } - public void cancel(String url, boolean isDeleteFile) { + /** + * 根据url取消下载,并删除已下载的文件 + * + * @param url + * @param automatic 是否是安装完自动删除 + */ + public void cancel(String url, boolean isDeleteFile, boolean automatic) { DownloadEntity entry = mDownloadDao.get(url); if (entry != null) { if (isDeleteFile) { @@ -495,6 +540,11 @@ public class DownloadManager implements DownloadStatusListener { Utils.log(DownloadManager.class.getSimpleName(), "cancel==>file and record were deleted!"); } if (entry != null) { + if (automatic) { + entry.getMeta().put(DownloadDataHelper.DOWNLOAD_CANCEL_WAY, DownloadDataHelper.DOWNLOAD_CANCEL_AUTO); + } else { + entry.getMeta().put(DownloadDataHelper.DOWNLOAD_CANCEL_WAY, DownloadDataHelper.DOWNLOAD_CANCEL_MANUAL); + } entry.setStatus(DownloadStatus.cancel); startDownloadService(entry, DownloadStatus.cancel); Utils.log(DownloadManager.class.getSimpleName(), "cancel"); @@ -506,7 +556,7 @@ public class DownloadManager implements DownloadStatusListener { */ public void cancelAll() { for (DownloadEntity entry : DataChanger.INSTANCE.getDownloadEntries().values()) { - cancel(entry.getUrl(), true); + cancel(entry.getUrl(), true, false); } Utils.log(DownloadManager.class.getSimpleName(), "cancel all"); } @@ -591,7 +641,7 @@ public class DownloadManager implements DownloadStatusListener { public void startDownloadService(DownloadEntity downloadEntity, DownloadStatus status) { // 在启动服务时添加该条下载的网络状态 - if (status == DownloadStatus.add) { + if (status == DownloadStatus.add || status == DownloadStatus.resume) { String network = DeviceUtils.getNetwork(mContext); DownloadEntity daoEntity = mDownloadDao.get(downloadEntity.getUrl()); if (daoEntity != null) { @@ -629,7 +679,7 @@ public class DownloadManager implements DownloadStatusListener { DownloadStatus.subscribe.equals(downloadEntity.getStatus())) { DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), System.currentTimeMillis()); Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; + msg.what = DownloadConfig.CONTINUE_DOWNLOAD_AUTO_TASK; msg.obj = downloadEntity.getUrl(); DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 1e008ae4aa..0f9d966aa7 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -175,6 +175,10 @@ public class MainActivity extends BaseActivity { private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(DownloadEntity downloadEntity) { + if (downloadEntity.getStatus() != DownloadStatus.downloading) { + LogUtils.uploadDownloadEvent(downloadEntity); + } + if (DownloadStatus.hijack.equals(downloadEntity.getStatus())) { // 链接被劫持 processHijack(downloadEntity); @@ -932,7 +936,7 @@ public class MainActivity extends BaseActivity { ThirdPartyPackageHelper.saveGameId(mDownloadEntity.getPackageName(), mDownloadEntity.getGameId()); } DownloadManager.getInstance(getApplicationContext()).cancel( - mDownloadEntity.getUrl(), false); // 默认不删除安装包 mSp.getBoolean("autodelete", true) + mDownloadEntity.getUrl(), false, true); // 默认不删除安装包 mSp.getBoolean("autodelete", true) } diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 16549f2271..783e4bd991 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -15,6 +15,11 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.gh.base.BaseActivity; import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceTokenUtils; @@ -50,10 +55,6 @@ import java.util.Date; import java.util.List; import java.util.Locale; -import androidx.annotation.NonNull; -import androidx.core.app.ActivityCompat; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import pub.devrel.easypermissions.AfterPermissionGranted; @@ -108,7 +109,7 @@ public class SplashScreenActivity extends BaseActivity { List all = DownloadManager.getInstance(this).getAll(); for (DownloadEntity downloadEntity : all) { if (downloadEntity.getPackageName().equals(getPackageName())) { - DownloadManager.getInstance(this).cancel(downloadEntity.getUrl(), true); + DownloadManager.getInstance(this).cancel(downloadEntity.getUrl(), true, true); break; } } diff --git a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java index fa5dc4f97f..e0998aab1a 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/UpdateManager.java @@ -72,7 +72,7 @@ public class UpdateManager { app_tv_percent.setText(String.format( Locale.getDefault(), "%s%%", String.valueOf(downloadEntity.getPercent()))); if (DownloadStatus.done.equals(downloadEntity.getStatus())) { - DownloadManager.getInstance(mContext).cancel(downloadEntity.getUrl(), false); + DownloadManager.getInstance(mContext).cancel(downloadEntity.getUrl(), false, true); if (downloadDialog != null) { downloadDialog.dismiss(); } @@ -283,7 +283,7 @@ public class UpdateManager { downloadEntity.setPath(path); downloadEntity.setPlatform("官方版"); downloadEntity.setPackageName(mContext.getPackageName()); - DownloadManager.getInstance(mContext).cancel(downloadEntity.getUrl(), false); + DownloadManager.getInstance(mContext).cancel(downloadEntity.getUrl(), false, true); DownloadManager.getInstance(mContext).pauseAll(); DownloadManager.getInstance(mContext).add(downloadEntity); } diff --git a/libraries/LGLibrary b/libraries/LGLibrary index 3102cf07a9..c2bc984379 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit 3102cf07a90023cf7ccb4e5c9ccc2ca143bf79ee +Subproject commit c2bc98437964a718ed2571bec3d16e005bf8417b