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 0b55a93c57..76f251db73 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -226,6 +226,7 @@ public class GameUtils { gameUpdateEntity.setPluginDesc(gameEntity.getPluginDesc()); gameUpdateEntity.setFormat(apkEntity.getFormat()); gameUpdateEntity.setCurrentVersion(PackageUtils.getVersionNameByPackageName(apkEntity.getPackageName())); + gameUpdateEntity.setCategory(gameEntity.getCategory()); GameCollectionEntity pluggableCollection = getPluggableCollectionFromGameEntity(gameEntity, apkEntity.getPackageName()); if (pluggableCollection != null) { diff --git a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt index 8d29158c12..767f802c92 100644 --- a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt @@ -161,7 +161,8 @@ class UpdatableGameAdapter(private var mViewModel: UpdatableGameViewModel) : } nameTv.text = nameText currentVersionTv.text = "当前:V${update.currentVersion}" - newVersionTv.text = "新版:V${update.version} | ${update.size}" + newVersionTv.text = "最新:V${update.version} | ${update.size}" + optionIv.goneIf(itemData.otherVersionUpdate != null) optionIv.setOnClickListener { showIgnoreOption(it, update, itemData.ignoredUpdate != null) } @@ -295,8 +296,8 @@ class UpdatableGameAdapter(private var mViewModel: UpdatableGameViewModel) : } } else { updateBtn.setText(R.string.launch) - updateBtn.setTextColor(R.color.theme_font.toColor()) - updateBtn.setBackgroundResource(R.drawable.detail_downloading_normal_style) + updateBtn.setTextColor(Color.WHITE) + updateBtn.setBackgroundResource(R.drawable.download_button_normal_style) } } else { if (update.isPluggable) { diff --git a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt index 86d3a5ce01..7dfab6da2f 100644 --- a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt @@ -5,6 +5,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.gh.base.fragment.LazyFragment import com.gh.common.exposure.ExposureListener import com.gh.common.util.EntranceUtils +import com.gh.common.util.goneIf import com.gh.common.util.observeNonNull import com.gh.common.util.viewModelProvider import com.gh.gamecenter.MainActivity @@ -14,6 +15,7 @@ import com.gh.gamecenter.eventbus.EBDownloadStatus import com.gh.gamecenter.eventbus.EBReuse import com.gh.gamecenter.fragment.MainWrapperFragment import com.gh.gamecenter.packagehelper.PackageViewModel +import kotlinx.android.synthetic.main.fragment_game_updatable.* import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -44,6 +46,7 @@ class UpdatableGameFragment : LazyFragment() { } mViewModel?.updatableData?.observe(viewLifecycleOwner) { mAdapter.submitList(it) + mBinding?.noDataContainer?.root?.goneIf(!it.isNullOrEmpty()) } } diff --git a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt index 639170c88d..1e4977a50f 100644 --- a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameViewModel.kt @@ -114,6 +114,8 @@ class UpdatableGameViewModel( */ private fun constructPackageUpdateList(updatableList: ArrayList) : ArrayList { + // 包名数组列表,因为 hashmap 在不同的系统版本上的实现不一样,在部分系统上会根据 key 的值重排序破坏列表顺序 + val packageNameList = arrayListOf() val packageNameAndUpdateListMap = hashMapOf>() val packageUpdateList: ArrayList = arrayListOf() @@ -122,44 +124,46 @@ class UpdatableGameViewModel( var list = packageNameAndUpdateListMap[update.packageName] if (list == null) { list = arrayListOf() + packageNameList.add(update.packageName) packageNameAndUpdateListMap[update.packageName] = list } list.add(update) } // 找到我的版本 - for ((packageName, list) in packageNameAndUpdateListMap) { - val sign = PackageUtils.getApkSignatureByPackageName(getApplication(), packageName) - val isSignByGh = PackageUtils.isSignedByGh(getApplication(), packageName) - val ghId = if (isSignByGh) PackageUtils.getGhId(packageName) else null - val versionName = PackageUtils.getVersionNameByPackageName(packageName) ?: "" + for (packageName in packageNameList) { + val samePackageNameUpdateList = packageNameAndUpdateListMap[packageName] ?: arrayListOf() + val installedSignature = PackageUtils.getApkSignatureByPackageName(getApplication(), packageName) + val isInstalledSignByGh = PackageUtils.isSignedByGh(getApplication(), packageName) + val installedGhId = if (isInstalledSignByGh) PackageUtils.getGhId(packageName) else null + val installedVersionName = PackageUtils.getVersionNameByPackageName(packageName) ?: "" var matchedVersionUpdate: GameUpdateEntity? = null val mismatchedVersionUpdateList: ArrayList = arrayListOf() // 已安装的游戏为插件游戏,找插件包里的 GH_ID 跟我的版本一样的作为我的版本 - if (isSignByGh && ghId != null) { - for (update in list) { - if (update.id == ghId) { + if (isInstalledSignByGh && installedGhId != null) { + for (update in samePackageNameUpdateList) { + if (update.id == installedGhId) { matchedVersionUpdate = update } else { mismatchedVersionUpdateList.add(update) } } - } else if (mDownloadedGameIdAndPackageNameDao.contains(packageName)) { + } else if (mDownloadedGameIdAndPackageNameDao.getRawString().contains(packageName)) { // 光环曾经下载过对应包名的游戏,找到对应游戏ID的更新作为我的版本 val idAndPackageNameString = mDownloadedGameIdAndPackageNameDao.getRawString() - for (update in list) { - if (idAndPackageNameString.contains(update.id)) { + for (update in samePackageNameUpdateList) { + if (matchedVersionUpdate == null && idAndPackageNameString.contains(update.id)) { matchedVersionUpdate = update } else { mismatchedVersionUpdateList.add(update) } } - } else if (list.find { it.signature == sign } != null) { + } else if (samePackageNameUpdateList.find { it.signature == installedSignature } != null) { // 存在同包名同签名的游戏,以同包名同签名的游戏作为我的版本 - for (update in list) { - if (sign == update.signature) { + for (update in samePackageNameUpdateList) { + if (installedSignature == update.signature) { matchedVersionUpdate = update } else { mismatchedVersionUpdateList.add(update) @@ -167,7 +171,7 @@ class UpdatableGameViewModel( } } else { // 以同包名中七天下载量最高的游戏作为我的版本 - for (update in list) { + for (update in samePackageNameUpdateList) { if (update.download >= matchedVersionUpdate?.download ?: 0) { matchedVersionUpdate = update } @@ -183,7 +187,7 @@ class UpdatableGameViewModel( val iterator = mismatchedVersionUpdateList.iterator() while (iterator.hasNext()) { val update = iterator.next() - if (update.version == versionName) { + if (update.version == installedVersionName) { iterator.remove() continue } @@ -313,15 +317,16 @@ class UpdatableGameViewModel( if (invalidPackageUpdateList.isNotEmpty()) { if (updatableDataItemList.size != 0) { updatableDataItemList.add(UpdatableDataItem(divider = WHITE)) + updatableDataItemList.add(UpdatableDataItem(divider = GREY)) } - updatableDataItemList.add(UpdatableDataItem(divider = GREY)) updatableDataItemList.add(UpdatableDataItem(header = "以下游戏有其他版本可以更新")) - for (packageUpdate in validPackageUpdateList) { + for (packageUpdate in invalidPackageUpdateList) { if (packageUpdate.mismatchedVersionUpdateList.isNotEmpty()) { updatableDataItemList.add(UpdatableDataItem(normalUpdateWithArrow = packageUpdate.matchedVersionUpdate)) updatableDataItemList.add( UpdatableDataItem( - otherVersionUpdateHint = mOtherVersionExpandedMap[packageUpdate.matchedVersionUpdate.packageName] == true + otherVersionUpdateHint = mOtherVersionExpandedMap[packageUpdate.matchedVersionUpdate.packageName] == true, + miscPackageName = packageUpdate.matchedVersionUpdate.packageName ) ) if (mOtherVersionExpandedMap[packageUpdate.matchedVersionUpdate.packageName] == true) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt index 3008ab7428..58ab1a5ed6 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt @@ -37,7 +37,7 @@ import com.squareup.picasso.Picasso import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers -import java.util.ArrayList +import java.util.* import java.util.regex.Pattern class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseRecyclerViewHolder(binding.root) { @@ -264,6 +264,11 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR }, auditText.length - 3, auditText.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) audit.text = auditText audit.movementMethod = LinkMovementMethod() + + comment.post { + comment.visibility = View.INVISIBLE + vote.visibility = View.INVISIBLE + } } } } 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 f29357cbdc..de00423c69 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -82,7 +82,7 @@ object PackageRepository { mInstalledPkgList.addAll(list) notifyInstallPkgData() - loadInstalledGameDigestAndNotifyData(list) + loadInstalledGameDigestAndNotifyData(list, true) loadGhzsUpdate() } } @@ -264,6 +264,8 @@ object PackageRepository { pluginDesc = game.pluginDesc format = apk.format signature = apk.signature ?: "" + currentVersion = PackageUtils.getVersionNameByPackageName(apk.packageName) + category = game.category }) } } diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt index 8458ff3cfe..d6a37c8fbe 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageViewModel.kt @@ -46,8 +46,11 @@ class PackageViewModel(application: Application, val mediatorLiveData = MediatorLiveData>() mediatorLiveData.addSource(mRepository.gameUpdateLiveData) { val decoratedList = ArrayList(it) - for (currentVersion in mRepository.currentVersionList) { - decoratedList.add(currentVersion) + + if (decoratedList.isNotEmpty()) { + for (currentVersion in mRepository.currentVersionList) { + decoratedList.add(currentVersion) + } } mediatorLiveData.postValue(decoratedList)