feat: 游戏详情页tab顺序调整 https://jira.shanqu.cc/browse/GHZS-2155
This commit is contained in:
@ -22,7 +22,7 @@ class GameDetailProviderImpl : IGameDetailProvider {
|
||||
context: Context,
|
||||
gameEntity: GameEntity?,
|
||||
entrance: String,
|
||||
defaultTab: Int,
|
||||
defaultTab: String,
|
||||
isSkipGameComment: Boolean,
|
||||
scrollToLibao: Boolean,
|
||||
scrollToServer: Boolean,
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user