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" />