From ad059fe18d21e077581c5da49cb0e163e5de2dd6 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Mon, 25 May 2020 17:03:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=A0=E6=94=B9=E7=89=88?= =?UTF-8?q?=E9=80=A0=E6=88=90=E7=9A=84=E4=B8=8B=E8=BD=BD=E6=95=B0=E6=8D=AE?= =?UTF-8?q?(=E6=96=B0)=E4=B8=8B=E8=BD=BD=E4=BA=8B=E4=BB=B6=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98=20https://gitlab.ghzs.com/?= =?UTF-8?q?pm/halo-app-issues/-/issues/877?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gh/common/databind/BindingAdapters.java | 6 ++-- .../com/gh/common/exposure/ExposureUtils.kt | 30 +++++++++--------- .../com/gh/common/util/DownloadItemUtils.java | 27 ++++++---------- .../java/com/gh/common/util/GameUtils.java | 2 +- .../java/com/gh/common/util/InstallUtils.java | 2 +- .../java/com/gh/common/util/PackageUtils.java | 16 +++++----- .../java/com/gh/download/DownloadManager.java | 31 +++++++------------ .../java/com/gh/gamecenter/MainActivity.java | 2 +- .../adapter/viewholder/DetailViewHolder.java | 6 +--- .../download/GameUpdateFragmentAdapter.java | 2 +- .../com/gh/gamecenter/entity/GameInstall.kt | 2 +- .../packagehelper/PackageRepository.kt | 4 +-- .../main/java/com/halo/assistant/HaloApp.java | 5 +-- 13 files changed, 55 insertions(+), 80 deletions(-) diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 480be710a7..a89a07f81a 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -16,6 +16,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; +import androidx.core.view.ViewCompat; import androidx.databinding.BindingAdapter; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -627,9 +628,6 @@ public class BindingAdapters { if (TextUtils.isEmpty(msg)) { DataUtils.onGameDownloadEvent(progressBar.getContext(), gameEntity.getName(), apkEntity.getPlatform(), entrance, "下载开始", method); - ExposureUtils.DownloadType downloadType = ExposureUtils.getDownloadType(apkEntity, method); - ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(gameEntity, apkEntity.getPlatform(), traceEvent, downloadType); - DownloadManager.createDownload(progressBar.getContext(), apkEntity, gameEntity, @@ -637,7 +635,7 @@ public class BindingAdapters { entrance, location + gameEntity.getName(), isSubscribe, - downloadExposureEvent); + traceEvent); progressBar.setProgress(0); progressBar.setDownloadType("插件化".equals(method) ? diff --git a/app/src/main/java/com/gh/common/exposure/ExposureUtils.kt b/app/src/main/java/com/gh/common/exposure/ExposureUtils.kt index e23dd64dc9..186f3e7e35 100644 --- a/app/src/main/java/com/gh/common/exposure/ExposureUtils.kt +++ b/app/src/main/java/com/gh/common/exposure/ExposureUtils.kt @@ -1,5 +1,6 @@ package com.gh.common.exposure +import com.g00fy2.versioncompare.Version import com.gh.common.constant.Constants import com.gh.common.util.PackageUtils import com.gh.common.util.toObject @@ -49,29 +50,26 @@ object ExposureUtils { } @JvmStatic - fun getDownloadType(apkEntity: ApkEntity, method: String) : DownloadType { - return if ("更新" == method) { - if (PackageUtils.isSignature(HaloApp.getInstance().application, apkEntity.packageName)) { - DownloadType.PLUGIN_UPDATE + fun getDownloadType(apkEntity: ApkEntity, gameId: String): DownloadType { + return if (PackageUtils.isInstalled(HaloApp.getInstance().application, apkEntity.packageName)) { + if (PackageUtils.isSignedByGh(HaloApp.getInstance().application, apkEntity.packageName)) { + if (PackageUtils.isCanUpdate(apkEntity, gameId)) { + DownloadType.PLUGIN_UPDATE + } else { + if (Version(apkEntity.version).isHigherThan(PackageUtils.getVersionByPackage(apkEntity.packageName))) { + DownloadType.UPDATE + } else { + DownloadType.DOWNLOAD + } + } } else { - DownloadType.UPDATE + DownloadType.PLUGIN_DOWNLOAD } - } else if ("插件化" == method) { - DownloadType.PLUGIN_DOWNLOAD } else { DownloadType.DOWNLOAD } } - @JvmStatic - fun getUpdateType(apkEntity: ApkEntity) : DownloadType { - return if (PackageUtils.isSignature(HaloApp.getInstance().application, apkEntity.packageName)) { - DownloadType.PLUGIN_UPDATE - } else { - DownloadType.UPDATE - } - } - enum class DownloadType { DOWNLOAD, 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 f3fe0a8520..355c1ccd73 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -8,18 +8,11 @@ import android.text.TextUtils; import android.view.View; import android.widget.TextView; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.collection.ArrayMap; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; - import com.gh.common.constant.Config; import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.ReserveDialogFragment; import com.gh.common.exposure.ExposureEvent; -import com.gh.common.exposure.ExposureUtils; import com.gh.common.history.HistoryHelper; import com.gh.common.repository.ReservationRepository; import com.gh.download.DownloadManager; @@ -41,6 +34,12 @@ import com.lightgame.utils.Utils; import java.util.concurrent.LinkedBlockingQueue; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.collection.ArrayMap; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + /** * todo 下载判断不能以按钮文案为判断条件,否则按钮文案修改时又要修改判断逻辑 */ @@ -566,9 +565,7 @@ public class DownloadItemUtils { if (TextUtils.isEmpty(msg)) { DataUtils.onGameDownloadEvent(context, gameEntity.getName(), gameEntity.getApk().get(0).getPlatform(), entrance, "下载开始", "下载"); - ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(gameEntity, gameEntity.getApk().get(0).getPlatform(), traceEvent, ExposureUtils.DownloadType.DOWNLOAD); - - DownloadManager.createDownload(context, gameEntity, context.getString(R.string.download), entrance, location, isSubscribe, downloadExposureEvent); + DownloadManager.createDownload(context, gameEntity, context.getString(R.string.download), entrance, location, isSubscribe, traceEvent); Utils.toast(context, gameEntity.getName() + "已加入下载队列"); downloadBtn.setText(R.string.downloading); @@ -587,9 +584,7 @@ public class DownloadItemUtils { if (TextUtils.isEmpty(msg)) { DataUtils.onGameDownloadEvent(context, gameEntity.getName(), gameEntity.getApk().get(0).getPlatform(), entrance, "下载开始", "插件化"); - ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(gameEntity, gameEntity.getApk().get(0).getPlatform(), traceEvent, ExposureUtils.DownloadType.PLUGIN_DOWNLOAD); - - DownloadManager.createDownload(context, gameEntity, "插件化", entrance, location, isSubscribe, downloadExposureEvent); + DownloadManager.createDownload(context, gameEntity, "插件化", entrance, location, isSubscribe, traceEvent); Utils.toast(context, gameEntity.getName() + "已加入下载队列"); downloadBtn.setText(R.string.downloading); @@ -626,12 +621,8 @@ public class DownloadItemUtils { private static void update(Context context, GameEntity gameEntity, String entrance, String location, boolean isSubscribe, @Nullable ExposureEvent traceEvent) { ApkEntity apkEntity = gameEntity.getApk().get(0); - ExposureUtils.DownloadType downloadType = ExposureUtils.getUpdateType(apkEntity); DataUtils.onGameUpdateEvent(context, gameEntity.getName(), apkEntity.getPlatform(), "下载开始"); - - ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(gameEntity, apkEntity - .getPlatform(), traceEvent, downloadType); - DownloadManager.createDownload(context, gameEntity, "更新", entrance, location, isSubscribe, downloadExposureEvent); + DownloadManager.createDownload(context, gameEntity, "更新", entrance, location, isSubscribe, traceEvent); } } diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index da59f1e8e8..4b0a9ca5ab 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -110,7 +110,7 @@ public class GameUtils { gh_id = PackageUtils.getMetaData(context, apkEntity.getPackageName(), "gh_id"); if (gameEntity.getTag() != null && gameEntity.getTag().size() != 0 && !TextUtils.isEmpty(apkEntity.getGhVersion()) - && !PackageUtils.isSignature(context, apkEntity.getPackageName()) + && !PackageUtils.isSignedByGh(context, apkEntity.getPackageName()) && apkEntity.isShowPlugin(pluginLocation)) { pluginCount++; } else if (gh_id == null || gh_id.equals(gameEntity.getId())) { diff --git a/app/src/main/java/com/gh/common/util/InstallUtils.java b/app/src/main/java/com/gh/common/util/InstallUtils.java index 71994718b6..a23f1c0be5 100644 --- a/app/src/main/java/com/gh/common/util/InstallUtils.java +++ b/app/src/main/java/com/gh/common/util/InstallUtils.java @@ -67,7 +67,7 @@ public class InstallUtils { String installVersion = PackageUtils.getVersionByPackage(packageName); if (!TextUtils.isEmpty(installVersion) && downloadEntity != null && installVersion.equals(downloadEntity.getVersionName())) { - if (!downloadEntity.isPluggable() || PackageUtils.isSignature(context, packageName)) { + if (!downloadEntity.isPluggable() || PackageUtils.isSignedByGh(context, packageName)) { EventBus.getDefault().post(new EBPackage("安装", packageName, installVersion)); } } 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 8eec2df176..f30319ccf8 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -51,7 +51,7 @@ public class PackageUtils { /* * 判断是否可以更新,只判断gh_version的大小 */ - public static List getUpdateData(Context context, GameEntity gameEntity) { + public static List getUpdateData(GameEntity gameEntity) { List updateList = new ArrayList<>(); @@ -88,14 +88,14 @@ public class PackageUtils { String versionFromInstalledApp = getVersionByPackage(apkEntity.getPackageName()); // 是否需要显示更新 - boolean shouldShouldUpdate = apkEntity.getForce(); + boolean shouldShowUpdate = apkEntity.getForce(); - if (shouldShouldUpdate && !TextUtils.isEmpty(versionFromRequest) && !TextUtils.isEmpty(versionFromInstalledApp)) { + if (shouldShowUpdate && !TextUtils.isEmpty(versionFromRequest) && !TextUtils.isEmpty(versionFromInstalledApp)) { // 根据版本判断是否需要更新 - shouldShouldUpdate = new Version(versionFromRequest).isHigherThan(versionFromInstalledApp); + shouldShowUpdate = new Version(versionFromRequest).isHigherThan(versionFromInstalledApp); - if (shouldShouldUpdate) { + if (shouldShowUpdate) { GameUpdateEntity updateEntity = new GameUpdateEntity(); updateEntity.setId(gameEntity.getId()); updateEntity.setName(gameEntity.getName()); @@ -153,7 +153,7 @@ public class PackageUtils { /* * 判断是否是插件包 */ - public static boolean isSignature(Context context, String packageName) { + public static boolean isSignedByGh(Context context, String packageName) { String signature = getApkSignatureByPackageName(context, packageName); return publicKey.equals(signature); } @@ -504,7 +504,7 @@ public class PackageUtils { /** * todo 统一判断 *

