From 6d6ce2613a9ec32233e721c2c8e1dd643d6a43cd Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 7 May 2024 15:17:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=B3=E4=BA=8E=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=B9=BF=E6=92=AD=E5=90=8E=E7=9A=84=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BC=98=E5=8C=96=20https://jira.shanqu.cc/browse/GHZ?= =?UTF-8?q?SCY-5342?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/constant/Config.java | 26 ++++++++++-- .../com/gh/common/util/PackageChangeHelper.kt | 25 ++++++++--- .../java/com/gh/common/util/PackageHelper.kt | 42 +++++++++++++++++-- .../com/gh/gamecenter/SplashScreenActivity.kt | 10 ++++- .../gamecenter/download/DownloadFragment.kt | 7 ++++ .../gamecenter/entity/NewApiSettingsEntity.kt | 13 ++++++ .../detail/GameCollectionDetailFragment.kt | 2 + .../detail/GameCollectionDetailViewModel.kt | 16 +++++++ .../gamedetail/GameDetailFragment.kt | 2 + .../gamedetail/GameDetailViewModel.kt | 9 ++-- .../gh/gamecenter/manager/PackagesManager.kt | 2 + ...va => PackageChangeBroadcastReceiver.java} | 31 ++++++++------ .../search/SearchGameIndexFragment.kt | 2 + .../search/SearchGameResultFragment.kt | 2 + .../search/SearchGameResultViewModel.kt | 16 +++++-- .../main/java/com/halo/assistant/HaloApp.java | 12 +----- 16 files changed, 171 insertions(+), 46 deletions(-) rename app/src/main/java/com/gh/gamecenter/receiver/{InstallAndUninstallReceiver.java => PackageChangeBroadcastReceiver.java} (85%) diff --git a/app/src/main/java/com/gh/common/constant/Config.java b/app/src/main/java/com/gh/common/constant/Config.java index f14a6157d0..d7fc5d4727 100644 --- a/app/src/main/java/com/gh/common/constant/Config.java +++ b/app/src/main/java/com/gh/common/constant/Config.java @@ -1,6 +1,7 @@ package com.gh.common.constant; import android.annotation.SuppressLint; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; @@ -28,6 +29,7 @@ import com.gh.gamecenter.entity.VSetting; import com.gh.gamecenter.feature.entity.SettingsEntity; import com.gh.gamecenter.feature.entity.SimulatorEntity; import com.gh.gamecenter.feature.utils.ContentBlockedHelper; +import com.gh.gamecenter.receiver.PackageChangeBroadcastReceiver; import com.gh.gamecenter.retrofit.RetrofitManager; import com.gh.vspace.VHelper; import com.halo.assistant.HaloApp; @@ -333,13 +335,29 @@ public class Config { } // 更新安装列表是否开启的配置 - if (mNewApiSettingsEntity.getInstalledComplianceSwitch() != null) { - PackageHelper.INSTANCE.updateIsGetInstalledPackagesApiAgreedRequired(mNewApiSettingsEntity.getInstalledComplianceSwitch()); - } else { - PackageHelper.INSTANCE.updateIsGetInstalledPackagesApiAgreedRequired(false); +// if (mNewApiSettingsEntity.getInstalledComplianceSwitch() != null) { +// PackageHelper.INSTANCE.updateIsGetInstalledPackagesApiAgreedRequired(mNewApiSettingsEntity.getInstalledComplianceSwitch()); +// } else { +// PackageHelper.INSTANCE.updateIsGetInstalledPackagesApiAgreedRequired(false); +// } + + // 更新包名监听是否开启 + if (mNewApiSettingsEntity.isPackageObserveEnable()) { + observePackageChange(mNewApiSettingsEntity.getPackageObserveActions()); } } }); } } + + public static void observePackageChange(NewApiSettingsEntity.PackageObserveActions packageObserveActions) { + PackageChangeBroadcastReceiver receiver = new PackageChangeBroadcastReceiver(packageObserveActions); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(packageObserveActions.getAdd()); + intentFilter.addAction(packageObserveActions.getRem()); + intentFilter.addAction(packageObserveActions.getRep()); + intentFilter.addDataScheme("package"); + HaloApp.getInstance().registerReceiver(receiver, intentFilter); + } + } diff --git a/app/src/main/java/com/gh/common/util/PackageChangeHelper.kt b/app/src/main/java/com/gh/common/util/PackageChangeHelper.kt index 290d4f9483..8e7db80a82 100644 --- a/app/src/main/java/com/gh/common/util/PackageChangeHelper.kt +++ b/app/src/main/java/com/gh/common/util/PackageChangeHelper.kt @@ -78,17 +78,23 @@ object PackageChangeHelper : DefaultLifecycleObserver { } } + fun addInstall(packageName: String) { + performInstallSuccessAction(packageName) + } + /** * 对应包名安装成功后的操作,继承至 InstallAndUninstallReceiver */ - private fun performInstallSuccessAction(packageName: String) { + private fun performInstallSuccessAction(packageName: String, withLog: Boolean = true) { Utils.log(TAG, "安装了: $packageName 包名的程序") val downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshotByPackageName(packageName) val gameId = if (downloadEntity != null && downloadEntity.gameId != null) downloadEntity.gameId else "" val gameName = if (downloadEntity != null && downloadEntity.name != null) downloadEntity.name else "" - NewFlatLogUtils.logGameInstallComplete(gameId, gameName) - SensorsBridge.trackInstallGameFinish(gameId, gameName) + if (withLog) { + NewFlatLogUtils.logGameInstallComplete(gameId, gameName) + SensorsBridge.trackInstallGameFinish(gameId, gameName) + } InstallUtils.getInstance().removeInstall(packageName) PackageHelper.refreshLocalPackageList() @@ -100,16 +106,23 @@ object PackageChangeHelper : DefaultLifecycleObserver { EventBus.getDefault().post(installEb) } + fun addUninstall(packageName: String) { + performUninstallSuccessAction(packageName) + } + /** * 对应包名卸载成功后的操作,继承至 InstallAndUninstallReceiver */ - private fun performUninstallSuccessAction(packageName: String) { + private fun performUninstallSuccessAction(packageName: String, withLog: Boolean = true) { Utils.log(TAG, "卸载了: $packageName 包名的程序") val install = PackagesManager.getInstalledData(packageName) val gameId = if (install?.id != null) install.id else "" val gameName = if (install?.name != null) install.name else "" - NewFlatLogUtils.logGameUninstallComplete(gameId!!, gameName!!) - SensorsBridge.trackUnloadGameFinish(gameId, gameName) + + if (withLog) { + NewFlatLogUtils.logGameUninstallComplete(gameId!!, gameName!!) + SensorsBridge.trackUnloadGameFinish(gameId, gameName) + } InstallUtils.getInstance().removeUninstall(packageName) PackageHelper.refreshLocalPackageList() diff --git a/app/src/main/java/com/gh/common/util/PackageHelper.kt b/app/src/main/java/com/gh/common/util/PackageHelper.kt index 1bbff5e38d..925d0806a2 100644 --- a/app/src/main/java/com/gh/common/util/PackageHelper.kt +++ b/app/src/main/java/com/gh/common/util/PackageHelper.kt @@ -19,6 +19,7 @@ import com.gh.gamecenter.common.utils.DialogHelper import com.gh.gamecenter.common.utils.PermissionHelper import com.gh.gamecenter.common.utils.PermissionHelper.isGetInstalledListPermissionDisabled import com.gh.gamecenter.common.utils.SensorsBridge +import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.core.utils.SPUtils import com.gh.gamecenter.entity.WhitePackageListEntity import com.gh.gamecenter.feature.entity.SettingsEntity @@ -51,8 +52,8 @@ object PackageHelper { private var lastInstalledPackageListTime = 0L private var cachedInstalledPackagesList: List = arrayListOf() - private var isGetInstalledPackagesApiAgreed = false // 用户是否已经同意使用已安装应用列表 API - private var isGetInstalledPackagesApiAgreedRequired = UNKNOWN // 需要用户手动授权才获取已安装应用列表的功能的开关 + private var isGetInstalledPackagesApiAgreed = true // 用户是否已经同意使用已安装应用列表 API + private var isGetInstalledPackagesApiAgreedRequired = DISABLED // 需要用户手动授权才获取已安装应用列表的功能的开关 private var isGetInstalledPackagesPermissionSupported = UNKNOWN // 设备是否支持禁用获取已安装应用列表 // 评论黑名单包名列表,避免用户安装了 Xposed Installer 这样的工具,也能在包含该安装包的游戏详情页评论 @@ -343,7 +344,7 @@ object PackageHelper { /** * 是否支持动态获取已安装应用列表权限 */ - private fun isSupportGetInstalledAppsPermission(context: Context): Boolean { + fun isSupportGetInstalledAppsPermission(context: Context): Boolean { // 若存在缓存,直接返回缓存结果。 if (isGetInstalledPackagesPermissionSupported != UNKNOWN) { return isGetInstalledPackagesPermissionSupported != UNSUPPORTED @@ -403,6 +404,41 @@ object PackageHelper { ) } + fun refreshWrongInstallStatus(packageNameSet: MutableSet) { + runOnIoThread { + Utils.log(TAG, "refreshWrongInstallStatus 检查安装状态异常的应用") + + val installedButKeepingWrongStatusPackageNameSet: HashSet = hashSetOf() + val uninstalledButKeepingWrongStatusPackageNameSet: HashSet = hashSetOf() + + for (packageName in packageNameSet) { + if (!PackagesManager.isInstalled(packageName) + && PackageUtils.getVersionNameByPackageName(packageName) != null + ) { + installedButKeepingWrongStatusPackageNameSet.add(packageName) + } else if (PackagesManager.isInstalled(packageName) + && PackageUtils.getVersionNameByPackageName(packageName) == null) { + uninstalledButKeepingWrongStatusPackageNameSet.add(packageName) + } + } + + Utils.log(TAG, "refreshWrongInstallStatus 需要请求接口获取的包数量为 ${installedButKeepingWrongStatusPackageNameSet.size}") + Utils.log(TAG, "refreshWrongInstallStatus 需要移除已安装的包数量为 ${uninstalledButKeepingWrongStatusPackageNameSet.size}") + + if (installedButKeepingWrongStatusPackageNameSet.isNotEmpty()) { + for (packageName in installedButKeepingWrongStatusPackageNameSet) { + PackageChangeHelper.addInstall(packageName) + } + } + + if (uninstalledButKeepingWrongStatusPackageNameSet.isNotEmpty()) { + for (packageName in uninstalledButKeepingWrongStatusPackageNameSet) { + PackageChangeHelper.addUninstall(packageName) + } + } + } + } + /** * 在5.1系统手机使用PackageManager获取已安装应用容易发生Package manager has died异常 * https://stackoverflow.com/questions/13235793/transactiontoolargeeception-when-trying-tÏo-get-a-list-of-applications-installed/30062632#30062632 diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt index cce779360b..d0c79cc092 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt @@ -197,7 +197,15 @@ class SplashScreenActivity : BaseActivity() { // 尝试获取安装应用列表权限并启动首页(不在乎结果) private fun requestGetInstallListPermissionAndLaunchMainActivity() { - launchMainActivity() + if (PackageHelper.isSupportGetInstalledAppsPermission(this) + && PermissionHelper.isGetInstalledListPermissionDisabled(this) + ) { + PermissionHelper.requestGetInstalledAppsListPermission(this, true) { + launchMainActivity() + } + } else { + launchMainActivity() + } } // 删除更新后的光环助手包 diff --git a/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt b/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt index 0b052fc8ba..c37a267009 100644 --- a/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt @@ -21,6 +21,7 @@ import androidx.recyclerview.widget.RecyclerView import com.gh.ad.AdDelegateHelper import com.gh.common.util.HomePluggableHelper import com.gh.common.util.NewFlatLogUtils +import com.gh.common.util.PackageHelper import com.gh.common.util.PackageInstaller import com.gh.download.DownloadManager import com.gh.gamecenter.DownloadManagerActivity @@ -276,6 +277,12 @@ class DownloadFragment : BaseFragment_TabLayout() { if (mBinding.adGameItemContainer.isVisible) { DownloadManager.getInstance().addObserver(mDataWatcher) } + + refreshInstallStatus() + } + + private fun refreshInstallStatus() { + PackageHelper.refreshWrongInstallStatus(PackagesManager.getInstalledSet()) } override fun onParentActivityFinish() { diff --git a/app/src/main/java/com/gh/gamecenter/entity/NewApiSettingsEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/NewApiSettingsEntity.kt index 4eaa358e90..879d7fde1c 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/NewApiSettingsEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/NewApiSettingsEntity.kt @@ -13,6 +13,10 @@ class NewApiSettingsEntity( var userInterestedGame: Boolean = false, //偏好设置状态开关 @SerializedName("installed_compliance_switch") var installedComplianceSwitch: Boolean? = false, //安装合规开关 + @SerializedName("listen_switch") + var isPackageObserveEnable: Boolean = false, // 安装包监听开关 + @SerializedName("listen_str") + var packageObserveActions: PackageObserveActions? = null, // 安装包监听的三个 action var install: Install, // 安装相关的 @SerializedName("game_shield_contents") var gameShieldContents: List? = listOf(),//游戏屏蔽内容 @@ -48,4 +52,13 @@ class NewApiSettingsEntity( val type: String, val link: LinkEntity ) + + class PackageObserveActions( + @SerializedName("ADD") + val add: String, + @SerializedName("REM") + val rem: String, + @SerializedName("REP") + val rep: String + ) } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailFragment.kt index bb0170abb4..8562b0ffca 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailFragment.kt @@ -798,6 +798,8 @@ class GameCollectionDetailFragment : } }, 2000) } + + mListViewModel.refreshPackageStatus() } override fun onPause() { diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt index b08d28f8e5..f989e6161b 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/detail/GameCollectionDetailViewModel.kt @@ -10,6 +10,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.gh.common.filter.RegionSettingHelper import com.gh.common.util.ErrorHelper +import com.gh.common.util.PackageHelper import com.gh.gamecenter.R import com.gh.gamecenter.common.baselist.LoadStatus import com.gh.gamecenter.common.constant.Constants @@ -64,6 +65,8 @@ open class GameCollectionDetailViewModel( var videoIsMuted = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true) var isPostFirstOver = false + private var packageNameSet = hashSetOf() + @SuppressLint("CheckResult") fun getGameCollectionDetail() { mApi.getGameCollectionDetail(gameCollectionId) @@ -128,10 +131,17 @@ open class GameCollectionDetailViewModel( add(mResultLiveData.value!![i]) } } else { + packageNameSet = hashSetOf() + games?.forEach { it.isAdData = adIconActive add(CommentItemData(game = it)) + it.getApk().forEach { apk -> + packageNameSet.add(apk.packageName) + } } + + refreshPackageStatus() } } @@ -158,6 +168,12 @@ open class GameCollectionDetailViewModel( override fun getHandleTopCommentCondition(index: Int) = !isHandleTopComment && gameCollectionDetail != null && topCommentId.isNotBlank() && index == 0 + fun refreshPackageStatus() { + if (packageNameSet.isNotEmpty()) { + PackageHelper.refreshWrongInstallStatus(packageNameSet) + } + } + fun followingCommand(userId: String, isFollow: Boolean) { val observable = if (isFollow) { RetrofitManager.getInstance().api.postFollowing(userId) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index c4af917ae9..4d94e3099b 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -2399,6 +2399,8 @@ class GameDetailFragment : BaseLazyFragment(), IScrollable { DownloadManager.getInstance().addObserver(dataWatcher) controlInstallHint() + + mViewModel.refreshWrongInstallStatus() } override fun onFragmentPause() { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailViewModel.kt index fd80de952f..0610c917ff 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailViewModel.kt @@ -184,7 +184,7 @@ class GameDetailViewModel( } } - addInstalledButMissingPackages() + refreshWrongInstallStatus() filterGameTags(data) filterBlockedContent(data) replaceWithMirrorInfoIfNeeded(data) @@ -257,15 +257,12 @@ class GameDetailViewModel( } } - /** - * 将包名添加到已安装但缺失的包仓库中 - */ - private fun addInstalledButMissingPackages() { + fun refreshWrongInstallStatus() { val packageNameSet = hashSetOf() game?.getApk()?.forEach { packageNameSet.add(it.packageName) } - PackageHelper.addInstalledButMissingPackages(packageNameSet) + PackageHelper.refreshWrongInstallStatus(packageNameSet) } private fun replaceWithMirrorInfoIfNeeded(data: NewGameDetailEntity) { diff --git a/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt b/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt index 06714b7f15..b48ad8420d 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt +++ b/app/src/main/java/com/gh/gamecenter/manager/PackagesManager.kt @@ -89,6 +89,8 @@ object PackagesManager { return mInstalledPkgSet.contains(packageName) } + fun getInstalledSet(): MutableSet = mInstalledPkgSet + /** * 根据包名版本号判断是否已安装相应版本的应用 * diff --git a/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java b/app/src/main/java/com/gh/gamecenter/receiver/PackageChangeBroadcastReceiver.java similarity index 85% rename from app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java rename to app/src/main/java/com/gh/gamecenter/receiver/PackageChangeBroadcastReceiver.java index d21b2a484c..13a73855a7 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java +++ b/app/src/main/java/com/gh/gamecenter/receiver/PackageChangeBroadcastReceiver.java @@ -16,11 +16,11 @@ import com.gh.gamecenter.common.utils.NewFlatLogUtils; import com.gh.gamecenter.common.utils.SensorsBridge; import com.gh.gamecenter.core.AppExecutor; import com.gh.gamecenter.core.utils.SPUtils; +import com.gh.gamecenter.entity.NewApiSettingsEntity; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.feature.entity.GameInstall; import com.gh.gamecenter.install.InstallService; import com.gh.gamecenter.manager.PackagesManager; -import com.gh.ndownload.NDownloadService; import com.halo.assistant.HaloApp; import com.lightgame.download.DownloadEntity; import com.lightgame.utils.Utils; @@ -29,21 +29,26 @@ import org.greenrobot.eventbus.EventBus; import java.util.Locale; - /** - * 监听应用安装和卸载的广播 - * - * @author LGT 黄壮华 + * 监听安装包变更 */ -public class InstallAndUninstallReceiver extends BroadcastReceiver { +public class PackageChangeBroadcastReceiver extends BroadcastReceiver { + + private static final String TAG = "PackageChangeBroadcastReceiver"; private static final String webviewPackageName = "com.google.android.webview"; + private final NewApiSettingsEntity.PackageObserveActions mActions; + + public PackageChangeBroadcastReceiver(NewApiSettingsEntity.PackageObserveActions actions) { + mActions = actions; + } + @Override public void onReceive(Context context, Intent intent) { PackageHelper.INSTANCE.dumpInstalledListCache(); ExtensionsKt.doOnMainProcessOnly(() -> { - Utils.log("InstallAndUninstallReceiver:: onReceive->" + intent.getAction() + "==" + intent.getDataString()); + Utils.log(TAG, "onReceive->" + intent.getAction() + "==" + intent.getDataString()); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU && Build.MANUFACTURER.toLowerCase(Locale.CHINA).contains("xiaomi")) { @@ -53,10 +58,10 @@ public class InstallAndUninstallReceiver extends BroadcastReceiver { } // 接收安装广播 - if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) { + if (intent.getAction().equals(mActions.getAdd())) { String packageName = intent.getDataString(); packageName = packageName.substring(packageName.indexOf(":") + 1); - Utils.log("安装了:" + packageName + "包名的程序"); + Utils.log(TAG, "安装了:" + packageName + "包名的程序"); DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshotByPackageName(packageName); String gameId = downloadEntity != null && downloadEntity.getGameId() != null ? downloadEntity.getGameId() : ""; String gameName = downloadEntity != null && downloadEntity.getName() != null ? downloadEntity.getName() : ""; @@ -84,10 +89,10 @@ public class InstallAndUninstallReceiver extends BroadcastReceiver { } // 接收卸载广播 - if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) { + if (intent.getAction().equals(mActions.getRem())) { String packageName = intent.getDataString(); packageName = packageName.substring(packageName.indexOf(":") + 1); - Utils.log("卸载了:" + packageName + "包名的程序"); + Utils.log(TAG, "卸载了:" + packageName + "包名的程序"); GameInstall install = PackagesManager.getInstalledData(packageName); String gameId = install != null && install.getId() != null ? install.getId() : ""; String gameName = install != null && install.getName() != null ? install.getName() : ""; @@ -107,10 +112,10 @@ public class InstallAndUninstallReceiver extends BroadcastReceiver { } // 接收替换广播 - if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) { + if (intent.getAction().equals(mActions.getRep())) { String packageName = intent.getData().getSchemeSpecificPart(); packageName = packageName.substring(packageName.indexOf(":") + 1); - Utils.log("替换了:" + packageName + "包名的程序"); + Utils.log(TAG, "替换了:" + packageName + "包名的程序"); String versionName = PackageUtils.getVersionNameByPackageName(packageName); EBPackage updateEb = new EBPackage(EBPackage.TYPE_REPLACED, packageName, versionName); diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt index cafd4be42e..2dabaae2e8 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt @@ -148,6 +148,8 @@ class SearchGameIndexFragment : ListFragment? = null private val mAdGameMap = ConcurrentHashMap>() + private var mPackageNameSet = hashSetOf() + fun updateSearchKeyWithType(searchKey: String, searchType: String) { mSearchKey = searchKey mSearchType = searchType @@ -69,14 +71,16 @@ class SearchGameResultViewModel( } ) + mPackageNameSet = hashSetOf() + // 添加已安装但是缺失的包名 - val packageNameSet = hashSetOf() list.forEach { it.getApk().forEach { apk -> - packageNameSet.add(apk.packageName) + mPackageNameSet.add(apk.packageName) } } - PackageHelper.addInstalledButMissingPackages(packageNameSet) + + refreshWrongInstallStatus() repository.getSearchSubject(mSearchKey, mPage) .subscribeOn(Schedulers.io()) @@ -178,6 +182,12 @@ class SearchGameResultViewModel( } } + fun refreshWrongInstallStatus() { + if (mPackageNameSet.isNotEmpty()) { + PackageHelper.refreshWrongInstallStatus(mPackageNameSet) + } + } + private fun decorateListWithThirdPartyAdOnly( decoratedItemDataList: ArrayList, thirdPartyAdList: List, diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index 5a0c819983..ea4cde6ace 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -3,7 +3,6 @@ package com.halo.assistant; import android.annotation.SuppressLint; import android.app.Application; import android.content.Context; -import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.net.ConnectivityManager; @@ -74,7 +73,6 @@ import com.gh.gamecenter.packagehelper.PackageRepository; import com.gh.gamecenter.provider.FlavorProviderImp; import com.gh.gamecenter.receiver.ActivitySkipReceiver; import com.gh.gamecenter.receiver.DownloadReceiver; -import com.gh.gamecenter.receiver.InstallAndUninstallReceiver; import com.gh.gamecenter.receiver.InstallReceiver; import com.gh.gamecenter.receiver.NetworkStateReceiver; import com.gh.gamecenter.wrapper.MainWrapperRepository; @@ -123,7 +121,7 @@ public class HaloApp extends MultiDexApplication { public boolean isSkippingThirdParty = false; // 应用是否处于跳转第三方Activity状态 private List webViewAbiList; - private IFlavorProvider mFlavorProvider = new FlavorProviderImp(); + private final IFlavorProvider mFlavorProvider = new FlavorProviderImp(); private final ServiceLoader mApplicationList = ServiceLoader.load(IApplication.class, this.getClass().getClassLoader()); private LunchType mLaunchType = null; @@ -335,7 +333,7 @@ public class HaloApp extends MultiDexApplication { com.gh.common.constant.Config.getGhzsSettings(); // 5 秒获取后台配置的获取应用列表限制接口结果超时后,回落到关闭状态 - PackageHelper.INSTANCE.fallbackInstalledPackageApiSwitchAfterTimeout(5000L); + // PackageHelper.INSTANCE.fallbackInstalledPackageApiSwitchAfterTimeout(5000L); String localTemporaryDeviceId = SPUtils.getString(Constants.SP_TEMPORARY_DEVICE_ID); if (!TextUtils.isEmpty(localTemporaryDeviceId)) { @@ -631,12 +629,6 @@ public class HaloApp extends MultiDexApplication { return mFlavorProvider; } -// @NonNull -// @Override -// public Configuration getWorkManagerConfiguration() { -// return new Configuration.Builder().build(); -// } - @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base);