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 db0513272b..59ae672b97 100644
--- a/app/src/main/java/com/gh/common/util/PackageUtils.java
+++ b/app/src/main/java/com/gh/common/util/PackageUtils.java
@@ -318,12 +318,12 @@ public class PackageUtils {
/**
* 此设备是否不能调用 packageManager.getPackageArchiveInfo 来获取 APK 信息
- *
+ *
* 部分设备 (已知 vivo 5.1.1 及 5.0.1 的设备) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR
*/
public static boolean isDeviceUnableToHandleBigApkFile(String path) {
if ("vivo".equals(Build.MANUFACTURER)
- && Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
+ && Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
File file = new File(path);
if (file != null && file.length() > 1024 * 1024 * 1024) {
@@ -337,12 +337,12 @@ public class PackageUtils {
/**
* 从 APK 文件里读包名的另类方法
* 部分设备 (已知 vivo 5.1.1) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR
- *
+ *
* 令人迷惑的点:
* 1. 同样的代码,同样的 APK 在 demo 包里调用 packageManager.getPackageArchiveInfo 并不会 ANR
* 2. 把 packageManager.getPackageArchiveInfo 放在子线程调用一样会出现 ANR
* 3. demo 里 manifest 中 application 配置和 targetSdk 也改成与光环一样也不会出现 ANR
- *
+ *
* 大概是光环的某个配置触发了系统的 bug ?
*/
private static String getPackageNameByPathAlternative(String path) {
@@ -445,6 +445,17 @@ public class PackageUtils {
return list;
}
+ public static ArrayList getAllPackageNameIncludeGh(Context context) {
+ ArrayList list = new ArrayList<>();
+ List packageInfos = getInstalledPackages(context, 0);
+ for (PackageInfo packageInfo : packageInfos) {
+ if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+ list.add(packageInfo.packageName);
+ }
+ }
+ return list;
+ }
+
/*
* 获取所有已安装的软件的包名(包括系统应用)
*/
@@ -557,7 +568,7 @@ public class PackageUtils {
gh_version = gh_version.substring(2);
try {
return Long.parseLong(gh_version) < Long.parseLong(apkEntity.getGhVersion()) && apkEntity
- .getForce() && gh_id.equals(gameId);
+ .getForce() && gh_id.equals(gameId);
} catch (NumberFormatException exception) {
// gh_id 可能出錯
exception.printStackTrace();
diff --git a/app/src/main/java/com/gh/common/util/RecommendPopupHelper.kt b/app/src/main/java/com/gh/common/util/RecommendPopupHelper.kt
index 24029ed6e5..fde0e331f6 100644
--- a/app/src/main/java/com/gh/common/util/RecommendPopupHelper.kt
+++ b/app/src/main/java/com/gh/common/util/RecommendPopupHelper.kt
@@ -34,24 +34,37 @@ object RecommendPopupHelper {
//判断是否符合包名限制
val nameRule = entity.recommendPackage.nameRule
val packages = entity.recommendPackage.details
- val installedPackages = PackageUtils.getAllPackageNameIncludeSystemApps(HaloApp.getInstance())
- var isMatchSuccess = false
-
+ val installedPackages = PackageUtils.getAllPackageNameIncludeGh(HaloApp.getInstance())
+ var isMatchSuccess = true
+ val checkInstalled: (splitPackages: List) -> Boolean = {
+ var isInstalled = false
+ it.forEach { packageName ->
+ if (installedPackages.contains(packageName)) {
+ isInstalled = true
+ return@forEach
+ }
+ }
+ isInstalled
+ }
when (nameRule) {
"installed" -> {
- //设备上安装了指定的包名才生效
+ //设备上安装了指定的包名才生效(需全部满足)
packages.forEach {
- if (installedPackages.contains(it)) {
- isMatchSuccess = true
+ val splitPackages = it.split("、")
+ val isInstalled = checkInstalled(splitPackages)
+ if (!isInstalled) {
+ isMatchSuccess = false
return@forEach
}
}
}
"uninstalled" -> {
- //设备上未安装指定的包名才生效
+ //设备上未安装指定的包名才生效(需全部满足)
packages.forEach {
- if (!installedPackages.contains(it)) {
- isMatchSuccess = true
+ val splitPackages = it.split("、")
+ val isInstalled = checkInstalled(splitPackages)
+ if (isInstalled) {
+ isMatchSuccess = false
return@forEach
}
}
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 8a481f2631..f150f9dd0c 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt
@@ -574,6 +574,9 @@ class GameDetailFragment : NormalFragment() {
GameBigEventDialog.showGameBigEventDialog(requireContext(), mGameEntity?.name
?: "", it, mEntrance)
}
+ mViewModel.recommendPopupLiveData.observe(this, Observer {
+ initRecommendUI()
+ })
mUserViewModel.loginObsUserinfo.observe(this, Observer {
if (it != null && mGameEntity != null) {
@@ -1178,8 +1181,11 @@ class GameDetailFragment : NormalFragment() {
}
}
- private fun initRecommendUI(recommendPopup: RecommendPopupEntity) {
- val popupDetail = recommendPopup.popupDetail
+ private fun initRecommendUI() {
+ val recommendPopupList = mViewModel.recommendPopupLiveData.value
+ mRecommendPopupEntity = RecommendPopupHelper.getRecommendPopup(mViewModel.game, recommendPopupList)
+ ?: return
+ val popupDetail = mRecommendPopupEntity!!.popupDetail
mRecommendText.text = popupDetail.text
if (popupDetail.images.isNotEmpty()) {
ImageUtils.display(mRecommendImage, popupDetail.images[0])
@@ -1214,10 +1220,7 @@ class GameDetailFragment : NormalFragment() {
}
private fun showRecommendView() {
- val recommendPopupList = mViewModel.recommendPopupList
- mRecommendPopupEntity = RecommendPopupHelper.getRecommendPopup(mViewModel.game, recommendPopupList)
- ?: return
- initRecommendUI(mRecommendPopupEntity!!)
+ if (mRecommendPopupEntity == null) return
mRecommendView.post {
if (!mIsRecommendViewShow) {
val width = mRecommendView.measuredWidth.toFloat()
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 e0e40d60c6..105fa9ec46 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailViewModel.kt
@@ -43,7 +43,7 @@ class GameDetailViewModel(application: Application,
val gameLiveData = MutableLiveData>()
val gameDetailLiveData = MutableLiveData>()
val bigEventLiveData = MutableLiveData>()
- var recommendPopupList: ArrayList? = null
+ val recommendPopupLiveData = MutableLiveData>()
// 供外部 fragment (如 GameDetailFragment) 用的合并用户数据后的游戏数据 liveData
val unifiedGameDetailWithUserRelatedInfoForParentLiveData = MutableLiveData()
@@ -457,7 +457,7 @@ class GameDetailViewModel(application: Application,
.compose(singleToMain())
.subscribe(object : BiResponse>() {
override fun onSuccess(data: ArrayList) {
- recommendPopupList = data
+ recommendPopupLiveData.postValue(data)
}
})
}