From 8e255b1803b8418a3a6c2dc1cbbd8ea6ea0a2bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Wed, 13 Dec 2023 09:34:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E3=80=90=E7=95=85=E7=8E=A9=E5=8A=A9?= =?UTF-8?q?=E6=89=8B=E3=80=91=E7=95=85=E7=8E=A9-=E6=9C=80=E8=BF=91?= =?UTF-8?q?=E5=9C=A8=E7=8E=A9=E6=A8=A1=E5=9D=97=E3=80=81=E5=8F=8C=E5=BC=80?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E5=BC=82=E5=B8=B8=20https://jira.shanqu.cc/b?= =?UTF-8?q?rowse/CWZS-138?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/game/GameFragment.kt | 2 ++ .../com/gh/gamecenter/game/GameFragmentAdapter.kt | 9 +++++++++ .../com/gh/vspace/HomeRecentVGameViewHolder.kt | 6 +++++- app/src/main/java/com/gh/vspace/VHelper.kt | 14 +++++++------- .../com/gh/gamecenter/feature/entity/GameEntity.kt | 2 +- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt index e91ee0a1f7..0bd42f8e07 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragment.kt @@ -325,6 +325,7 @@ open class GameFragment : LazyFragment() { mListAdapter.notifyChildItem(gameAndPosition.position, busFour.packageName) } } + (mViewModel as GameViewModel).refreshRecentVGameIfNeeded() } @Subscribe(threadMode = ThreadMode.MAIN) @@ -332,6 +333,7 @@ open class GameFragment : LazyFragment() { if (::mListAdapter.isInitialized && "Refresh" == reuse.type) { mListAdapter.notifyDataSetChanged() } + (mViewModel as GameViewModel).refreshRecentVGameIfNeeded() } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt index 1012c0a803..c0c321564c 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt @@ -87,6 +87,7 @@ import com.gh.gamecenter.home.video.ScrollCalculatorHelper import com.gh.gamecenter.qgame.QGameHorizontalSlideListViewHolder import com.gh.gamecenter.servers.gametest2.GameServerTestV2Activity import com.gh.gamecenter.subject.SubjectActivity +import com.gh.vspace.HomeRecentVGameAdapter import com.gh.vspace.HomeRecentVGameViewHolder import com.gh.vspace.VHelper import com.lightgame.adapter.BaseRecyclerAdapter @@ -1754,6 +1755,7 @@ class GameFragmentAdapter( || getItemViewType(gameAndPosition.position) == ItemViewType.HORIZONTAL_SLIDE_VIDEO || getItemViewType(gameAndPosition.position) == ItemViewType.GAME_COLLECTION_BIG_SLIDE || getItemViewType(gameAndPosition.position) == ItemViewType.GAME_COLLECTION_VERTICAL_REFRESH + || getItemViewType(gameAndPosition.position) == ItemViewType.RECENT_V_GAME ) { val view = mLayoutManager?.findViewByPosition(gameAndPosition.position) val recyclerView = view?.findViewById(R.id.recycler_view) @@ -1765,6 +1767,7 @@ class GameFragmentAdapter( is HomeHorizontalSlideVideoAdapter -> adapter.notifyItemByDownload(download) is HomeGameCollectionSlideAdapter -> adapter.notifyItemByDownload(download) is HomeGameCollectionRefreshAdapter -> adapter.notifyItemByDownload(download) + is HomeRecentVGameAdapter -> adapter.notifyItemByDownload(download) } } else { notifyItemChanged(gameAndPosition.position) @@ -1907,6 +1910,12 @@ class GameFragmentAdapter( continue } + val recentVGame = mItemDataList[position].recentVGame + if (recentVGame != null) { + positionList.add(GameAndPosition(null, position)) + continue + } + val image = mItemDataList[position].image if (image != null) positionList.add(GameAndPosition(image, position)) } diff --git a/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt b/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt index 6ec3c2cbe9..8f67e4371f 100644 --- a/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt +++ b/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt @@ -91,7 +91,11 @@ class HomeRecentVGameAdapter(context: Context) : DiffUtilAdapter( notifyDataSetChanged() } else { for (position in mDataList.indices) { - if (downloadEntity.name == mDataList[position].downloadEntity.name) { + val oldDownloadEntity = mDataList[position].downloadEntity + if (downloadEntity.name == oldDownloadEntity.name) { + // 防止覆盖游戏最后打开的时间为0 + if (VHelper.getLastPlayedTime(oldDownloadEntity) != 0L && VHelper.getLastPlayedTime(downloadEntity) == 0L) + return mDataList[position].downloadEntity = downloadEntity notifyItemChanged(position) } diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 62224f3664..26274e9bc3 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -1705,17 +1705,17 @@ object VHelper { val sortedEntityList = arrayListOf() val distinctIdSet = hashSetOf() - // 将下载任务的实体放进待排序列表里 - for (rawDownloadEntity in rawDownloadEntityList) { - distinctIdSet.add(rawDownloadEntity.gameId) - rawEntityList.add(rawDownloadEntity) - } // 将已安装任务的实体放进待排序列表里 for (rawInstalledEntity in rawInstalledEntityList) { - if (distinctIdSet.contains(rawInstalledEntity.downloadEntity.gameId)) { + distinctIdSet.add(rawInstalledEntity.downloadEntity.gameId) + rawEntityList.add(rawInstalledEntity.downloadEntity) + } + // 将下载任务的实体放进待排序列表里 + for (rawDownloadEntity in rawDownloadEntityList) { + if (distinctIdSet.contains(rawDownloadEntity.gameId)) { continue } - rawEntityList.add(rawInstalledEntity.downloadEntity) + rawEntityList.add(rawDownloadEntity) } distinctIdSet.clear() diff --git a/module_core_feature/src/main/java/com/gh/gamecenter/feature/entity/GameEntity.kt b/module_core_feature/src/main/java/com/gh/gamecenter/feature/entity/GameEntity.kt index 8526a50c1c..811049a952 100644 --- a/module_core_feature/src/main/java/com/gh/gamecenter/feature/entity/GameEntity.kt +++ b/module_core_feature/src/main/java/com/gh/gamecenter/feature/entity/GameEntity.kt @@ -115,7 +115,7 @@ data class GameEntity( // 额外的下载方式,用于双下载类型时使用。可能的值为 "off/on/smooth/smooth_32",分别为关闭/畅玩64位/畅玩32位 @SerializedName("download_extra_status") - private var mDownloadStatusExtra: String = "", + private var mDownloadStatusExtra: String = "off", // 优先的下载方式,用于双下载类型时使用。可能的值为 "smooth/local",分别为 畅玩下载/普通下载 @SerializedName("download_default") private var mDefaultDownloadType: String = "",