From 83afd7448f7a01e30c3fb45d260fe59d031aa69c Mon Sep 17 00:00:00 2001 From: juntao Date: Tue, 31 May 2022 20:44:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AE=80=E5=8D=95=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=88=97=E8=A1=A8=E9=A1=B9=E5=8D=A0=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gamecenter/DownloadManagerActivity.java | 1 - .../com/gh/gamecenter/home/HomeFragment.kt | 1 - .../gh/gamecenter/home/HomeFragmentAdapter.kt | 16 +++--- .../com/gh/gamecenter/home/HomeViewModel.kt | 2 +- .../gh/vspace/HomeRecentVGameViewHolder.kt | 54 +++++++++++++------ .../res/layout/item_home_recent_vgame.xml | 2 +- 6 files changed, 48 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/DownloadManagerActivity.java b/app/src/main/java/com/gh/gamecenter/DownloadManagerActivity.java index d45323822c..ee754f03f1 100644 --- a/app/src/main/java/com/gh/gamecenter/DownloadManagerActivity.java +++ b/app/src/main/java/com/gh/gamecenter/DownloadManagerActivity.java @@ -66,7 +66,6 @@ public class DownloadManagerActivity extends ToolBarActivity { return true; } - @Override protected void onNightModeChange() { super.onNightModeChange(); diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt index 94f04f613d..9854fbb8c3 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragment.kt @@ -273,7 +273,6 @@ class HomeFragment : LazyFragment() { @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(status: EBDownloadStatus) { if ("delete" == status.status) { - // TODO 看看能不能避免粗暴地更新列表 mViewModel.refreshRecentVGameIfNeeded() mListAdapter.notifyItemAndRemoveDownload(status) } diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt index 597995012a..e8f06bce6f 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeFragmentAdapter.kt @@ -9,10 +9,8 @@ import androidx.recyclerview.widget.RecyclerView import com.gh.common.exposure.ExposureEvent import com.gh.common.exposure.ExposureSource import com.gh.common.exposure.IExposable -import com.gh.gamecenter.core.runOnIoThread -import com.gh.common.util.* -import com.gh.common.util.NewLogUtils import com.gh.common.util.DirectUtils +import com.gh.common.util.NewLogUtils import com.gh.gamecenter.AboutActivity import com.gh.gamecenter.GameDetailActivity import com.gh.gamecenter.R @@ -21,7 +19,6 @@ import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder import com.gh.gamecenter.baselist.DiffUtilAdapter import com.gh.gamecenter.baselist.LoadStatus import com.gh.gamecenter.common.constant.ItemViewType -import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.core.utils.MtaHelper @@ -37,6 +34,7 @@ import com.gh.gamecenter.home.gamecollection.HomeGameCollectionViewHolder import com.gh.gamecenter.home.slide.HomeSlideListAdapter import com.gh.gamecenter.home.slide.HomeSlideListViewHolder import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel +import com.gh.vspace.HomeRecentVGameAdapter import com.gh.vspace.HomeRecentVGameViewHolder import com.halo.assistant.fragment.game.GamePluginAdapter import com.lightgame.download.DownloadEntity @@ -387,10 +385,11 @@ class HomeFragmentAdapter( val entryMap = gameAndPosition.entity.getEntryMap() entryMap[download.platform] = download } - if (getItemViewType(gameAndPosition.position) == ItemViewType.VERTICAL_SLIDE_ITEM || - getItemViewType(gameAndPosition.position) == ItemViewType.GAME_PLUGIN || - getItemViewType(gameAndPosition.position) == SLIDE_ITEM || - getItemViewType(gameAndPosition.position) == ItemViewType.RANK_COLLECTION + if (getItemViewType(gameAndPosition.position) == ItemViewType.VERTICAL_SLIDE_ITEM + || getItemViewType(gameAndPosition.position) == ItemViewType.GAME_PLUGIN + || getItemViewType(gameAndPosition.position) == SLIDE_ITEM + || getItemViewType(gameAndPosition.position) == ItemViewType.RANK_COLLECTION + || getItemViewType(gameAndPosition.position) == RECENT_V_GAME ) { val view = layoutManager.findViewByPosition(gameAndPosition.position) val recyclerView = view?.findViewById(R.id.recycler_view) @@ -399,6 +398,7 @@ class HomeFragmentAdapter( is GamePluginAdapter -> adapter.notifyItemByDownload(download) is HomeSlideListAdapter -> adapter.notifyItemByDownload(download) is RankCollectionAdapter -> adapter.notifyItemByDownload(download) + is HomeRecentVGameAdapter -> adapter.notifyItemByDownload(download) } } else { notifyItemChanged(gameAndPosition.position) diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt index 775a9334ed..4276731e16 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt @@ -307,7 +307,7 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) { } fun transformationItemData() { - runOnIoThread { + runOnIoThread(true) { mSnapshotItemList.clear() // 是否使用带特别高的带分割线的 item diff --git a/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt b/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt index e033e55382..1d5be23ee4 100644 --- a/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt +++ b/app/src/main/java/com/gh/vspace/HomeRecentVGameViewHolder.kt @@ -4,37 +4,52 @@ import android.content.Context import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.gh.download.DownloadManager import com.gh.gamecenter.baselist.DiffUtilAdapter import com.gh.gamecenter.common.utils.toBinding +import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.databinding.ItemHomeRecentVgameBinding import com.gh.gamecenter.databinding.ItemHomeVgameBinding import com.gh.gamecenter.entity.GameEntity +import com.lightgame.download.DownloadEntity class HomeRecentVGameViewHolder(var binding: ItemHomeRecentVgameBinding) : RecyclerView.ViewHolder(binding.root) { fun bindView(gameList: ArrayList) { - if (binding.recyclerview.adapter == null) { - binding.recyclerview.layoutManager = LinearLayoutManager(binding.root.context) - binding.recyclerview.adapter = HomeRecentVGameAdapter(binding.root.context) + if (binding.recyclerView.adapter == null) { + binding.recyclerView.layoutManager = LinearLayoutManager(binding.root.context) + binding.recyclerView.adapter = HomeRecentVGameAdapter(binding.root.context) } - (binding.recyclerview.adapter as? HomeRecentVGameAdapter)?.submitList(gameList) + (binding.recyclerView.adapter as? HomeRecentVGameAdapter)?.submitList(gameList) + } +} + +class HomeRecentVGameAdapter(context: Context) : DiffUtilAdapter(context) { + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): HomeRecentVGameItemViewHolder { + return HomeRecentVGameItemViewHolder(parent.toBinding()) } - class HomeRecentVGameAdapter(context: Context) : DiffUtilAdapter(context) { - override fun onCreateViewHolder( - parent: ViewGroup, - viewType: Int - ): HomeRecentVGameItemViewHolder { - return HomeRecentVGameItemViewHolder(parent.toBinding()) - } + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + (holder as HomeRecentVGameItemViewHolder).bindView(mDataList[position]) + } - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - (holder as HomeRecentVGameItemViewHolder).bindView(mDataList[position]) - } + override fun getItemCount() = mDataList.size - override fun getItemCount() = mDataList.size + fun notifyItemByDownload(downloadEntity: DownloadEntity?) { + if (downloadEntity == null) { + notifyDataSetChanged() + } else { + for (position in mDataList.indices) { + if (downloadEntity.name == mDataList[position].name) { + notifyItemChanged(position) + } + } + } } class HomeRecentVGameItemViewHolder(private var mBinding: ItemHomeVgameBinding) : @@ -42,11 +57,18 @@ class HomeRecentVGameViewHolder(var binding: ItemHomeRecentVgameBinding) : fun bindView(gameEntity: GameEntity) { mBinding.gameIconIv.displayGameIcon(gameEntity) + runOnIoThread(true) { + DownloadManager.getInstance().allVDownloadTask.find { + it.gameId == gameEntity.id + } + // TODO 添加 item 下载更新逻辑 + } mBinding.root.setOnClickListener { VHelper.launch(mBinding.root.context, gameEntity.getUniquePackageName() ?: "") } } } - } + + diff --git a/app/src/main/res/layout/item_home_recent_vgame.xml b/app/src/main/res/layout/item_home_recent_vgame.xml index 264e66fdfc..f8009904d4 100644 --- a/app/src/main/res/layout/item_home_recent_vgame.xml +++ b/app/src/main/res/layout/item_home_recent_vgame.xml @@ -42,7 +42,7 @@ app:layout_constraintTop_toTopOf="parent" />