- * 判断游戏包是否可以更新 + * 判断游戏包(插件包) 是否可以更新 * * @param apkEntity apkEntity 必须是已安装的游戏 * @param gameId 游戏id @@ -549,6 +549,6 @@ public class PackageUtils { return PackageUtils.isInstalled(HaloApp.getInstance().getApplication(), apkEntity.getPackageName()) && gh_id == null && !TextUtils.isEmpty(apkEntity.getGhVersion()) - && !PackageUtils.isSignature(HaloApp.getInstance().getApplication(), apkEntity.getPackageName()); + && !PackageUtils.isSignedByGh(HaloApp.getInstance().getApplication(), apkEntity.getPackageName()); } } diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index c37a04a0a9..ef00c20e71 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -8,11 +8,9 @@ import android.os.Looper; import android.os.Message; import android.text.TextUtils; -import androidx.annotation.Nullable; -import androidx.collection.ArrayMap; - import com.gh.common.AppExecutor; import com.gh.common.exposure.ExposureEvent; +import com.gh.common.exposure.ExposureUtils; import com.gh.common.history.HistoryHelper; import com.gh.common.util.AppDebugConfig; import com.gh.common.util.DataCollectionUtils; @@ -57,6 +55,9 @@ import java.util.List; import java.util.Set; import java.util.concurrent.LinkedBlockingQueue; +import androidx.annotation.Nullable; +import androidx.collection.ArrayMap; + public class DownloadManager implements DownloadStatusListener { private static DownloadManager mInstance; @@ -225,21 +226,6 @@ public class DownloadManager implements DownloadStatusListener { boolean isSubscribe, @Nullable ExposureEvent traceEvent) { - // 安装指引 - /*if ("Huawei".equalsIgnoreCase(MANUFACTURER) || "Oppo".equalsIgnoreCase(MANUFACTURER)) { - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); - final SharedPreferences.Editor edit = sp.edit(); - if (sp.getBoolean("InstallHint" + PackageUtils.getVersionName(), true)) { - try { - DialogUtils.showInstallHintDialog(context, - () -> edit.putBoolean("InstallHint" + PackageUtils.getVersionName(), false).apply()); - } catch (Exception exception) { - exception.printStackTrace(); - edit.putBoolean("InstallHint" + PackageUtils.getVersionName(), false).apply(); - } - } - }*/ - // 插件版本下载互斥弹窗 List mutexPackage = gameEntity.getMutexPackage(); if (mutexPackage != null && mutexPackage.size() > 0) { @@ -262,7 +248,6 @@ public class DownloadManager implements DownloadStatusListener { downloadEntity.setPackageName(apkEntity.getPackageName()); downloadEntity.setGameId(gameEntity.getId()); downloadEntity.setEntrance(entrance); - downloadEntity.setExposureTrace(gson.toJson(traceEvent)); downloadEntity.setLocation(location); downloadEntity.setVersionName(apkEntity.getVersion()); int installed = 0; @@ -281,7 +266,13 @@ public class DownloadManager implements DownloadStatusListener { } downloadEntity.setPlugin(!TextUtils.isEmpty(apkEntity.getGhVersion())); - + + ExposureUtils.DownloadType downloadType = ExposureUtils.getDownloadType(apkEntity, gameEntity.getId()); + ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(gameEntity, gameEntity.getPlatform(), traceEvent, downloadType); + + // 将下载事件放入 downloadEntity 中供下载完成时取出使用 + downloadEntity.setExposureTrace(gson.toJson(downloadExposureEvent)); + if (isSubscribe) { DownloadManager.getInstance(context).subscribe(downloadEntity); } else { diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 09573035c6..3f79be3d97 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -430,7 +430,7 @@ public class MainActivity extends BaseActivity { if (entity.getStatus().equals(DownloadStatus.done)) { if (PackageUtils.isInstalled(getApplicationContext(), entity.getPackageName()) && (!entity.isPlugin() - || PackageUtils.isSignature(getApplicationContext(), entity.getPackageName()))) { + || PackageUtils.isSignedByGh(getApplicationContext(), entity.getPackageName()))) { continue; } if (downloadEntity == null) { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java index 82730726da..86d2874f39 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java @@ -10,7 +10,6 @@ import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.GameOffServiceDialogFragment; import com.gh.common.dialog.ReserveDialogFragment; import com.gh.common.exposure.ExposureEvent; -import com.gh.common.exposure.ExposureUtils; import com.gh.common.history.HistoryHelper; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DataLogUtils; @@ -282,9 +281,6 @@ public class DetailViewHolder { "下载开始", method); - ExposureUtils.DownloadType downloadType = ExposureUtils.getDownloadType(apkEntity, method); - ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(mGameEntity, apkEntity.getPlatform(), mTraceEvent, downloadType); - DownloadManager.createDownload(mViewHolder.context, apkEntity, mGameEntity, @@ -292,7 +288,7 @@ public class DetailViewHolder { StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), mName + ":" + mTitle, isSubscribe, - downloadExposureEvent); + mTraceEvent); mViewHolder.mDownloadPb.setProgress(0); mViewHolder.mDownloadPb.setDownloadType("插件化".equals(method) ? diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java index 882b09298b..db33334712 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java @@ -128,7 +128,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter implemen .subscribe(new Response() { @Override public void onResponse(GameEntity response) { - List update = PackageUtils.getUpdateData(mContext, response); + List update = PackageUtils.getUpdateData(response); if (update.size() > 0) { updateList.addAll(update); // PackagesManager.INSTANCE.addUpdateList(update); diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameInstall.kt b/app/src/main/java/com/gh/gamecenter/entity/GameInstall.kt index d9c0b112d6..ba996b8f5a 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameInstall.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameInstall.kt @@ -19,7 +19,7 @@ data class GameInstall( fun transformGameInstall(game: GameEntity, installedPkgName: String): GameInstall { val gameInstall = GameInstall() val application = HaloApp.getInstance().application - gameInstall.isSignature = PackageUtils.isSignature(application, installedPkgName) + gameInstall.isSignature = PackageUtils.isSignedByGh(application, installedPkgName) gameInstall.installTime = PackageUtils.getInstalledTime(application, installedPkgName) gameInstall.id = game.id gameInstall.name = game.name diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index 0c39d02042..3c02cda9b5 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -231,7 +231,7 @@ object PackageRepository { * @return 该请求是否存在可更新的游戏 */ private fun checkGameUpdate(game: GameEntity): Boolean { - val updateList = PackageUtils.getUpdateData(getApplication(), game) + val updateList = PackageUtils.getUpdateData(game) if (updateList.size > 0) { for (updateEntity in updateList) { addUpdateOrPluggable(updateEntity) @@ -252,7 +252,7 @@ object PackageRepository { val apkList = game.getApk() for (apk in apkList) { if (apk.packageName == installedPkgName && !TextUtils.isEmpty(apk.ghVersion) - && !PackageUtils.isSignature(getApplication(), apk.packageName)) { + && !PackageUtils.isSignedByGh(getApplication(), apk.packageName)) { // 如果该包是合集且安装了合集内任意一个光环的游戏包都不显示插件化 game.collection.forEach { collection -> if (collection.packages.contains(apk.packageName)) { diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index c99a22ac0e..3df011289d 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -157,11 +157,12 @@ public class HaloApp extends TinkerAppLike { // 注册回调以用于做各种统计 registerActivityLifecycleCallbacks(new GHActivityLifecycleCallbacksImpl()); ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner()); + + ExposureManager.init(); + LoghubUtils.init(getApplication()); // 耗时操作 AppExecutor.getIoExecutor().execute(() -> { - ExposureManager.init(); - LoghubUtils.init(getApplication()); Leto.init(getApplication(), Config.LETO_APPID); TimestampUtils.initMap();