feat: 游戏详情页tab顺序调整 https://jira.shanqu.cc/browse/GHZS-2155

This commit is contained in:
chenjuntao
2023-04-25 13:54:54 +08:00
parent e6a2f0528a
commit ea68931461
8 changed files with 117 additions and 112 deletions

View File

@ -22,7 +22,7 @@ class GameDetailProviderImpl : IGameDetailProvider {
context: Context,
gameEntity: GameEntity?,
entrance: String,
defaultTab: Int,
defaultTab: String,
isSkipGameComment: Boolean,
scrollToLibao: Boolean,
scrollToServer: Boolean,

View File

@ -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)
}

View File

@ -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)

View File

@ -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<Fragment>()
private val mTabTitleList = ArrayList<String>()
private val mTabTypeList = ArrayList<String>() // 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<ImageView>(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

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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,