From ea68931461ba955c027d722f10d4688387fd8e37 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 25 Apr 2023 13:54:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B8=B8=E6=88=8F=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5tab=E9=A1=BA=E5=BA=8F=E8=B0=83=E6=95=B4=20https://jira?= =?UTF-8?q?.shanqu.cc/browse/GHZS-2155?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/provider/GameDetailProviderImpl.kt | 2 +- .../java/com/gh/common/util/DirectUtils.kt | 16 +- .../com/gh/gamecenter/GameDetailActivity.kt | 16 +- .../gamedetail/GameDetailFragment.kt | 181 +++++++++--------- .../mygame/MyFollowedGameAdapter.kt | 4 +- .../search/SearchGameIndexAdapter.kt | 4 +- .../search/SearchGameResultAdapter.kt | 4 +- .../feature/provider/IGameDetailProvider.kt | 2 +- 8 files changed, 117 insertions(+), 112 deletions(-) diff --git a/app/src/main/java/com/gh/common/provider/GameDetailProviderImpl.kt b/app/src/main/java/com/gh/common/provider/GameDetailProviderImpl.kt index 314a053a40..cfa37956d9 100644 --- a/app/src/main/java/com/gh/common/provider/GameDetailProviderImpl.kt +++ b/app/src/main/java/com/gh/common/provider/GameDetailProviderImpl.kt @@ -22,7 +22,7 @@ class GameDetailProviderImpl : IGameDetailProvider { context: Context, gameEntity: GameEntity?, entrance: String, - defaultTab: Int, + defaultTab: String, isSkipGameComment: Boolean, scrollToLibao: Boolean, scrollToServer: Boolean, diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index 14301ec701..0e93d6e5ae 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -661,10 +661,10 @@ object DirectUtils { bundle.putString(KEY_GAMEID, id) if (!TextUtils.isEmpty(tab)) { when (tab) { - "comment" -> bundle.putInt(KEY_TARGET, GameDetailFragment.INDEX_RATING) - "desc" -> bundle.putInt(KEY_TARGET, GameDetailFragment.INDEX_DESC) - "forum" -> bundle.putInt(KEY_TARGET, GameDetailFragment.INDEX_BBS) - "zone" -> bundle.putInt(KEY_TARGET, GameDetailFragment.INDEX_TRENDES) + "comment" -> bundle.putString(KEY_TARGET, GameDetailFragment.TAB_RATING) + "desc" -> bundle.putString(KEY_TARGET, GameDetailFragment.TAB_DESC) + "forum" -> bundle.putString(KEY_TARGET, GameDetailFragment.TAB_BBS) + "zone" -> bundle.putString(KEY_TARGET, GameDetailFragment.TAB_TRENDS) } } if (traceEvent != null) { @@ -704,7 +704,7 @@ object DirectUtils { bundle.putString(KEY_ENTRANCE, entrance) bundle.putString(KEY_GAMEID, id) bundle.putBoolean(KEY_OPEN_VIDEO_STREAMING, true) - bundle.putInt(KEY_TARGET, GameDetailFragment.INDEX_DESC) + bundle.putString(KEY_TARGET, GameDetailFragment.TAB_DESC) jumpActivity(context, bundle) } @@ -712,14 +712,14 @@ object DirectUtils { fun directToGameDetail( context: Context, id: String, - defaultTab: Int = GameDetailFragment.INDEX_DESC, + defaultTab: String = GameDetailFragment.TAB_DESC, entrance: String? = null ) { val bundle = Bundle() bundle.putString(KEY_TO, GameDetailActivity::class.java.name) bundle.putString(KEY_ENTRANCE, entrance) bundle.putString(KEY_GAMEID, id) - bundle.putInt(KEY_TARGET, defaultTab) + bundle.putString(KEY_TARGET, defaultTab) jumpActivity(context, bundle) } @@ -1396,7 +1396,7 @@ object DirectUtils { response?.apply { if (zone.status == "on") { if (zone.style == "link") { - directToGameDetail(context, gameId, GameDetailFragment.INDEX_TRENDES, entrance) + directToGameDetail(context, gameId, GameDetailFragment.TAB_TRENDS, entrance) } else { directToWebView(context, url, entrance) } diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt index cb328aeabf..d4f5212c85 100644 --- a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt @@ -101,7 +101,7 @@ class GameDetailActivity : DownloadToolbarActivity() { entrance: String, traceEvent: ExposureEvent? ) { - startGameDetailActivity(context, gameEntity, entrance, -1, traceEvent = traceEvent) + startGameDetailActivity(context, gameEntity, entrance, "", traceEvent = traceEvent) } /** @@ -117,7 +117,7 @@ class GameDetailActivity : DownloadToolbarActivity() { context: Context, gameEntity: GameEntity?, entrance: String, - defaultTab: Int = -1, + defaultTab: String = "", isSkipGameComment: Boolean = false, scrollToLibao: Boolean = false, scrollToServer: Boolean = false, @@ -140,18 +140,18 @@ class GameDetailActivity : DownloadToolbarActivity() { ) traceEvent.payload = payload } - if (defaultTab != -1) { - bundle.putInt(EntranceConsts.KEY_TARGET, defaultTab) + if (defaultTab.isNotEmpty()) { + bundle.putString(EntranceConsts.KEY_TARGET, defaultTab) } if (isSkipGameComment) { bundle.putBoolean(EntranceConsts.KEY_SKIP_GAME_COMMENT, true) } if (scrollToLibao) { - bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_DESC) + bundle.putString(EntranceConsts.KEY_TARGET, GameDetailFragment.TAB_DESC) bundle.putBoolean(EntranceConsts.KEY_SCROLL_TO_LIBAO, true) } if (scrollToServer) { - bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_DESC) + bundle.putString(EntranceConsts.KEY_TARGET, GameDetailFragment.TAB_DESC) bundle.putBoolean(EntranceConsts.KEY_SCROLL_TO_SERVER, true) } bundle.putString(EntranceConsts.KEY_GAMEID, gameEntity?.id) @@ -257,7 +257,7 @@ class GameDetailActivity : DownloadToolbarActivity() { } if (openVideoStreaming) { bundle.putBoolean(EntranceConsts.KEY_OPEN_VIDEO_STREAMING, true) - bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_DESC) + bundle.putString(EntranceConsts.KEY_TARGET, GameDetailFragment.TAB_DESC) } if (openPlatformWindow) { bundle.putBoolean(EntranceConsts.KEY_OPEN_PLATFORM_WINDOW, true) @@ -269,7 +269,7 @@ class GameDetailActivity : DownloadToolbarActivity() { } } if (scrollToLibao) { - bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_TRENDES) + bundle.putString(EntranceConsts.KEY_TARGET, GameDetailFragment.TAB_DESC) bundle.putBoolean(EntranceConsts.KEY_SCROLL_TO_LIBAO, true) } bundle.putString(EntranceConsts.KEY_GAMEID, gameId) 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 185e1a2130..42ac1a4bc6 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -102,9 +102,9 @@ import org.greenrobot.eventbus.ThreadMode import retrofit2.HttpException import java.lang.ref.WeakReference import java.util.* +import kotlin.collections.ArrayList import kotlin.math.abs -// TODO 更改现有的使用 INDEX_DESC, INDEX_BBS 等固定数值来确定 tab 位置的做法,避免后续更改 tab 位置出现奇怪的异常 class GameDetailFragment : ToolbarFragment(), IScrollable { private var mDownloadMenuIcon: ImageView? = null @@ -118,7 +118,6 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { private var mSearchMenuItem: MenuItem? = null private var mDownloadMenuItem: MenuItem? = null private var mTraceEvent: ExposureEvent? = null - private var mFirstTimeSelected = true private var mIsTouchScreen = false private var mIsShowKaifuHint: Boolean = false private var mIsScrollToKaiFu: Boolean = false @@ -150,6 +149,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { private val mFragmentsList = ArrayList() private val mTabTitleList = ArrayList() + private val mTabTypeList = ArrayList() // tab 类型的列表,用于确定某个类型的 tab 在第几个位置 private val mLooperHandle = LooperHandle(this) private val mServerLooperKey = 123 @@ -217,6 +217,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { detailViewHolder.mDownloadTips.setDownloadTipsAnimation(true) } } + DownloadStatus.done, DownloadStatus.pause, DownloadStatus.waiting, @@ -227,6 +228,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { detailViewHolder.mDownloadTips.visibility = View.VISIBLE detailViewHolder.mDownloadTips.setDownloadTipsAnimation(false) } + else -> detailViewHolder.mDownloadTips.visibility = View.GONE } } @@ -275,6 +277,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { ) } } + "func_libao" -> { mBodyBinding.gamedetailVp.currentItem = 0 mBodyBinding.gamedetailAppbar.setExpanded(false, true) @@ -283,6 +286,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { fragment.scrollToLibao() } } + "func_related_version" -> { mBodyBinding.gamedetailVp.currentItem = 0 mBodyBinding.gamedetailAppbar.setExpanded(false, true) @@ -291,6 +295,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { fragment.scrollToRelatedVersion() } } + "func_zone" -> { val gameDetailEntity = mViewModel.gameDetailLiveData.value?.data if (contentCardEntity.zoneTab && gameDetailEntity?.zone != null && gameDetailEntity.zone!!.style == "link") { @@ -303,12 +308,14 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { ) } } + "func_bbs" -> { val funcBbs = contentCardEntity.funcBbs funcBbs?.let { DirectUtils.directForumDetail(requireContext(), it.link, path) } } + "func_tool_kit" -> { if (contentCardEntity.toolkit.isNotEmpty()) { contentCardEntity.toolkit.safelyGetInRelease(0)?.let { @@ -329,6 +336,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } } } + else -> DirectUtils.directToLinkPage( requireContext(), contentCardEntity.toLinkEntity(), @@ -336,7 +344,10 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { path, ExposureEvent.createEvent( null, - listOf(ExposureSource("游戏详情", mGameEntity?.id ?: ""), ExposureSource("内容卡片", contentCardEntity.id)) + listOf( + ExposureSource("游戏详情", mGameEntity?.id ?: ""), + ExposureSource("内容卡片", contentCardEntity.id) + ) ) ) } @@ -420,7 +431,6 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { mAutoDownload = args.getBoolean(EntranceConsts.KEY_AUTO_DOWNLOAD) mTraceEvent = args.getParcelable(EntranceConsts.KEY_TRACE_EVENT) mSkipGameComment = args.getBoolean(EntranceConsts.KEY_SKIP_GAME_COMMENT) - mDestinationTab = if (mDestinationTab >= 0) mDestinationTab else args.getInt(EntranceConsts.KEY_TARGET, -1) mIsOpenPlatformWindow = args.getBoolean(EntranceConsts.KEY_OPEN_PLATFORM_WINDOW) mSkeleton = Skeleton.bind(mBinding.listSkeleton) @@ -445,13 +455,10 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { mBodyBinding.gamedetailVp.doOnPageSelected { position -> if (!isAdded) return@doOnPageSelected - mBinding.gamedetailKaifuHint.visibleIf(mIsShowKaifuHint && position == INDEX_TRENDES) + mBinding.gamedetailKaifuHint.visibleIf(mIsShowKaifuHint && position == getTabPositionFromTabType(TAB_TRENDS)) - val bbsPosition = getTabPositionFromTabName(getString(R.string.game_detail_bbs)) - val trendsPosition = getTabPositionFromTabName( - if (mNewGameDetailEntity?.zone?.customName.isNullOrEmpty()) getString(R.string.game_detail_dongtai) else mNewGameDetailEntity?.zone?.customName - ?: "" - ) + val bbsPosition = getTabPositionFromTabType(TAB_BBS) + val trendsPosition = getTabPositionFromTabType(TAB_TRENDS) if (mNewGameDetailEntity?.bbsTab != null && position == bbsPosition) { DirectUtils.directToLinkPage( @@ -468,7 +475,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { }, 200) } else if (mNewGameDetailEntity?.zone != null && mNewGameDetailEntity?.zone?.style != "default" && position == trendsPosition && mNewGameDetailEntity?.bbsTab != null) { // 跳转论坛-专区 - val entrance = if (mDestinationTab == INDEX_TRENDES) { + val entrance = if (mDestinationTab == getTabPositionFromTabType(TAB_TRENDS)) { if (mEntrance.contains("搜索")) "搜索页面" else "其他" } else "游戏详情页" mNewGameDetailEntity?.bbsTab?.link?.let { @@ -755,6 +762,9 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { val viewHolder = detailViewHolder DetailDownloadUtils.detailInitDownload(viewHolder, true) + mDestinationTab = + getTabPositionFromTabType(arguments?.getString(EntranceConsts.KEY_TARGET, TAB_DESC) ?: TAB_DESC) + // destinationTab 的优先级最高,关注和关联关注在它的后面 if (mDestinationTab != -1) { tabPerformClick(mDestinationTab) @@ -855,6 +865,8 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { @SuppressLint("ClickableViewAccessibility") private fun initViewPage(data: NewGameDetailEntity) { + // 各个 tab 显示的顺序为:详情>云存档>评价>专区>论坛 + val scrollToLibao = arguments?.getBoolean(EntranceConsts.KEY_SCROLL_TO_LIBAO) ?: false var scrollToServer = arguments?.getBoolean(EntranceConsts.KEY_SCROLL_TO_SERVER) ?: false @@ -889,18 +901,37 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { mTabTitleList.clear() val tag = "android:switcher:${mBodyBinding.gamedetailVp.id}:" - val descFragment = childFragmentManager.findFragmentByTag("${tag}$INDEX_DESC") ?: DescFragment() + val descFragment = childFragmentManager.findFragmentByTag("${tag}$TAB_DESC") ?: DescFragment() descFragment.arguments = bundle mFragmentsList.add(descFragment) mTabTitleList.add(getString(R.string.game_detail_desc)) + mTabTypeList.add(TAB_DESC) + + if (data.showArchive) { + val cloudArchiveFragment = + childFragmentManager.findFragmentByTag("${tag}${TAB_ARCHIVE}") ?: CloudArchiveFragment() + bundle.putParcelable(EntranceConsts.KEY_GAME, mGameEntity ?: GameEntity()) + bundle.putString(EntranceConsts.KEY_ARCHIVE_CONFIG_URL, data.archiveTab.configUrl) + cloudArchiveFragment.arguments = bundle + mFragmentsList.add(cloudArchiveFragment) + mTabTitleList.add(getString(R.string.game_detail_cloud_archive)) + mTabTypeList.add(TAB_ARCHIVE) + + NewFlatLogUtils.logCloudArchiveGameDetailTabRelated( + "cloud_save_tab_show", + mGameEntity?.id ?: "", + mGameEntity?.name ?: "" + ) + } if (data.showComment) { - val ratingFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_RATING}") ?: RatingFragment() + val ratingFragment = childFragmentManager.findFragmentByTag("${tag}${TAB_RATING}") ?: RatingFragment() bundle.putBoolean(EntranceConsts.KEY_SKIP_GAME_COMMENT, mSkipGameComment) bundle.putBoolean(EntranceConsts.KEY_DIRECT_COMMENT, data.directComment) ratingFragment.arguments = bundle mFragmentsList.add(ratingFragment) mTabTitleList.add(getString(R.string.game_detail_comment)) + mTabTypeList.add(TAB_RATING) } data.zone?.let { @@ -911,7 +942,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { mFragmentsList.add(Fragment()) } else if (it.style == "link") { //显示web页面 - val webFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_TRENDES}") ?: WebFragment() + val webFragment = childFragmentManager.findFragmentByTag("${tag}${TAB_TRENDS}") ?: WebFragment() val webBundle = Bundle() webBundle.putString(EntranceConsts.KEY_ENTRANCE, "游戏专区") webBundle.putString(EntranceConsts.KEY_URL, it.link) @@ -919,7 +950,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { webFragment.arguments = webBundle mFragmentsList.add(webFragment) } else { - val fuliFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_TRENDES}") ?: FuLiFragment() + val fuliFragment = childFragmentManager.findFragmentByTag("${tag}${TAB_TRENDS}") ?: FuLiFragment() fuliFragment.arguments = bundle mFragmentsList.add(fuliFragment) } @@ -928,22 +959,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } else { mTabTitleList.add(getString(R.string.game_detail_dongtai)) } - } - - if (data.showArchive) { - val cloudArchiveFragment = - childFragmentManager.findFragmentByTag("${tag}${INDEX_ARCHIVE}") ?: CloudArchiveFragment() - bundle.putParcelable(EntranceConsts.KEY_GAME, mGameEntity ?: GameEntity()) - bundle.putString(EntranceConsts.KEY_ARCHIVE_CONFIG_URL, data.archiveTab.configUrl) - cloudArchiveFragment.arguments = bundle - mFragmentsList.add(cloudArchiveFragment) - mTabTitleList.add(getString(R.string.game_detail_cloud_archive)) - - NewFlatLogUtils.logCloudArchiveGameDetailTabRelated( - "cloud_save_tab_show", - mGameEntity?.id ?: "", - mGameEntity?.name ?: "" - ) + mTabTypeList.add(TAB_TRENDS) } var isShowBbs = true @@ -957,6 +973,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { if (isShowBbs && mGameEntity?.shouldUseMirrorInfo() == false) { mFragmentsList.add(Fragment()) mTabTitleList.add(getString(R.string.game_detail_bbs)) + mTabTypeList.add(TAB_BBS) } } @@ -969,7 +986,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { gamedetailVp.doOnPageSelected { logTabClick(it) } - gamedetailVp.currentItem = INDEX_DESC + gamedetailVp.currentItem = getTabPositionFromTabType(TAB_DESC) mBodyBinding.tabLayout.setupWithViewPager(gamedetailVp) mBodyBinding.tabIndicator.setupWithTabLayout(mBodyBinding.tabLayout) @@ -978,7 +995,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { for (i in 0 until mBodyBinding.tabLayout.tabCount) { val tab = mBodyBinding.tabLayout.getTabAt(i) ?: continue val tabTitle = if (tab.text != null) tab.text.toString() else "" - if (data.showArchive && i == getTabPositionFromTabName(getString(R.string.game_detail_cloud_archive))) { + if (data.showArchive && i == getTabPositionFromTabType(TAB_ARCHIVE)) { tab.customView = getArchiveTabView(tabTitle) tab.view.run { clipChildren = false @@ -1081,7 +1098,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { if (mNewGameDetailEntity!!.showComment) { if (mSkipGameComment) { - tabPerformClick(INDEX_RATING) + tabPerformClick(getTabPositionFromTabType(TAB_RATING)) mBodyBinding.gamedetailAppbar.setExpanded(false) mSkipGameComment = false } @@ -1288,8 +1305,10 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { when { isHighlightBg && !isLastView -> root.background = R.drawable.bg_content_card_large_primary.toDrawable(requireContext()) + !isHighlightBg && !isLastView -> root.background = R.drawable.bg_content_card_large.toDrawable(requireContext()) + !isHighlightBg && isLastView -> root.background = R.drawable.bg_content_card_large_right.toDrawable(requireContext()) } @@ -1348,7 +1367,10 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { ExposureManager.log( ExposureEvent.createEvent( GameEntity(sequence = position), - listOf(ExposureSource("游戏详情", mGameEntity?.id ?: ""), ExposureSource("内容卡片", contentCardEntity.id)) + listOf( + ExposureSource("游戏详情", mGameEntity?.id ?: ""), + ExposureSource("内容卡片", contentCardEntity.id) + ) ) ) }.root @@ -1383,7 +1405,10 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { ExposureManager.log( ExposureEvent.createEvent( GameEntity(sequence = position), - listOf(ExposureSource("游戏详情", mGameEntity?.id ?: ""), ExposureSource("内容卡片", contentCardEntity.id)) + listOf( + ExposureSource("游戏详情", mGameEntity?.id ?: ""), + ExposureSource("内容卡片", contentCardEntity.id) + ) ) ) }.root @@ -1536,19 +1561,19 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(reuse: EBReuse) { if (SKIP_DESC == reuse.type) { - tabPerformClick(INDEX_DESC) + tabPerformClick(getTabPositionFromTabType(TAB_DESC)) } else if (OPEN_APPBAR == reuse.type && !mIsTouchScreen) { mBodyBinding.gamedetailAppbar.setExpanded(true, true) } else if (SKIP_FULI == reuse.type) { - tabPerformClick(INDEX_TRENDES) + tabPerformClick(getTabPositionFromTabType(TAB_TRENDS)) } else if (SKIP_RATING == reuse.type) { - tabPerformClick(INDEX_RATING) + tabPerformClick(getTabPositionFromTabType(TAB_RATING)) } else if ("hideKaifuHint" == reuse.type) { mIsShowKaifuHint = false mBinding.gamedetailKaifuHint.visibility = View.GONE } else if ("showKaifuHint" == reuse.type) { mIsShowKaifuHint = true - if (mCurVpPosition == INDEX_TRENDES) { + if (mCurVpPosition == getTabPositionFromTabType(TAB_TRENDS)) { mBinding.gamedetailKaifuHint.post { mBinding.gamedetailKaifuHint.visibility = View.VISIBLE } } } else if (CLOSE_APPBAR == reuse.type && !mIsTouchScreen) { @@ -1807,28 +1832,29 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } private fun tabPerformClick(position: Int) { + val trendsTabPosition = getTabPositionFromTabType(TAB_TRENDS) + val bbsTabPosition = getTabPositionFromTabType(TAB_BBS) + when (position) { - INDEX_TRENDES -> { + trendsTabPosition -> { val zoneEntity = mNewGameDetailEntity?.zone if (!mTabTitleList.contains(getString(R.string.game_detail_dongtai)) && !mTabTitleList.contains(zoneEntity?.customName) ) { performJumpContentCard("func_zone") } else { - mBodyBinding.gamedetailVp.currentItem = getTabPositionFromTabName( - if (mNewGameDetailEntity?.zone?.customName.isNullOrEmpty()) getString(R.string.game_detail_dongtai) else mNewGameDetailEntity?.zone?.customName - ?: "" - ) + mBodyBinding.gamedetailVp.currentItem = getTabPositionFromTabType(TAB_TRENDS) } } - INDEX_BBS -> { + + bbsTabPosition -> { if (!mTabTitleList.contains(getString(R.string.game_detail_bbs))) { performJumpContentCard("func_bbs") } else { - mBodyBinding.gamedetailVp.currentItem = - getTabPositionFromTabName(getString(R.string.game_detail_bbs)) + mBodyBinding.gamedetailVp.currentItem = getTabPositionFromTabType(TAB_BBS) } } + else -> { mBodyBinding.gamedetailVp.currentItem = position } @@ -1850,10 +1876,11 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { val entrance = if (mEntrance.contains("论坛详情")) "论坛" else "游戏" mGameEntity?.run { - when (getTabContentForReal(position)) { + when (mTabTypeList[position]) { TAB_DESC -> { NewLogUtils.logGameDetailTabClick(name ?: "", id, "详情") } + TAB_TRENDS -> { NewLogUtils.logGameDetailTabClick( "view_game_detail_special_area_tab", @@ -1864,6 +1891,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { ) NewLogUtils.logGameDetailTabClick(name ?: "", id, "专区") } + TAB_ARCHIVE -> { NewFlatLogUtils.logCloudArchiveGameDetailTabRelated( "cloud_save_tab_click", @@ -1882,10 +1910,12 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { "last_page_business_id", getLastPageEntity().pageBusinessId ) } + TAB_RATING -> { NewLogUtils.logGameDetailTabClick("view_game_detail_comment_tab", entrance, id, gameType, bbsId) NewLogUtils.logGameDetailTabClick(name ?: "", id, "评论") } + TAB_BBS -> { NewLogUtils.logGameDetailTabClick(name ?: "", id, "论坛") } @@ -1893,35 +1923,13 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } } - /** - * 获取真实的 tab 内容类型 - * @param position tab 的位置 - * @return 真实的 tab 类型 - */ - private fun getTabContentForReal(position: Int): String { - return when (mTabTitleList[position]) { - getString(R.string.game_detail_dongtai), - mNewGameDetailEntity?.zone?.customName -> TAB_TRENDS - - getString(R.string.game_detail_cloud_archive) -> TAB_ARCHIVE - - getString(R.string.game_detail_comment) -> TAB_RATING - - getString(R.string.game_detail_bbs) -> TAB_BBS - - getString(R.string.game_detail_desc) -> TAB_DESC - - else -> TAB_DESC - } - } - /** * 获取 tab 的位置 - * @param tabName tab 名字 + * @param tabType tab 类型 * @return tab 的真实位置 */ - private fun getTabPositionFromTabName(tabName: String): Int { - return mTabTitleList.indexOf(tabName) + private fun getTabPositionFromTabType(tabType: String): Int { + return mTabTypeList.indexOf(tabType) } private fun handleTabTouchEvent(title: String) { @@ -1938,8 +1946,9 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { getString(R.string.game_detail_comment), getString(R.string.game_detail_cloud_archive) -> { mBodyBinding.gamedetailAppbar.setExpanded(false, true) - tabPerformClick(getTabPositionFromTabName(title)) + tabPerformClick(getTabPositionFromTabType(title)) } + else -> { // do nothing } @@ -1971,7 +1980,8 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } else { hintText = if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) "当前安装方式为[浏览器安装],点击切换安装方式" else "手机如何解决无法安装问题" - closeHintText = "关闭后“切换安装方式”入口将显示在左下角,您也可以前往“我的光环-设置-切换安装方式”进行设置" + closeHintText = + "关闭后“切换安装方式”入口将显示在左下角,您也可以前往“我的光环-设置-切换安装方式”进行设置" } mDownloadBinding.browserInstallHintTv.text = hintText @@ -2151,7 +2161,7 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { private fun updateArchiveTabUI() { mBodyBinding.tabLayout.run { - val archivePosition = getTabPositionFromTabName(getString(R.string.game_detail_cloud_archive)) + val archivePosition = getTabPositionFromTabType(TAB_ARCHIVE) getTabAt(archivePosition)?.customView?.findViewById(R.id.newIv)?.visibility = View.VISIBLE } } @@ -2168,11 +2178,13 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { override fun onBackPressed(): Boolean { mOrientationUtils?.backToProtVideo() - if (mBodyBinding.gamedetailVp.currentItem == INDEX_TRENDES - && mFragmentsList[INDEX_TRENDES] is WebFragment - && mFragmentsList[INDEX_TRENDES].isAdded + val trendsTabPosition = getTabPositionFromTabType(TAB_TRENDS) + + if (mBodyBinding.gamedetailVp.currentItem == trendsTabPosition + && mFragmentsList[trendsTabPosition] is WebFragment + && mFragmentsList[trendsTabPosition].isAdded ) { - return (mFragmentsList[INDEX_TRENDES] as WebFragment).onBackPressed() + return (mFragmentsList[trendsTabPosition] as WebFragment).onBackPressed() } if (CustomManager.backFromWindowFull(requireActivity(), mVideoBinding.player.getKey())) { @@ -2349,12 +2361,6 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { } companion object { - const val INDEX_DESC = 0 - const val INDEX_RATING = 1 - const val INDEX_ARCHIVE = 2 - const val INDEX_TRENDES = 3 - const val INDEX_BBS = 4 - const val TAB_DESC = "详情" const val TAB_TRENDS = "专区" const val TAB_ARCHIVE = "云存档" @@ -2368,7 +2374,6 @@ class GameDetailFragment : ToolbarFragment(), IScrollable { const val CLOSE_APPBAR = "closeappbar" const val SCROLL_TO_KAIFU = "scrollToKaiFu" const val EB_SCROLLING = "EB_SCROLLING" - const val EB_STAR = "eb_star" const val INITIAL_DELAY = 500L const val CONTENT_CARD_LOOP_TIME = 3000L diff --git a/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt index 2808439a0a..a252f3f321 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt @@ -277,7 +277,7 @@ class MyFollowedGameViewHolder(var binding: ItemFollowedGameBinding) : RecyclerV binding.root.context, gameEntity, entrance, - defaultTab = GameDetailFragment.INDEX_TRENDES + defaultTab = GameDetailFragment.TAB_TRENDS ) } } else { @@ -303,7 +303,7 @@ class MyFollowedGameViewHolder(var binding: ItemFollowedGameBinding) : RecyclerV binding.root.context, gameEntity, entrance, - defaultTab = GameDetailFragment.INDEX_BBS + defaultTab = GameDetailFragment.TAB_BBS ) } } else { diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt index d814419696..441f2ee143 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt @@ -228,7 +228,7 @@ class SearchGameIndexAdapter( StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_TRENDES, traceEvent = exposureEvent + ), GameDetailFragment.TAB_TRENDS, traceEvent = exposureEvent ) gameEntity.run { @@ -290,7 +290,7 @@ class SearchGameIndexAdapter( StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_BBS, traceEvent = exposureEvent + ), GameDetailFragment.TAB_BBS, traceEvent = exposureEvent ) gameEntity.run { diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt b/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt index d8b85dbc4f..ef6dcf14c5 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt @@ -300,7 +300,7 @@ class SearchGameResultAdapter( StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_TRENDES, traceEvent = exposureEvent + ), GameDetailFragment.TAB_TRENDS, traceEvent = exposureEvent ) gameEntity.run { @@ -360,7 +360,7 @@ class SearchGameResultAdapter( StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_BBS, traceEvent = exposureEvent + ), GameDetailFragment.TAB_BBS, traceEvent = exposureEvent ) gameEntity.run { diff --git a/module_core_feature/src/main/java/com/gh/gamecenter/feature/provider/IGameDetailProvider.kt b/module_core_feature/src/main/java/com/gh/gamecenter/feature/provider/IGameDetailProvider.kt index b869ab53b1..d1d07b0f5d 100644 --- a/module_core_feature/src/main/java/com/gh/gamecenter/feature/provider/IGameDetailProvider.kt +++ b/module_core_feature/src/main/java/com/gh/gamecenter/feature/provider/IGameDetailProvider.kt @@ -13,7 +13,7 @@ interface IGameDetailProvider : IProvider { context: Context, gameEntity: GameEntity?, entrance: String, - defaultTab: Int = -1, + defaultTab: String = "", isSkipGameComment: Boolean = false, scrollToLibao: Boolean = false, scrollToServer: Boolean = false,